utcnow 0.1.2

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:
  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