name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
schedule:
- cron: "58 7 * * 3"
jobs:
fmt:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: fmt
toolchain: nightly
components: rustfmt
- run: cargo fmt --all -- --check
check:
strategy:
matrix:
toolchain:
- "1.48"
- stable
- nightly
name: "Check/${{ matrix.toolchain }}"
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: check
toolchain: ${{ matrix.toolchain }}
components: clippy
- name: Check
run: cargo check --package utcnow --all-targets
- name: Lint
run: cargo clippy --package utcnow --all-targets -- -D warnings
test:
strategy:
matrix:
toolchain:
- "1.48"
- stable
- nightly
platform:
- ubuntu-20.04
- windows-2022
- macos-12
name: "Test/${{ matrix.toolchain }} (${{ matrix.platform }})"
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: test
toolchain: ${{ matrix.toolchain }}
- name: Test library
run: cargo test --workspace -- --show-output
- name: Test library (no-default-features)
run: cargo test --workspace --no-default-features -- --show-output
- name: Run example
run: |
cargo run --example minimal
date +%s.%9N
- name: Run example (no-default-features)
run: |
cargo run --example minimal --no-default-features
date +%s.%9N
test-wasm:
runs-on: ubuntu-20.04
name: "Test WebAssembly"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: wasm
toolchain: stable
target: wasm32-unknown-unknown
- name: Install Node
uses: actions/setup-node@v3
with:
node-version: 14
- name: Install wasm-pack
run: which wasm-pack || cargo install wasm-pack
- name: Build and run example
run: |
wasm-pack test --node
date +%s.%9N
run-wasi:
runs-on: ubuntu-20.04
name: "Run WASI"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: wasi
toolchain: stable
target: wasm32-wasi
- name: Install wasmtime
run: curl https://wasmtime.dev/install.sh -sSf | bash
- name: Build example
run: cargo build --target wasm32-wasi --example minimal
- name: Run example
run: |
~/.wasmtime/bin/wasmtime target/wasm32-wasi/debug/examples/minimal.wasm
date +%s.%9N
cross-run-test:
strategy:
matrix:
target:
- wasm32-unknown-emscripten
runs-on: ubuntu-20.04
name: "Test ${{ matrix.target }}"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
id: actions-rs
uses: ./.github/actions/setup-rust
with:
key: cross-run-test
toolchain: stable
target: ${{ matrix.target }}
- name: Install cross
run: which cross || cargo install cross
- name: Lint
run: cross clippy --target ${{ matrix.target }} --workspace -- -D warnings
- name: Test library
run: cross test --target ${{ matrix.target }} --workspace -- --show-output
- name: Test library (no-default-features)
run: cross test --target ${{ matrix.target }} --workspace --no-default-features -- --show-output
cross-execute:
strategy:
matrix:
target:
- i686-unknown-linux-musl
- x86_64-unknown-linux-musl
runs-on: ubuntu-20.04
name: "Test ${{ matrix.target }}"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
id: actions-rs
uses: ./.github/actions/setup-rust
with:
key: cross-run-test
toolchain: stable
target: ${{ matrix.target }}
- name: Install cross
run: which cross || cargo install cross
- name: Lint
run: cross clippy --target ${{ matrix.target }} --workspace -- -D warnings
- name: Test library
run: cross test --target ${{ matrix.target }} --workspace -- --show-output
- name: Test library (no-default-features)
run: cross test --target ${{ matrix.target }} --workspace --no-default-features -- --show-output
- name: Run example
run: |
cargo run --example minimal
date +%s.%9N
- name: Run example (no-default-features)
run: |
cargo run --example minimal --no-default-features
date +%s.%9N
cross-no-execute:
strategy:
matrix:
target:
- thumbv7neon-linux-androideabi
- x86_64-linux-android
- x86_64-unknown-freebsd
- x86_64-unknown-netbsd
runs-on: ubuntu-20.04
name: "Build for ${{ matrix.target }}"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
id: actions-rs
uses: ./.github/actions/setup-rust
with:
key: cross-no-execute
toolchain: stable
target: ${{ matrix.target }}
- name: Install cross
run: which cross || cargo install cross
- name: Lint
run: cross clippy --target ${{ matrix.target }} --workspace -- -D warnings
- name: Build library
run: cross build --target ${{ matrix.target }} --examples
- name: Build library (no-default-features)
run: cross build --target ${{ matrix.target }} --examples --no-default-features
cross-ios:
strategy:
matrix:
target:
- aarch64-apple-ios
- aarch64-apple-ios-sim
- x86_64-apple-darwin
- x86_64-apple-ios
runs-on: macos-12
name: "Build for ${{ matrix.target }}"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
id: actions-rs
uses: ./.github/actions/setup-rust
with:
key: cross-macos
toolchain: stable
target: ${{ matrix.target }}
- name: Install cross
run: which cross || cargo install cross
- name: Lint
run: cross clippy --target ${{ matrix.target }} --workspace -- -D warnings
- name: Build library
run: cross build --target ${{ matrix.target }} --examples
- name: Build library (no-default-features)
run: cross build --target ${{ matrix.target }} --examples --no-default-features
cross-build-lib-only:
strategy:
matrix:
target:
- x86_64-fuchsia
- x86_64-pc-solaris
- x86_64-unknown-illumos
- x86_64-unknown-redox
runs-on: ubuntu-20.04
name: "Build for ${{ matrix.target }}"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
id: actions-rs
uses: ./.github/actions/setup-rust
with:
key: cross-build-lib-only
toolchain: stable
target: ${{ matrix.target }}
- name: Install cross
run: which cross || cargo install cross
- name: Lint
run: cross clippy --target ${{ matrix.target }} --workspace -- -D warnings
- name: Build library
run: cross build --target ${{ matrix.target }} --workspace
- name: Build library (no-default-features)
run: cross build --target ${{ matrix.target }} --workspace --no-default-features
minimum-versions:
name: "Minimal versions"
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: minimum-versions
toolchain: nightly
- name: Update lockfile
run: cargo generate-lockfile -Zminimal-versions
- name: Test
run: cargo test --all-targets -- --show-output
doc:
name: "Documentation"
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: name
toolchain: nightly
components: rust-docs
- run: RUSTDOCFLAGS="-D warnings --cfg docsrs" cargo doc --package utcnow --all-features --no-deps
audit:
name: "Cargo audit"
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
key: audit
- run: cargo update
- name: Audit
uses: actions-rs/audit-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
devskim:
name: DevSkim
runs-on: ubuntu-20.04
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Run DevSkim scanner
uses: microsoft/DevSkim-Action@v1
- name: Upload DevSkim scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: devskim-results.sarif