name: Release
on:
push:
tags:
- v*
concurrency:
group: release-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: write
id-token: write
jobs:
build-artifacts:
name: Build and Test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 with:
toolchain: stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 - name: Build
run: cargo build --locked
- name: Test
run: cargo test --locked
create-release:
name: Publish GitHub Release
needs:
- build-artifacts
runs-on: ubuntu-latest
environment: release
permissions:
contents: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with:
fetch-depth: 0
- name: Create GitHub release
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
generate_release_notes: true
prerelease: ${{ contains(github.ref_name, '-') }}
make_latest: ${{ !contains(github.ref_name, '-') }}
- name: Trigger release notes workflow
env:
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
run: |
gh workflow run release-notes.yml \
--field tag="${{ github.ref_name }}"
publish-crate:
name: Publish to crates.io
needs:
- create-release
runs-on: ubuntu-latest
environment: release
permissions:
contents: read
id-token: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 with:
toolchain: stable
- name: Cache cargo artifacts
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 - name: Authenticate with crates.io
uses: rust-lang/crates-io-auth-action@b7e9a28eded4986ec6b1fa40eeee8f8f165559ec id: crates-io-auth
- name: Publish unfmt_macros
run: cargo publish --locked -p unfmt_macros
env:
CARGO_REGISTRY_TOKEN: ${{ steps.crates-io-auth.outputs.token }}
- name: Publish unfmt
run: |
sleep 30
cargo publish --locked -p unfmt
env:
CARGO_REGISTRY_TOKEN: ${{ steps.crates-io-auth.outputs.token }}