name: release
on:
release:
types: [published]
env:
CARGO_TERM_COLOR: always
permissions:
contents: write
jobs:
version:
name: Resolve version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- id: version
run: echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
env:
TAG: ${{ github.event.release.tag_name }}
build:
name: Build (${{ matrix.target }})
needs: version
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-pc-windows-msvc
os: windows-latest
bin: erdify.exe
- target: aarch64-apple-darwin
os: macos-latest
bin: erdify
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
bin: erdify
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}
- name: Install musl tools
if: matrix.target == 'x86_64-unknown-linux-musl'
run: sudo apt-get update && sudo apt-get install -y musl-tools
- name: Set version
shell: bash
run: |
sed -i.bak "s/^version = \".*\"/version = \"${VERSION}\"/" Cargo.toml
rm -f Cargo.toml.bak
cargo update -p erdify-rs
env:
VERSION: ${{ needs.version.outputs.version }}
- name: Build
run: cargo build --release --locked --target ${{ matrix.target }}
- name: Rename binary
shell: bash
run: cp target/${{ matrix.target }}/release/${{ matrix.bin }} erdify-${{ matrix.target }}${{ matrix.bin == 'erdify.exe' && '.exe' || '' }}
- name: Upload release asset
uses: softprops/action-gh-release@v3
with:
files: erdify-${{ matrix.target }}*
publish:
name: Publish to crates.io
needs: [version, build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Set version
run: |
sed -i.bak "s/^version = \".*\"/version = \"${VERSION}\"/" Cargo.toml
rm -f Cargo.toml.bak
cargo update -p erdify-rs
env:
VERSION: ${{ needs.version.outputs.version }}
- name: Publish
run: cargo publish --locked --allow-dirty
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}