name: Deploy
on:
push:
tags: "*.*.*"
permissions:
contents: write
jobs:
build-and-upload-unix:
name: Build & Upload Unix
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- build: linux
os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- build: linux-arm
os: ubuntu-latest
target: aarch64-unknown-linux-gnu
- build: linux-i686
os: ubuntu-latest
target: i686-unknown-linux-gnu
- build: macos
os: macos-latest
target: x86_64-apple-darwin
- build: macos-arm
os: macos-latest
target: aarch64-apple-darwin
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Get release version
shell: bash
run: echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Build
uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: --release --target ${{ matrix.target }}
- name: Build archive
shell: bash
run: |
binary_name="pose"
bundle_name="$binary_name-${{ env.VERSION }}-${{ matrix.target }}"
tar -czf "$bundle_name.tar.gz" -C "target/${{ matrix.target }}/release" "$binary_name"
echo "ASSET=$bundle_name.tar.gz" >> $GITHUB_ENV
- name: Release
uses: softprops/action-gh-release@v1
with:
draft: true
files: |
${{ env.ASSET }}
build-and-upload-win:
name: Build & Upload Windows
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- build: windows
os: windows-latest
target: x86_64-pc-windows-msvc
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Get release version
shell: bash
run: echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Build
uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: --release --all
- name: Build archive
shell: bash
run: |
binary_name="pose"
bundle_name="$binary_name-${{ env.VERSION }}-${{ matrix.target }}"
mv "target/release/$binary_name.exe" .
7z a "$bundle_name.zip" "$binary_name.exe"
echo "ASSET=$bundle_name.zip" >> $GITHUB_ENV
- name: Release
uses: softprops/action-gh-release@v1
with:
draft: true
files: |
${{ env.ASSET }}
publish-crate:
name: Publish Crate
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: katyo/publish-crates@v2
with:
dry-run: ${{ github.event_name != 'push' }}
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}