name: Build, Test, and Publish
on: [push, pull_request]
jobs:
cargo-build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- run: cargo build
cargo-fmt:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Rust Toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all -- --check
cargo-clippy:
runs-on: ubuntu-latest
needs: cargo-build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Rust Toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- run: cargo clippy --all-targets --all-features -- -Dclippy::all -Dclippy::pedantic
cargo-doc:
runs-on: ubuntu-latest
needs: cargo-build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- run: cargo doc --no-deps
cargo-test:
runs-on: ubuntu-latest
needs: cargo-build
services:
cryptol-remote-api:
image: ghcr.io/weaversa/cryptol-remote-api-max-occupancy:latest
credentials:
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
ports:
- 8080:8080
options: -v ${{ github.workspace }}:/home/cryptol
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- run: cargo test --all-targets
env:
CRYPTOL_SERVER_URL: http://0.0.0.0:8080
crates_io_publish:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs: [cargo-fmt, cargo-clippy, cargo-doc, cargo-test]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- run: cargo publish --token ${CRATES_IO_TOKEN}
env:
CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}