Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b772cd3
Phase the reviewed binary attestation contract
prk-Jr Oct 22, 2026
be81ca8
Map binary attestation phases to review boundaries
prk-Jr Oct 22, 2026
ca06217
Build and attest phased release binaries
prk-Jr Oct 22, 2026
4dd2171
Document binary verification and release deployment
prk-Jr Oct 22, 2026
3c41de5
Align Phase 1 signing and publication with the reviewed contract
prk-Jr Oct 22, 2026
cb82e4b
Allow the exact GitHub Actions build type reference host
prk-Jr Oct 22, 2026
41896cb
Document Phase 1 compatibility and verification boundaries
prk-Jr Oct 22, 2026
ca902b6
Avoid stale API connections during release verification
prk-Jr Oct 22, 2026
f3a8696
Clarify rehearsed release status and CLI verification
prk-Jr Oct 22, 2026
922c221
Retry transient post-publication verification reads
prk-Jr Oct 22, 2026
ff9f9c4
Document offline verification and completed release rehearsal
prk-Jr Oct 22, 2026
7c7f4b0
Add production Axum assets and release startup checks
prk-Jr Oct 22, 2026
b818b59
Disable rustup self-updates in temporary build homes
prk-Jr Oct 22, 2026
16d6690
Expose pinned compiler binaries in the GNU builder
prk-Jr Oct 22, 2026
937214a
Supply runtime trust data to Axum startup checks
prk-Jr Oct 23, 2026
6824226
Record the seven-binary release rehearsal
prk-Jr Oct 23, 2026
e907e26
Derive immutable release build facts
prk-Jr Oct 23, 2026
72b7e1e
Allow runtime Axum bind address overrides
prk-Jr Oct 23, 2026
81a5a72
Harden release eligibility and artifact validation
prk-Jr Oct 23, 2026
39a769c
Align release documentation and reference-host policy
prk-Jr Oct 23, 2026
e22d700
Reduce startup logging and align runtime port aliases
prk-Jr Oct 23, 2026
2cc39ec
Harden release verification and preflight boundaries
prk-Jr Oct 23, 2026
7a05940
Record rehearsal failure and release recovery checks
prk-Jr Oct 23, 2026
f84ab21
Record the successful binary attestation rehearsal
prk-Jr Oct 23, 2026
149754d
Handle attestation availability and verify published bytes
prk-Jr Oct 23, 2026
f66da48
Record the successful ninth attestation rehearsal
prk-Jr Oct 23, 2026
a501d1b
Clarify final release verification notes (docs-only)
prk-Jr Oct 23, 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
2 changes: 1 addition & 1 deletion .github/workflows/format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ jobs:
node-version: ${{ steps.node-version.outputs.node-version }}

- name: Run shellcheck
run: shellcheck scripts/docs-proposal/*.sh
run: shellcheck scripts/docs-proposal/*.sh scripts/release/phase1-build.sh

- name: Test hunk review builder
run: node --test scripts/docs-proposal/hunks.test.mjs
Expand Down
166 changes: 166 additions & 0 deletions .github/workflows/release-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
name: Release build and signing
on:
workflow_call:
permissions:
contents: read
jobs:
checks:
runs-on: ubuntu-24.04
permissions:
contents: read
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- run: node --test scripts/release/phase1.test.mjs
build:
needs: checks
name: Build ${{ matrix.asset }}
runs-on: ${{ matrix.os }}
timeout-minutes: 90
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
package: trusted-server-adapter-fastly
target: wasm32-wasip1
asset: trusted-server-fastly.wasm
- os: ubuntu-24.04
package: trusted-server-cli
target: x86_64-unknown-linux-gnu
asset: ts-x86_64-unknown-linux-gnu
- os: macos-15
package: trusted-server-cli
target: aarch64-apple-darwin
asset: ts-aarch64-apple-darwin
- os: macos-15-intel
package: trusted-server-cli
target: x86_64-apple-darwin
asset: ts-x86_64-apple-darwin
- os: ubuntu-24.04
package: trusted-server-adapter-axum
target: x86_64-unknown-linux-gnu
asset: trusted-server-axum-x86_64-unknown-linux-gnu
- os: ubuntu-24.04
package: trusted-server-adapter-axum
target: x86_64-unknown-linux-musl
asset: trusted-server-axum-x86_64-unknown-linux-musl
- os: ubuntu-24.04-arm
package: trusted-server-adapter-axum
target: aarch64-unknown-linux-gnu
asset: trusted-server-axum-aarch64-unknown-linux-gnu
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Read pinned toolchains
id: tools
shell: bash
run: |
set -euo pipefail
echo "node=$(awk '$1 == "nodejs" { print $2 }' .tool-versions)" >> "$GITHUB_OUTPUT"
echo "rust=$(sed -n 's/^channel = "\([^"]*\)"/\1/p' rust-toolchain.toml)" >> "$GITHUB_OUTPUT"
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: ${{ steps.tools.outputs.node }}
- name: Install the pinned Rust toolchain without build caches
env:
RUST_VERSION: ${{ steps.tools.outputs.rust }}
BUILD_TARGET: ${{ matrix.target }}
run: rustup toolchain install "$RUST_VERSION" --profile minimal --target "$BUILD_TARGET"
- name: Build and generate the build inventory in a clean environment
shell: bash
env:
BUILD_PACKAGE: ${{ matrix.package }}
BUILD_TARGET: ${{ matrix.target }}
RELEASE_ASSET: ${{ matrix.asset }}
SOURCE_COMMIT: ${{ github.sha }}
RELEASE_VERSION: ${{ github.ref_name }}
run: |
set -euo pipefail
env -i PATH="$PATH" HOME="$HOME" \
CARGO_HOME="${CARGO_HOME:-$HOME/.cargo}" \
RUSTUP_HOME="${RUSTUP_HOME:-$HOME/.rustup}" \
TMPDIR="${TMPDIR:-/tmp}" RUNNER_TEMP="$RUNNER_TEMP" \
SOURCE_COMMIT="$SOURCE_COMMIT" RELEASE_VERSION="$RELEASE_VERSION" \
bash scripts/release/phase1-build.sh "$BUILD_PACKAGE" "$BUILD_TARGET" "$RELEASE_ASSET"
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: release-${{ matrix.asset }}
path: release-assets/*
if-no-files-found: error
retention-days: 7

sign:
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') && vars.RELEASE_PUBLICATION_ENABLED == 'true'
needs: build
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
contents: read
id-token: write
attestations: write
strategy:
fail-fast: false
matrix:
asset:
[
trusted-server-axum-x86_64-unknown-linux-gnu,
trusted-server-axum-x86_64-unknown-linux-musl,
trusted-server-axum-aarch64-unknown-linux-gnu,
trusted-server-fastly.wasm,
ts-aarch64-apple-darwin,
ts-x86_64-apple-darwin,
ts-x86_64-unknown-linux-gnu,
]
steps:
# Only fixed inline checks execute here; never checkout or execute build inputs.
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
with:
name: release-${{ matrix.asset }}
path: release-assets
- name: Validate signing inputs and retain their digests
env:
ASSET: ${{ matrix.asset }}
run: |
set -euo pipefail
cd release-assets
test "$(find . -mindepth 1 -maxdepth 1 | wc -l)" -eq 2
for file in "$ASSET" "$ASSET.spdx.json"; do test -f "$file" && test ! -L "$file" && test -s "$file"; done
sha256sum "$ASSET" "$ASSET.spdx.json" > ../inputs.sha256
- name: Attest SLSA build provenance
id: provenance
uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2
with:
subject-path: |
release-assets/${{ matrix.asset }}
release-assets/${{ matrix.asset }}.spdx.json
- name: Attest the binary's SPDX SBOM
id: sbom
uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2
with:
subject-path: release-assets/${{ matrix.asset }}
sbom-path: release-assets/${{ matrix.asset }}.spdx.json
- name: Retain only this run's real bundles and signed-input digests
env:
ASSET: ${{ matrix.asset }}
PROVENANCE: ${{ steps.provenance.outputs.bundle-path }}
SBOM: ${{ steps.sbom.outputs.bundle-path }}
run: |
set -euo pipefail
(cd release-assets && sha256sum --check ../inputs.sha256)
test -s "$PROVENANCE" && test -s "$SBOM"
mkdir signed-assets
cp "$PROVENANCE" "signed-assets/$ASSET.provenance.sigstore.json"
cp "$SBOM" "signed-assets/$ASSET.sbom.sigstore.json"
cp inputs.sha256 signed-assets/SHA256SUMS
(cd signed-assets && sha256sum "$ASSET.provenance.sigstore.json" "$ASSET.sbom.sigstore.json" >> SHA256SUMS)
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: signed-${{ matrix.asset }}
path: signed-assets/*
if-no-files-found: error
retention-days: 7
Loading
Loading