Bundle go-pmtiles into the Docker image
CI / check (push) Successful in 18s
CI / deploy (push) Successful in 2m23s

The "Regenerate for current view" build was failing in production with
"could not run 'pmtiles'" — go-pmtiles was never actually installed
anywhere, just documented as something a developer runs by hand
locally (docs/development.adoc). Installs the static Linux binary from
go-pmtiles' own GitHub releases, architecture-matched via dpkg rather
than hardcoded amd64.

Verified the exact download/extract/exec sequence end-to-end outside
Docker (no daemon available in this sandbox to run a real build).
This commit is contained in:
randy committed 2026-09-11 11:47:31 +02:00
1 parent cd56ebe0a1
commit d72f8a3c94
2 files changed
+40 -2

No files matched your search

+21 -1
View File
@@ -3,9 +3,29 @@ FROM ruby:4.0.6-slim-bookworm
# build-essential: puma has a native (C) extension; harmless if the
# platform-specific gem in Gemfile.lock already has a precompiled binary
# matching this base image, but keeps the build working if it doesn't.
RUN apt-get update && apt-get install --no-install-recommends -y build-essential \
# ca-certificates/curl: needed for the go-pmtiles download below (also
# handy for anyone debugging inside a running container).
RUN apt-get update && apt-get install --no-install-recommends -y build-essential ca-certificates curl \
&& rm -rf /var/lib/apt/lists/*
# The `pmtiles` CLI (lib/maptool/pmtiles_builder.rb's "Regenerate for
# current view" — see docs/development.adoc) — no Debian package exists,
# so this pulls the static binary straight from its own GitHub releases.
# Architecture-matched (Debian's dpkg arch name translated to the release
# asset's own naming) rather than hardcoded amd64, so this still works
# building on an arm64 host. Pinned, like every other dependency in this
# repo (Gemfile, docs/third-party-notices.adoc) — bump PMTILES_VERSION
# deliberately, not via `latest`.
ARG PMTILES_VERSION=1.31.2
RUN set -eux; \
case "$(dpkg --print-architecture)" in \
amd64) pmtiles_arch=x86_64 ;; \
arm64) pmtiles_arch=arm64 ;; \
*) echo "unsupported architecture for go-pmtiles: $(dpkg --print-architecture)" >&2; exit 1 ;; \
esac; \
curl -fsSL "https://github.com/protomaps/go-pmtiles/releases/download/v${PMTILES_VERSION}/go-pmtiles_${PMTILES_VERSION}_Linux_${pmtiles_arch}.tar.gz" \
| tar xz -C /usr/local/bin pmtiles
WORKDIR /app
COPY Gemfile Gemfile.lock ./