Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
dc77828
feat(etch): add compound graph layout for nested containers
Mar 15, 2026
918e85a
chore: upgrade petgraph 0.6 → 0.7
Mar 15, 2026
c8b847d
feat: v0.2.0 workstreams — LSP server, SCORE schema, docs/CI audit fixes
Mar 17, 2026
7154b70
docs: dashboard component kit & scalability plan with Playwright E2E
Mar 17, 2026
d619adb
stpa: add H-13/SC-15/UCA-D-3/CC-D-3 for dashboard scalability risk
Mar 17, 2026
45d063f
refactor: split serve.rs (7576 lines) into serve/ module directory
Mar 17, 2026
c986bb1
feat: add draft requirements from OFT and sphinx-needs competitive an…
avrabe Mar 17, 2026
ad4305f
fix(etch/serve): graph scalability — node budget, spawn_blocking, dyn…
Mar 17, 2026
d8b7d17
feat: add AI agent ergonomics features from agent testing feedback
Mar 17, 2026
99bdb6a
feat(etch): add port data model (PortInfo, PortSide, PortType)
Mar 17, 2026
b759ffb
feat(etch): port positioning and edge-to-port snapping
Mar 17, 2026
082b52c
feat(serve): add reusable UI component kit and ViewParams extractor
Mar 17, 2026
f634dd5
feat(etch): SVG port rendering with type colors and direction indicators
Mar 17, 2026
818e908
feat(serve): enhanced STPA view with filter bar, fold/unfold, search
Mar 17, 2026
df63068
feat(etch): add EdgeRouting enum and routing config
Mar 17, 2026
4d59c0e
feat(serve): add ?print=1 mode for clean printable views
Mar 17, 2026
1275586
feat(etch): orthogonal edge routing with obstacle avoidance
Mar 17, 2026
cbe3082
feat(etch): SVG polyline rendering for orthogonal edges
Mar 17, 2026
787aca3
feat(serve): enhanced artifacts view with server-side filter/sort/pag…
Mar 17, 2026
97af54a
feat(etch): interactive HTML wrapper with pan/zoom/selection
Mar 17, 2026
71d6438
feat(serve): enhanced validation and traceability views with filter/s…
Mar 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,16 @@ jobs:
- name: Check supply chain
run: cargo vet --locked || echo "::warning::cargo-vet found unaudited crates — run 'cargo vet' locally"

# ── Kani bounded model checking ────────────────────────────────────
kani:
name: Kani Proofs
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v6
- uses: model-checking/kani-github-action@v1
- run: cargo kani -p rivet-core

# ── MSRV check ──────────────────────────────────────────────────────
msrv:
name: MSRV (1.89)
Expand Down
200 changes: 161 additions & 39 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Release Test Evidence
name: Release

on:
push:
Expand All @@ -12,92 +12,214 @@ env:
CARGO_TERM_COLOR: always

jobs:
test-evidence:
name: Build Test Evidence Bundle
# ── Cross-platform binary builds ──────────────────────────────────────
build-binaries:
name: Build ${{ matrix.target }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
archive: tar.gz
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
archive: tar.gz
cross: true
- target: x86_64-apple-darwin
os: macos-14
archive: tar.gz
- target: aarch64-apple-darwin
os: macos-latest
archive: tar.gz
- target: x86_64-pc-windows-msvc
os: windows-latest
archive: zip
steps:
- uses: actions/checkout@v4

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

- uses: Swatinem/rust-cache@v2
with:
key: release-${{ matrix.target }}

- name: Install cross
if: matrix.cross
run: cargo install cross --git https://github.com/cross-rs/cross

- name: Build (native)
if: ${{ !matrix.cross }}
run: cargo build --release --target ${{ matrix.target }} -p rivet-cli

- name: Build (cross)
if: matrix.cross
run: cross build --release --target ${{ matrix.target }} -p rivet-cli

- name: Strip binary (Unix)
if: runner.os != 'Windows'
run: strip "target/${{ matrix.target }}/release/rivet" 2>/dev/null || true

- name: Package (tar.gz)
if: matrix.archive == 'tar.gz'
env:
TARGET: ${{ matrix.target }}
run: |
VERSION="${GITHUB_REF#refs/tags/}"
ARCHIVE="rivet-${VERSION}-${TARGET}.tar.gz"
mkdir -p staging
cp "target/${TARGET}/release/rivet" staging/
tar -czf "$ARCHIVE" -C staging .
echo "ARCHIVE=$ARCHIVE" >> "$GITHUB_ENV"

- name: Package (zip)
if: matrix.archive == 'zip'
shell: bash
env:
TARGET: ${{ matrix.target }}
run: |
VERSION="${GITHUB_REF#refs/tags/}"
ARCHIVE="rivet-${VERSION}-${TARGET}.zip"
mkdir -p staging
cp "target/${TARGET}/release/rivet.exe" staging/
cd staging && 7z a "../$ARCHIVE" . && cd ..
echo "ARCHIVE=$ARCHIVE" >> "$GITHUB_ENV"

- uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.target }}
path: ${{ env.ARCHIVE }}

# ── Compliance report (HTML export) ───────────────────────────────────
build-compliance:
name: Build compliance report
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2

- name: Generate compliance report
run: |
VERSION="${GITHUB_REF#refs/tags/}"
mkdir -p compliance-report
cargo run --release -- validate > compliance-report/validation.txt 2>&1 || true
cargo run --release -- stats > compliance-report/stats.txt 2>&1
cargo run --release -- export --format html --output compliance-report/artifacts.html 2>&1 || true
tar czf "rivet-${VERSION}-compliance.tar.gz" compliance-report/

- uses: actions/upload-artifact@v4
with:
name: compliance-report
path: rivet-*-compliance.tar.gz

# ── Test evidence bundle ──────────────────────────────────────────────
build-test-evidence:
name: Build test evidence
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@nightly
with:
components: llvm-tools-preview
targets: wasm32-wasip2

- uses: Swatinem/rust-cache@v2

# Install tools: cargo-nextest for JUnit XML, cargo-llvm-cov for coverage
- name: Install cargo-nextest and cargo-llvm-cov
- name: Install tools
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest,cargo-llvm-cov

# ── 1. Test suite with JUnit XML output ─────────────────────────────
- name: Run tests with JUnit XML output
- name: Build spar WASM assets
run: |
git clone --depth 1 https://github.com/pulseengine/spar.git ../spar
npm install -g @bytecodealliance/jco
./scripts/build-wasm.sh ../spar

- name: Run tests with JUnit XML
run: |
mkdir -p test-evidence/test-results
cargo nextest run --all --profile ci
cp target/nextest/ci/junit.xml test-evidence/test-results/junit.xml

# ── 2. Code coverage (LCOV) ────────────────────────────────────────
- name: Generate code coverage (LCOV)
- name: Generate coverage
run: |
mkdir -p test-evidence/coverage
cargo llvm-cov --all-features --workspace --lcov --output-path test-evidence/coverage/lcov.info
cargo llvm-cov report --all-features --workspace > test-evidence/coverage/summary.txt
cargo llvm-cov report --workspace > test-evidence/coverage/summary.txt

# ── 3. Benchmarks (criterion HTML reports) ─────────────────────────
- name: Run criterion benchmarks
- name: Run benchmarks
run: |
cargo bench --bench core_benchmarks -- --output-format=criterion
mkdir -p test-evidence/benchmarks
cp -r target/criterion/* test-evidence/benchmarks/ 2>/dev/null || true

# ── 4. Rivet validate ──────────────────────────────────────────────
- name: Run rivet validate
run: |
mkdir -p test-evidence/validation
set +e
cargo run --release -- validate > test-evidence/validation/validate-output.txt 2>&1
rc=$?
set -e
echo "" >> test-evidence/validation/validate-output.txt
echo "exit_code=${rc}" >> test-evidence/validation/validate-output.txt

# ── 5. Metadata ────────────────────────────────────────────────────
- name: Generate metadata.json
- name: Generate metadata
run: |
TAG="${GITHUB_REF#refs/tags/}"
RUST_VERSION="$(rustc --version)"
OS_INFO="$(uname -srm)"
TIMESTAMP="$(date -u +%Y-%m-%dT%H:%M:%SZ)"

jq -n \
--arg tag "${TAG}" \
--arg commit "${GITHUB_SHA}" \
--arg timestamp "${TIMESTAMP}" \
--arg rust_version "${RUST_VERSION}" \
--arg os "${OS_INFO}" \
--arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg rust_version "$(rustc --version)" \
--arg os "$(uname -srm)" \
'{tag: $tag, commit: $commit, timestamp: $timestamp, rust_version: $rust_version, os: $os}' \
> test-evidence/metadata.json

# ── 6. Package everything ──────────────────────────────────────────
- name: Package test evidence tarball
id: package
- name: Package
run: |
TAG="${GITHUB_REF#refs/tags/}"
ARCHIVE="test-evidence-${TAG}.tar.gz"
tar czf "${ARCHIVE}" test-evidence/
echo "archive=${ARCHIVE}" >> "$GITHUB_OUTPUT"
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
VERSION="${GITHUB_REF#refs/tags/}"
tar czf "rivet-${VERSION}-test-evidence.tar.gz" test-evidence/

# ── 7. Create GitHub Release with asset ────────────────────────────
- name: Create GitHub Release
- uses: actions/upload-artifact@v4
with:
name: test-evidence
path: rivet-*-test-evidence.tar.gz

# ── Create GitHub Release ─────────────────────────────────────────────
create-release:
name: Create GitHub Release
needs: [build-binaries, build-compliance, build-test-evidence]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts

- name: Collect assets
run: |
mkdir -p release
find artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" \) -exec mv {} release/ \;
ls -la release/

- name: Generate checksums
run: |
cd release
sha256sum * > SHA256SUMS.txt
cat SHA256SUMS.txt

- name: Create Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="${{ steps.package.outputs.tag }}"
ARCHIVE="${{ steps.package.outputs.archive }}"

gh release create "${TAG}" \
--title "Release ${TAG}" \
VERSION="${GITHUB_REF#refs/tags/}"
gh release create "$VERSION" \
--title "Rivet $VERSION" \
--generate-notes \
"${ARCHIVE}#Test Evidence (tar.gz)"
release/*
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ repos:
# ── Linting ────────────────────────────────────────────────────
- id: cargo-clippy
name: cargo clippy -D warnings
entry: cargo clippy --all-targets -- -D warnings
entry: cargo +stable clippy --all-targets -- -D warnings
language: system
types: [rust]
pass_filenames: false
Expand All @@ -64,7 +64,7 @@ repos:
# ── Dogfood validation ─────────────────────────────────────
- id: rivet-validate
name: rivet validate (dogfood)
entry: rivet validate --strict
entry: cargo run --release -p rivet-cli -- validate
language: system
pass_filenames: false
files: '(artifacts/.*\.yaml|schemas/.*\.yaml|safety/.*\.yaml|rivet\.yaml)$'
Expand Down
Loading