utcnow 0.2.7

Get the current unixtime in a no-std context
Documentation
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