Skip to content

Commit 70eb691

Browse files
committed
fix(test-suite): freeze orchestrated e2e baseline
1 parent ae7954d commit 70eb691

File tree

4 files changed

+109
-7
lines changed

4 files changed

+109
-7
lines changed

.github/workflows/test-suite-e2e-tests.yml

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,18 @@ on:
7474
description: "Test suite version"
7575
default: ""
7676
type: string
77+
relayer-migrate-version:
78+
description: "Relayer migrate version"
79+
default: ""
80+
type: string
7781
relayer-version:
7882
description: "Relayer version"
7983
default: ""
8084
type: string
85+
lock-artifact-name:
86+
description: "Uploaded lock artifact name used to freeze the baseline bundle"
87+
default: ""
88+
type: string
8189
kms-core-version:
8290
description: "KMS Core version"
8391
default: ""
@@ -128,6 +136,7 @@ jobs:
128136
CONNECTOR_KMS_WORKER_VERSION: ${{ inputs.connector-kms-worker-version }}
129137
CONNECTOR_TX_SENDER_VERSION: ${{ inputs.connector-tx-sender-version }}
130138
TEST_SUITE_VERSION: ${{ inputs.test-suite-version }}
139+
RELAYER_MIGRATE_VERSION: ${{ inputs.relayer-migrate-version }}
131140
RELAYER_VERSION: ${{ inputs.relayer-version }}
132141
CORE_VERSION: ${{ inputs.kms-core-version }}
133142
SCENARIO: ${{ inputs.scenario || 'two-of-two' }}
@@ -183,10 +192,33 @@ jobs:
183192
working-directory: test-suite/fhevm
184193
run: bun run compat-smoke
185194

195+
- name: Download frozen baseline lock
196+
if: ${{ inputs.lock-artifact-name != '' }}
197+
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
198+
with:
199+
name: ${{ inputs.lock-artifact-name }}
200+
path: ${{ runner.temp }}/baseline-lock
201+
202+
- name: Resolve frozen lock path
203+
if: ${{ inputs.lock-artifact-name != '' }}
204+
run: |
205+
set -euo pipefail
206+
lock_file="$(find "${RUNNER_TEMP}/baseline-lock" -maxdepth 1 -name '*.json' -print -quit)"
207+
if [ -z "$lock_file" ]; then
208+
echo "Could not locate downloaded baseline lock artifact" >&2
209+
exit 1
210+
fi
211+
echo "LOCK_FILE=$lock_file" >> "$GITHUB_ENV"
212+
186213
- name: Resolve stack plan and display effective component versions
187214
working-directory: test-suite/fhevm
188215
run: |
189-
args=(--target latest-main --scenario "$SCENARIO")
216+
args=(--scenario "$SCENARIO")
217+
if [ -n "${LOCK_FILE:-}" ]; then
218+
args+=(--lock-file "$LOCK_FILE")
219+
else
220+
args+=(--target latest-main)
221+
fi
190222
if [ "$BUILD" = "true" ]; then
191223
args+=(--build)
192224
fi
@@ -195,7 +227,12 @@ jobs:
195227
- name: Boot fhevm Stack
196228
working-directory: test-suite/fhevm
197229
run: |
198-
args=(--target latest-main --scenario "$SCENARIO")
230+
args=(--scenario "$SCENARIO")
231+
if [ -n "${LOCK_FILE:-}" ]; then
232+
args+=(--lock-file "$LOCK_FILE")
233+
else
234+
args+=(--target latest-main)
235+
fi
199236
if [ "$BUILD" = "true" ]; then
200237
args+=(--build)
201238
fi

.github/workflows/test-suite-orchestrate-e2e-tests.yml

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,54 @@ concurrency:
1414
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
1515

1616
jobs:
17-
coprocessor-docker-build:
17+
resolve-baseline:
1818
if: &build-trigger-condition |
1919
startsWith(github.head_ref, 'mergify/merge-queue/') || startsWith(github.base_ref, 'release/') || contains(github.event.pull_request.labels.*.name, 'e2e orchestrate test')
20+
runs-on: ubuntu-latest
21+
permissions:
22+
contents: 'read'
23+
packages: 'read'
24+
env:
25+
GH_TOKEN: ${{ secrets.GHCR_READ_TOKEN || github.token }}
26+
outputs:
27+
lock-artifact-name: ${{ steps.resolve-baseline.outputs.lock-artifact-name }}
28+
steps:
29+
- name: Checkout code
30+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
31+
with:
32+
persist-credentials: 'false'
33+
fetch-depth: 0
34+
35+
- name: Setup Bun
36+
uses: oven-sh/setup-bun@ecf28ddc73e819eb6fa29df6b34ef8921c743461 # v2.1.3
37+
38+
- name: Install GitHub CLI
39+
run: |
40+
sudo apt-get update
41+
sudo apt-get install -y gh
42+
43+
- name: Install CLI deps
44+
working-directory: test-suite/fhevm
45+
run: bun install --frozen-lockfile
46+
47+
- id: resolve-baseline
48+
name: Resolve latest-main baseline lock
49+
working-directory: test-suite/fhevm
50+
run: |
51+
set -euo pipefail
52+
lock_path="$(bun --eval 'const original = console.log; console.log = () => {}; const { resolveBundle } = await import("./src/resolve/bundle-store"); const { lockPath } = await resolveBundle({ target: "latest-main", requestedTarget: "latest-main", reset: true }, process.env); original(lockPath);')"
53+
artifact_name="fhevm-latest-main-lock-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
54+
echo "lock-path=$lock_path" >> "$GITHUB_OUTPUT"
55+
echo "lock-artifact-name=$artifact_name" >> "$GITHUB_OUTPUT"
56+
57+
- name: Upload baseline lock
58+
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
59+
with:
60+
name: ${{ steps.resolve-baseline.outputs.lock-artifact-name }}
61+
path: ${{ steps.resolve-baseline.outputs.lock-path }}
62+
63+
coprocessor-docker-build:
64+
if: *build-trigger-condition
2065
uses: ./.github/workflows/coprocessor-docker-build.yml
2166
permissions: &docker_permissions
2267
actions: 'read' # Required to read workflow run information
@@ -47,6 +92,11 @@ jobs:
4792
uses: ./.github/workflows/kms-connector-docker-build.yml
4893
permissions: *docker_permissions
4994
secrets: *docker_secrets
95+
relayer-docker-build:
96+
if: *build-trigger-condition
97+
uses: ./.github/workflows/relayer-docker-build.yml
98+
permissions: *docker_permissions
99+
secrets: *docker_secrets
50100
test-suite-docker-build:
51101
if: *build-trigger-condition
52102
uses: ./.github/workflows/test-suite-docker-build.yml
@@ -56,10 +106,12 @@ jobs:
56106
create-e2e-tests-input:
57107
name: create-e2e-tests-input
58108
needs:
109+
- resolve-baseline
59110
- coprocessor-docker-build
60111
- gateway-contracts-docker-build
61112
- host-contracts-docker-build
62113
- kms-connector-docker-build
114+
- relayer-docker-build
63115
- test-suite-docker-build
64116
if: *build-trigger-condition
65117
env:
@@ -80,6 +132,9 @@ jobs:
80132
connector-tx-sender-version: ${{ steps.create-e2e-tests-input.outputs.connector-tx-sender-version }}
81133
gateway-version: ${{ steps.create-e2e-tests-input.outputs.gateway-version }}
82134
host-version: ${{ steps.create-e2e-tests-input.outputs.host-version }}
135+
lock-artifact-name: ${{ needs.resolve-baseline.outputs.lock-artifact-name }}
136+
relayer-migrate-version: ${{ steps.create-e2e-tests-input.outputs.relayer-migrate-version }}
137+
relayer-version: ${{ steps.create-e2e-tests-input.outputs.relayer-version }}
83138
test-suite-version: ${{ steps.create-e2e-tests-input.outputs.test-suite-version }}
84139
steps:
85140
- id: create-e2e-tests-input
@@ -103,6 +158,8 @@ jobs:
103158
connector-tx-sender-version
104159
gateway-version
105160
host-version
161+
relayer-migrate-version
162+
relayer-version
106163
test-suite-version
107164
)
108165
for key in "${outputs[@]}"; do
@@ -136,6 +193,8 @@ jobs:
136193
kms-connector-docker-build|tx_sender_build_result|connector-tx-sender-version
137194
gateway-contracts-docker-build|build_result|gateway-version
138195
host-contracts-docker-build|build_result|host-version
196+
relayer-docker-build|relayer_migrate_build_result|relayer-migrate-version
197+
relayer-docker-build|relayer_build_result|relayer-version
139198
test-suite-docker-build|build_result|test-suite-version
140199
EOF
141200
@@ -174,5 +233,7 @@ jobs:
174233
gateway-version: ${{ needs.create-e2e-tests-input.outputs.gateway-version }}
175234
host-version: ${{ needs.create-e2e-tests-input.outputs.host-version }}
176235
kms-core-version: ""
177-
relayer-version: ""
236+
lock-artifact-name: ${{ needs.create-e2e-tests-input.outputs.lock-artifact-name }}
237+
relayer-migrate-version: ${{ needs.create-e2e-tests-input.outputs.relayer-migrate-version }}
238+
relayer-version: ${{ needs.create-e2e-tests-input.outputs.relayer-version }}
178239
test-suite-version: ${{ needs.create-e2e-tests-input.outputs.test-suite-version }}

test-suite/fhevm/src/resolve.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,12 @@ describe("resolve", () => {
4545
expect(missing).toContain("fhevm/host-contracts");
4646
});
4747

48-
test("does not reuse the cache for latest-supported", () => {
48+
test("only caches immutable sha targets", () => {
4949
expect(targetUsesCache("latest-supported")).toBe(false);
50-
expect(targetUsesCache("latest-main")).toBe(true);
50+
expect(targetUsesCache("latest-main")).toBe(false);
51+
expect(targetUsesCache("devnet")).toBe(false);
52+
expect(targetUsesCache("testnet")).toBe(false);
53+
expect(targetUsesCache("mainnet")).toBe(false);
54+
expect(targetUsesCache("sha")).toBe(true);
5155
});
5256
});

test-suite/fhevm/src/resolve/bundle-store.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ const withProgressLogs = async <T>(task: Promise<T>, label: string) => {
112112
};
113113

114114
/** Returns whether a target should reuse the on-disk resolve cache. */
115-
export const targetUsesCache = (target: VersionTarget) => target !== "latest-supported";
115+
export const targetUsesCache = (target: VersionTarget) => target === "sha";
116116

117117
/** Resolves a bundle through lock-file, cache, or live metadata lookup. */
118118
const cachedResolve = async (options: CachedResolveOptions) => {

0 commit comments

Comments
 (0)