name: Release
on:
push:
tags: ["v*"]
permissions:
contents: read
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false
jobs:
package:
name: Verify and package crate
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with:
persist-credentials: false
- name: Install Rust stable
run: rustup toolchain install stable --profile minimal
- name: Verify tag matches crate version
shell: bash
run: |
crate_version="$(cargo +stable metadata --no-deps --format-version 1 | jq -r '.packages[0].version')"
test "${GITHUB_REF_NAME}" = "v${crate_version}"
- name: Run release tests
run: cargo +stable test --all-features --release
- name: Build and verify package
run: cargo +stable package
- name: Upload crate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with:
name: crate
path: target/package/*.crate
if-no-files-found: error
retention-days: 1
release:
name: Create GitHub release
needs: package
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: write
steps:
- name: Download crate
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c with:
name: crate
path: dist
- name: Create GitHub release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: gh release create "${GITHUB_REF_NAME}" dist/*.crate --generate-notes --verify-tag