name: Debian Release
on:
push:
tags:
- "v*"
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
permissions:
contents: write
jobs:
build-deb:
name: Build Debian Package (${{ matrix.deb-arch }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- deb-arch: amd64
rust-target: x86_64-unknown-linux-gnu
linker: ""
apt-packages: ""
- deb-arch: arm64
rust-target: aarch64-unknown-linux-gnu
linker: aarch64-linux-gnu-gcc
apt-packages: gcc-aarch64-linux-gnu libc6-dev-arm64-cross
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install cross linker
if: matrix.apt-packages != ''
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.apt-packages }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.rust-target }}
- name: Cache Cargo
uses: Swatinem/rust-cache@v2
- name: Install cargo-deb
run: cargo install cargo-deb --locked
- name: Build Debian package
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: ${{ matrix.linker }}
run: cargo deb --target ${{ matrix.rust-target }} --output target/debian/${{ matrix.deb-arch }} --locked
- name: Upload package artifact
uses: actions/upload-artifact@v4
with:
name: debian-package-${{ matrix.deb-arch }}
path: target/debian/${{ matrix.deb-arch }}/*.deb
if-no-files-found: error
github-release:
name: Upload Debian Packages to GitHub Release
runs-on: ubuntu-latest
needs: build-deb
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Download package artifacts
uses: actions/download-artifact@v4
with:
pattern: debian-package-*
path: dist
merge-multiple: true
- name: Upload package to GitHub Release
uses: softprops/action-gh-release@v2
with:
files: dist/*.deb
generate_release_notes: true