From e79ea6be4b30575b30967ccb66d12ae7f00cbc0b Mon Sep 17 00:00:00 2001 From: Bartosz Burda Date: Tue, 8 Sep 2026 10:15:31 +0200 Subject: [PATCH] Match bare-semver release tags in the multi-arch publish Release tags in this repo are bare semver: 0.2.0 up to 0.7.0. Only the very first release, v0.1.0, used a `v` prefix. The workflow triggered on `v*` only, so it has never once run from a release tag push. That glob explains exactly one release. This workflow was added on 2026-07-08, after 0.6.0, so 0.2.0 through 0.6.0 have no multi-arch image because there was nothing to build them, not because of the trigger. 0.7.0 is the first release that could have matched, and did not. The `latest` tag keeps belonging to the main-branch workflow. The rule that looked like it gated `latest` is false for a bare semver tag, which is every release since 0.2.0, so it never fired. The tag was still created, by the action's default `latest=auto`, so a release took it over. Setting `flavor: latest=false` is what actually stops that. --- .github/workflows/docker-publish-multiarch.yml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/docker-publish-multiarch.yml b/.github/workflows/docker-publish-multiarch.yml index 955ceefdb..0ed7a413f 100644 --- a/.github/workflows/docker-publish-multiarch.yml +++ b/.github/workflows/docker-publish-multiarch.yml @@ -15,7 +15,11 @@ name: Docker Publish (multi-arch, release) on: push: tags: - - 'v*' + # Release tags are bare semver; only the first release carried a + # `v`. Both shapes match, and neither matches the bloom + # `release/...` and `debian/...` tags, which start with a letter. + - '[0-9]*.[0-9]*.[0-9]*' + - 'v[0-9]*.[0-9]*.[0-9]*' workflow_dispatch: env: @@ -133,14 +137,15 @@ jobs: uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ github.repository_owner }}/ros2_medkit-${{ matrix.ros_distro }} + # `latest` belongs to docker-publish.yml, which moves it on + # every push to main; without this the action's default + # `latest=auto` would have a release take that tag over. + flavor: latest=false tags: | - # version tag (v1.2.3 -> 1.2.3) + # version tag (0.7.0 -> 0.7.0) type=semver,pattern={{version}} - # major.minor (v1.2.3 -> 1.2) + # major.minor (0.7.0 -> 0.7) type=semver,pattern={{major}}.{{minor}} - # latest only on a stable release tag (vX.Y.Z with no - # pre-release suffix); skips -rc/-alpha tags and dispatch - type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-') }} # sha for traceability type=sha,prefix=sha-,format=short