Skip to content

ci

ci #545

Workflow file for this run

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 }}