Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
630b065
clarify raw script semantics and classify surface mismatches
cursoragent Mar 15, 2026
07fecf8
add deterministic bundler library and compatibility scanning
cursoragent Mar 15, 2026
686b2fc
add profile-gated regexp compatibility through runtime init
cursoragent Mar 15, 2026
3692941
add chess.js bundled reuse fixtures and parity tests
cursoragent Mar 15, 2026
95c5b19
fix quickjs submodule pin and docs origin
cursoragent Mar 15, 2026
30a6237
add P13 architecture docs and feature-flag quickjs pin
cursoragent Mar 15, 2026
86057a2
add module-pack builder API and v2 artifact validation scaffolding
cursoragent Mar 15, 2026
82f0a5e
introduce deterministic-builder package and align P14 docs
cursoragent Mar 15, 2026
da7b9df
emit compatibility reports and program artifacts from module-pack bui…
cursoragent Mar 15, 2026
17e3801
accept ProgramArtifact.v2 script mode in evaluate pipeline
cursoragent Mar 15, 2026
a1563c6
add shared execution profile registry and wire runtime checks
cursoragent Mar 15, 2026
737e4fa
add module-pack runtime execution path for ProgramArtifact v2
cursoragent Mar 15, 2026
221b3f7
add module-pack smoke parity fixtures for node and browser
cursoragent Mar 15, 2026
12cf629
add native module-pack fixture assertions with gas and tape
cursoragent Mar 15, 2026
5d9610f
migrate compatibility fixtures to compat-general profile
cursoragent Mar 15, 2026
224c8e9
enable deterministic promise job draining for compat profiles
cursoragent Mar 15, 2026
f3d937b
add async promise and queueMicrotask parity fixtures
cursoragent Mar 15, 2026
b18c858
enable compat-profile console shim through host emit
cursoragent Mar 15, 2026
92284b6
enable compat-profile stable sort with parity fixtures
cursoragent Mar 15, 2026
0540599
add dv2 byte-string codec foundation APIs
cursoragent Mar 15, 2026
9d6f120
add quickjs dv2 codec entrypoints and plan updates
cursoragent Mar 15, 2026
4dabc2b
wire Host.v2 DV2 bytes across runtime boundaries
cursoragent Mar 15, 2026
44e024a
add binary library compatibility fixtures and parity checks
cursoragent Mar 15, 2026
4645fa4
add initial blue-quickjs CLI command suite
cursoragent Mar 16, 2026
4554492
Add source-map remapping and richer CLI diagnostics
cursoragent Mar 16, 2026
c5e2736
Add parity report runner for cross-environment validation
cursoragent Mar 16, 2026
e20bf7e
Extend parity report with gas-delta aware compare modes
cursoragent Mar 16, 2026
73b5e11
Gate native harness tests with parity report snapshots
cursoragent Mar 16, 2026
8c3abf2
Add gas delta baseline enforcement for parity report
cursoragent Mar 16, 2026
929e2e2
Support strict parity checks with gas delta baseline normalization
cursoragent Mar 16, 2026
beb697f
Add gas trace delta diagnostics to parity report
cursoragent Mar 16, 2026
c390ddd
Summarize gas trace deltas in parity reports
cursoragent Mar 16, 2026
e387cf7
Add parity-eval mode for native script parity checks
cursoragent Mar 16, 2026
d3ee621
Normalize deterministic allocator model and refresh gas baselines
cursoragent Mar 16, 2026
e710f8f
Add traced versus residual gas delta analysis
cursoragent Mar 16, 2026
88aa845
Break down allocation and residual gas drift in reports
cursoragent Mar 16, 2026
fc1bfd0
Remove duplicate pre-eval GC checkpoint in harness main
cursoragent Mar 16, 2026
ac79e9e
Add residual signature and profile analytics to parity reports
cursoragent Mar 16, 2026
d4bbbb6
Align parity gas tracing across runtimes
cursoragent Mar 16, 2026
ff1cb94
Reduce cross-runtime allocation gas delta drift
cursoragent Mar 16, 2026
72a1668
Further reduce cross-runtime gas delta maxima
cursoragent Mar 16, 2026
1167cad
docs: define strict gas parity release policy
cursoragent Mar 16, 2026
ce74575
feat: add gasVersion pins and generated gas spec docs
cursoragent Mar 16, 2026
3428598
chore: bump quickjs submodule gas version
cursoragent Mar 16, 2026
9a61f69
feat: add gas charge tape diagnostics to parity tooling
cursoragent Mar 16, 2026
43a9537
feat: expose requested vs charged allocation tracing
cursoragent Mar 16, 2026
68a73c2
test: assert allocationRequestedBytes in gas trace
cursoragent Mar 16, 2026
fc31270
feat: switch to canonical allocation gas baselines
cursoragent Mar 16, 2026
a31fc35
feat: add configurable high-capacity charge tape diagnostics
cursoragent Mar 16, 2026
61e49d1
chore: refresh gas baselines after allocation class rollout
cursoragent Mar 16, 2026
6b20d37
feat: extend canonical allocation coverage and refresh gas baselines
cursoragent Mar 16, 2026
c16f651
chore: bump gas spec to v5 and refresh parity baselines
cursoragent Mar 16, 2026
fb11424
chore: bump gas schedule v6 and refresh parity baselines
cursoragent Mar 16, 2026
7e33a28
chore: refresh gas baselines for expanded unknown-allocation floor
cursoragent Mar 16, 2026
8a64f22
feat: add charge-tape per-site delta hotspot summaries
cursoragent Mar 16, 2026
2990741
Tune deterministic gas model and refresh baselines
cursoragent Mar 16, 2026
15232ee
Adopt gas schedule v8 and refresh strict parity baselines
cursoragent Mar 16, 2026
82ff85c
Expand gas-equivalence subsystem boundary fixtures
cursoragent Mar 16, 2026
ff75cd1
Add exact OOG boundary search gas fixture tests
cursoragent Mar 16, 2026
14a6fe1
Gate harness parity tests on raw strict match
cursoragent Mar 16, 2026
2a3cc0c
Mark strict parity gate progress in implementation plan
cursoragent Mar 16, 2026
031d9eb
Add browser-node OOG boundary parity checks
cursoragent Mar 16, 2026
be4dbfd
Document consensus OOG boundary parity coverage
cursoragent Mar 16, 2026
c1e78e3
Expand OOG boundary parity checks to full gas corpus
cursoragent Mar 16, 2026
0be4de4
Document boundary parity checks in release checklist
cursoragent Mar 16, 2026
9004833
Mark strict parity gate complete in implementation plan
cursoragent Mar 16, 2026
2a3ae08
Add signed reproducibility report archival helper
cursoragent Mar 16, 2026
bbb0245
Archive strict parity report artifacts in release workflow
cursoragent Mar 16, 2026
d094dfe
Enforce strict parity checks in release workflow
cursoragent Mar 16, 2026
becc62e
Add expected execution profile pin validation
cursoragent Mar 16, 2026
2b06941
Require expected execution profile in release mode
cursoragent Mar 16, 2026
215b933
Harden release workflow strict parity gate coverage
cursoragent Mar 16, 2026
8abbdb6
docs: reconcile runtime/profile state wording
cursoragent Mar 16, 2026
22d6f5f
release: make native parity checks diagnostic by default
cursoragent Mar 16, 2026
3eb63d2
fix: use UTF-8 byte ordering for module-pack hashing
cursoragent Mar 16, 2026
88166c1
fix: enforce canonical dependencyIntegrity format
cursoragent Mar 16, 2026
54e6cf9
ci: add consensus reproducibility report and gas-spec checks
cursoragent Mar 16, 2026
2019e69
examples: scaffold corpus map and add module-pack demos
cursoragent Mar 16, 2026
750a73c
feat: add CLI parity and reproducibility helper commands
cursoragent Mar 16, 2026
2fb9505
examples: add standalone source corpus and coverage checks
cursoragent Mar 16, 2026
24f20b4
fix: stabilize typecheck and native parity baselines
cursoragent Mar 16, 2026
16473a7
docs: add release readiness evidence report
cursoragent Mar 16, 2026
57a0444
chore: unblock full lint matrix and refresh evidence report
cursoragent Mar 17, 2026
f6ecc80
docs: link examples and readiness report from README
cursoragent Mar 17, 2026
0f01e68
feat: add canonical example corpus fixture mapping
cursoragent Mar 17, 2026
1b3b8f8
test: add smoke-web example corpus coverage gate
cursoragent Mar 17, 2026
f0c542f
ci: upload consensus signature sidecar artifacts
cursoragent Mar 18, 2026
dac4e82
docs: add workload certification phase plan
cursoragent Mar 18, 2026
3a55a44
feat: scaffold ecosystem certifier app and runners
cursoragent Mar 18, 2026
d7bc044
chore: ignore playwright test output artifacts
cursoragent Mar 18, 2026
15baba0
feat: add downstream tarball consumer proof workflow
cursoragent Mar 18, 2026
379b5d8
feat: expand ecosystem compatibility matrix corpus
cursoragent Mar 18, 2026
7e78c0d
ci: integrate workload certification docs and workflows
cursoragent Mar 18, 2026
e571eb6
feat: add OOG and repeatability certification harnesses
cursoragent Mar 18, 2026
90f6771
feat: add optional native diagnostic in consumer repro
cursoragent Mar 18, 2026
8acbe8b
ci: compare builder determinism matrix artifacts
cursoragent Mar 18, 2026
f131875
feat: add shared certifier parity and soak helpers
cursoragent Mar 18, 2026
9780ded
test: add certifier e2e coverage for parity boundaries
cursoragent Mar 18, 2026
af82054
test: add flagship parity and fixture catalog modules
cursoragent Mar 18, 2026
f6d5526
docs: convert README to release landing and add freshness checks
cursoragent Mar 18, 2026
7152763
feat: generate verifiable release evidence and harden certification m…
cursoragent Mar 18, 2026
d10d218
docs: add governance, provenance, and operator guides
cursoragent Mar 18, 2026
1dba9fe
feat: expand workload certification depth and soak coverage
cursoragent Mar 19, 2026
0fa2ef5
docs: add guided learning path
cursoragent Mar 21, 2026
bf33c32
feat: add evidence-backed playground
cursoragent Mar 21, 2026
2b2b0c6
chore: tighten release polish checks
cursoragent Mar 21, 2026
ca2d984
fix: smooth playground local startup
cursoragent Mar 21, 2026
9e51eaa
fix: harden mac emsdk setup
Mar 21, 2026
91539c4
fix: prefer host python for emsdk
Mar 21, 2026
1d0a074
fix: avoid conda python in emsdk setup
Mar 21, 2026
eed0ee8
fix: auto-init quickjs submodule
Mar 21, 2026
3b3b2b7
The blue-quickjs-cli should not emit only declaration, but full code
robert-matusewicz Apr 23, 2026
6c72e73
Fix the five step setup flow.
robert-matusewicz Apr 23, 2026
429fba4
Change the approach for managing QuickJS changes required for Blue
robert-matusewicz Apr 24, 2026
972e457
ci: remove stale quickstart flags and submodule checkout from workflows
robert-matusewicz Apr 24, 2026
2b4b891
fix: Make `pnpm exec nx affected -t lint` pass
robert-matusewicz Apr 24, 2026
be95114
fix: Fix `pnpm exec nx affected -t typecheck`
robert-matusewicz Apr 24, 2026
6cd304c
fix(build): make QuickJS source preparation work in CI
robert-matusewicz Apr 24, 2026
096b5e9
fix: pnpm nx run quickjs-wasm-build:build
robert-matusewicz Apr 24, 2026
a52630a
fix(ci): run certifier Playwright tests with PLAYWRIGHT_BROWSER
robert-matusewicz Apr 24, 2026
8abe509
fix(ci): pack public tarballs without pnpm filter recursion
robert-matusewicz Apr 24, 2026
b9645ef
fix(ci): generate pack manifests without pnpm pack --json
robert-matusewicz Apr 24, 2026
c9a76cb
fix(ci): isolate npm tarball installs from pnpm env in consumer proof
robert-matusewicz Apr 24, 2026
b642170
fix(ci): use npm for consumer-proof tarball verification steps
robert-matusewicz Apr 24, 2026
750ce71
fix(ci): avoid pruning consumer-proof tarball installs after setup
robert-matusewicz Apr 24, 2026
0cb89e4
fix(ci): build public packages before consumer-proof packaging
robert-matusewicz Apr 24, 2026
9ffc1d0
fix(ci): let quickjs wasm build bootstrap emsdk in consumer-proof matrix
robert-matusewicz Apr 24, 2026
f3e4d82
fix(ci): install emsdk only for linux consumer-proof builds
robert-matusewicz Apr 24, 2026
dcf29a9
fix(ci): load deterministic bundler source directly in certifier scripts
robert-matusewicz Apr 24, 2026
45a51ff
test: migrate native harness coverage into JS suites and expand deter…
robert-matusewicz Apr 24, 2026
04f8747
chore: fix lint and formatting issues across runtime and harness configs
robert-matusewicz Apr 24, 2026
392b625
feat: drop node 20 support
robert-matusewicz Apr 24, 2026
8948a4b
fix: normalize MSYS-style paths in quickjs-wasm-build metadata genera…
robert-matusewicz Apr 24, 2026
07f5267
Fix broken build for main job
robert-matusewicz Apr 27, 2026
685089b
bypass cache in ci.yml to narrow down the issue
robert-matusewicz Apr 27, 2026
537b718
Update playground files
robert-matusewicz Apr 27, 2026
140c431
Update playground screent
robert-matusewicz Apr 27, 2026
8569048
Redo the documentation to make it more readable and shorter
robert-matusewicz Apr 27, 2026
5d98963
Remove unusefull steps from ci
robert-matusewicz Apr 27, 2026
b75a764
Remove standalone regexp execution profile
robert-matusewicz Apr 29, 2026
7577a9b
Include deterministic-builder in public package proof
robert-matusewicz Apr 30, 2026
2ef22b2
Refresh release-readiness evidence report
robert-matusewicz Apr 30, 2026
b917134
Guard workspace TypeScript project references
robert-matusewicz Apr 30, 2026
5e0e0d1
reject unsupported CLI ABI pairs
robert-matusewicz Apr 30, 2026
59eda85
Clean whitespace checks for QuickJS patches
robert-matusewicz Apr 30, 2026
dd750f3
Vendor QuickJS base archive for source prep
robert-matusewicz Apr 30, 2026
f01c33c
Add GA readiness guard coverage
robert-matusewicz Apr 30, 2026
2c510cc
Fix failing test
robert-matusewicz Apr 30, 2026
c50255b
Fix linter issues
robert-matusewicz Apr 30, 2026
3266948
Remove blank line at docs/gas-schedule.md
robert-matusewicz May 1, 2026
e243c83
Gate critical coverage in release checks
robert-matusewicz May 1, 2026
450c39e
Tune critical coverage gate
robert-matusewicz May 1, 2026
91cceaf
Quickjs-runtime production test scope leak
robert-matusewicz May 2, 2026
6034506
refresh release readiness evidence
robert-matusewicz May 2, 2026
634ecb9
Fix deterministic scanner for node builtin named re-exports
robert-matusewicz May 4, 2026
61cdf22
Reject malformed CLI gas-version values
robert-matusewicz May 4, 2026
4c13cad
fix deterministic bundler member-call compatibility scan
robert-matusewicz May 4, 2026
a8b01a8
blue-quickjs/libs/quickjs-runtime/src/lib/deterministic-init.ts
robert-matusewicz May 4, 2026
0c7328e
validate deterministic bundler execution profiles at build time
robert-matusewicz May 4, 2026
b8f3488
scan tree-shaken bundle output for compatibility
robert-matusewicz May 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
vendor/quickjs-patches/series/*.patch whitespace=-blank-at-eol,-blank-at-eof,-space-before-tab
75 changes: 71 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive

- uses: pnpm/action-setup@v4
name: Install pnpm
Expand Down Expand Up @@ -45,20 +44,88 @@ jobs:

- run: pnpm install --frozen-lockfile

- name: Validate docs links
uses: lycheeverse/lychee-action@v2
with:
args: >
--root-dir .
--offline
--no-progress
README.md
'docs/**/*.md'
examples/README.md
fail: true

- name: Run release evidence unit tests
run: pnpm release-evidence:test

- name: Install emsdk (pinned 3.1.56)
run: bash tools/scripts/setup-emsdk.sh

- name: Verify QuickJS source reconstruction
run: |
pnpm quickjs-source:test
bash tools/scripts/check-quickjs-source-prep.sh

- name: Verify generated gas schedule docs are in sync
run: |
pnpm gas-spec:test
node tools/gas-spec/render-gas-artifacts.mjs --check

- name: Reset Nx state (just in case)
run: pnpm exec nx reset

- name: Clear TypeScript build state
run: |
find libs apps tools -name '*.tsbuildinfo' -delete
rm -rf libs/*/out-tsc apps/*/out-tsc tools/*/out-tsc

- uses: nrwl/nx-set-shas@v4

# Prepend any command with "nx-cloud record --" to record its logs to Nx Cloud
# - run: pnpm exec nx-cloud record -- echo Hello World
- run: pnpm exec nx affected -t lint test build typecheck
- run: NX_DAEMON=false NX_NO_CLOUD=true pnpm exec nx affected -t lint test build typecheck --skip-nx-cache --output-style=stream

- name: Run critical coverage threshold gate
run: NX_DAEMON=false NX_NO_CLOUD=true pnpm test:coverage:critical --skip-nx-cache --output-style=stream

- name: Install Playwright browsers (Chromium)
run: pnpm exec playwright install --with-deps chromium
- name: Upload critical coverage artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: critical-vitest-coverage
path: |
libs/quickjs-runtime/test-output/vitest/coverage
libs/deterministic-bundler/test-output/vitest/coverage
libs/deterministic-builder/test-output/vitest/coverage
libs/abi-manifest/test-output/vitest/coverage
tools/blue-quickjs-cli/test-output/vitest/coverage
apps/ecosystem-certifier/test-output/vitest/coverage
if-no-files-found: ignore

- name: Run native harness suites
run: |
pnpm nx test quickjs-native-harness
pnpm nx run quickjs-native-harness:test-legacy

- name: Verify generated playground data is fresh
run: pnpm playground:check-generated

- name: Install Playwright browsers (Chromium + Firefox)
run: pnpm exec playwright install --with-deps chromium firefox

- name: Run smoke-web e2e
run: pnpm nx run smoke-web:e2e

- name: Run ecosystem certifier e2e
run: pnpm nx run ecosystem-certifier:e2e

- name: Run BlueQuickjs playground e2e
run: pnpm nx run bluequickjs-playground:e2e

- name: Generate workload certification sanity artifacts
run: |
node apps/ecosystem-certifier/scripts/check-builder-determinism.mjs --out-dir artifacts/workload-certification-ci
node apps/ecosystem-certifier/scripts/archive-workload-certification-report.mjs --out-dir artifacts/workload-certification-ci
node apps/ecosystem-certifier/scripts/run-oog-boundary-certification.mjs --out-dir artifacts/workload-certification-ci --fixtures green-semver,green-markdown-it
node apps/ecosystem-certifier/scripts/run-seeded-property-corpus.mjs --out-dir artifacts/workload-certification-ci --seed-count 12
2 changes: 0 additions & 2 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,12 @@ jobs:
with:
ref: refs/tags/${{ inputs.tag }}
fetch-depth: 0
submodules: recursive

- name: 'Checkout repository (push: current ref)'
if: ${{ github.event_name != 'workflow_dispatch' }}
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive

- uses: pnpm/action-setup@v4
name: Install pnpm
Expand Down
207 changes: 205 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,12 @@ jobs:
release:
name: Release
runs-on: ubuntu-latest
timeout-minutes: 10
timeout-minutes: 45
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
ref: ${{ github.ref }}
token: ${{ secrets.RELEASE_PAT }}

Expand Down Expand Up @@ -51,9 +50,169 @@ jobs:
- name: Install emsdk (pinned 3.1.56)
run: bash tools/scripts/setup-emsdk.sh

- name: Verify QuickJS source reconstruction
run: |
pnpm quickjs-source:test
bash tools/scripts/check-quickjs-source-prep.sh

- name: Verify generated gas schedule docs are in sync
run: node tools/gas-spec/render-gas-artifacts.mjs --check

- name: Generate SBOM and dependency license reports
run: |
pnpm release-evidence:sbom -- --out-dir artifacts/security
pnpm release-evidence:licenses -- --out-dir artifacts/security

- name: Install Playwright browsers (Chromium + Firefox)
run: pnpm exec playwright install --with-deps chromium firefox

- name: Print Environment Info
run: pnpm exec nx report

- name: Run strict parity release gates (consensus executors)
run: |
pnpm nx test quickjs-runtime
pnpm nx test smoke-node
pnpm nx test test-harness
pnpm nx test bluequickjs-playground
pnpm nx run smoke-web:e2e
pnpm nx test ecosystem-certifier
pnpm nx run ecosystem-certifier:e2e
pnpm nx run bluequickjs-playground:e2e

- name: Generate consensus reproducibility report artifacts (Chromium + Firefox)
run: |
node tools/consensus-parity/scripts/archive-consensus-reproducibility-report.mjs --out-dir artifacts/reproducibility-consensus/chromium --browser chromium
node tools/consensus-parity/scripts/archive-consensus-reproducibility-report.mjs --out-dir artifacts/reproducibility-consensus/firefox --browser firefox

- name: Generate workload certification artifacts
run: |
node apps/ecosystem-certifier/scripts/check-builder-determinism.mjs --out-dir artifacts/workload-certification
node apps/ecosystem-certifier/scripts/archive-workload-certification-report.mjs --out-dir artifacts/workload-certification
node apps/ecosystem-certifier/scripts/generate-compatibility-delta-report.mjs --current-dir artifacts/workload-certification --out-dir artifacts/workload-certification
node apps/ecosystem-certifier/scripts/run-oog-boundary-certification.mjs --out-dir artifacts/workload-certification
node apps/ecosystem-certifier/scripts/run-seeded-property-corpus.mjs --out-dir artifacts/workload-certification --seed-count 80
node apps/ecosystem-certifier/scripts/run-repeatability-certification.mjs --out-dir artifacts/workload-certification --iterations 100 --flagship-iterations 40

- name: Build public packages for packaging checks
run: pnpm nx run-many -t build --projects abi-manifest,dv,execution-profiles,quickjs-wasm-constants,quickjs-wasm,quickjs-runtime,deterministic-bundler,deterministic-builder

- name: Validate public package release alignment
run: |
pnpm workload:check-public-package-coverage
pnpm workload:check-public-package-versions
pnpm workload:check-pack-manifests -- --out-dir artifacts/consumer-proof/pack-manifests

- name: Run Verdaccio publish/install rehearsal (primary)
run: pnpm publish-rehearsal:verdaccio -- --out-dir artifacts/consumer-proof/verdaccio

- name: Generate downstream tarball reproducibility artifacts (secondary)
run: |
node tools/workload-certification/pack-public-tarballs.mjs --out-dir artifacts/consumer-proof/tarballs
pnpm --dir e2e/consumer-proof-app run install:tarballs -- --tarball-dir ../../artifacts/consumer-proof/tarballs
node e2e/consumer-proof-app/node_modules/playwright/cli.js install --with-deps chromium
node e2e/consumer-proof-app/scripts/reproducibility-report.mjs

- name: Run native diagnostics (non-blocking)
continue-on-error: true
run: |
pnpm nx build quickjs-native-harness
pnpm nx test quickjs-native-harness
pnpm nx run quickjs-native-harness:test-legacy

- name: Generate native diagnostic reproducibility report artifact (non-blocking)
continue-on-error: true
run: node tools/quickjs-native-harness/scripts/archive-reproducibility-report.mjs

- name: Synthesize release evidence bundle
run: pnpm release-evidence:synthesize -- --out-dir artifacts/release-evidence

- name: Validate docs links
uses: lycheeverse/lychee-action@v2
with:
args: >
--root-dir .
--offline
--no-progress
README.md
'docs/**/*.md'
examples/README.md
fail: true

- name: Validate generated release evidence and docs freshness
run: |
EXPECTED_DATE=$(node -e "const fs=require('fs');console.log(JSON.parse(fs.readFileSync('artifacts/release-evidence/release-evidence-manifest.json','utf8')).date)")
pnpm docs:check-freshness -- --expected-branch "${GITHUB_REF_NAME}" --expected-date "${EXPECTED_DATE}"
pnpm playground:check-generated
pnpm release-evidence:synthesize -- --out-dir artifacts/release-evidence --check
pnpm release-evidence:verify -- --evidence-dir artifacts/release-evidence --expected-branch "${GITHUB_REF_NAME}" --expected-date "${EXPECTED_DATE}"

- name: Upload reproducibility artifacts
uses: actions/upload-artifact@v4
with:
name: consensus-reproducibility-report
path: |
artifacts/reproducibility-consensus/**/*.json*
artifacts/reproducibility-consensus/**/*.md*
artifacts/reproducibility-consensus/**/*.sig
if-no-files-found: error

- name: Upload native diagnostic reproducibility artifacts
uses: actions/upload-artifact@v4
with:
name: native-diagnostic-reproducibility-report
path: |
artifacts/reproducibility/*.json*
artifacts/reproducibility/*.md*
artifacts/reproducibility/*.sig
if-no-files-found: warn

- name: Upload workload certification artifacts
uses: actions/upload-artifact@v4
with:
name: workload-certification-artifacts
path: artifacts/workload-certification/*
if-no-files-found: error

- name: Upload consumer-proof artifacts
uses: actions/upload-artifact@v4
with:
name: consumer-proof-artifacts
path: |
artifacts/consumer-proof/tarballs/tarball-manifest.json
artifacts/consumer-proof/pack-manifests/pack-manifest.json
artifacts/consumer-proof/verdaccio/*.json
artifacts/consumer-proof/verdaccio/*.log
e2e/consumer-proof-app/reports/*.json*
if-no-files-found: error

- name: Upload release evidence bundle
uses: actions/upload-artifact@v4
with:
name: release-evidence-bundle
path: |
artifacts/release-evidence/release-evidence-summary.json
artifacts/release-evidence/release-evidence-summary.json.sha256
artifacts/release-evidence/release-evidence-summary.json.sig
artifacts/release-evidence/release-evidence-summary.md
artifacts/release-evidence/release-evidence-summary.md.sha256
artifacts/release-evidence/release-evidence-summary.md.sig
artifacts/release-evidence/release-evidence-manifest.json
artifacts/release-evidence/release-evidence-manifest.json.sha256
artifacts/release-evidence/release-evidence-manifest.json.sig
artifacts/release-evidence/inputs/*
if-no-files-found: error

- name: Upload security artifacts
uses: actions/upload-artifact@v4
with:
name: release-security-artifacts
path: |
artifacts/security/sbom.cdx.json
artifacts/security/license-report.json
artifacts/security/license-report.md
if-no-files-found: error

- name: Configure Git
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
Expand All @@ -63,3 +222,47 @@ jobs:
- name: Release
run: pnpm exec nx release --skip-publish --first-release
shell: bash

verify-release-evidence:
name: Verify release evidence bundle
runs-on: ubuntu-latest
needs:
- release
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: pnpm/action-setup@v4
with:
version: 9.8.0
run_install: false

- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'pnpm'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Download release evidence bundle
uses: actions/download-artifact@v4
with:
name: release-evidence-bundle
path: artifacts/release-evidence

- name: Verify evidence checksums and signatures
run: |
EXPECTED_DATE=$(node -e "const fs=require('fs');console.log(JSON.parse(fs.readFileSync('artifacts/release-evidence/release-evidence-manifest.json','utf8')).date)")
pnpm release-evidence:verify -- --evidence-dir artifacts/release-evidence --expected-branch "${GITHUB_REF_NAME}" --expected-date "${EXPECTED_DATE}"

- name: Assert tamper detection fails verification
run: |
cp -R artifacts/release-evidence artifacts/release-evidence-tampered
node -e "const fs=require('fs');fs.appendFileSync('artifacts/release-evidence-tampered/inputs/consumer-reproducibility.json','\n')"
EXPECTED_DATE=$(node -e "const fs=require('fs');console.log(JSON.parse(fs.readFileSync('artifacts/release-evidence-tampered/release-evidence-manifest.json','utf8')).date)")
if pnpm release-evidence:verify -- --evidence-dir artifacts/release-evidence-tampered --expected-branch "${GITHUB_REF_NAME}" --expected-date "${EXPECTED_DATE}"; then
echo "tamper verification unexpectedly passed"
exit 1
fi
Loading
Loading