resource-tracker 0.1.6

Lightweight Linux resource and GPU tracker for system and process monitoring.
name: Release

on:
  push:
    tags:
      - "*"

permissions:
  contents: write

jobs:
  build-binaries:
    name: Build Linux binary (${{ matrix.arch_label }})
    runs-on: ${{ matrix.runner }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - runner: ubuntu-latest
            arch_label: amd64
            rust_target: x86_64-unknown-linux-gnu.2.17
            artifact_target_dir: x86_64-unknown-linux-gnu
          - runner: ubuntu-24.04-arm
            arch_label: arm64
            rust_target: aarch64-unknown-linux-gnu.2.17
            artifact_target_dir: aarch64-unknown-linux-gnu

    steps:
      - name: Checkout
        uses: actions/checkout@v6.0.2

      - name: Install Rust toolchain (stable)
        uses: dtolnay/rust-toolchain@stable

      - name: Cache cargo dependencies
        uses: Swatinem/rust-cache@v2.9.1

      - name: Install Zig
        uses: mlugg/setup-zig@v2

      - name: Install cargo-zigbuild
        run: cargo install cargo-zigbuild --locked

      - name: Build release binary (glibc 2.17 compatible)
        run: cargo zigbuild --locked --release --target ${{ matrix.rust_target }}

      - name: Package release artifact
        env:
          TAG: ${{ github.ref_name }}
        run: |
          set -euo pipefail
          mkdir -p dist
          archive="resource-tracker-${TAG}-linux-${{ matrix.arch_label }}.tar.gz"
          tar -czf "dist/${archive}" -C "target/${{ matrix.artifact_target_dir }}/release" resource-tracker -C "$GITHUB_WORKSPACE" README.md LICENSE
          sha256sum "dist/${archive}" > "dist/${archive}.sha256"

      - name: Upload build artifacts
        uses: actions/upload-artifact@v7.0.1
        with:
          name: release-linux-${{ matrix.arch_label }}
          path: dist/*

  publish-crate:
    name: Publish crate on crates.io
    runs-on: ubuntu-latest
    needs: build-binaries
    permissions:
      id-token: write
      contents: read
    steps:
      - name: Checkout
        uses: actions/checkout@v6.0.2

      - name: Install Rust toolchain (stable)
        uses: dtolnay/rust-toolchain@stable

      - name: Authenticate with crates.io
        id: auth
        uses: rust-lang/crates-io-auth-action@v1

      - name: Publish crate
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
        run: cargo publish --locked

  github-release:
    name: Publish GitHub Release
    runs-on: ubuntu-latest
    needs:
      - build-binaries
      - publish-crate
    steps:
      - name: Download all artifacts
        uses: actions/download-artifact@v8.0.1
        with:
          path: dist

      - name: Create GitHub release and upload assets
        uses: softprops/action-gh-release@v3.0.0
        with:
          files: |
            dist/**/*.tar.gz
            dist/**/*.sha256