powerpack 0.7.0

⚡ Supercharge your Alfred workflows by building them in Rust!
Documentation
name: build

on: [push, pull_request]

env:
  CRATE: powerpack

jobs:

  # ---------------------------------------------------------------------------
  # Build
  # ---------------------------------------------------------------------------

  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        toolchain: [stable, beta, nightly]

    env:
      RUSTFLAGS: --deny warnings

    steps:
    - uses: actions/checkout@v4

    - uses: dtolnay/rust-toolchain@master
      with:
        toolchain: ${{ matrix.toolchain }}
        components: clippy, rustfmt

    - name: Rustfmt
      run: cargo fmt -- --check

    - name: Clippy
      continue-on-error: ${{ matrix.toolchain == 'nightly' }}
      run: cargo clippy --workspace --all-targets

    - name: Test
      run: cargo test --workspace

  # ---------------------------------------------------------------------------
  # Check version against tag
  # ---------------------------------------------------------------------------

  prepare:
    needs: build
    if: startsWith(github.ref, 'refs/tags/')

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Calculate version from tag
        id: version
        run: echo "value=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT

      - name: Check tag against package versions
        run: grep '^version = "${{ steps.version.outputs.value }}"$' Cargo.toml

  # ---------------------------------------------------------------------------
  # Publish
  # ---------------------------------------------------------------------------

  publish:
    needs: prepare
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - uses: dtolnay/rust-toolchain@stable

    - name: Publish
      env:
        CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
      run: |
        cargo publish --package powerpack-detach
        cargo publish --package powerpack-env
        cargo publish --package powerpack-logger
        cargo publish --package powerpack-cache
        mv src/main.compile_error.rs src/main.rs
        cargo publish --package powerpack --no-verify --allow-dirty
        mv src/main.rs src/main.compile_error.rs
        cargo publish --package powerpack-cli

  # ---------------------------------------------------------------------------
  # Release
  # ---------------------------------------------------------------------------

  release:
    needs: prepare
    runs-on: macos-latest

    strategy:
      matrix:
        target: [x86_64-apple-darwin, aarch64-apple-darwin]

    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@stable
        with:
          target: ${{ matrix.target }}

      - name: Calculate version from tag
        id: version
        run: echo "value=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT

      - name: Build
        run: cargo build --package powerpack-cli --locked --release --target ${{ matrix.target }}

      - name: Archive
        id: archive
        run: |
          mkdir release
          archive=$CRATE-${{ steps.version.outputs.value }}-${{ matrix.target }}.tar.gz
          cp target/${{ matrix.target }}/release/$CRATE release/$CRATE
          cp LICENSE* release
          cp README.md release
          cd release
          tar cfz "../$archive" -- *
          cd ..
          rm -r release
          echo "path=$archive" >> $GITHUB_OUTPUT

      - uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: ${{ steps.archive.outputs.path }}