-
-
Notifications
You must be signed in to change notification settings - Fork 240
ci(build): Add snapshot release workflow #3212
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
9ae8e1d
9947a3c
163d174
2cea920
195fbf0
c24fc49
47c4775
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,6 +4,14 @@ on: | |
| push: | ||
| branches: | ||
| - release/** | ||
| workflow_call: | ||
| inputs: | ||
| is-snapshot: | ||
| type: boolean | ||
| default: false | ||
| checkout-ref: | ||
| type: string | ||
| default: '' | ||
|
|
||
| jobs: | ||
| linux: | ||
|
|
@@ -32,6 +40,8 @@ jobs: | |
|
|
||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
|
|
||
| - name: Add Rustup Target | ||
| run: | | ||
|
|
@@ -68,6 +78,8 @@ jobs: | |
|
|
||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
szokeasaurusrex marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| - name: Add Rustup Target | ||
| run: rustup target add ${{ matrix.target }} | ||
|
|
@@ -155,6 +167,8 @@ jobs: | |
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
|
|
||
| - name: Install `rcodesign` | ||
| run: | | ||
|
|
@@ -219,6 +233,8 @@ jobs: | |
|
|
||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
|
|
||
| # When rustup is updated, it tries to replace its binary, which on Windows is somehow locked. | ||
| # This can result in the CI failure, see: https://github.com/rust-lang/rustup/issues/3029 | ||
|
|
@@ -247,10 +263,12 @@ jobs: | |
| node: | ||
| name: NPM Package | ||
| runs-on: ubuntu-24.04 | ||
| needs: [linux, macos, macos_universal, windows] | ||
| needs: [linux, sign-macos-binaries, windows] | ||
runningcode marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
|
|
||
| - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # 6.2.0 | ||
| with: | ||
|
|
@@ -280,10 +298,13 @@ jobs: | |
| if-no-files-found: 'error' | ||
|
|
||
| python-base: | ||
| if: ${{ !inputs.is-snapshot }} | ||
| name: python (base) | ||
| runs-on: ubuntu-24.04 | ||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
| - name: Add Rustup Target | ||
| run: rustup target add x86_64-unknown-linux-musl | ||
| - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 6.2.0 | ||
|
|
@@ -297,11 +318,14 @@ jobs: | |
| if-no-files-found: 'error' | ||
|
|
||
| python: | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. not publishing to pip |
||
| if: ${{ !inputs.is-snapshot }} | ||
| name: python | ||
| runs-on: ubuntu-24.04 | ||
| needs: [linux, sign-macos-binaries, windows, python-base] | ||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
| - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 6.2.0 | ||
| with: | ||
| python-version: '3.11' | ||
|
|
@@ -328,6 +352,8 @@ jobs: | |
| needs: [linux, sign-macos-binaries, windows] | ||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
| - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # 6.2.0 | ||
| with: | ||
| node-version: '20.10.0' | ||
|
|
@@ -366,6 +392,7 @@ jobs: | |
| if-no-files-found: 'error' | ||
|
|
||
| platform-specific-docker: | ||
| if: ${{ !inputs.is-snapshot }} | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. skip docker publishing |
||
| name: Build Docker Image (${{ matrix.platform }}) | ||
| strategy: | ||
| matrix: | ||
sentry[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
@@ -380,6 +407,8 @@ jobs: | |
| packages: write | ||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
| with: | ||
| ref: ${{ inputs.checkout-ref }} | ||
|
|
||
| - name: Set up Docker Buildx | ||
| uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # 3.12.0 | ||
|
|
@@ -402,6 +431,7 @@ jobs: | |
| cache-to: type=gha,mode=max,scope=${{ matrix.platform }} | ||
|
|
||
| multiarch-docker: | ||
| if: ${{ !inputs.is-snapshot }} | ||
| name: Create Multi-Architecture Docker Image | ||
| needs: platform-specific-docker | ||
| runs-on: ubuntu-24.04 | ||
|
|
@@ -422,6 +452,7 @@ jobs: | |
| ghcr.io/${{ github.repository }}:${{ github.sha }}-arm64 | ||
|
|
||
| merge: | ||
| if: ${{ !inputs.is-snapshot }} | ||
| name: Create Release Artifact | ||
| runs-on: ubuntu-24.04 | ||
| needs: [linux, sign-macos-binaries, windows, npm-distributions, node, python] | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,117 @@ | ||
| name: Snapshot Release | ||
|
|
||
| on: | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. manual trigger to test. we can change this to build on every push to master once we know it is working.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. l: I would be fine with just having it set to every push to master with this PR. We can revert if needed |
||
| push: | ||
| branches: [master] | ||
|
|
||
| permissions: | ||
| contents: write | ||
|
|
||
| jobs: | ||
| prepare: | ||
| name: Prepare Snapshot | ||
| runs-on: ubuntu-24.04 | ||
| outputs: | ||
| version: ${{ steps.version.outputs.version }} | ||
| ref: ${{ steps.push.outputs.ref }} | ||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 | ||
|
|
||
| # Computes a semver-compliant snapshot version based on the current | ||
| # version in Cargo.toml. The patch version is bumped so that the | ||
| # snapshot sorts higher than the current release but lower than the | ||
| # next real release. For example, if Cargo.toml has 3.3.1, the | ||
| # snapshot version will be 3.3.2-snapshot.20260312.abc1234. | ||
| - name: Compute snapshot version | ||
| id: version | ||
| run: | | ||
| CURRENT=$(cargo metadata --no-deps --format-version 1 \ | ||
| | jq -er '(.workspace_default_members[0]) as $id | .packages[] | select(.id == $id) | .version') | ||
| MAJOR=$(echo "$CURRENT" | cut -d. -f1) | ||
| MINOR=$(echo "$CURRENT" | cut -d. -f2) | ||
| PATCH=$(echo "$CURRENT" | cut -d. -f3) | ||
| NEXT_PATCH=$((PATCH + 1)) | ||
| DATE=$(date -u +%Y%m%d) | ||
| SHORT_SHA=$(git rev-parse --short HEAD) | ||
| VERSION="${MAJOR}.${MINOR}.${NEXT_PATCH}-snapshot.${DATE}.${SHORT_SHA}" | ||
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | ||
| echo "current=$CURRENT" >> "$GITHUB_OUTPUT" | ||
| echo "Snapshot version: $VERSION" | ||
|
|
||
| - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # 6.2.0 | ||
| with: | ||
| node-version: '20.10.0' | ||
|
|
||
| - name: Bump versions | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. so another way to do this would be to modify the versions in place in the action/workflow using sed and regexes. this would remove the need to commit and create the snapshot branch somewhere but then we have two different mechanisms to patch the versions which could lead to drift. without modifying in place, there's no way to share the patched repo between workflows. |
||
| run: scripts/bump-version.sh "${{ steps.version.outputs.current }}" "${{ steps.version.outputs.version }}" | ||
|
|
||
| - name: Push snapshot branch | ||
| id: push | ||
| run: | | ||
| BRANCH="snapshot/${{ steps.version.outputs.version }}" | ||
| git config user.name "github-actions[bot]" | ||
| git config user.email "github-actions[bot]@users.noreply.github.com" | ||
| git checkout -b "$BRANCH" | ||
| git add -A | ||
| git commit -m "snapshot: ${{ steps.version.outputs.version }}" | ||
| git push origin "$BRANCH" | ||
| echo "ref=$BRANCH" >> "$GITHUB_OUTPUT" | ||
|
|
||
| build: | ||
| name: Build | ||
| needs: prepare | ||
| uses: ./.github/workflows/build.yml | ||
| with: | ||
| is-snapshot: true | ||
| checkout-ref: ${{ needs.prepare.outputs.ref }} | ||
| secrets: inherit | ||
|
|
||
| publish-npm: | ||
| name: Publish to npm | ||
| needs: [prepare, build] | ||
| runs-on: ubuntu-24.04 | ||
| steps: | ||
| - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # 6.2.0 | ||
| with: | ||
| node-version: '20.10.0' | ||
| registry-url: 'https://registry.npmjs.org' | ||
|
|
||
| - name: Download npm binary distributions | ||
| uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # 8.0.0 | ||
| with: | ||
| name: artifact-npm-binary-distributions | ||
| path: npm-distributions | ||
|
|
||
| - name: Download node package | ||
| uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # 8.0.0 | ||
| with: | ||
| name: artifact-pkg-node | ||
| path: node-package | ||
|
|
||
| - name: Publish platform packages | ||
| env: | ||
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | ||
| run: | | ||
| for pkg in npm-distributions/*/*.tgz; do | ||
| echo "Publishing $pkg" | ||
| npm publish "$pkg" --tag snapshot | ||
| done | ||
cursor[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| - name: Publish main package | ||
sentry[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| env: | ||
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | ||
| run: | | ||
| npm publish node-package/*.tgz --tag snapshot | ||
|
|
||
| cleanup: | ||
| name: Cleanup | ||
| needs: [prepare, publish-npm] | ||
| if: always() | ||
| runs-on: ubuntu-24.04 | ||
| steps: | ||
| - name: Delete snapshot branch | ||
szokeasaurusrex marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| if: needs.prepare.outputs.ref != '' | ||
| env: | ||
| GH_TOKEN: ${{ github.token }} | ||
| run: | | ||
| gh api -X DELETE "repos/${{ github.repository }}/git/refs/heads/${{ needs.prepare.outputs.ref }}" | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we need this checkout-ref to share the version patched repo between workflows. see comment here for more details: https://github.com/getsentry/sentry-cli/pull/3212/changes#r2924915514