resource-tracker 0.1.4

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-musl
          - runner: ubuntu-24.04-arm
            arch_label: arm64
            rust_target: aarch64-unknown-linux-musl

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

      - name: Install musl C toolchain for static linking
        run: |
          sudo apt-get update
          sudo apt-get install -y musl-tools

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

      - name: Cache cargo dependencies
        uses: Swatinem/rust-cache@v2.9.1
        with:
          shared-key: musl-${{ matrix.rust_target }}

      - name: Build static release binary (musl)
        run: cargo build --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 }}-musl.tar.gz"
          tar -czf "dist/${archive}" -C "target/${{ matrix.rust_target }}/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