secret-tree 0.6.0

Hierarchical secret derivation with Blake2b
Documentation
name: CI

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

env:
  msrv: 1.70.0
  nightly: nightly-2025-11-02

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: stable
          components: rustfmt, clippy
      - name: Install cargo-deny
        uses: baptiste0928/cargo-install@v3
        with:
          crate: cargo-deny
          version: "^0.18"

      - name: Cache cargo build
        uses: actions/cache@v4
        with:
          path: target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-cargo

      - name: Format
        run: cargo fmt --all -- --check --config imports_granularity=Crate --config group_imports=StdExternalCrate
      - name: Clippy
        run: cargo clippy --workspace --all-targets -- -D warnings
      - name: Check dependencies
        run: cargo deny check

      - name: Run tests
        run: cargo test --workspace --all-targets

      - name: Run example
        run: cargo run --no-default-features --example ed25519

  build-msrv:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.msrv }}

      - name: Cache cargo build
        uses: actions/cache@v4
        with:
          path: target
          key: ${{ runner.os }}-msrv-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-msrv-cargo

      - name: Build
        run: cargo build --lib

  # Checks that the crate actually builds without `std`. To do this,
  # we take a target (`thumbv7m-none-eabi`) that does not have `std` support.
  build-nostd:
    needs:
      - build
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ env.nightly }}
          targets: thumbv7m-none-eabi

      - name: Cache cargo build
        uses: actions/cache@v4
        with:
          path: target
          key: ${{ runner.os }}-nostd-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-nostd-cargo

      - name: Build
        run: cargo build --lib --no-default-features --target thumbv7m-none-eabi -Z avoid-dev-deps

  document:
    needs:
      - build
      - build-msrv
      - build-nostd
    if: github.event_name == 'push'
    permissions:
      contents: write
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

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

      - name: Cache cargo build
        uses: actions/cache@v4
        with:
          path: target
          key: ${{ runner.os }}-document-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-document-cargo

      - name: Build docs
        run: cargo doc --no-deps

      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@v4
        with:
          branch: gh-pages
          folder: target/doc
          single-commit: true