wiiload 0.4.0

A minimal wiiload implementation in rust
Documentation
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 }}