From 33250b7b45e7711a4830a0ae63c2af6ee0ea0ba2 Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 15:58:02 +1100 Subject: [PATCH 1/8] gha to build and push a new docker release, if ohmjs/ohm:VERSION doesn't exist --- .github/workflows/docker-release.yml | 66 ++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .github/workflows/docker-release.yml diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml new file mode 100644 index 00000000..e2265ab5 --- /dev/null +++ b/.github/workflows/docker-release.yml @@ -0,0 +1,66 @@ +name: Docker Release + +# only run this on merge to main +# clone the repo +# set the VERSION environment variable ie `cat packages/runtime/package.json | jq -r '.version'` +# use `docker manifest inspect ohmjs/ohm:$VERION` to verify that the release doesn't already exist before running the rest of the workflow +# create a multi platfrom builder +# build and push the image + +on: + push: + branches: [main] + workflow_dispatch: + inputs: + VERSION: + description: 'Docker image version to build and push' + required: false + +jobs: + docker: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Get version + id: version + run: | + if [ -n "${{ inputs.VERSION }}" ]; then + echo "VERSION=${{ inputs.VERSION }}" >> "$GITHUB_OUTPUT" + else + echo "VERSION=$(cat packages/runtime/package.json | jq -r '.version')" >> "$GITHUB_OUTPUT" + fi + + - name: Check if image already exists + id: check + run: | + if docker manifest inspect ohmjs/ohm:${{ steps.version.outputs.VERSION }} > /dev/null 2>&1; then + echo "exists=true" >> "$GITHUB_OUTPUT" + else + echo "exists=false" >> "$GITHUB_OUTPUT" + fi + + - name: Set up QEMU + if: steps.check.outputs.exists == 'false' + uses: docker/setup-qemu-action@v4 + + - name: Set up Docker Buildx + if: steps.check.outputs.exists == 'false' + uses: docker/setup-buildx-action@v4 + + - name: Log in to Docker Hub + if: steps.check.outputs.exists == 'false' + uses: docker/login-action@v4 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + if: steps.check.outputs.exists == 'false' + uses: docker/bake-action@v7 + with: + files: docker/docker-compose.yml + push: true + env: + VERSION: ${{ steps.version.outputs.VERSION }} From 37a4588ef564ff20d3f5898af418afc4eb75daa1 Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 17:10:38 +1100 Subject: [PATCH 2/8] temporarily add on: push to docker-release-gha branch --- .github/workflows/docker-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index e2265ab5..29416d39 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -9,7 +9,7 @@ name: Docker Release on: push: - branches: [main] + branches: [main, docker-release-gha] workflow_dispatch: inputs: VERSION: From d3c820c18bf982c2bfc1a7c08e1713a1ccbd4c14 Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 17:37:29 +1100 Subject: [PATCH 3/8] testing gha --- .github/workflows/docker-release.yml | 11 +---------- packages/runtime/package.json | 2 +- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index 29416d39..e1e3038b 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -10,11 +10,6 @@ name: Docker Release on: push: branches: [main, docker-release-gha] - workflow_dispatch: - inputs: - VERSION: - description: 'Docker image version to build and push' - required: false jobs: docker: @@ -26,11 +21,7 @@ jobs: - name: Get version id: version run: | - if [ -n "${{ inputs.VERSION }}" ]; then - echo "VERSION=${{ inputs.VERSION }}" >> "$GITHUB_OUTPUT" - else - echo "VERSION=$(cat packages/runtime/package.json | jq -r '.version')" >> "$GITHUB_OUTPUT" - fi + echo "VERSION=$(cat packages/runtime/package.json | jq -r '.version')" >> "$GITHUB_OUTPUT" - name: Check if image already exists id: check diff --git a/packages/runtime/package.json b/packages/runtime/package.json index db8d1eb0..dfd75ba6 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "ohm-js", - "version": "18.0.0-beta.9", + "version": "18.0.0-beta.9.a", "description": "Ohm runtime — CST nodes, Grammar, and MatchResult", "keywords": ["parser", "parsing", "ohm", "ohm-js", "runtime"], "homepage": "https://github.com/ohmjs/ohm#readme", From 2087b6a4c8b977f020362106cc36de471c2a0ff7 Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 17:49:23 +1100 Subject: [PATCH 4/8] testing with more platforms --- docker/docker-compose.yml | 13 +++++++------ packages/runtime/package.json | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 17ae868b..3e20b7c9 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -14,12 +14,13 @@ services: - org.opencontainers.image.licenses=MIT - org.opencontainers.image.description=Ohm tooling - A library and language for building parsers, interpreters, compilers, etc. x-bake: - platforms: - - linux/amd64 - # - linux/arm/v7 - - linux/arm64/v8 - # - linux/ppc64le - # - linux/s390x + platforms: [linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x] + # - linux/amd64 + # # - linux/arm/v7 + # - linux/arm64/v8 + # # - linux/ppc64le + # # - linux/s390x + target: ${TARGET:-dist} volumes: - .:/local diff --git a/packages/runtime/package.json b/packages/runtime/package.json index dfd75ba6..361089c8 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "ohm-js", - "version": "18.0.0-beta.9.a", + "version": "18.0.0-beta.9.b", "description": "Ohm runtime — CST nodes, Grammar, and MatchResult", "keywords": ["parser", "parsing", "ohm", "ohm-js", "runtime"], "homepage": "https://github.com/ohmjs/ohm#readme", From 7326b632d31513e6d569a7c6519675c94e50ecae Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 18:29:44 +1100 Subject: [PATCH 5/8] including only platforms supported by the base image (node:24-slim) --- docker/docker-compose.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 3e20b7c9..9ba9b1c9 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -14,12 +14,9 @@ services: - org.opencontainers.image.licenses=MIT - org.opencontainers.image.description=Ohm tooling - A library and language for building parsers, interpreters, compilers, etc. x-bake: - platforms: [linux/amd64,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x] - # - linux/amd64 - # # - linux/arm/v7 - # - linux/arm64/v8 - # # - linux/ppc64le - # # - linux/s390x + # only platforms supported by the base image (node:24-slim) are included here + # https://hub.docker.com/_/node/tags?name=24-slim + platforms: [linux/amd64,linux/arm64/v8,linux/ppc64le,linux/s390x] target: ${TARGET:-dist} volumes: From 427ea71e9e68c2a3f324a4f966e996a43149c436 Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 18:44:49 +1100 Subject: [PATCH 6/8] fails on linux/ppc64le & linux/s390x, removing --- doc/docker.md | 3 ++- docker/docker-compose.yml | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/docker.md b/doc/docker.md index 27fef28c..d2d9850c 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -132,7 +132,8 @@ export VERSION=$(cat packages/runtime/package.json | jq -r '.version') # generate a person access token at https://app.docker.com/accounts/millergarym/settings/personal-access-tokens # assuming DHPAT contains your PAT echo $DHPAT | docker login -u --password-stdin -docker buildx bake --push +cd docker +docker buildx bake --allow=fs.read=.. --push ``` `git describe --tag --dirty` produces a version string based on the nearest git tag, appending commit info and a `-dirty` suffix if there are uncommitted changes. diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 9ba9b1c9..c2b1b7fc 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -16,7 +16,12 @@ services: x-bake: # only platforms supported by the base image (node:24-slim) are included here # https://hub.docker.com/_/node/tags?name=24-slim - platforms: [linux/amd64,linux/arm64/v8,linux/ppc64le,linux/s390x] + platforms: + - linux/amd64 + - linux/arm64/v8 + # # fails on pnpm install + # - linux/ppc64le + # - linux/s390x target: ${TARGET:-dist} volumes: From 07db03871050211174628991219abd302fed0a72 Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 18:45:52 +1100 Subject: [PATCH 7/8] ready for pr review --- .github/workflows/docker-release.yml | 2 +- packages/runtime/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index e1e3038b..8b7c2ff0 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -9,7 +9,7 @@ name: Docker Release on: push: - branches: [main, docker-release-gha] + branches: [main] jobs: docker: diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 361089c8..db8d1eb0 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "ohm-js", - "version": "18.0.0-beta.9.b", + "version": "18.0.0-beta.9", "description": "Ohm runtime — CST nodes, Grammar, and MatchResult", "keywords": ["parser", "parsing", "ohm", "ohm-js", "runtime"], "homepage": "https://github.com/ohmjs/ohm#readme", From 2cf7e6632a8f082bb7af4568e76bfe4ce054ec93 Mon Sep 17 00:00:00 2001 From: Gary Miller Date: Mon, 9 Mar 2026 22:02:48 +1100 Subject: [PATCH 8/8] tidy up before merging pr --- .github/workflows/docker-release.yml | 11 +++++------ docker/docker-compose.yml | 8 ++------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index 8b7c2ff0..e95328ea 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -1,11 +1,10 @@ name: Docker Release -# only run this on merge to main -# clone the repo -# set the VERSION environment variable ie `cat packages/runtime/package.json | jq -r '.version'` -# use `docker manifest inspect ohmjs/ohm:$VERION` to verify that the release doesn't already exist before running the rest of the workflow -# create a multi platfrom builder -# build and push the image +# This workflow was largely generated from the following prompt: +# "only run this on merge to main; clone the repo; set the VERSION environment +# variable from packages/runtime/package.json; use `docker manifest inspect` +# to verify the release doesn't already exist; create a multi-platform builder; +# build and push the image" on: push: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c2b1b7fc..22aeda81 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -14,15 +14,11 @@ services: - org.opencontainers.image.licenses=MIT - org.opencontainers.image.description=Ohm tooling - A library and language for building parsers, interpreters, compilers, etc. x-bake: - # only platforms supported by the base image (node:24-slim) are included here - # https://hub.docker.com/_/node/tags?name=24-slim + # even thought node:24-slim supports platforms linux/ppc64le & linux/s390x (see https://hub.docker.com/_/node/tags?name=24-slim), + # pnpm install fails for there two platforms: - linux/amd64 - linux/arm64/v8 - # # fails on pnpm install - # - linux/ppc64le - # - linux/s390x - target: ${TARGET:-dist} volumes: - .:/local