From 693659775948509012a872ffb4e351c9992983b2 Mon Sep 17 00:00:00 2001 From: konard Date: Fri, 13 Feb 2026 13:25:58 +0100 Subject: [PATCH 1/4] Initial commit with task details Adding CLAUDE.md with task information for AI processing. This file will be removed when the task is complete. Issue: https://github.com/link-foundation/sandbox/issues/39 --- CLAUDE.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..8cccccd --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,5 @@ +Issue to solve: https://github.com/link-foundation/sandbox/issues/39 +Your prepared branch: issue-39-fc90ac7ce636 +Your prepared working directory: /tmp/gh-issue-solver-1770985557390 + +Proceed. From a42d0afee1d50b8589d39d9c25d7d9c599fed13a Mon Sep 17 00:00:00 2001 From: konard Date: Fri, 13 Feb 2026 13:29:09 +0100 Subject: [PATCH 2/4] Fix: Document all architecture-specific Docker tags in release notes The release workflow already builds and pushes architecture-specific tags (-amd64, -arm64) for all sandbox images, but the release notes only documented "(multi-arch)" for essentials, JS, and language sandboxes. Changes: - Add -amd64 and -arm64 tag documentation for essentials sandbox - Add -amd64 and -arm64 tag documentation for JS sandbox - Add architecture-specific tags table for all 11 language sandboxes - Update GHCR section to mention all tag variants - Update Quick Start with examples for pulling specific architectures - Add case study documentation for issue #39 Closes #39 Co-Authored-By: Claude Opus 4.5 --- .github/workflows/release.yml | 48 +++++++++++----- docs/case-studies/issue-39/README.md | 83 ++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 15 deletions(-) create mode 100644 docs/case-studies/issue-39/README.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3942067..3d21baf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1628,27 +1628,36 @@ jobs: ### Essentials Sandbox (konard/sandbox-essentials) - [\`${DOCKERHUB_IMAGE}-essentials:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-essentials) (multi-arch) + - [\`${DOCKERHUB_IMAGE}-essentials:${VERSION}-amd64\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-essentials) (AMD64) + - [\`${DOCKERHUB_IMAGE}-essentials:${VERSION}-arm64\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-essentials) (ARM64) ### JS Sandbox (konard/sandbox-js) - [\`${DOCKERHUB_IMAGE}-js:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-js) (multi-arch) + - [\`${DOCKERHUB_IMAGE}-js:${VERSION}-amd64\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-js) (AMD64) + - [\`${DOCKERHUB_IMAGE}-js:${VERSION}-arm64\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-js) (ARM64) ### Language Sandboxes - - [\`${DOCKERHUB_IMAGE}-python:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-python) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-go:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-go) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-rust:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-rust) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-java:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-java) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-kotlin:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-kotlin) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-ruby:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-ruby) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-php:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-php) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-perl:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-perl) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-swift:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-swift) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-lean:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-lean) (multi-arch) - - [\`${DOCKERHUB_IMAGE}-rocq:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-rocq) (multi-arch) + Each language sandbox is available in multi-arch, AMD64, and ARM64 variants: + + | Language | Multi-arch | AMD64 | ARM64 | + |----------|------------|-------|-------| + | Python | [\`${DOCKERHUB_IMAGE}-python:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-python) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Go | [\`${DOCKERHUB_IMAGE}-go:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-go) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Rust | [\`${DOCKERHUB_IMAGE}-rust:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-rust) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Java | [\`${DOCKERHUB_IMAGE}-java:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-java) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Kotlin | [\`${DOCKERHUB_IMAGE}-kotlin:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-kotlin) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Ruby | [\`${DOCKERHUB_IMAGE}-ruby:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-ruby) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | PHP | [\`${DOCKERHUB_IMAGE}-php:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-php) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Perl | [\`${DOCKERHUB_IMAGE}-perl:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-perl) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Swift | [\`${DOCKERHUB_IMAGE}-swift:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-swift) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Lean | [\`${DOCKERHUB_IMAGE}-lean:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-lean) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | + | Rocq | [\`${DOCKERHUB_IMAGE}-rocq:${VERSION}\`](https://hub.docker.com/r/${DOCKERHUB_IMAGE}-rocq) | \`${VERSION}-amd64\` | \`${VERSION}-arm64\` | ### GitHub Container Registry (GHCR) - - [\`${GHCR_IMAGE}:${VERSION}\`](https://github.com/${REPO}/pkgs/container/sandbox) (multi-arch) - - [\`${GHCR_IMAGE}-essentials:${VERSION}\`](https://github.com/${REPO}/pkgs/container/sandbox-essentials) (multi-arch) - - [\`${GHCR_IMAGE}-js:${VERSION}\`](https://github.com/${REPO}/pkgs/container/sandbox-js) (multi-arch) + All images are also available on GHCR with the same tag patterns: + - [\`${GHCR_IMAGE}:${VERSION}\`](https://github.com/${REPO}/pkgs/container/sandbox) (multi-arch, AMD64: \`${VERSION}-amd64\`, ARM64: \`${VERSION}-arm64\`) + - [\`${GHCR_IMAGE}-essentials:${VERSION}\`](https://github.com/${REPO}/pkgs/container/sandbox-essentials) (multi-arch, AMD64: \`${VERSION}-amd64\`, ARM64: \`${VERSION}-arm64\`) + - [\`${GHCR_IMAGE}-js:${VERSION}\`](https://github.com/${REPO}/pkgs/container/sandbox-js) (multi-arch, AMD64: \`${VERSION}-amd64\`, ARM64: \`${VERSION}-arm64\`) ## Architecture @@ -1664,11 +1673,20 @@ jobs: ## Quick Start - Pull from Docker Hub: + Pull multi-arch (auto-selects your platform): \`\`\`sh docker pull ${DOCKERHUB_IMAGE}:${VERSION} \`\`\` + Pull specific architecture: + \`\`\`sh + # AMD64 + docker pull ${DOCKERHUB_IMAGE}:${VERSION}-amd64 + + # ARM64 (Apple Silicon, Raspberry Pi, etc.) + docker pull ${DOCKERHUB_IMAGE}:${VERSION}-arm64 + \`\`\` + Pull from GHCR: \`\`\`sh docker pull ${GHCR_IMAGE}:${VERSION} diff --git a/docs/case-studies/issue-39/README.md b/docs/case-studies/issue-39/README.md new file mode 100644 index 0000000..c206e00 --- /dev/null +++ b/docs/case-studies/issue-39/README.md @@ -0,0 +1,83 @@ +# Case Study: Issue #39 - Multi-arch Docker Tag Documentation Gap + +## Summary + +**Issue**: [#39](https://github.com/link-foundation/sandbox/issues/39) - Make sure all docker versions support multi-arch, arm64 only, and amd64 only + +**Root Cause**: Documentation gap in release notes template - architecture-specific tags exist on Docker Hub but are not documented in the GitHub release notes. + +## Timeline of Events + +| Date | Event | +|------|-------| +| 2026-02-01 | v1.3.0 release published | +| 2026-02-01 | All Docker images built with architecture-specific tags (`-amd64`, `-arm64`) | +| 2026-02-02 | Release notes published mentioning only multi-arch for most images | +| 2026-02-13 | Issue #39 reported identifying the documentation gap | + +## Investigation Findings + +### Docker Hub Tag Verification + +All sandbox images actually have architecture-specific tags available: + +| Image | Available Tags | +|-------|---------------| +| `konard/sandbox` | `1.3.0`, `1.3.0-amd64`, `1.3.0-arm64`, `latest`, `latest-amd64`, `latest-arm64` | +| `konard/sandbox-essentials` | `1.3.0`, `1.3.0-amd64`, `1.3.0-arm64`, `latest`, `latest-amd64`, `latest-arm64` | +| `konard/sandbox-js` | `1.3.0`, `1.3.0-amd64`, `1.3.0-arm64`, `latest`, `latest-amd64`, `latest-arm64` | +| `konard/sandbox-python` | `1.3.0`, `1.3.0-amd64`, `1.3.0-arm64`, `latest`, `latest-amd64`, `latest-arm64` | +| `konard/sandbox-go` | `1.3.0`, `1.3.0-amd64`, `1.3.0-arm64`, `latest`, `latest-amd64`, `latest-arm64` | +| `konard/sandbox-rust` | `1.3.0`, `1.3.0-amd64`, `1.3.0-arm64`, `latest`, `latest-amd64`, `latest-arm64` | +| (all other languages) | Same pattern: multi-arch + amd64 + arm64 tags | + +### Release Notes Analysis + +The release notes template in `.github/workflows/release.yml` (lines 1610-1692) shows: + +**Full Sandbox Section (correct)**: +``` +- konard/sandbox:${VERSION} (multi-arch) +- konard/sandbox:${VERSION}-amd64 (AMD64) +- konard/sandbox:${VERSION}-arm64 (ARM64) +``` + +**Essentials/JS/Language Sandboxes (incomplete)**: +``` +- konard/sandbox-essentials:${VERSION} (multi-arch) +- konard/sandbox-js:${VERSION} (multi-arch) +- konard/sandbox-python:${VERSION} (multi-arch) +... etc +``` + +## Root Cause + +The release notes template was written to only document full sandbox architecture variants in detail. When modular language sandboxes were added in v1.3.0, the workflow correctly builds and pushes architecture-specific tags for all images, but the release notes generation only mentions "(multi-arch)" for the new images. + +This is a **documentation-only issue** - the actual Docker images are correctly built and available. + +## Solution + +Update the release notes template in `.github/workflows/release.yml` to document all available tags for each image: + +1. Add `-amd64` and `-arm64` tag documentation for essentials sandbox +2. Add `-amd64` and `-arm64` tag documentation for JS sandbox +3. Add `-amd64` and `-arm64` tag documentation for all language sandboxes + +## Verification Commands + +```bash +# Verify tags exist for any image +docker manifest inspect konard/sandbox-python:1.3.0-amd64 +docker manifest inspect konard/sandbox-python:1.3.0-arm64 + +# Pull specific architecture +docker pull --platform linux/amd64 konard/sandbox-python:1.3.0-amd64 +docker pull --platform linux/arm64 konard/sandbox-python:1.3.0-arm64 +``` + +## References + +- Docker Hub API: `https://hub.docker.com/v2/repositories/konard//tags` +- GitHub workflow: `.github/workflows/release.yml` +- Release v1.3.0: https://github.com/link-foundation/sandbox/releases/tag/v1.3.0 From 25ee3d805390d75a1227666c203036ca6d0c0565 Mon Sep 17 00:00:00 2001 From: konard Date: Fri, 13 Feb 2026 13:30:31 +0100 Subject: [PATCH 3/4] Add changeset for multi-arch documentation fix Co-Authored-By: Claude Opus 4.5 --- .changeset/fix-multiarch-docs.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/fix-multiarch-docs.md diff --git a/.changeset/fix-multiarch-docs.md b/.changeset/fix-multiarch-docs.md new file mode 100644 index 0000000..3aecc4b --- /dev/null +++ b/.changeset/fix-multiarch-docs.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +Document all architecture-specific Docker tags in release notes + +Fixed release notes template to document all available architecture-specific tags (-amd64, -arm64) for essentials, JS, and language sandboxes. The Docker images were already correctly built and pushed with these tags, but the release notes only mentioned "(multi-arch)". From 642b23f1a53be1c55adbcc9502c808e7a12e6e28 Mon Sep 17 00:00:00 2001 From: konard Date: Fri, 13 Feb 2026 14:11:11 +0100 Subject: [PATCH 4/4] Revert "Initial commit with task details" This reverts commit 693659775948509012a872ffb4e351c9992983b2. --- CLAUDE.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 8cccccd..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,5 +0,0 @@ -Issue to solve: https://github.com/link-foundation/sandbox/issues/39 -Your prepared branch: issue-39-fc90ac7ce636 -Your prepared working directory: /tmp/gh-issue-solver-1770985557390 - -Proceed.