From e5b119d4589497c3acd992e9814bd83be163a57a Mon Sep 17 00:00:00 2001 From: David Derler Date: Mon, 22 Dec 2025 14:32:56 +0100 Subject: [PATCH 1/5] . --- .github/workflows/publish.yml | 39 +++++++++++++++++++++++++++++++++++ Cargo.toml | 3 ++- RELEASE_GUIDE.md | 26 ++--------------------- 3 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..e146ad78 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,39 @@ +name: Publish stable-structures to crates.io + +on: + push: + tags: + - "v*" + +jobs: + publish-ic-stable-structures: + runs-on: ubuntu-latest + + permissions: + id-token: write # Required for OIDC token exchange + + steps: + - uses: actions/checkout@v5 + + - uses: rust-lang/crates-io-auth-action@v1 + id: auth + + - name: Set Cargo.toml versions + shell: bash + env: + RELEASE_TAG: ${{ github.ref }} + run: | + sed -i -e "s/0\\.0\\.0-git/${RELEASE_TAG##*\/v}/" Cargo.toml + + - run: cargo publish -p ic-stable-structures + env: + CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} + + - name: Post to a Slack channel + uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a # v2.1.1 + with: + method: chat.postMessage + token: ${{ secrets.SLACK_API_TOKEN }} + payload: | + channel: eng-dsm-alerts + text: "New `stable-structures` crate (version `${{ github.ref_name }}`) has been published to crates.io" diff --git a/Cargo.toml b/Cargo.toml index 173b20e6..ceecc219 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,8 @@ license = "Apache-2.0" name = "ic-stable-structures" readme = "README.md" repository = "https://github.com/dfinity/stable-structures" -version = "0.7.2" +# Version is set by a Github workflow from the git tag +version = "0.0.0-git" [package.metadata.docs.rs] # Build docs for wasm32-unknown-unknown target diff --git a/RELEASE_GUIDE.md b/RELEASE_GUIDE.md index e9e187e7..4c3b1017 100644 --- a/RELEASE_GUIDE.md +++ b/RELEASE_GUIDE.md @@ -71,7 +71,7 @@ Adding a `reclaim()` method to free unused memory without changing layout, only 2. Ensure CI is green. 3. Preferable commit & PR name: `chore(release): vX.Y.Z` ([example PR](https://github.com/dfinity/stable-structures/pull/379)). -### Publish Release to GitHub +### Publish Release to GitHub and crates.io 1. Identify the commit to release. 2. Draft a new release: @@ -81,29 +81,7 @@ Adding a `reclaim()` method to free unused memory without changing layout, only - Set the release title to `vX.Y.Z`. - Choose the previous tag as the last release. - Add release notes (GitHub can auto-generate, adjust as needed). -3. Click **Publish release**. - -### Publish to crates.io - -1. Generate an API token: - - Log in to crates.io → **Account Settings** → **API Tokens** → generate a new token. -2. Authenticate: - ```bash - cargo login - ``` - Enter the token when prompted. -3. Check out the repo at the release tag: - ```bash - git checkout vX.Y.Z - ``` -4. Dry-run publish (mandatory): - ```bash - cargo publish -p ic-stable-structures --dry-run - ``` -5. Publish: - ```bash - cargo publish -p ic-stable-structures - ``` +3. Click **Publish release**, which will also trigger publication to crates.io ### Verify From bbdb0a062ba0fc13b22cda9cc457455e86d9ed29 Mon Sep 17 00:00:00 2001 From: David Derler Date: Tue, 23 Dec 2025 09:11:50 +0100 Subject: [PATCH 2/5] . --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e146ad78..d51d2963 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,7 +23,7 @@ jobs: env: RELEASE_TAG: ${{ github.ref }} run: | - sed -i -e "s/0\\.0\\.0-git/${RELEASE_TAG##*\/v}/" Cargo.toml + sed -i '' -e "s/0\\.0\\.0-git/${RELEASE_TAG##*\/v}/" Cargo.toml - run: cargo publish -p ic-stable-structures env: From 0f6ef6f2c6b79f0a6ee777903bffe153d5a6669d Mon Sep 17 00:00:00 2001 From: David Derler Date: Tue, 23 Dec 2025 10:22:19 +0100 Subject: [PATCH 3/5] Allow dirty working directory because of sed changes --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d51d2963..b3efb446 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,7 +25,7 @@ jobs: run: | sed -i '' -e "s/0\\.0\\.0-git/${RELEASE_TAG##*\/v}/" Cargo.toml - - run: cargo publish -p ic-stable-structures + - run: cargo publish -p ic-stable-structures --allow-dirty env: CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} From 153b072c235958becc80be975404e50f913448bb Mon Sep 17 00:00:00 2001 From: David Derler Date: Tue, 23 Dec 2025 11:16:32 +0100 Subject: [PATCH 4/5] . --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 28b19794..043a14ee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -302,7 +302,7 @@ dependencies = [ [[package]] name = "ic-stable-structures" -version = "0.7.2" +version = "0.0.0-git" dependencies = [ "canbench-rs", "candid", From 5c12f98c6cd2bd11c968c7f1abe0c97ecf2b45d5 Mon Sep 17 00:00:00 2001 From: David Derler Date: Tue, 23 Dec 2025 11:36:37 +0100 Subject: [PATCH 5/5] . --- examples/Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/Cargo.lock b/examples/Cargo.lock index 0da477b5..e21af14e 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -285,7 +285,7 @@ dependencies = [ [[package]] name = "ic-stable-structures" -version = "0.7.2" +version = "0.0.0-git" dependencies = [ "ic_principal", ]