diff --git a/.github/workflows/ci-pcf-sig-reference.yml b/.github/workflows/ci-pcf-sig-reference.yml new file mode 100644 index 0000000..aa82027 --- /dev/null +++ b/.github/workflows/ci-pcf-sig-reference.yml @@ -0,0 +1,104 @@ +name: CI / Rust (PCF-SIG Reference) + +on: + push: + branches: [master] + pull_request: + branches: [master] + +env: + CARGO_TERM_COLOR: always + RUSTFLAGS: "-D warnings" + +defaults: + run: + working-directory: reference/PCF-SIG-v1.0 + +jobs: + fmt: + name: rustfmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt + - run: cargo fmt --all -- --check + + clippy: + name: clippy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: clippy + - uses: Swatinem/rust-cache@v2 + with: + workspaces: reference/PCF-SIG-v1.0 + - run: cargo clippy --all-targets --all-features -- -D warnings + + test: + name: test (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + with: + workspaces: reference/PCF-SIG-v1.0 + - run: cargo build --verbose + - run: cargo test --all-targets --verbose + - run: cargo test --doc --verbose + + test-vector: + name: regenerate spec test vector + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + with: + workspaces: reference/PCF-SIG-v1.0 + - name: Build and run the test-vector example + run: cargo run --example gen_testvector -- pcfsig_testvector.bin + - name: Inspect generated test vector + run: | + ls -l pcfsig_testvector.bin + test "$(wc -c < pcfsig_testvector.bin)" = "966" + - uses: actions/upload-artifact@v4 + with: + name: pcf-sig-testvector + path: reference/PCF-SIG-v1.0/pcfsig_testvector.bin + + coverage: + name: code coverage + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + components: llvm-tools-preview + - uses: Swatinem/rust-cache@v2 + with: + workspaces: reference/PCF-SIG-v1.0 + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@cargo-llvm-cov + - name: Generate coverage report (lcov) + run: cargo llvm-cov --all-features --package pcf-sig --lcov --output-path lcov.info + - name: Print coverage summary + run: cargo llvm-cov report + - name: Enforce minimum library coverage + run: | + cargo llvm-cov report --summary-only \ + --ignore-filename-regex 'bin/|examples/|error\.rs' \ + --fail-under-lines 90 \ + --fail-under-functions 90 + - uses: actions/upload-artifact@v4 + with: + name: pcf-sig-coverage-lcov + path: reference/PCF-SIG-v1.0/lcov.info