ci #545
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |