name: Release
on:
push:
branches:
- main
- dev
tags:
- "v*.*.*"
pull_request:
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-musl
runner: ubuntu-22.04
- target: i686-unknown-linux-musl
runner: ubuntu-22.04
- target: aarch64-unknown-linux-musl
runner: ubuntu-22.04-arm
- target: armv7-unknown-linux-musleabihf
runner: ubuntu-22.04-arm
- target: x86_64-pc-windows-msvc
runner: windows-latest
- target: i686-pc-windows-msvc
runner: windows-latest
- target: aarch64-pc-windows-msvc
runner: windows-latest
- target: aarch64-apple-darwin
runner: macos-latest
- target: x86_64-apple-darwin
runner: macos-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@1.94
with:
targets: ${{ matrix.target }}
- name: Install armhf cross-linker
if: matrix.target == 'armv7-unknown-linux-musleabihf'
run: sudo apt-get install -y gcc-arm-linux-gnueabihf
- name: Build binary
run: cargo build --locked --release --target ${{ matrix.target }} --features cli
env:
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER: arm-linux-gnueabihf-gcc
- name: Rename binary (unix)
if: matrix.runner != 'windows-latest'
run: |
mkdir -p dist
cp target/${{ matrix.target }}/release/wiiload dist/wiiload-${{ matrix.target }}
- name: Rename binary (windows)
if: matrix.runner == 'windows-latest'
shell: pwsh
run: |
New-Item -Path "dist" -ItemType Directory -Force
Copy-Item -Path "target\${{ matrix.target }}\release\wiiload.exe" -Destination "dist\wiiload-${{ matrix.target }}.exe"
- name: Upload binary
uses: actions/upload-artifact@v7
with:
name: dist-${{ matrix.target }}
path: dist/*
release:
name: Create GitHub Release
if: github.ref_type == 'tag'
runs-on: ubuntu-slim
needs: [build]
steps:
- name: Download distributables
uses: actions/download-artifact@v8
with:
path: dist
pattern: dist-*
merge-multiple: true
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: dist/*
prerelease: ${{ contains(env.VERSION_NAME, 'alpha') || contains(env.VERSION_NAME, 'beta') || contains(env.VERSION_NAME, 'rc') }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}