Skip to content

Commit

Permalink
feat(ci): Introduce release-please and automatic publishing (#19)
Browse files Browse the repository at this point in the history
Release-As: 0.29.0
  • Loading branch information
popzxc authored and saitima committed Oct 24, 2024
1 parent faab562 commit 7e32fbb
Show file tree
Hide file tree
Showing 4 changed files with 175 additions and 0 deletions.
12 changes: 12 additions & 0 deletions .github/release-please/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"bootstrap-sha": "f7866247c9cdd0431211b267d2507e8cc2aaf4dd",
"include-component-in-tag": false,
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true,
"packages": {
".": {
"component": "zksync-crypto",
"release-type": "simple"
}
}
}
3 changes: 3 additions & 0 deletions .github/release-please/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
".": "0.28.0"
}
70 changes: 70 additions & 0 deletions .github/workflows/release-please-prepare-branch.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
on:
push:
branches:
- release-please--branches--main--components--zksync-crypto

env:
EXPECTED_COMMIT_MESSAGE: "Update version in Cargo.toml"
CARGO_TERM_COLOR: "always"
CARGO_INCREMENTAL: "0"
# Rust version to use.
nightly: nightly-2024-08-01

name: release-please-update-versions
jobs:
check_state:
name: "release-please: Check if Cargo.toml is updated"
runs-on: [ubuntu-latest]
outputs:
already_committed: ${{ steps.condition.outputs.already_committed }}

steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4

- name: Check last commit
id: condition
run: |
COMMIT=$(git log -1 --pretty=%B)
if [[ "$COMMIT" == "$EXPECTED_COMMIT_MESSAGE" ]]; then
echo "Cargo.lock is already updated"
echo "already_committed=true" >> "$GITHUB_OUTPUT"
else
echo "Cargo.lock should be updated"
echo "already_committed=false" >> "$GITHUB_OUTPUT"
fi
update_version:
runs-on: [ubuntu-latest]
name: "release-please: Update version in Cargo.toml"
needs: [check_state]
if: ${{ needs.check_state.outputs.already_committed != 'true' }}
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4
with:
persist-credentials: false

- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.nightly }}
components: rustfmt, clippy
# Remove default `-D warnings`. This is a temporary measure.
rustflags: ""

# cargo-workspaces fails to update versions in some cases.
- name: Install cargo-edit
run: cargo install cargo-edit

- name: Bump version
run: |
NEW_VERSION=$(cat .github/release-please/manifest.json | jq -r '."."')
cargo-set-version set-version $NEW_VERSION --workspace
- name: Push changes
run: |
git config --global user.email "[email protected]"
git config --global user.name "zksync-era-bot"
git remote set-url origin 'https://${{ secrets.RELEASE_TOKEN }}@github.com/matter-labs/zksync-crypto.git'
git add ./Cargo.toml
git commit -m "$EXPECTED_COMMIT_MESSAGE"
git push
90 changes: 90 additions & 0 deletions .github/workflows/release-please.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
on:
push:
branches:
- main
workflow_dispatch:

env:
CARGO_TERM_COLOR: "always"
CARGO_INCREMENTAL: "0"
RUSTC_WRAPPER: "sccache"
SCCACHE_GHA_ENABLED: "true"
# Rust version to use.
nightly: nightly-2024-08-01

permissions:
contents: write
pull-requests: write

name: release-please
jobs:
release-please:
runs-on: ubuntu-latest
outputs:
releases_created: ${{ steps.release.outputs.releases_created }}
release_please_output_json: ${{ toJSON(steps.release.outputs) }}
steps:
- name: Run release-please
id: release
uses: googleapis/release-please-action@7987652d64b4581673a76e33ad5e98e3dd56832f # v4.1.3
with:
token: ${{ secrets.RELEASE_TOKEN }}
config-file: .github/release-please/config.json
manifest-file: .github/release-please/manifest.json

- name: Show outputs
env:
OUTPUTS: ${{ toJSON(steps.release.outputs) }}
run: echo "$OUTPUTS"

process-release:
runs-on: [ubuntu-22.04-github-hosted-16core]
needs: [release-please]
if: ${{ needs.release-please.outputs.releases_created == 'true' }}
steps:
- name: Checkout code
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4

- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.nightly }}
# Remove default `-D warnings`. This is a temporary measure.
rustflags: ""

- name: Install sccache
uses: mozilla-actions/[email protected]

- name: Install cargo-workspaces
run: cargo install cargo-workspaces

- name: Build each package separately
run: cargo ws exec cargo build

- name: Login to crates.io
run: cargo login ${{ secrets.CRATES_IO_TOKEN }}

- name: Publish
run: cargo ws publish --publish-as-is --allow-dirty

- name: Set owners for new packages
# `cargo owner --add` fails if the package is already owned by the same entity,
# so we have to check if the package is already owned by the organization.
run: |
ORG_OWNER=github:matter-labs:crates-io
for PKG in $(cargo ws list); do
cargo owner --list --quiet $PKG | grep $ORG_OWNER || cargo owner --add $ORG_OWNER $PKG
done
- name: Send Release Info
uses: matter-labs/format-release-please-for-slack-action@69e6fe9e4ec531b7b5fb0d826f73c190db83cf42 # v2.1.0
with:
release-please-output: ${{ needs.release-please.outputs.release_please_output_json }}
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_RELEASES }}

- name: Notify about failure
if: failure()
uses: matter-labs/format-release-please-for-slack-action@69e6fe9e4ec531b7b5fb0d826f73c190db83cf42 # v2.1.0
with:
release-please-output: '{ "body": "⚠️ Failed to publish the release" }'
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_RELEASES }}

0 comments on commit 7e32fbb

Please sign in to comment.