Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
913672b
refactor(test-suite): materialize fhevm runtime assets under .fhevm
Eikix Mar 19, 2026
f9591c8
refactor(test-suite): replace fhevm-cli bash orchestration with Bun TS
Eikix Mar 19, 2026
8ed3101
test(test-suite): add focused fhevm-cli regression coverage
Eikix Mar 19, 2026
7f317e7
ci(test-suite): align e2e workflows with the new cli
Eikix Mar 19, 2026
a2d76db
docs(test-suite): document fhevm-cli architecture and workflows
Eikix Mar 19, 2026
3172dfa
chore(repo): route root bun test to fhevm cli tests
Eikix Mar 19, 2026
27cc965
test(test-suite): drop shell dependency from cli tests
Eikix Mar 19, 2026
d177b5d
fix(test-suite): make cli help and logs discovery safe
Eikix Mar 19, 2026
26a743d
fix(test-suite): restore build parity and harden cli edges
Eikix Mar 19, 2026
0617d4e
fix(test-suite): refine override and upgrade semantics
Eikix Mar 20, 2026
1af4d2c
test(test-suite): add behavioral compat smoke
Eikix Mar 20, 2026
638164c
fix(test-suite): correct probe timeout units
Eikix Mar 20, 2026
31f704b
fix(test-suite): harden workflow and bootstrap edges
Eikix Mar 20, 2026
9fd602a
docs(test-suite): add module summaries
Eikix Mar 20, 2026
b7b1d79
docs(test-suite): clarify compat and maintenance caveats
Eikix Mar 20, 2026
28b701d
docs(test-suite): remove broken override example
Eikix Mar 20, 2026
70c997b
fix(test-suite): tighten compat coverage and docs
Eikix Mar 20, 2026
04ac672
refactor(test-suite): split cli architecture by flow
Eikix Mar 23, 2026
8640b3f
fix(test-suite): restore pause flow and refresh presets docs
Eikix Mar 23, 2026
8a3b96b
refactor(test-suite): prune facade modules
Eikix Mar 23, 2026
488e030
ci(test-suite): make operators workflow configurable
Eikix Mar 23, 2026
7abc7b5
ci(test-suite): run targeted operators grep serially
Eikix Mar 23, 2026
40434af
test-suite: port main e2e parity before rebase
Eikix Mar 24, 2026
8f81868
test-suite: group ci suites under standard and heavy
Eikix Mar 24, 2026
823d580
test-suite: shrink light test profile
Eikix Mar 24, 2026
1f909d2
test-suite: move operators into heavy suite
Eikix Mar 24, 2026
9fe07ab
fix(test-suite): restore bootstrap runtime artifacts
Eikix Mar 24, 2026
e22fc75
ci(test-suite): remove heavy suite from pr workflow
Eikix Mar 24, 2026
dd11ad6
feat(test-suite): add multi-chain e2e testing support (#2150)
PanGan21 Mar 24, 2026
3d7569a
fix(test-suite): version kms-core config by core schema
Eikix Mar 25, 2026
dc9a2f9
fix(test-suite): tighten cli test dispatch
Eikix Mar 25, 2026
674be5a
polish(test-suite): improve cli test discoverability
Eikix Mar 25, 2026
a3e99f2
fix(test-suite): tighten bootstrap and resume validation
Eikix Mar 25, 2026
7797432
ci(test-suite): gate PR e2e behind label
Eikix Mar 25, 2026
2de00af
refactor(test-suite): centralize runtime defaults
Eikix Mar 25, 2026
e1c8744
fix(test-suite): fail fast on unsupported target topology
Eikix Mar 25, 2026
49df311
test(test-suite): avoid gh dependency in target gating check
Eikix Mar 25, 2026
42ca755
fix(test-suite): remove remaining cli drift traps
Eikix Mar 25, 2026
0c234ee
fix(test-suite): make pause profiles self-contained
Eikix Mar 26, 2026
538fe73
ci(orchestrate): gate behind `orchestrate` label for testing
Eikix Mar 26, 2026
09ec892
fix(test-suite): pre-create Docker network to avoid compose race
Eikix Mar 26, 2026
7c92cf3
feat(test-suite): verify drift via both gw-listener and consensus wat…
Eikix Mar 26, 2026
f7f334d
feat(test-suite): assert on-chain digest divergence in ciphertext-dri…
Eikix Mar 26, 2026
950f300
fix(test-suite): print full version bundle during boot resolve step
Eikix Mar 26, 2026
a625d31
fix(test-suite): rebase cli boot compat on main
Eikix Mar 26, 2026
bee6b9b
fix(test-suite): make fhevm-cli executable
Eikix Mar 26, 2026
188a75e
fix(test-suite): version pauser task flags by bundle
Eikix Mar 26, 2026
a4bc530
fix(test-suite): persist pauser compat flags in versions env
Eikix Mar 26, 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
183 changes: 102 additions & 81 deletions .github/workflows/test-suite-e2e-operators-tests.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
name: test-suite-e2e-operators-tests

# Core, relayer and test-suite will use the default versions defined in the `fhevm-cli` script
# Github does not support more than 10 inputs for workflow_dispatch:
# https://docs.github.com/en/actions/reference/events-that-trigger-workflows#providing-inputs
# Core, relayer and test-suite follow the latest-main defaults unless explicitly pinned
on:
workflow_dispatch:
inputs:
build:
description: "Build repo-owned images from the checked out branch on the runner"
default: false
type: boolean
grep:
description: "Optional narrow grep pattern for targeted operator tests"
default: ""
type: string
connector_version:
description: "Connector Version"
default: ""
type: string
coprocessor_version:
description: "Shared Coprocessor Runtime Image Version"
default: ""
type: string
db_migration_version:
description: "Coprocessor DB Migration Image Version"
default: ""
Expand All @@ -21,38 +35,6 @@ on:
required: false
default: ""
type: string
host_listener_version:
description: "Host Listener Image Version"
default: ""
type: string
gateway_listener_version:
description: "Gateway Listener Image Version"
default: ""
type: string
tx_sender_version:
description: "Transaction Sender Image Version"
default: ""
type: string
tfhe_worker_version:
description: "TFHE Worker Image Version"
default: ""
type: string
sns_worker_version:
description: "SNS Worker Image Version"
default: ""
type: string
zkproof_worker_version:
description: "ZKProof Worker Image Version"
default: ""
type: string
deploy-build:
description: "Build local Docker images from the checked out repository before deploy"
default: false
type: boolean
grep:
description: "Optional grep pattern to narrow operators tests"
default: ""
type: string

permissions: {}

Expand Down Expand Up @@ -88,6 +70,23 @@ 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 }}
BUILD: ${{ inputs.build && 'true' || 'false' }}
GREP: ${{ inputs.grep }}
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.coprocessor_version }}
COPROCESSOR_GW_LISTENER_VERSION: ${{ inputs.coprocessor_version }}
COPROCESSOR_TX_SENDER_VERSION: ${{ inputs.coprocessor_version }}
COPROCESSOR_TFHE_WORKER_VERSION: ${{ inputs.coprocessor_version }}
COPROCESSOR_SNS_WORKER_VERSION: ${{ inputs.coprocessor_version }}
COPROCESSOR_ZKPROOF_WORKER_VERSION: ${{ inputs.coprocessor_version }}
runs-on: ${{ needs.setup-instance.outputs.runner-name }}
needs: setup-instance
timeout-minutes: 1440
Expand All @@ -96,11 +95,25 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: 'false'
fetch-depth: 0

- name: Setup Docker
uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0

- name: Install Foundry
- name: Install unzip
run: |
sudo apt-get update
sudo apt-get install -y unzip

- name: Install GitHub CLI
run: |
sudo apt-get update
sudo apt-get install -y gh

- 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 @@ -117,75 +130,83 @@ 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 }}
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
args=(--target latest-main --scenario two-of-two)
if [ "$BUILD" = "true" ]; then
args+=(--build)
fi
./fhevm-cli deploy "${args[@]}"

- name: Validate targeted grep
if: ${{ inputs.grep != '' }}
run: |
case "$GREP" in
"test operator"|"FHEVM manual operations"|"test operator|FHEVM manual operations")
echo "grep is too broad for targeted operators runs; pass a narrow explicit pattern" >&2
exit 1
;;
esac

- name: All operators tests
if: ${{ !inputs.grep }}
working-directory: test-suite/fhevm
env:
GREP: ${{ inputs.grep }}
run: |
if [ -n "$GREP" ]; then
./fhevm-cli test operators -g "$GREP"
else
./fhevm-cli test operators
fi
./fhevm-cli test operators

- name: Targeted operators grep
if: ${{ inputs.grep != '' }}
working-directory: test-suite/fhevm
run: |
./fhevm-cli test --grep "$GREP"

- name: Random operators tests
if: ${{ inputs.grep == '' }}
if: ${{ !inputs.grep }}
working-directory: test-suite/fhevm
run: |
./fhevm-cli test random

- name: Show logs on test failure
- name: Show logs
working-directory: test-suite/fhevm
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 120 "${container}" 2>&1 | grep -v "$filter" || true
else
docker logs --tail 120 "${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
Loading
Loading