keep-active 0.1.2

Keep your computer awake and active
Documentation
name: Release

on:
  workflow_dispatch: {}
  push:
    tags:
      - v[0-9].*

jobs:
  release:
    name: Release
    strategy:
      matrix:
        include:
          - os: windows-2022
            target: x86_64-pc-windows-msvc
          - os: ubuntu-22.04
            target: x86_64-unknown-linux-gnu
          - os: macos-12
            target: x86_64-apple-darwin
          - os: macos-12
            target: aarch64-apple-darwin

    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v3

      - name: Setup Rust Toolchain
        uses: actions-rust-lang/setup-rust-toolchain@v1

      - name: Install target
        run: rustup target add ${{ matrix.target }}
        if: contains(fromJSON('["x86_64-unknown-linux-gnu", "aarch64-apple-darwin"]'), matrix.target)

      - name: Install libxdo-dev
        if: matrix.target == 'x86_64-unknown-linux-gnu'
        run: sudo apt-get update && sudo apt-get install libxdo-dev

      - name: Build
        run: cargo build --verbose --locked -F bin --release --target ${{ matrix.target }}

      - name: Package
        shell: bash
        run: |
          shopt -s extglob
          staging="keep-active-${{ github.head_ref || github.ref_name }}-${{ matrix.target }}"
          mkdir $staging
          cp target/${{ matrix.target }}/release/keep-active@(|.exe) $staging/
          cp README.md CHANGELOG.md LICENSE $staging/
          tar zcf $staging.tar.gz $staging
          echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV

      - uses: actions/upload-artifact@v3
        with:
          name: release
          path: ${{ env.ASSET }}

      - name: Release
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          draft: true
          files: ${{ env.ASSET }}

  publish-crate:
    needs: [release] # This job depends on the successful completion of the 'release' job
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/') # Only runs this job if the push is a tag
    steps:
      - uses: actions/checkout@v3

      - name: Setup Rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          profile: minimal # Only install what's necessary

      - name: Publish to crates.io
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} # Use the secret token
        run: cargo publish --token $CARGO_REGISTRY_TOKEN