created_at2022-12-11 23:31:32.016848
updated_at2024-04-16 12:12:28.781735
descriptionA CLI to integrate Rust into a semantic-release workflow.
Eric Crosson (EricCrosson)



# semantic-release-cargo [![Build Status]]( [build status]: **semantic-release-cargo** integrates a cargo-based Rust project with [semantic-release]. This solves two use cases: 1. publishing to [], or other alternate crate registries, and 2. compiling release binaries []: [semantic-release]: ## Publish to After following these instructions, you will have a semantic-release pipeline that publishes your Rust crate to ### Requirements If publishing to [], you must set the `CARGO_REGISTRY_TOKEN` environment variable. If publishing to an [alternate registry](, you must set the `CARGO_REGISTRIES__TOKEN` environment variable. This workflow is supported on the following systems: | System | Supported? | | ------------- | ---------- | | macOS aarch64 | ✓ | | macOS x64 | ✓ | | Linux x64 gnu | ✓ | ### Install Install `semantic-release-cargo` with npm: ```bash $ npm install --save-dev --save-exact @semantic-release-cargo/semantic-release-cargo ``` ### Use Add **semantic-release-cargo** to your `semantic-release` configuration in `.releaserc.json`: ```json { "plugins": ["@semantic-release-cargo/semantic-release-cargo"] } ``` ### Alternative Configuration with semantic-release-action If you're not keen to mix npm with your Rust project, you can use the [semantic-release-action]. [semantic-release-action]: ## Compile Release Binaries After following these instructions, you will have a GitHub Actions workflow that sets the next version number in `Cargo.toml` and compiles your crate's release binaries. Updating the cargo manifest with the next version number lets you reference the next version in the compiled binary, for example with the [clap::crate_version] macro. The compiled binaries can be uploaded to a GitHub release using the [@semantic-release/github] plugin. This workflow is supported on the following systems: | System | Supported? | | ------------- | ---------- | | macOS aarch64 | ✓ | | macOS x64 | ✓ | | Linux aarch64 | ✓ | | Linux x64 | ✓ | | Linux x86 | ✓ | [clap::crate_version]: [@semantic-release/github]: ### Use In the first job, use the [next-release-version] Action to save the next release version as GitHub Actions outputs: ```yaml jobs: get-next-version: uses: semantic-release-action/next-release-version/.github/workflows/next-release-version.yml@v4 ``` In the next job, use **semantic-release-cargo** to set the crate version before compilation: ```yaml build: name: Build runs-on: ubuntu-latest needs: - get-next-version steps: - name: Checkout uses: actions/checkout@v3 - name: Install semantic-release-cargo if: == 'true' uses: EricCrosson/install-github-release-binary@v2 with: targets: semantic-release-cargo@2 - name: Prepare semantic-release for Rust if: == 'true' run: semantic-release-cargo prepare ${{ }} - name: Install Rust toolchain uses: dtolnay/rust-toolchain@master - name: Cargo build run: cargo build --release --target=x86_64-unknown-linux-gnu --all-targets ``` [next-release-version]: ## Example Workflow You can create a single GitHub Actions workflow that combines both use cases. This repository uses **semantic-release-cargo** with semantic-release to publish to and create a GitHub Release with precompiled binaries. See [release.yml] for a working example. [release.yml]: .github/workflows/release.yml ## Contributors License Agreement Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in **semantic-release-cargo** by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. ## Acknowledgments This repository has been forked from [kettleby/semantic-release-rust]. All credit goes to the original author. [kettleby/semantic-release-rust]:
Commit count: 1202

cargo fmt