run-cli 0.0.53

A CLI to help you run any command
name: ci

on:
  pull_request:
    paths-ignore: ["docs/**", "**/*.md"]
    branches: ["master"]
  push:
    paths-ignore: ["docs/**", "**/*.md"]
    branches: ["master"]
    tags: ["*.*.*"]
  schedule:
    - cron: "00 00 * * *"

env:
  CARGO_TERM_COLOR: always

jobs:
  prettier:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm ci
      - run: npm run prettier-check

  cargo-fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - run: cargo fmt --all --check --verbose

  cargo-clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - run: cargo clippy --all-targets --all-features --verbose -- --deny warnings

  cargo-test:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo test --all-targets --all-features --verbose

  build-release:
    if: startsWith(github.event.ref, 'refs/tags/')
    needs: [prettier, cargo-fmt, cargo-clippy, cargo-test]
    strategy:
      matrix:
        include:
          # linux
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-latest
            cross: true
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-latest
          - target: i686-unknown-linux-gnu
            os: ubuntu-latest
            cross: true
          # macos
          - target: aarch64-apple-darwin
            os: macos-latest
          - target: x86_64-apple-darwin
            os: macos-latest
          # windows
          - target: x86_64-pc-windows-msvc
            os: windows-latest
          - target: i686-pc-windows-msvc
            os: windows-latest
          # freebsd
          - target: x86_64-unknown-freebsd
            os: ubuntu-latest
            cross: true
    runs-on: ${{ matrix.os }}
    env:
      CARGO: cargo
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          targets: ${{ matrix.target }}
      - if: matrix.cross
        run: |
          cargo install cross --git https://github.com/cross-rs/cross
          echo "CARGO=cross" >> $GITHUB_ENV
      - run: ${{ env.CARGO }} build --release --target ${{ matrix.target }}
      - uses: actions/upload-artifact@v3
        with:
          if-no-files-found: error
          name: ${{ matrix.target }}
          path: |
            ./target/${{ matrix.target }}/release/run*
            !**/*.d

  publish-release:
    needs: [build-release]
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - run: git fetch --force --tags
      - uses: actions/setup-go@v4
      - uses: actions/download-artifact@v3
        with:
          path: ./ci/artifacts
      - uses: goreleaser/goreleaser-action@v4
        with:
          args: release --clean
          workdir: ./ci
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
      - uses: actions/upload-artifact@v3
        with:
          if-no-files-found: error
          name: artifacts.json
          path: ./ci/dist/artifacts.json

  publish-crate:
    needs: [publish-release]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo publish --locked
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_TOKEN }}

  publish-npm:
    needs: [publish-release]
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/download-artifact@v3
        with:
          name: artifacts.json
          path: ./wrappers/node
      - uses: actions/setup-node@v3
        with:
          node-version: "18.x"
          registry-url: "https://registry.npmjs.org"
      - run: npm install -g npm
      - run: npm publish --provenance --access=public
        working-directory: ./wrappers/node
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}