xt 0.21.0

Translate between serialized data formats
Documentation
---
name: Build Release Archives

on:
  workflow_call: {}
  workflow_dispatch: {}

env:
  CARGO_TERM_COLOR: always
  CARGO_ABOUT_VERSION: '0.9.0'

jobs:
  build-doc:
    runs-on: ubuntu-24.04
    steps:
    - name: Checkout
      uses: actions/checkout@v6
    - name: Install cargo-about
      run: |
        version="$CARGO_ABOUT_VERSION"
        slug="cargo-about-$version-x86_64-unknown-linux-musl"
        wget "https://github.com/EmbarkStudios/cargo-about/releases/download/$version/$slug.tar.gz"
        tar -xvf "$slug.tar.gz" --strip-components=1 $slug/cargo-about
        mv cargo-about "$HOME/.cargo/bin/"
    - name: Generate LICENSES.html
      run: make doc/LICENSES.html
    - name: Upload Artifacts
      uses: actions/upload-artifact@v7
      with:
        name: doc
        path: doc

  build-binaries-unix:
    strategy:
      fail-fast: false
      matrix:
        include:
        - { target: aarch64-unknown-linux-musl,     runner: ubuntu-24.04 }
        - { target: armv7-unknown-linux-musleabihf, runner: ubuntu-24.04 }
        - { target: x86_64-unknown-linux-musl,      runner: ubuntu-24.04 }
        - { target: aarch64-apple-darwin,           runner: macos-15 }
        - { target: x86_64-apple-darwin,            runner: macos-15 }
    runs-on: ${{ matrix.runner }}
    env:
      RUSTFLAGS: -C linker=rust-lld
    steps:
    - name: Checkout
      uses: actions/checkout@v6
    - name: Download Toolchain
      run: |
        rustup set profile minimal
        rustup toolchain install stable
        rustup default stable
        rustup target add ${{ matrix.target }}
        rustc --version
    - name: Build
      run: |
        bin="target/${{ matrix.target }}/release-opt/xt"
        make "$bin"
        tar -czvf target.tar.gz "$bin"
    - name: Upload Artifact
      uses: actions/upload-artifact@v7
      with:
        name: target-${{ matrix.target }}
        path: target.tar.gz

  assemble-archives:
    needs:
    - build-doc
    - build-binaries-unix
    runs-on: ubuntu-24.04
    permissions:
      contents: write
      id-token: write
      attestations: write
    steps:
    - name: Checkout
      uses: actions/checkout@v6
    - name: Download Artifacts
      uses: actions/download-artifact@v8
    - name: Assemble Archives
      run: |
        for targetdir in ./target-*; do
          tar -xvf $targetdir/target.tar.gz
          make dist/xt-${targetdir#./target-}.tar.gz
        done
        (cd dist && sha256sum xt-*.tar.gz | tee SHA256SUMS)
    - name: Upload Release Artifacts
      uses: actions/upload-artifact@v7
      with:
        name: release
        path: |
          dist/xt-*.tar.gz
          dist/SHA256SUMS
    - name: Create GitHub Attestation
      uses: actions/attest-build-provenance@v4
      with:
        subject-checksums: dist/SHA256SUMS