Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
611c9d3
feat(test-suite): replace bash CLI with Bun-based fhevm-cli
Eikix Mar 9, 2026
ceb6068
fix(coprocessor): pass BUILD_ID as build arg instead of copying .git/…
Eikix Mar 9, 2026
055a633
docs(test-suite): add CLI architecture guide and update readmes
Eikix Mar 9, 2026
82ce397
ci(test-suite): update e2e workflows for Bun CLI
Eikix Mar 9, 2026
cc6d0aa
test(test-suite): add comprehensive unit tests for Bun CLI
Eikix Mar 10, 2026
254c33c
chore(test-suite): remove legacy bash CLI scripts
Eikix Mar 10, 2026
63f3b90
docs(test-suite): document lock file usage for pinning version bundles
Eikix Mar 10, 2026
bfa0748
feat(test-suite): add per-service override support to fhevm-cli (#2075)
PanGan21 Mar 10, 2026
d93a7a8
fix(test-suite): stabilize Bun fhevm-cli
Eikix Mar 10, 2026
89737c7
test-suite: drop override build profiles
Eikix Mar 10, 2026
ce64736
feat(test-suite): add exact sha target
Eikix Mar 10, 2026
676bd05
feat(test-suite): add deploy alias for up
Eikix Mar 10, 2026
8721db2
docs(test-suite): refresh CLI readmes
Eikix Mar 10, 2026
634508b
fix(test-suite): harden github resolution errors
Eikix Mar 10, 2026
85e6ce5
fix(test-suite): tighten bootstrap retries
Eikix Mar 10, 2026
15a7a69
fix(test-suite): restore runtime artifacts on resume
Eikix Mar 10, 2026
fa3f78d
fix(test-suite): fail clean on teardown errors
Eikix Mar 10, 2026
9cda78b
fix(test-suite): harden env and wallet handling
Eikix Mar 10, 2026
4376ba9
fix(test-suite): guard partial overrides on schema drift
Eikix Mar 10, 2026
38b2beb
fix(test-suite): tighten rpc errors and env template
Eikix Mar 10, 2026
2c5f473
fix(test-suite): catch untracked schema drift
Eikix Mar 10, 2026
deb3f2f
feat(test-suite): add workspace e2e dispatch mode
Eikix Mar 10, 2026
ced6347
ci(test-suite): make merge-queue e2e mode explicit
Eikix Mar 10, 2026
8269071
fix(test-suite): restore fhevm-cli execute bit
Eikix Mar 10, 2026
162f839
fix(test-suite): restore writable address mounts
Eikix Mar 10, 2026
afd9913
feat(test-suite): add override all alias
Eikix Mar 10, 2026
ec81e59
fix(test-suite): pass host url to tx sender
Eikix Mar 10, 2026
45278d8
fix(test-suite): serialize local coprocessor builds
Eikix Mar 10, 2026
43a4eae
fix(test-suite): gate tx-sender host-chain flag
Eikix Mar 10, 2026
fcff473
fix(test-suite): skip migrations during upgrade
Eikix Mar 10, 2026
443764d
fix(ci): snapshot logs on failure
Eikix Mar 11, 2026
4270ef8
refactor(test-suite): drop dead cargo profile args
Eikix Mar 11, 2026
8a9f40e
Merge origin/main into codex/bun-fhevm-cli
Eikix Mar 11, 2026
debfd54
fix(test-suite): hard-cut main targets at simple acl
Eikix Mar 11, 2026
6b44c2b
fix(test-suite): restore simple acl workflow compat
Eikix Mar 11, 2026
745b4d2
fix(ci): pin relayer for simple acl e2e
Eikix Mar 11, 2026
1700b4a
fix(ci): fetch history for relayer cutover
Eikix Mar 11, 2026
9c803af
fix(ci): use 7-char image tags
Eikix Mar 11, 2026
0dbf663
fix(test-suite): approve mocked payment after deploy
Eikix Mar 11, 2026
bb78ce0
fix(ci): use modern relayer for override all
Eikix Mar 12, 2026
7854605
fix(test-suite): harden compat and workflow semantics
Eikix Mar 12, 2026
5d4f4dc
fix(test-suite): initialize workspace override mode in e2e workflow
Eikix Mar 12, 2026
035ef7e
fix(fhevm-cli): atomic writeJson via tmp+rename
Eikix Mar 12, 2026
11241ca
fix(fhevm-cli): fail fast on permanent bootstrap material failures
Eikix Mar 12, 2026
164c52b
refactor(fhevm-cli): simplify runtime after review
Eikix Mar 12, 2026
8242fd4
fix(e2e): poll for ciphertext readiness in delegated decrypt test
Eikix Mar 12, 2026
b5d0239
fix(fhevm-cli): retry discoverSigner fetch and log ensureMaterialUrl …
Eikix Mar 12, 2026
2e96f04
fix(fhevm-cli): bump release preset relayer to modern version
Eikix Mar 12, 2026
25e2ce4
fix(fhevm-cli): use v0.10.0-rc.1 relayer in release preset
Eikix Mar 13, 2026
998035b
Merge remote-tracking branch 'origin/main' into codex/bun-fhevm-cli
Eikix Mar 13, 2026
df8f95c
fix(fhevm-cli): restore Bun wrapper after merge conflict
Eikix Mar 13, 2026
57efe28
fix(fhevm-cli): auto-detect MinIO key prefix and treat unparseable ve…
Eikix Mar 13, 2026
559d55b
fix(fhevm-cli): version-aware RELAYER_URL for old test-suite SDKs
Eikix Mar 13, 2026
477d83c
fix(fhevm-cli): warn when overriding on a network target
Eikix Mar 13, 2026
6a5706b
fix(fhevm-cli): use optimistic SHA handling for destructive compat rules
Eikix Mar 13, 2026
9836aa4
refactor(fhevm-cli): simplify compat, endpoints, and dead code
Eikix Mar 13, 2026
73df056
fix(fhevm-cli): treat SHA versions as modern for multichain ACL check
Eikix Mar 13, 2026
e89dfc3
fix(fhevm-cli): treat SHA versions as modern in all compat rules
Eikix Mar 13, 2026
05b58be
refactor(fhevm-cli): remove dead code and simplify error handling
Eikix Mar 13, 2026
28b8ec8
fix(fhevm-cli): make compat policy override-aware for SHA versions
Eikix Mar 13, 2026
26f5187
fix(fhevm-cli): treat SHA versions as modern in compat policy
Eikix Mar 13, 2026
9ae024f
feat(fhevm-cli): cross-version compat check and post-boot health gate
Eikix Mar 16, 2026
4a7c03a
refactor(fhevm-cli): consolidate compat logic into COMPAT_MATRIX sing…
Eikix Mar 16, 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
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ charts/
# -----------------------------------------------------------------------------
# Git-related (keep .git/ for build metadata, exclude others)
# -----------------------------------------------------------------------------
.git/lfs/
.gitignore
.gitattributes
**/.gitkeep
Expand Down
88 changes: 52 additions & 36 deletions .github/workflows/test-suite-e2e-operators-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,21 @@ jobs:
contents: 'read' # Required to checkout repository code
id-token: 'write' # Required for OIDC authentication
packages: 'read' # Required to read GitHub packages/container registry
env:
GH_TOKEN: ${{ secrets.GHCR_READ_TOKEN || github.token }}
CONNECTOR_DB_MIGRATION_VERSION: ${{ inputs.connector_version }}
CONNECTOR_GW_LISTENER_VERSION: ${{ inputs.connector_version }}
CONNECTOR_KMS_WORKER_VERSION: ${{ inputs.connector_version }}
CONNECTOR_TX_SENDER_VERSION: ${{ inputs.connector_version }}
COPROCESSOR_DB_MIGRATION_VERSION: ${{ inputs.db_migration_version }}
HOST_VERSION: ${{ inputs.host_version }}
GATEWAY_VERSION: ${{ inputs.gateway_version }}
COPROCESSOR_HOST_LISTENER_VERSION: ${{ inputs.host_listener_version }}
COPROCESSOR_GW_LISTENER_VERSION: ${{ inputs.gateway_listener_version }}
COPROCESSOR_TX_SENDER_VERSION: ${{ inputs.tx_sender_version }}
COPROCESSOR_TFHE_WORKER_VERSION: ${{ inputs.tfhe_worker_version }}
COPROCESSOR_SNS_WORKER_VERSION: ${{ inputs.sns_worker_version }}
COPROCESSOR_ZKPROOF_WORKER_VERSION: ${{ inputs.zkproof_worker_version }}
runs-on: ${{ needs.setup-instance.outputs.runner-name }}
needs: setup-instance
timeout-minutes: 1440
Expand All @@ -94,7 +109,10 @@ jobs:
- name: Setup Docker
uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0

- name: Install Foundry
- name: Setup Bun
uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2.1.3

- name: Install foundry
uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de # v1.4.0

- name: Login to GitHub Container Registry
Expand All @@ -111,24 +129,15 @@ jobs:
username: ${{ secrets.CGR_USERNAME }}
password: ${{ secrets.CGR_PASSWORD }}

- name: Install CLI deps
working-directory: test-suite/fhevm
run: |
bun install --frozen-lockfile

- name: Deploy fhevm Stack
working-directory: test-suite/fhevm
env:
CONNECTOR_DB_MIGRATION_VERSION: ${{ inputs.connector_version }}
CONNECTOR_GW_LISTENER_VERSION: ${{ inputs.connector_version }}
CONNECTOR_KMS_WORKER_VERSION: ${{ inputs.connector_version }}
CONNECTOR_TX_SENDER_VERSION: ${{ inputs.connector_version }}
DB_MIGRATION_VERSION: ${{ inputs.db_migration_version }}
HOST_VERSION: ${{ inputs.host_version }}
GATEWAY_VERSION: ${{ inputs.gateway_version }}
HOST_LISTENER_VERSION: ${{ inputs.host_listener_version }}
GW_LISTENER_VERSION: ${{ inputs.gateway_listener_version }}
TX_SENDER_VERSION: ${{ inputs.tx_sender_version }}
TFHE_WORKER_VERSION: ${{ inputs.tfhe_worker_version }}
SNS_WORKER_VERSION: ${{ inputs.sns_worker_version }}
ZKPROOF_WORKER_VERSION: ${{ inputs.zkproof_worker_version }}
run: |
./fhevm-cli deploy --coprocessors 2 --coprocessor-threshold 2
./fhevm-cli up --target latest-release --coprocessors 2 --threshold 2

- name: All operators tests
working-directory: test-suite/fhevm
Expand All @@ -142,32 +151,39 @@ jobs:

- name: Show logs on test failure
working-directory: test-suite/fhevm
if: always()
if: failure()
run: |
echo "::group::Relayer Logs"
./fhevm-cli logs relayer
echo "::endgroup::"
echo "::group::SNS Worker Logs"
./fhevm-cli logs sns-worker | grep -v "Selected 0 rows to process"
echo "::endgroup::"
echo "::group::Transaction Sender Logs (filtered)"
./fhevm-cli logs transaction-sender | grep -v "Selected 0 rows to process"
echo "::endgroup::"
echo "::group::Coprocessor 2 - SNS Worker"
./fhevm-cli logs coprocessor-2-sns-worker 2>/dev/null | grep -v "Selected 0 rows to process" || true
echo "::endgroup::"
echo "::group::Coprocessor 2 - Transaction Sender (filtered)"
./fhevm-cli logs coprocessor-2-transaction-sender 2>/dev/null | grep -v "Selected 0 rows to process" || true
echo "::endgroup::"
echo "::group::Coprocessor 2 - TFHE Worker"
./fhevm-cli logs coprocessor-2-tfhe-worker 2>/dev/null || true
echo "::endgroup::"
snapshot_logs() {
local group="$1"
local container="$2"
local filter="${3:-}"
echo "::group::${group}"
if [ -n "$filter" ]; then
docker logs --tail 200 "${container}" 2>&1 | grep -v "$filter" || true
else
docker logs --tail 200 "${container}" 2>&1 || true
fi
echo "::endgroup::"
}
snapshot_logs "Relayer Logs" fhevm-relayer
snapshot_logs "Host Listener" coprocessor-host-listener
snapshot_logs "Gateway Listener" coprocessor-gw-listener
snapshot_logs "SNS Worker Logs" coprocessor-sns-worker "Selected 0 rows to process"
snapshot_logs "Transaction Sender Logs (filtered)" coprocessor-transaction-sender "Selected 0 rows to process"
snapshot_logs "ZKProof Worker" coprocessor-zkproof-worker
snapshot_logs "TFHE Worker" coprocessor-tfhe-worker
snapshot_logs "Coprocessor 2 - Host Listener" coprocessor1-host-listener
snapshot_logs "Coprocessor 2 - Gateway Listener" coprocessor1-gw-listener
snapshot_logs "Coprocessor 2 - SNS Worker" coprocessor1-sns-worker "Selected 0 rows to process"
snapshot_logs "Coprocessor 2 - Transaction Sender (filtered)" coprocessor1-transaction-sender "Selected 0 rows to process"
snapshot_logs "Coprocessor 2 - ZKProof Worker" coprocessor1-zkproof-worker
snapshot_logs "Coprocessor 2 - TFHE Worker" coprocessor1-tfhe-worker

- name: Cleanup
working-directory: test-suite/fhevm
if: always()
run: |
./fhevm-cli clean
./fhevm-cli clean --images

teardown-instance:
name: test-suite-e2e-operators-tests/teardown
Expand Down
165 changes: 116 additions & 49 deletions .github/workflows/test-suite-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,18 @@ name: test-suite-e2e-tests
on:
workflow_dispatch:
inputs: &workflow_inputs
image_mode:
description: "Use registry images or build workspace overrides on the runner"
default: "registry"
type: string
override:
description: "Comma-separated override values for workspace mode (for example: all, coprocessor, or coprocessor:host-listener)"
default: ""
type: string
stack-era:
description: "Stack era hint for workflow_call consumers (leave empty for manual dispatch)"
default: ""
type: string
coprocessor-db-migration-version:
description: "Coprocessor DB Migration Image Version"
default: ""
Expand Down Expand Up @@ -63,14 +75,14 @@ on:
description: "Relayer version"
default: ""
type: string
relayer-migrate-version:
description: "Relayer migrate version"
default: ""
type: string
kms-core-version:
description: "KMS Core version"
default: ""
type: string
deploy-build:
description: "Build local Docker images from the checked out repository before deploy"
default: false
type: boolean
workflow_call:
secrets:
GHCR_READ_TOKEN:
Expand All @@ -95,6 +107,9 @@ jobs:
id-token: 'write' # Required for OIDC authentication
packages: 'read' # Required to read GitHub packages/container registry
env:
GH_TOKEN: ${{ secrets.GHCR_READ_TOKEN || github.token }}
IMAGE_MODE: ${{ inputs.image_mode || 'registry' }}
WORKSPACE_OVERRIDE: ${{ inputs.override || '' }}
COPROCESSOR_DB_MIGRATION_VERSION: ${{ inputs.coprocessor-db-migration-version }}
COPROCESSOR_HOST_LISTENER_VERSION: ${{ inputs.coprocessor-host-listener-version }}
COPROCESSOR_GW_LISTENER_VERSION: ${{ inputs.coprocessor-gw-listener-version }}
Expand All @@ -110,7 +125,9 @@ jobs:
CONNECTOR_TX_SENDER_VERSION: ${{ inputs.connector-tx-sender-version }}
TEST_SUITE_VERSION: ${{ inputs.test-suite-version }}
RELAYER_VERSION: ${{ inputs.relayer-version }}
RELAYER_MIGRATE_VERSION: ${{ inputs.relayer-migrate-version }}
CORE_VERSION: ${{ inputs.kms-core-version }}
STACK_ERA: ${{ inputs.stack-era }}
runs-on: large_ubuntu_32
steps:
- name: Checkout code
Expand All @@ -121,7 +138,10 @@ jobs:
- name: Setup Docker
uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0

- name: Install Foundry
- name: Setup Bun
uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2.1.3

- name: Install foundry
uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de # v1.4.0

- name: Login to GitHub Container Registry
Expand All @@ -138,22 +158,74 @@ jobs:
username: ${{ secrets.CGR_USERNAME }}
password: ${{ secrets.CGR_PASSWORD }}

- name: Display component versions
env:
JSON_INPUT: ${{ toJSON(inputs) }}
run: |
echo "Component versions: $JSON_INPUT"
- name: Install CLI deps
working-directory: test-suite/fhevm
run: bun install --frozen-lockfile

- name: Deploy fhevm Stack
- name: Resolve CLI up args
working-directory: test-suite/fhevm
env:
DEPLOY_BUILD: ${{ inputs.deploy-build }}
run: |
if [[ "$DEPLOY_BUILD" == 'true' ]]; then
./fhevm-cli deploy --build --coprocessors 2 --coprocessor-threshold 2
else
./fhevm-cli deploy --coprocessors 2 --coprocessor-threshold 2
set -euo pipefail
args_file="$RUNNER_TEMP/fhevm-up-args"
defaults=$(./fhevm-cli compat-defaults)
modern_relayer_version=$(echo "$defaults" | jq -r .externalDefaults.RELAYER_VERSION)
modern_relayer_migrate_version=$(echo "$defaults" | jq -r .externalDefaults.RELAYER_MIGRATE_VERSION)
workspace_all=false
printf '%s\n%s\n%s\n%s\n%s\n%s\n' --target latest-release --coprocessors 2 --threshold 2 > "$args_file"
case "$IMAGE_MODE" in
registry)
if [ -n "$WORKSPACE_OVERRIDE" ]; then
echo "::error::override requires image_mode=workspace"
exit 1
fi
;;
workspace)
if [ -z "$WORKSPACE_OVERRIDE" ]; then
echo "::error::image_mode=workspace requires override"
exit 1
fi
IFS=',' read -r -a overrides <<< "$WORKSPACE_OVERRIDE"
for raw in "${overrides[@]}"; do
override="${raw#"${raw%%[![:space:]]*}"}"
override="${override%"${override##*[![:space:]]}"}"
[ -n "$override" ] || continue
if [ "$override" = "all" ]; then
workspace_all=true
fi
printf '%s\n%s\n' --override "$override" >> "$args_file"
done
if ! grep -qx -- --override "$args_file"; then
echo "::error::override did not contain any usable values"
exit 1
fi
;;
*)
echo "::error::image_mode must be registry or workspace"
exit 1
;;
esac
if { [ "$workspace_all" = true ] || [ "${STACK_ERA:-}" = "modern" ]; } && [ -z "${RELAYER_VERSION:-}" ]; then
echo "RELAYER_VERSION=$modern_relayer_version" >> "$GITHUB_ENV"
fi
if { [ "$workspace_all" = true ] || [ "${STACK_ERA:-}" = "modern" ]; } && [ -z "${RELAYER_MIGRATE_VERSION:-}" ]; then
echo "RELAYER_MIGRATE_VERSION=$modern_relayer_migrate_version" >> "$GITHUB_ENV"
fi
if [ "${RELAYER_VERSION:-}" = "$modern_relayer_version" ] && [ -z "${RELAYER_MIGRATE_VERSION:-}" ]; then
echo "RELAYER_MIGRATE_VERSION=$modern_relayer_migrate_version" >> "$GITHUB_ENV"
fi
echo "UP_ARGS_FILE=$args_file" >> "$GITHUB_ENV"

- name: Dry run
working-directory: test-suite/fhevm
run: |
mapfile -t up_args < "$UP_ARGS_FILE"
./fhevm-cli up "${up_args[@]}" --dry-run

- name: Boot fhevm Stack
working-directory: test-suite/fhevm
run: |
mapfile -t up_args < "$UP_ARGS_FILE"
./fhevm-cli up "${up_args[@]}"

# E2E tests on pausing the Host contracts
- name: Pause Host Contracts
Expand Down Expand Up @@ -242,41 +314,36 @@ jobs:

- name: Show logs on test failure
working-directory: test-suite/fhevm
if: always()
if: failure()
run: |
echo "::group::Relayer Logs"
./fhevm-cli logs fhevm-relayer
echo "::endgroup::"
echo "::group::SNS Worker Logs"
./fhevm-cli logs coprocessor-sns-worker | grep -v "Selected 0 rows to process"
echo "::endgroup::"
echo "::group::Transaction Sender Logs (filtered)"
./fhevm-cli logs coprocessor-transaction-sender | grep -v "Selected 0 rows to process"
echo "::endgroup::"
echo "::group::Host Listener"
./fhevm-cli logs coprocessor-host-listener
echo "::endgroup::"
echo "::group::Gateway Listener"
./fhevm-cli logs coprocessor-gw-listener
echo "::endgroup::"
echo "::group::ZKProof Worker"
./fhevm-cli logs coprocessor-zkproof-worker
echo "::endgroup::"
echo "::group::TFHE Worker"
./fhevm-cli logs coprocessor-tfhe-worker
echo "::endgroup::"
echo "::group::Coprocessor 2 - SNS Worker"
./fhevm-cli logs coprocessor-2-sns-worker 2>/dev/null | grep -v "Selected 0 rows to process" || true
echo "::endgroup::"
echo "::group::Coprocessor 2 - Transaction Sender (filtered)"
./fhevm-cli logs coprocessor-2-transaction-sender 2>/dev/null | grep -v "Selected 0 rows to process" || true
echo "::endgroup::"
echo "::group::Coprocessor 2 - TFHE Worker"
./fhevm-cli logs coprocessor-2-tfhe-worker 2>/dev/null || true
echo "::endgroup::"
snapshot_logs() {
local group="$1"
local container="$2"
local filter="${3:-}"
echo "::group::${group}"
if [ -n "$filter" ]; then
docker logs --tail 200 "${container}" 2>&1 | grep -v "$filter" || true
else
docker logs --tail 200 "${container}" 2>&1 || true
fi
echo "::endgroup::"
}
snapshot_logs "Relayer Logs" fhevm-relayer
snapshot_logs "SNS Worker Logs" coprocessor-sns-worker "Selected 0 rows to process"
snapshot_logs "Transaction Sender Logs (filtered)" coprocessor-transaction-sender "Selected 0 rows to process"
snapshot_logs "Host Listener" coprocessor-host-listener
snapshot_logs "Gateway Listener" coprocessor-gw-listener
snapshot_logs "ZKProof Worker" coprocessor-zkproof-worker
snapshot_logs "TFHE Worker" coprocessor-tfhe-worker
snapshot_logs "Coprocessor 2 - Host Listener" coprocessor1-host-listener
snapshot_logs "Coprocessor 2 - Gateway Listener" coprocessor1-gw-listener
snapshot_logs "Coprocessor 2 - SNS Worker" coprocessor1-sns-worker "Selected 0 rows to process"
snapshot_logs "Coprocessor 2 - Transaction Sender (filtered)" coprocessor1-transaction-sender "Selected 0 rows to process"
snapshot_logs "Coprocessor 2 - ZKProof Worker" coprocessor1-zkproof-worker
snapshot_logs "Coprocessor 2 - TFHE Worker" coprocessor1-tfhe-worker

- name: Cleanup
working-directory: test-suite/fhevm
if: always()
run: |
./fhevm-cli clean
./fhevm-cli clean --images
Loading
Loading