name: Release
on:
workflow_dispatch:
push:
tags:
- "v*.*.*"
jobs:
build:
permissions:
contents: write
name: test ${{ matrix.job.target }}
runs-on: ${{ matrix.job.os }}
strategy:
matrix:
job:
- { os: ubuntu-latest , target: x86_64-unknown-linux-gnu , extension: "" , archive: tar ,archive_extension: .tar.gz }
- { os: ubuntu-latest , target: x86_64-unknown-linux-musl , extension: "" , archive: tar ,archive_extension: .tar.gz }
- { os: ubuntu-latest , target: armv7-unknown-linux-gnueabihf , extension: "" , archive: tar ,archive_extension: .tar.gz }
- { os: ubuntu-latest , target: armv7-unknown-linux-musleabihf , extension: "" , archive: tar ,archive_extension: .tar.gz }
- { os: ubuntu-latest , target: aarch64-unknown-linux-gnu , extension: "" , archive: tar ,archive_extension: .tar.gz }
- { os: ubuntu-latest , target: aarch64-unknown-linux-musl , extension: "" , archive: tar ,archive_extension: .tar.gz }
- { os: macos-latest , target: x86_64-apple-darwin , extension: "" , archive: tar ,archive_extension: .tar.gz }
- { os: windows-latest , target: x86_64-pc-windows-msvc , extension: ".exe" , archive: zip ,archive_extension: .zip }
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set Toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Rust Cache
uses: Swatinem/rust-cache@v2
- name: Install cross
uses: taiki-e/install-action@cross
- name: Install cargo-make
uses: taiki-e/install-action@cargo-make
- name: Build
run: cargo make build --release --target ${{ matrix.job.target }}
- name: Extract crate information
shell: bash
run: |
echo "PROJECT_NAME=$(sed -n 's/^name = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV
- name: rename binary
shell: bash
run: |
mv target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}{,-${{ matrix.job.target }}${{ matrix.job.extension }}}
- name: archive binary
uses: thedoctor0/zip-release@0.7.5
with:
type: ${{ matrix.job.archive }}
directory: target/${{ matrix.job.target }}/release
path: ${{ env.PROJECT_NAME }}-${{ matrix.job.target }}${{ matrix.job.extension }}
filename: ${{ env.PROJECT_NAME }}-${{ matrix.job.target }}${{ matrix.job.archive_extension }}
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}-${{ matrix.job.target }}${{ matrix.job.archive_extension }}
asset_name: ${{ env.PROJECT_NAME }}-${{ github.ref_name }}-${{ matrix.job.target }}${{ matrix.job.archive_extension }}
tag: ${{ github.ref }}
overwrite: true
publish:
needs: [build]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set Toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Rust Cache
uses: Swatinem/rust-cache@v2
- run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}