ptools 0.2.23

Utilities for inspecting Linux processes
---
name: Release

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+*'
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always
  RUSTFLAGS: "-Dwarnings"

concurrency:
  group: release
  cancel-in-progress: true

jobs:
  build:
    name: Build
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-24.04, ubuntu-24.04-arm]
    runs-on: ${{ matrix.os }}
    permissions:
      contents: read
    steps:
      - name: Check out
        uses: actions/checkout@v7.0.1

      - name: Install system dependencies
        run: sudo apt-get update && sudo apt-get install -y libdw-dev libsystemd-dev

      - name: Check formatting
        run: cargo fmt --all -- --check

      - name: Check Markdown
        uses: DavidAnson/markdownlint-cli2-action@v24.2.0

      - name: Run Clippy
        run: cargo clippy --all-targets --all-features

      - name: Build
        run: cargo build --verbose

      - name: Test
        run: cargo test --verbose

  release:
    name: Release
    runs-on: ubuntu-latest
    needs: build
    permissions:
      contents: write
    steps:
      - name: Check out
        uses: actions/checkout@v7.0.1

      - name: Verify tag matches Cargo.toml version
        shell: bash
        id: get_version
        run: |
          tag="${GITHUB_REF_NAME}"
          version="${tag#v}"
          echo "Tag: $tag, Version: $version"
          pkg_version=$(awk -F '"' '/^\[package\]/{p=1} p && $1 ~ /^version = / {print $2; exit}' Cargo.toml)
          if [[ -z "$pkg_version" ]]; then
            echo "Could not read [package].version from Cargo.toml"
            exit 1
          fi
          if [[ "$pkg_version" != "$version" ]]; then
            echo "Version mismatch: Cargo.toml has $pkg_version but tag is $tag"
            exit 1
          fi
          echo "version=$version" >> "$GITHUB_OUTPUT"

      - name: Install system dependencies
        run: sudo apt-get update && sudo apt-get install -y libdw-dev libsystemd-dev

      - name: Install cargo-deb and cargo-generate-rpm
        run: |
          cargo install cargo-deb --locked
          cargo install cargo-generate-rpm --locked

      - name: Build Debian package
        run: cargo deb

      - name: Build RPM package
        run: cargo generate-rpm

      - name: Publish to crates.io
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        run: cargo publish --locked

      - name: Create GitHub Release and upload assets
        uses: softprops/action-gh-release@v3.0.2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: |
            target/debian/*.deb
            target/generate-rpm/*.rpm
          name: ${{ steps.get_version.outputs.version }}
          tag_name: ${{ github.ref_name }}
          generate_release_notes: true
          prerelease: ${{ contains(github.ref_name, '-') }}
          make_latest: true