Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 27 additions & 0 deletions .cargo/audit.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# RUSTSEC-2026-0049: CRL revocation checking bug in rustls-webpki 0.101.7.
#
# Background: CRL (Certificate Revocation List) checking is an optional TLS
# feature where a client fetches a list of revoked certificates from URLs
# embedded in the cert itself, to confirm it hasn't been invalidated since
# issuance. This is distinct from normal certificate validation.
#
# The bug: when a cert lists multiple CRL distribution point URLs, only the
# first URL is checked; the rest are silently ignored. This matters only when
# CRL checking is enabled AND the UnknownStatusPolicy is set to Allow (meaning
# "if I can't determine revocation status, accept the cert anyway"). With that
# combination, a revoked certificate from a compromised CA could be accepted.
#
# Why this does not affect Commit-Boost: the vulnerable code path is never
# reached because no code in this codebase enables CRL checking at all.
# TLS is used in four places: (1) relay communication via reqwest with
# rustls-tls uses default CA validation with no CRL configured; (2) the signer
# server presents a TLS certificate but does not check client revocation;
# (3) the signer client pins a single self-signed certificate via
# add_root_certificate — CRL is irrelevant for self-signed certs; (4) the Dirk
# remote signer uses mTLS with a custom CA but again no CRL. In all cases the
# buggy CRL code in rustls-webpki is never invoked.
#
# Blocked on sigp/lighthouse upgrading past v8.0.1 without a compilation
# regression (SseEventSource missing cfg guard in eth2 error.rs).
[advisories]
ignore = ["RUSTSEC-2026-0049"]
4 changes: 2 additions & 2 deletions .github/workflows/release-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ on:
pull_request:
types: [closed]
branches: [main]
paths: ['.releases/**']
paths: [".releases/**"]

concurrency:
group: release-gate
Expand Down Expand Up @@ -40,7 +40,7 @@ jobs:

- uses: actions/setup-python@v6
with:
python-version: '3.x'
python-version: "3.x"

- name: Install Python deps
run: pip install pyyaml
Expand Down
107 changes: 88 additions & 19 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
workflow_dispatch:
inputs:
tag:
description: 'Release tag (e.g. v1.2.3)'
description: "Release tag (e.g. v1.2.3)"
required: true
type: string

Expand Down Expand Up @@ -83,20 +83,14 @@ jobs:
- amd64
- arm64
name:
- commit-boost-cli
- commit-boost-pbs
- commit-boost-signer
- commit-boost
include:
- target: amd64
package-suffix: x86-64
- target: arm64
package-suffix: arm64
- name: commit-boost-cli
target-crate: cli
- name: commit-boost-pbs
target-crate: pbs
- name: commit-boost-signer
target-crate: signer
- name: commit-boost
target-crate: commit-boost
runs-on: ubuntu-latest
steps:
- name: Checkout code
Expand Down Expand Up @@ -150,7 +144,7 @@ jobs:
path: |
${{ matrix.name }}-${{ inputs.tag }}-linux_${{ matrix.package-suffix }}.tar.gz

# Builds the arm64 binaries for Darwin, for all 3 crates, natively
# Builds the arm64 binary for Darwin natively
build-binaries-darwin:
needs: [resolve-tag]
timeout-minutes: 60
Expand All @@ -162,9 +156,7 @@ jobs:
# - x86_64-apple-darwin
- aarch64-apple-darwin
name:
- commit-boost-cli
- commit-boost-pbs
- commit-boost-signer
- commit-boost
include:
# - target: x86_64-apple-darwin
# os: macos-latest-large
Expand Down Expand Up @@ -252,7 +244,7 @@ jobs:
uses: actions/download-artifact@v4
with:
path: ./artifacts
pattern: "commit-boost-*"
pattern: "commit-boost*"

- name: Extract binaries
run: |
Expand Down Expand Up @@ -305,7 +297,7 @@ jobs:
uses: actions/download-artifact@v4
with:
path: ./artifacts
pattern: "commit-boost-*"
pattern: "commit-boost*"

- name: Sign all binaries with Sigstore
uses: sigstore/gh-action-sigstore-python@v3.0.0
Expand All @@ -318,7 +310,7 @@ jobs:
name: signed-${{ inputs.tag }}
path: ./artifacts/**/*.sigstore*

# Creates a draft release on GitHub with the binaries
# Creates a release on GitHub with the binaries
finalize-release:
needs:
- build-binaries-linux
Expand All @@ -335,7 +327,13 @@ jobs:
uses: actions/download-artifact@v4
with:
path: ./artifacts
pattern: "commit-boost-*"
pattern: "commit-boost*"

- name: Download signatures
uses: actions/download-artifact@v4
with:
path: ./artifacts
pattern: "signatures-${{ github.ref_name }}*"

- name: Download signed artifacts
uses: actions/download-artifact@v4
Expand All @@ -352,4 +350,75 @@ jobs:
tag_name: ${{ inputs.tag }}
name: ${{ inputs.tag }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}

# Fast-forwards stable (full release) or beta (RC) to the new tag.
# Runs after all artifacts are built and the draft release is created,
# so stable/beta are never touched if any part of the pipeline fails.
fast-forward-branch:
needs:
- finalize-release
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v1
id: app-token
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}

- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}

- name: Configure git
run: |
git config user.name "commit-boost-release-bot[bot]"
git config user.email "commit-boost-release-bot[bot]@users.noreply.github.com"

- name: Fast-forward beta branch (RC releases)
if: contains(github.ref_name, '-rc')
run: |
git checkout beta
git merge --ff-only "${{ github.ref_name }}"
git push origin beta

- name: Fast-forward stable branch (full releases)
if: "!contains(github.ref_name, '-rc')"
run: |
git checkout stable
git merge --ff-only "${{ github.ref_name }}"
git push origin stable

# Deletes the tag if any job in the release pipeline fails.
# This keeps the tag and release artifacts in sync — a tag should only
# exist if the full pipeline completed successfully.
# stable/beta are never touched on failure since fast-forward-branch
# only runs after finalize-release succeeds.
#
# Note: if finalize-release specifically fails, a draft release may already
# exist on GitHub pointing at the now-deleted tag and will need manual cleanup.
cleanup-on-failure:
needs:
- build-binaries-linux
- build-binaries-darwin
- sign-binaries
- build-and-push-pbs-docker
- build-and-push-signer-docker
- finalize-release
- fast-forward-branch
runs-on: ubuntu-latest
if: failure()
steps:
- uses: actions/create-github-app-token@v1
id: app-token
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}

- uses: actions/checkout@v4
with:
token: ${{ steps.app-token.outputs.token }}

- name: Delete tag
run: git push origin --delete ${{ github.ref_name }}
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ targets.json
.idea/
logs
.vscode/
certs/

# Nix
.direnv/
.devenv/
devenv.*
devenv.lock
.devenv.flake.nix
.envrc

# Generated from testnet
kurtosis-dump

# Python (release scripts under .github/workflows/release/)
__pycache__/
Expand Down
2 changes: 2 additions & 0 deletions .releases/v0.9.7-rc1.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
commit: "cd5b788f27f92335f9373ea1c43356dcd72aa0f8"
reason: "This is a release candidate to test out the updated Commit-Boost release process"
Loading
Loading