From 9a22e86e0a42f79989bb722362fabff755bce29c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ignacio=20L=C3=B3pez=20Luna?= Date: Wed, 18 Feb 2026 09:18:16 +0100 Subject: [PATCH 1/5] Adding `-w 0` disables line wrapping, ensuring the entire base64 string is on a single line. --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 39b22b8e..daa29271 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -440,7 +440,7 @@ jobs: id: notes run: | # Read release notes, base64-encode to safely pass multiline content - NOTES_B64=$(base64 < release-notes.md) + NOTES_B64=$(base64 -w 0 < release-notes.md) echo "changelog_b64=$NOTES_B64" >> "$GITHUB_OUTPUT" - name: Trigger model-cli-release workflow From fbc6954f13856df2f1de83630e173852d4797de4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ignacio=20L=C3=B3pez=20Luna?= Date: Wed, 18 Feb 2026 09:22:33 +0100 Subject: [PATCH 2/5] fix: update base64 encoding in release notes to remove newlines --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index daa29271..6bf515f5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -440,7 +440,7 @@ jobs: id: notes run: | # Read release notes, base64-encode to safely pass multiline content - NOTES_B64=$(base64 -w 0 < release-notes.md) + NOTES_B64=$(base64 < release-notes.md | tr -d '\n') echo "changelog_b64=$NOTES_B64" >> "$GITHUB_OUTPUT" - name: Trigger model-cli-release workflow From ffaa8011b679b38326600fa38ef8d820c9f835e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ignacio=20L=C3=B3pez=20Luna?= Date: Wed, 18 Feb 2026 09:53:20 +0100 Subject: [PATCH 3/5] fix: simplify model-cli-release workflow by removing unnecessary steps --- .github/workflows/release.yml | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6bf515f5..71ee1b26 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -426,23 +426,11 @@ jobs: # Trigger model-cli-release workflow (private repo — signs binaries) # --------------------------------------------------------------------------- trigger-model-cli-release: - needs: [prepare, test, release-notes] + needs: [prepare, test] runs-on: ubuntu-latest permissions: contents: read steps: - - name: Download release notes - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 - with: - name: release-notes - - - name: Read release notes - id: notes - run: | - # Read release notes, base64-encode to safely pass multiline content - NOTES_B64=$(base64 < release-notes.md | tr -d '\n') - echo "changelog_b64=$NOTES_B64" >> "$GITHUB_OUTPUT" - - name: Trigger model-cli-release workflow env: GH_TOKEN: ${{ secrets.CLI_RELEASE_PAT }} @@ -450,13 +438,12 @@ jobs: VERSION: ${{ needs.prepare.outputs.version }} run: | echo "🚀 Triggering model-cli-release workflow" - echo " ref: $RELEASE_TAG" - echo " release_tag: v$VERSION" + echo " model-cli-ref: $RELEASE_TAG" + echo " tag: v$VERSION" gh workflow run release.yml \ --repo docker/model-cli-release \ - -f ref="$RELEASE_TAG" \ - -f release_tag="v$VERSION" \ - -f changelog_b64="${{ steps.notes.outputs.changelog_b64 }}" + -f model-cli-ref="$RELEASE_TAG" \ + -f tag="v$VERSION" echo "✅ model-cli-release workflow triggered" # --------------------------------------------------------------------------- From e8df455aeec23b1ac97d2619e579c4cb0513a529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ignacio=20L=C3=B3pez=20Luna?= Date: Wed, 18 Feb 2026 10:09:45 +0100 Subject: [PATCH 4/5] fix: update release workflow to use 'ref' instead of 'tag' for triggering model release --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71ee1b26..c7f226e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -465,7 +465,7 @@ jobs: echo " tag_ref: $RELEASE_TAG" gh workflow run release-model.yml \ --repo docker/packaging \ - -f tag="$RELEASE_TAG" + -f ref="$RELEASE_TAG" echo "✅ release-model workflow triggered in docker/packaging" - name: Post instructions for release-repo From b120075b9167b51a1fdbb2e4d88076ea5f0fb5a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ignacio=20L=C3=B3pez=20Luna?= Date: Wed, 18 Feb 2026 10:58:35 +0100 Subject: [PATCH 5/5] fix: enhance release workflow by adding packaging wait and trigger steps --- .github/workflows/release.yml | 103 +++++++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 25 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c7f226e3..d5f5bdf7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -447,62 +447,115 @@ jobs: echo "✅ model-cli-release workflow triggered" # --------------------------------------------------------------------------- - # Trigger Docker CE packaging workflow + # Trigger Docker CE packaging workflow, wait for it, then trigger release-repo # --------------------------------------------------------------------------- trigger-packaging: if: ${{ !inputs.skipPackaging }} needs: [prepare, trigger-model-cli-release] runs-on: ubuntu-latest + timeout-minutes: 120 permissions: contents: read steps: - name: Trigger release-model workflow in packaging repo + id: trigger env: GH_TOKEN: ${{ secrets.CLI_RELEASE_PAT }} RELEASE_TAG: ${{ needs.prepare.outputs.release_tag }} run: | echo "📦 Triggering release-model workflow in docker/packaging" - echo " tag_ref: $RELEASE_TAG" + echo " ref: $RELEASE_TAG" gh workflow run release-model.yml \ --repo docker/packaging \ -f ref="$RELEASE_TAG" echo "✅ release-model workflow triggered in docker/packaging" - - name: Post instructions for release-repo + - name: Wait for packaging workflow to complete + id: packaging env: + GH_TOKEN: ${{ secrets.CLI_RELEASE_PAT }} VERSION: ${{ needs.prepare.outputs.version }} - RELEASE_TAG: ${{ needs.prepare.outputs.release_tag }} run: | - cat >> "$GITHUB_STEP_SUMMARY" <<-SUMMARY - ## 📋 Next Steps: Release to Docker CE + echo "⏳ Waiting for packaging workflow to appear..." + sleep 15 + + # Find the most recent run of release-model.yml + for i in $(seq 1 10); do + RUN_ID=$(gh run list \ + --repo docker/packaging \ + --workflow release-model.yml \ + --limit 1 \ + --json databaseId,createdAt \ + --jq '.[0].databaseId') + if [ -n "$RUN_ID" ]; then + echo "Found packaging run: $RUN_ID" + break + fi + echo " Retry $i/10..." + sleep 10 + done - The \`release-model\` workflow has been triggered in \`docker/packaging\`. - Once it completes, follow these manual steps: + if [ -z "$RUN_ID" ]; then + echo "::error::Could not find packaging workflow run" + exit 1 + fi - ### 1. Get the packaging image tag + echo "⏳ Waiting for packaging run $RUN_ID to complete..." + gh run watch "$RUN_ID" \ + --repo docker/packaging \ + --exit-status - Check the [release-model workflow runs](https://github.com/docker/packaging/actions/workflows/release-model.yml) - for the image tag. It will look like: - \`\`\` - dockereng/packaging:model-v${VERSION}- - \`\`\` + # Get the run number to construct the image tag + RUN_NUMBER=$(gh run view "$RUN_ID" \ + --repo docker/packaging \ + --json number \ + --jq '.number') - ### 2. Trigger the plugin release + PACKAGING_IMAGE="dockereng/packaging:model-v${VERSION}-${RUN_NUMBER}" + echo "📦 Packaging image: $PACKAGING_IMAGE" + echo "packaging_image=$PACKAGING_IMAGE" >> "$GITHUB_OUTPUT" + echo "✅ Packaging workflow completed successfully" - Run the [release buildx, compose, model, cagent](https://github.com/docker/release-repo/actions/workflows/plugin.yml) workflow with: + - name: Trigger release-repo plugin workflow + env: + GH_TOKEN: ${{ secrets.CLI_RELEASE_PAT }} + VERSION: ${{ needs.prepare.outputs.version }} + PACKAGING_IMAGE: ${{ steps.packaging.outputs.packaging_image }} + run: | + echo "🚀 Triggering plugin release in docker/release-repo" + echo " packaging_image: $PACKAGING_IMAGE" + echo " model_version: $VERSION" + echo " channel: stable" + echo " release_live: true" + gh workflow run plugin.yml \ + --repo docker/release-repo \ + --ref production \ + -f packaging_image="$PACKAGING_IMAGE" \ + -f model_version="$VERSION" \ + -f channel=stable \ + -f release_live=true + echo "✅ Plugin release workflow triggered in docker/release-repo" + + - name: Post summary + env: + VERSION: ${{ needs.prepare.outputs.version }} + RELEASE_TAG: ${{ needs.prepare.outputs.release_tag }} + PACKAGING_IMAGE: ${{ steps.packaging.outputs.packaging_image }} + run: | + cat >> "$GITHUB_STEP_SUMMARY" <<-SUMMARY + ## 📦 Docker CE Packaging & Release - | Parameter | Value | - |-----------|-------| - | **Image** | \`dockereng/packaging:model-v${VERSION}-\` | - | **Expected version** | \`${VERSION}\` (no v-prefix) | - | **Release channel** | \`stable\` | - | **Deploy to live** | ✅ Yes | + | Step | Status | + |------|--------| + | Packaging image | \`${PACKAGING_IMAGE}\` | + | Model version | \`${VERSION}\` | + | Release channel | \`stable\` | + | Deploy to live | ✅ Yes | + | Release tag | \`${RELEASE_TAG}\` | - > **Tag reference used:** \`${RELEASE_TAG}\` + The plugin release workflow has been triggered in [docker/release-repo](https://github.com/docker/release-repo/actions/workflows/plugin.yml). SUMMARY - echo "📋 Instructions for docker/release-repo have been added to the job summary" - # --------------------------------------------------------------------------- # Create GitHub Release with AI-generated release notes # ---------------------------------------------------------------------------