clock-hash 1.0.0

ClockHash-256: Consensus hash function for ClockinChain
Documentation
name: CI

on:
  push:
    branches: [ main, master ]
  pull_request:
    branches: [ main, master ]

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    name: Test
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
          - os: macos-latest
            target: x86_64-apple-darwin
          - os: windows-latest
            target: x86_64-pc-windows-msvc

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable
      with:
        targets: ${{ matrix.target }}

    - name: Cache dependencies
      uses: Swatinem/rust-cache@v2

    - name: Run tests
      run: cargo test --target ${{ matrix.target }}

    - name: Run tests (no_std)
      run: cargo test --target ${{ matrix.target }} --no-default-features --features no_std

    - name: Run tests (no SIMD)
      run: cargo test --target ${{ matrix.target }} --features no_std,std --no-default-features

  msrv:
    name: MSRV
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Install Rust toolchain (MSRV)
      uses: dtolnay/rust-toolchain@master
      with:
        toolchain: 1.70.0

    - name: Cache dependencies
      uses: Swatinem/rust-cache@v2

    - name: Run tests (MSRV)
      run: cargo test

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable
      with:
        components: rustfmt, clippy

    - name: Cache dependencies
      uses: Swatinem/rust-cache@v2

    - name: Check formatting
      run: cargo fmt --all -- --check

    - name: Run clippy
      run: cargo clippy --all-targets --all-features -- -D warnings

    - name: Run clippy (no_std)
      run: cargo clippy --all-targets --no-default-features --features no_std -- -D warnings

  security:
    name: Security Audit
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable

    - name: Install cargo-audit
      run: cargo install cargo-audit

    - name: Cache dependencies
      uses: Swatinem/rust-cache@v2

    - name: Run security audit
      run: cargo audit

  fuzz:
    name: Fuzzing
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@nightly

    - name: Cache dependencies
      uses: Swatinem/rust-cache@v2

    - name: Install cargo-fuzz
      run: cargo install cargo-fuzz

    - name: Build fuzz targets
      run: |
        cd fuzz
        cargo fuzz build

    - name: Run fuzz tests (comprehensive)
      run: |
        cd fuzz
        # Run fuzzing for longer periods with multiple strategies
        timeout 300 cargo fuzz run clockhash256_fuzz -- -max_total_time=240 -dict=fuzz.dict
      continue-on-error: true

    - name: Run fuzz tests with regression corpus
      run: |
        cd fuzz
        # Test against known regression cases
        if [ -d "fuzz/corpus/clockhash256_fuzz" ]; then
          cargo fuzz run clockhash256_fuzz fuzz/corpus/clockhash256_fuzz -- -runs=10000
        fi
      continue-on-error: true

    - name: Generate and test minimal reproducers
      run: |
        cd fuzz
        # Generate minimal test cases from crashes (if any)
        cargo fuzz run clockhash256_fuzz -- -max_total_time=30 -minimize_crash=1
      continue-on-error: true

  docs:
    name: Documentation
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable

    - name: Cache dependencies
      uses: Swatinem/rust-cache@v2

    - name: Check documentation
      run: cargo doc --no-deps --document-private-items

    - name: Check documentation (no_std)
      run: cargo doc --no-deps --document-private-items --no-default-features --features no_std

  bench:
    name: Benchmarks
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable

    - name: Cache dependencies
      uses: Swatinem/rust-cache@v2

    - name: Run benchmarks (check compilation)
      run: cargo bench --no-run