img4-dump 3.1.0

Extracts payloads and metadata from Apple IMG4/IM4P/IM4M/IM4R; decrypts with user-supplied IV+Key; optional LZFSE/LZSS decompress.
name: release

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'
  # Allow building (without publishing) from the Actions tab to smoke-test.
  workflow_dispatch: {}

# Needed for softprops/action-gh-release to create the GitHub release.
permissions:
  contents: write

jobs:
  release:
    name: release (${{ matrix.target }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
          - os: macos-latest
            target: aarch64-apple-darwin
          - os: windows-latest
            target: x86_64-pc-windows-msvc
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Rust (stable)
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}

      - name: Build release binary
        run: cargo build --release --locked --features lzfse,lzss --target ${{ matrix.target }}

      - name: Package
        shell: bash
        run: |
          version="${{ github.ref_name }}"
          staging="img4-dump-${version}-${{ matrix.target }}"
          mkdir -p "$staging"
          cp readme.md "$staging/"
          if [ "${{ runner.os }}" = "Windows" ]; then
            cp "target/${{ matrix.target }}/release/img4-dump.exe" "$staging/"
            7z a "$staging.zip" "$staging"
            echo "ASSET=$staging.zip" >> "$GITHUB_ENV"
          else
            cp "target/${{ matrix.target }}/release/img4-dump" "$staging/"
            strip "$staging/img4-dump" || true
            tar czf "$staging.tar.gz" "$staging"
            echo "ASSET=$staging.tar.gz" >> "$GITHUB_ENV"
          fi

      - name: Publish release
        if: startsWith(github.ref, 'refs/tags/')
        uses: softprops/action-gh-release@v2
        with:
          files: ${{ env.ASSET }}
          generate_release_notes: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}