name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
schedule:
- cron: "58 7 * * 3"
jobs:
lint-nightly:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
components: rustfmt,rust-docs
- run: cargo fmt --all -- --check
- run: RUSTDOCFLAGS="-D warnings --cfg docsrs" cargo doc --package utcnow --all-features --no-deps
lint-stable:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
components: clippy
- run: cargo clippy --package utcnow --all-targets -- -D clippy::pedantic
- run: cargo package --package utcnow
check:
strategy:
fail-fast: false
matrix:
toolchain:
- stable
- nightly
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
components: clippy
- run: cargo check --package utcnow --all-targets
- run: cargo clippy --package utcnow --all-targets -- -D warnings
test:
strategy:
fail-fast: false
matrix:
toolchain:
- stable
- nightly
platform:
- ubuntu-latest
- windows-latest
- macos-latest
versions:
- ""
- "-Zminimal-versions"
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
components: clippy
- name: Update lockfile
run: cargo generate-lockfile ${{ matrix.versions }}
env:
RUSTC_BOOTSTRAP: 1
- run: cargo test --workspace -- --show-output
- run: cargo test --workspace --no-default-features -- --show-output
- run: cargo run --example minimal && date +%s.%9N
- run: cargo run --example minimal --no-default-features && date +%s.%9N
test-wasm:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: wasm32-unknown-unknown
components: clippy
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install cargo-deny
uses: taiki-e/install-action@v2
with:
tool: wasm-pack@0.13.0
- run: wasm-pack test --node && date +%s.%9N
- run: cargo clippy --target wasm32-unknown-unknown --package utcnow --all-targets -- -D warnings
- run: cargo clippy --target wasm32-unknown-unknown --package utcnow --all-targets -- -D clippy::pedantic
run-wasi:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: wasm32-wasi
components: clippy
- name: Install wasmtime
uses: taiki-e/install-action@v2
with:
tool: wasmtime-cli@22.0.0
- run: cargo clippy --target wasm32-wasi --package utcnow --all-targets -- -D warnings
- run: cargo clippy --target wasm32-wasi --package utcnow --all-targets -- -D clippy::pedantic
- run: cargo build --target wasm32-wasi --example minimal
- run: wasmtime target/wasm32-wasi/debug/examples/minimal.wasm && date +%s.%9N
cross-run-test:
strategy:
fail-fast: false
matrix:
target:
- wasm32-unknown-emscripten
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: ${{ matrix.target }}
components: clippy
- name: Install cross
uses: taiki-e/install-action@v2
with:
tool: cross@0.2.5
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D warnings
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D clippy::pedantic
- run: cross test --target ${{ matrix.target }} --workspace -- --show-output
- run: cross test --target ${{ matrix.target }} --workspace --no-default-features -- --show-output
cross-execute:
strategy:
fail-fast: false
matrix:
target:
- i686-unknown-linux-musl
- x86_64-unknown-linux-musl
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: ${{ matrix.target }}
components: clippy
- name: Install cross
uses: taiki-e/install-action@v2
with:
tool: cross@0.2.5
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D warnings
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D clippy::pedantic
- run: cross test --target ${{ matrix.target }} --workspace -- --show-output
- run: cross test --target ${{ matrix.target }} --workspace --no-default-features -- --show-output
- run: cross run --target ${{ matrix.target }} --example minimal && date +%s.%9N
- run: cross run --target ${{ matrix.target }} --example minimal --no-default-features && date +%s.%9N
cross-no-execute:
strategy:
fail-fast: false
matrix:
target:
- thumbv7neon-linux-androideabi
- x86_64-linux-android
- x86_64-pc-solaris
- x86_64-unknown-freebsd
- x86_64-unknown-fuchsia
- x86_64-unknown-illumos
- x86_64-unknown-netbsd
- x86_64-unknown-redox
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: ${{ matrix.target }}
components: clippy
- name: Install cross
uses: taiki-e/install-action@v2
with:
tool: cross@0.2.5
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D warnings
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D clippy::pedantic
- run: cross build --target ${{ matrix.target }} --package utcnow --lib
- run: cross build --target ${{ matrix.target }} --package utcnow --lib --no-default-features
cross-ios:
strategy:
fail-fast: false
matrix:
target:
- aarch64-apple-ios
- aarch64-apple-ios-sim
- x86_64-apple-darwin
- x86_64-apple-ios
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: ${{ matrix.target }}
components: clippy
- name: Install cross
uses: taiki-e/install-action@v2
with:
tool: cross@0.2.5
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D warnings
- run: cross clippy --target ${{ matrix.target }} --package utcnow --all-targets -- -D clippy::pedantic
- run: cross build --target ${{ matrix.target }} --examples
- run: cross build --target ${{ matrix.target }} --examples --no-default-features
devskim:
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run DevSkim scanner
uses: microsoft/DevSkim-Action@v1
- name: Upload DevSkim scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: devskim-results.sarif
powerset:
strategy:
fail-fast: false
matrix:
versions:
- ""
- "-Zminimal-versions"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Install hack
uses: taiki-e/install-action@v2
with:
tool: cargo-hack@0.6.20
- run: cargo generate-lockfile ${{ matrix.versions }}
env:
RUSTC_BOOTSTRAP: 1
- run: cargo hack test --feature-powerset --include-features arbitrary,proptest,quickcheck,rkyv,serde
deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v2
typos:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: crate-ci/typos@master
cargo-sort:
name: Check order in Cargo.toml
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: taiki-e/install-action@v2
with:
tool: cargo-sort
- run: cargo sort --check --check-format --grouped