semantic-release-cargo

Crates.iosemantic-release-cargo
lib.rssemantic-release-cargo
version2.3.74
sourcesrc
created_at2022-12-11 23:31:32.016848
updated_at2024-10-13 22:20:18.081259
descriptionA CLI to integrate Rust into a semantic-release workflow.
homepage
repositoryhttps://github.com/semantic-release-cargo/semantic-release-cargo
max_upload_size
id734553
size256,217
Eric Crosson (EricCrosson)

documentation

README

semantic-release-cargo

Build Status

semantic-release-cargo integrates a cargo-based Rust project with semantic-release. This solves two use cases:

  1. publishing to crates.io, or other alternate crate registries, and
  2. compiling release binaries

Publish to crates.io

After following these instructions, you will have a semantic-release pipeline that publishes your Rust crate to crates.io.

Requirements

If publishing to crates.io, you must set the CARGO_REGISTRY_TOKEN environment variable.

If publishing to an alternate registry, you must set the CARGO_REGISTRIES_<YOUR REGISTRY>_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:

$ 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:

{
  "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.

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

Use

In the first job, use the next-release-version Action to save the next release version as GitHub Actions outputs:

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:

build:
  name: Build
  runs-on: ubuntu-latest
  needs:
    - get-next-version

  steps:
    - name: Checkout
      uses: actions/checkout@v3

    - name: Install semantic-release-cargo
      if: needs.get-next-version.outputs.new-release-published == 'true'
      uses: EricCrosson/install-github-release-binary@v2
      with:
        targets: semantic-release-cargo@2

    - name: Prepare semantic-release for Rust
      if: needs.get-next-version.outputs.new-release-published == 'true'
      run: semantic-release-cargo prepare ${{ needs.get-next-version.outputs.new-release-version }}

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@master

    - name: Cargo build
      run: cargo build --release --target=x86_64-unknown-linux-gnu --all-targets

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 crates.io and create a GitHub Release with precompiled binaries.

See release.yml for a working example.

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.

Commit count: 1467

cargo fmt