commit 3f0910c95106e3d424c191f93ddb9828f67b15f8
parent c8d59c8c378681b5799b96b8d8abf7fc0e2b9fd5
Author: Ryan Sepassi <rsepassi@gmail.com>
Date: Tue, 21 Apr 2026 12:45:28 -0700
podman 3 arch digests
Diffstat:
| M | Makefile | | | 32 | ++++++++++++++++++++++---------- |
1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
@@ -52,15 +52,22 @@ endif
# sees curdir, so all inputs must already live inside it.
UPSTREAM ?= $(abspath $(CURDIR)/../live-bootstrap)
-# Pinned to a manifest-list digest (not the :latest tag): podman on macOS
-# only stores one image per tag locally, so cross-arch pulls under :latest
-# keep overwriting each other's tag and re-pulling every run-all. A digest-
-# pinned reference is immutable and lets --platform resolve the right
-# per-arch variant from the same stored index, so each platform's image
-# survives across invocations. Bump the digest when you want a newer base.
+# Pinned to per-arch manifest digests (not the :latest tag, and not the index
+# digest): podman's local store keys images by the digest you requested, so
+# pulling the same index digest under three different --platforms collapses
+# to a single entry — the last pull wins and the other arches run against a
+# mismatched image (hence "image platform does not match" warnings). Giving
+# each arch its own per-arch manifest digest keeps them as distinct entries
+# that coexist in the store and survive across invocations.
#
-# Current pin: alpine 3.23.4 (index fetched 2026-04-20 from public.ecr.aws).
-RUNTIME_IMAGE := public.ecr.aws/docker/library/alpine@sha256:5b10f432ef3da1b8d4c7eb6c487f2f5a8f096bc91145e68878dd4a5019afde11
+# Current pins: alpine 3.23.4 per-arch manifests fetched 2026-04-21 from
+# public.ecr.aws (index sha256:5b10f432…). Bump all three together when you
+# want a newer base.
+ALPINE_IMAGE := public.ecr.aws/docker/library/alpine
+RUNTIME_IMAGE_aarch64 := $(ALPINE_IMAGE)@sha256:378c4c5418f7493bd500ad21ffb43818d0689daaad43e3261859fb417d1481a0
+RUNTIME_IMAGE_amd64 := $(ALPINE_IMAGE)@sha256:4d889c14e7d5a73929ab00be2ef8ff22437e7cbc545931e52554a7b00e123d8b
+RUNTIME_IMAGE_riscv64 := $(ALPINE_IMAGE)@sha256:667d07bf2f6239f094f64b5682c8ffbe24c9f3139b1fb854f85caf931a3d7439
+RUNTIME_IMAGE := $(RUNTIME_IMAGE_$(ARCH))
OUT_DIR := build/$(ARCH)
TOOLS_DIR := $(OUT_DIR)/tools
@@ -183,17 +190,22 @@ LISP_TESTS := \
tests/lisp/07-tailcall.scm \
tests/lisp/10-arith.scm \
tests/lisp/11-compare.scm \
+ tests/lisp/11-list.scm \
tests/lisp/12-numpred.scm \
+ tests/lisp/12-string.scm \
tests/lisp/13-bitwise.scm \
+ tests/lisp/13-vector.scm \
+ tests/lisp/14-io.scm \
tests/lisp/14-tagpred.scm \
- tests/lisp/15-list.scm
+ tests/lisp/15-pred.scm \
+ tests/lisp/16-prelude.scm
test-lisp: | $(IMAGE_STAMP)
@$(MAKE) --no-print-directory PROG=lisp ARCH=$(ARCH) build/$(ARCH)/lisp
@pass=0; fail=0; \
for scm in $(LISP_TESTS); do \
expected="$${scm%.scm}.expected"; \
- actual=$$($(PODMAN) ./build/$(ARCH)/lisp "$$scm" 2>/dev/null || true); \
+ actual=$$($(PODMAN) ./build/$(ARCH)/lisp "$$scm" || true); \
want=$$(cat "$$expected" 2>/dev/null || printf ''); \
if [ "$$actual" = "$$want" ]; then \
echo " PASS [$(ARCH)] $$scm"; \