From 53a1b6d67ec5162b35ccd744dd1c4321aafb001e Mon Sep 17 00:00:00 2001 From: Atif Ali Date: Wed, 1 Apr 2026 14:35:16 +0000 Subject: [PATCH] ci: fix Linear release tracking and move complete step to release workflow (#23771) --- .github/workflows/linear-release.yaml | 49 +++++---------------------- .github/workflows/release.yaml | 29 ++++++++++++++++ 2 files changed, 37 insertions(+), 41 deletions(-) diff --git a/.github/workflows/linear-release.yaml b/.github/workflows/linear-release.yaml index 44094c7c71..7c60445993 100644 --- a/.github/workflows/linear-release.yaml +++ b/.github/workflows/linear-release.yaml @@ -5,8 +5,6 @@ on: branches: - main - "release/2.[0-9]+" - release: - types: [published] permissions: contents: read @@ -29,9 +27,9 @@ jobs: - name: Detect next release version id: version - # Find the highest release/2.X branch (exact pattern, no suffixes like - # release/2.31_hotfix) and derive the next minor version for the release - # currently in development on main. + # Find the highest release/2.X branch (exact pattern, no suffixes + # like release/2.31_hotfix) and derive the next minor version for + # the release currently in development on main. run: | LATEST_MINOR=$(git branch -r | grep -E '^\s*origin/release/2\.[0-9]+$' | \ sed 's/.*release\/2\.//' | sort -n | tail -1) @@ -40,8 +38,10 @@ jobs: echo "skip=true" >> "$GITHUB_OUTPUT" exit 0 fi - echo "version=2.$((LATEST_MINOR + 1))" >> "$GITHUB_OUTPUT" + NEXT="2.$((LATEST_MINOR + 1))" + echo "version=$NEXT" >> "$GITHUB_OUTPUT" echo "skip=false" >> "$GITHUB_OUTPUT" + echo "Detected next release: $NEXT" - name: Sync issues id: sync @@ -51,6 +51,7 @@ jobs: access_key: ${{ secrets.LINEAR_ACCESS_KEY }} command: sync version: ${{ steps.version.outputs.version }} + name: ${{ steps.version.outputs.version }} timeout: 300 sync-release-branch: @@ -76,6 +77,7 @@ jobs: access_key: ${{ secrets.LINEAR_ACCESS_KEY }} command: sync version: ${{ steps.version.outputs.version }} + name: ${{ steps.version.outputs.version }} timeout: 300 code-freeze: @@ -106,38 +108,3 @@ jobs: version: ${{ steps.version.outputs.version }} timeout: 300 - complete: - name: Complete Linear release - if: github.event_name == 'release' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - persist-credentials: false - - - name: Extract release version - id: version - # Strip "v" prefix and patch: "v2.31.0" -> "2.31". Also detect whether - # this is a minor release (v*.*.0) — patch releases (v2.31.1, v2.31.2, - # ...) are grouped into the same Linear release and must not re-complete - # it after it has already shipped. - run: | - VERSION=$(echo "$TAG" | sed 's/^v//' | cut -d. -f1,2) - echo "version=$VERSION" >> "$GITHUB_OUTPUT" - if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.0$ ]]; then - echo "is_minor=true" >> "$GITHUB_OUTPUT" - else - echo "is_minor=false" >> "$GITHUB_OUTPUT" - fi - env: - TAG: ${{ github.event.release.tag_name }} - - - name: Complete release - id: complete - if: steps.version.outputs.is_minor == 'true' - uses: linear/linear-release-action@755d50b5adb7dd42b976ee9334952745d62ceb2d # v0.6.0 - with: - access_key: ${{ secrets.LINEAR_ACCESS_KEY }} - command: complete - version: ${{ steps.version.outputs.version }} - timeout: 300 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d0ca5fe500..3874bb8bf4 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -563,6 +563,35 @@ jobs: VERSION: ${{ steps.version.outputs.version }} CREATED_LATEST_TAG: ${{ steps.build_docker.outputs.created_latest_tag }} + # Mark the Linear release as shipped. + - name: Extract Linear release version + if: ${{ !inputs.dry_run }} + id: linear_version + run: | + # Skip RC releases — they must not complete the Linear release. + if [[ "$VERSION" == *-rc* ]]; then + echo "RC release (${VERSION}), skipping Linear release completion." + echo "skip=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + # Strip patch to get the Linear release version (e.g. 2.32.0 -> 2.32). + linear_version=$(echo "$VERSION" | cut -d. -f1,2) + echo "version=$linear_version" >> "$GITHUB_OUTPUT" + echo "skip=false" >> "$GITHUB_OUTPUT" + echo "Completing Linear release ${linear_version}" + env: + VERSION: ${{ steps.version.outputs.version }} + + - name: Complete Linear release + if: ${{ !inputs.dry_run && steps.linear_version.outputs.skip != 'true' }} + continue-on-error: true + uses: linear/linear-release-action@755d50b5adb7dd42b976ee9334952745d62ceb2d # v0.6.0 + with: + access_key: ${{ secrets.LINEAR_ACCESS_KEY }} + command: complete + version: ${{ steps.linear_version.outputs.version }} + timeout: 300 + - name: Authenticate to Google Cloud uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3.0.0 with: