name: Release crate on: release: types: [published] jobs: release: name: Publish to crates.io and create GitHub Release runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Cache cargo registry and git index uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Build and test run: cargo test --workspace --verbose - name: Install cargo-edit and set crate version id: set_version run: | # install cargo-edit (provides `cargo set-version`) cargo install cargo-edit --locked --force TAG="${{ github.event.release.tag_name }}" # strip a leading 'v' if present VERSION="${TAG#v}" cargo set-version "$VERSION" --workspace # expose the version for later steps echo "version=$VERSION" >> $GITHUB_OUTPUT - name: Publish to crates.io env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} run: | if [ -z "$CARGO_REGISTRY_TOKEN" ]; then echo "CARGO_REGISTRY_TOKEN is not set. Set it in repository secrets to publish to crates.io" exit 1 fi cargo publish --token "$CARGO_REGISTRY_TOKEN" --allow-dirty - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: tag_name: ${{ github.ref_name }} name: Release ${{ steps.set_version.outputs.version }} body: | This release publishes the crate version `${{ steps.set_version.outputs.version }}` to crates.io: https://crates.io/crates/schafkopf-logic/${{ steps.set_version.outputs.version }} Git tag: ${{ github.ref_name }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}