name: Lint
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: lint-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
jobs:
clippy:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
features: ["", encryption]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- name: Checkout provable-contracts (path dep)
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with:
repository: paiml/provable-contracts
path: provable-contracts
- name: Symlink provable-contracts for Cargo path deps
if: runner.os != 'Windows'
run: ln -sf "$GITHUB_WORKSPACE/provable-contracts" "$GITHUB_WORKSPACE/../provable-contracts"
- name: Symlink provable-contracts (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: New-Item -ItemType Junction -Path "$env:GITHUB_WORKSPACE\..\provable-contracts" -Target "$env:GITHUB_WORKSPACE\provable-contracts" -Force
- name: Install Rust toolchain
run: rustup show
- name: Cache cargo
uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: lint-${{ runner.os }}-${{ matrix.features }}-${{ hashFiles('**/Cargo.lock') }}
- name: Generate contract assertions — pv codegen (unix)
if: runner.os != 'Windows'
run: |
if ! command -v pv >/dev/null 2>&1; then
cargo install provable-contracts-cli --locked || true
fi
PV=$(command -v pv 2>/dev/null || true)
if [ -z "$PV" ]; then
echo "::warning::pv not found — skipping contract generation"
else
PC_CONTRACTS="$GITHUB_WORKSPACE/../provable-contracts/contracts"
if [ -f src/lib.rs ] && grep -q 'mod generated_contracts' src/lib.rs && [ ! -f src/generated_contracts.rs ]; then
if [ -d "$PC_CONTRACTS" ]; then
"$PV" codegen "$PC_CONTRACTS" -o src/generated_contracts.rs || true
elif [ -d contracts ]; then
"$PV" codegen contracts/ -o src/generated_contracts.rs || true
fi
fi
for src_dir in crates/*/src */src; do
if [ -d "$src_dir" ] && [ -f "$src_dir/lib.rs" ] && grep -q 'mod generated_contracts' "$src_dir/lib.rs" && [ ! -f "$src_dir/generated_contracts.rs" ]; then
member_dir=$(dirname "$src_dir")
if [ -d "$PC_CONTRACTS" ]; then
"$PV" codegen "$PC_CONTRACTS" -o "$src_dir/generated_contracts.rs" || true
elif [ -d "$member_dir/contracts" ]; then
"$PV" codegen "$member_dir/contracts" -o "$src_dir/generated_contracts.rs" || true
fi
fi
done
fi
- name: Generate contract assertions — pv codegen (windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$pvPath = (Get-Command pv -ErrorAction SilentlyContinue)?.Source
if (-not $pvPath) {
cargo install provable-contracts-cli --locked 2>$null
$pvPath = (Get-Command pv -ErrorAction SilentlyContinue)?.Source
}
if (-not $pvPath) {
Write-Warning "pv not found — skipping contract generation"
} else {
$pcContracts = Join-Path $env:GITHUB_WORKSPACE "..\provable-contracts\contracts"
if ((Test-Path "src\lib.rs") -and (Select-String -Quiet -Pattern 'mod generated_contracts' "src\lib.rs") -and (-not (Test-Path "src\generated_contracts.rs"))) {
if (Test-Path $pcContracts) {
& $pvPath codegen $pcContracts -o src\generated_contracts.rs
} elseif (Test-Path "contracts") {
& $pvPath codegen contracts\ -o src\generated_contracts.rs
}
}
foreach ($srcDir in (Get-ChildItem -Path "crates\*\src","*\src" -Directory -ErrorAction SilentlyContinue)) {
$libRs = Join-Path $srcDir "lib.rs"
$genRs = Join-Path $srcDir "generated_contracts.rs"
if ((Test-Path $libRs) -and (Select-String -Quiet -Pattern 'mod generated_contracts' $libRs) -and (-not (Test-Path $genRs))) {
$memberDir = Split-Path $srcDir -Parent
$memberContracts = Join-Path $memberDir "contracts"
if (Test-Path $pcContracts) {
& $pvPath codegen $pcContracts -o $genRs
} elseif (Test-Path $memberContracts) {
& $pvPath codegen $memberContracts -o $genRs
}
}
}
}
- name: Clippy
shell: bash
run: |
if [ -n "${{ matrix.features }}" ]; then
cargo clippy --all-targets --features ${{ matrix.features }} -- -D warnings
else
cargo clippy --all-targets -- -D warnings
fi
- name: Rustfmt
run: cargo fmt --all -- --check