Add Fork Signer to CI
Prepare CI workflows for a new signer being added via a fork PR. This is a two-phase process because fork PRs can't use repository secrets, so fork-external-live-manual.yml (which runs from main's YAML) must be updated on main first.
If any of these are unknown, ask the user for: signer display name, Rust feature name, Rust integration test function name, TypeScript package name (if any), and required environment variable names.
Phase 1 — Our Preparatory PR (merged to main)
This is what YOU do. Read each file first, then make edits matching existing patterns exactly.
1. .github/workflows/fork-external-live-manual.yml
a) Rust test step env vars (Run Rust external live integration tests → env block):
Add the signer's env vars after the last existing signer's env vars, before SOLANA_RPC_URL.
b) Rust test step tests array (same step → tests=() bash array):
Add the Rust integration test function name to the array.
c) TypeScript test step env vars (Run TypeScript external live integration tests → env block):
Add the signer's env vars (if the signer has a TypeScript package).
d) TypeScript test step packages array (same step → packages=() bash array):
Add the TypeScript package name (if applicable).
2. .github/workflows/ci.yml — env vars ONLY
Integration test env vars (rust-integration-test job → env block):
Add the signer's env vars after the last existing signer's env vars, before SOLANA_RPC_URL.
DO NOT add to the backend matrix or test matrix. The Rust feature and test don't exist on main yet — adding them would break CI. Those go in Phase 2.
Phase 2 — Fork Contributor Adds to Their PR
Tell the fork contributor (in a PR comment or issue) to add these to their branch alongside the signer code:
1. .github/workflows/ci.yml
a) Unit test backend matrix (rust-test job → strategy.matrix.backend):
Add the Rust feature name to the backend array, before all.
b) Integration test matrix (rust-integration-test job → strategy.matrix.test):
Add the integration test function name to the test array.
2. .github/workflows/typescript-ci.yml (if TS package exists)
a) Unit test matrix (typescript-test-unit job → strategy.matrix.package):
Add the TypeScript package name.
b) Integration test matrix (typescript-test-integration job → strategy.matrix.package):
Add the TypeScript package name.
c) Integration test env vars (integration test step → env block): Add a comment header and the signer's env vars.
3. .github/workflows/typescript-publish.yml (if TS package exists)
a) PUBLISH_PACKAGES env list:
Add the package name in dependency order (before keychain umbrella).
b) GitHub Release packages array (in the actions/github-script step):
Add @solana/keychain-<name> to the array.
c) Publish summary table: Add a row for the new package.
Merge Order
- Merge Phase 1 PR →
mainis ready with secrets wired up - Trigger
Fork External Live Testsworkflow with the fork PR number → integration tests run with secrets - Merge the fork PR (Phase 2 changes included alongside the code)
GitHub Secrets Reminder
After updating CI files, the following secrets must be configured:
- Repository level (Settings → Secrets → Actions): for
ci.ymlworkflows external-live-testsenvironment (Settings → Environments → external-live-tests → Secrets): forfork-external-live-manual.yml
Both locations need the same secret names configured.
Verification
After making Phase 1 changes:
- Confirm
fork-external-live-manual.ymlhas the new env vars and test entries (Rust and TS if applicable) - Confirm
ci.ymlhas the new env vars but NOT the matrix additions - Confirm CI passes (no references to nonexistent features)