Skip to content

Commit adb14f1

Browse files
authored
[Refactor] Improve CI Run Times by Reducing Test Flakiness and Speeding up Test Suite (#1166)
1 parent 7bda141 commit adb14f1

20 files changed

Lines changed: 261 additions & 372 deletions

.github/workflows/e2e-api-tests.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ jobs:
1919
NODE_ENV: test
2020
STACK_ENABLE_HARDCODED_PASSKEY_CHALLENGE_FOR_TESTING: yes
2121
STACK_DATABASE_CONNECTION_STRING: "postgres://postgres:PASSWORD-PLACEHOLDER--uqfEC1hmmv@localhost:8128/stackframe"
22-
STACK_FORCE_EXTERNAL_DB_SYNC: "true"
2322
STACK_EXTERNAL_DB_SYNC_MAX_DURATION_MS: "20000"
2423
STACK_EXTERNAL_DB_SYNC_DIRECT: "false"
2524

@@ -160,7 +159,7 @@ jobs:
160159
run: sleep 10
161160

162161
- name: Run tests
163-
run: pnpm test run ${{ matrix.freestyle-mode == 'prod' && '--min-workers=1 --max-workers=1' || '' }}
162+
run: pnpm test run ${{ matrix.freestyle-mode == 'prod' && '--min-workers=1 --max-workers=1' || '' }} ${{ matrix.freestyle-mode == 'prod' && github.ref != 'refs/heads/main' && github.ref != 'refs/heads/dev' && 'mail' || '' }}
164163

165164
- name: Run tests again (attempt 1)
166165
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev'

.github/workflows/e2e-custom-base-port-api-tests.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ jobs:
1919
STACK_ENABLE_HARDCODED_PASSKEY_CHALLENGE_FOR_TESTING: yes
2020
STACK_DATABASE_CONNECTION_STRING: "postgres://postgres:PASSWORD-PLACEHOLDER--uqfEC1hmmv@localhost:6728/stackframe"
2121
NEXT_PUBLIC_STACK_PORT_PREFIX: "67"
22-
STACK_FORCE_EXTERNAL_DB_SYNC: "true"
2322
STACK_EXTERNAL_DB_SYNC_MAX_DURATION_MS: "20000"
2423
STACK_EXTERNAL_DB_SYNC_DIRECT: "false"
2524

.github/workflows/e2e-source-of-truth-api-tests.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ jobs:
2121
STACK_OVERRIDE_SOURCE_OF_TRUTH: '{"type": "postgres", "connectionString": "postgres://postgres:PASSWORD-PLACEHOLDER--uqfEC1hmmv@localhost:8128/source-of-truth-db?schema=sot-schema"}'
2222
STACK_TEST_SOURCE_OF_TRUTH: true
2323
STACK_DATABASE_CONNECTION_STRING: "postgres://postgres:PASSWORD-PLACEHOLDER--uqfEC1hmmv@localhost:8128/stackframe"
24-
STACK_FORCE_EXTERNAL_DB_SYNC: "true"
2524
STACK_EXTERNAL_DB_SYNC_MAX_DURATION_MS: "20000"
2625
STACK_EXTERNAL_DB_SYNC_DIRECT: "false"
2726

.github/workflows/restart-dev-and-test-with-custom-base-port.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ jobs:
1919
runs-on: ubicloud-standard-16
2020
env:
2121
NEXT_PUBLIC_STACK_PORT_PREFIX: "69"
22-
STACK_FORCE_EXTERNAL_DB_SYNC: "true"
2322
STACK_EXTERNAL_DB_SYNC_MAX_DURATION_MS: "20000"
2423
STACK_EXTERNAL_DB_SYNC_DIRECT: "false"
2524

.github/workflows/restart-dev-and-test.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ jobs:
1818
restart-dev-and-test:
1919
runs-on: ubicloud-standard-16
2020
env:
21-
STACK_FORCE_EXTERNAL_DB_SYNC: "true"
2221
STACK_EXTERNAL_DB_SYNC_MAX_DURATION_MS: "20000"
2322
STACK_EXTERNAL_DB_SYNC_DIRECT: "false"
2423

.github/workflows/setup-tests-with-custom-base-port.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ jobs:
1919
runs-on: ubicloud-standard-16
2020
env:
2121
NEXT_PUBLIC_STACK_PORT_PREFIX: "69"
22-
STACK_FORCE_EXTERNAL_DB_SYNC: "true"
2322
STACK_EXTERNAL_DB_SYNC_MAX_DURATION_MS: "20000"
2423
STACK_EXTERNAL_DB_SYNC_DIRECT: "false"
2524

.github/workflows/setup-tests.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ jobs:
1818
setup-tests:
1919
runs-on: ubicloud-standard-16
2020
env:
21-
STACK_FORCE_EXTERNAL_DB_SYNC: "true"
2221
STACK_EXTERNAL_DB_SYNC_MAX_DURATION_MS: "20000"
2322
STACK_EXTERNAL_DB_SYNC_DIRECT: "false"
2423
steps:

apps/backend/src/app/api/latest/internal/external-db-sync/poller/route.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,6 @@ function parseMaxDurationMs(value: string | undefined): number {
3030
return parsed;
3131
}
3232

33-
function parseStopWhenIdle(value: string | undefined): boolean {
34-
if (!value) return false;
35-
if (value === "true") return true;
36-
if (value === "false") return false;
37-
throw new StatusError(400, "stopWhenIdle must be 'true' or 'false'");
38-
}
39-
4033
function directSyncEnabled(): boolean {
4134
return getEnvVariable(DIRECT_SYNC_ENV, "") === "true";
4235
}
@@ -69,7 +62,6 @@ export const GET = createSmartRouteHandler({
6962
}).defined(),
7063
query: yupObject({
7164
maxDurationMs: yupString().optional(),
72-
stopWhenIdle: yupString().optional(),
7365
}).defined(),
7466
}),
7567
response: yupObject({
@@ -91,13 +83,11 @@ export const GET = createSmartRouteHandler({
9183
return await traceSpan("external-db-sync.poller", async (span) => {
9284
const startTime = performance.now();
9385
const maxDurationMs = parseMaxDurationMs(query.maxDurationMs);
94-
const stopWhenIdle = parseStopWhenIdle(query.stopWhenIdle);
9586
const pollIntervalMs = 50;
9687
const staleClaimIntervalMinutes = 5;
9788
const pollerClaimLimit = getPollerClaimLimit();
9889

9990
span.setAttribute("stack.external-db-sync.max-duration-ms", maxDurationMs);
100-
span.setAttribute("stack.external-db-sync.stop-when-idle", stopWhenIdle);
10191
span.setAttribute("stack.external-db-sync.poll-interval-ms", pollIntervalMs);
10292
span.setAttribute("stack.external-db-sync.poller-claim-limit", pollerClaimLimit);
10393
span.setAttribute("stack.external-db-sync.direct-sync", directSyncEnabled());
@@ -235,7 +225,7 @@ export const GET = createSmartRouteHandler({
235225
}
236226

237227
type PollerIterationResult = {
238-
stopReason: "disabled" | "idle" | null,
228+
stopReason: "disabled" | null,
239229
processed: number,
240230
};
241231

@@ -255,10 +245,6 @@ export const GET = createSmartRouteHandler({
255245
const pendingRequests = await claimPendingRequests();
256246
iterationSpan.setAttribute("stack.external-db-sync.pending-count", pendingRequests.length);
257247

258-
if (stopWhenIdle && pendingRequests.length === 0) {
259-
return { stopReason: "idle", processed: 0 };
260-
}
261-
262248
const processed = await processRequests(pendingRequests);
263249
iterationSpan.setAttribute("stack.external-db-sync.processed-count", processed);
264250
return { stopReason: null, processed };

apps/backend/src/app/api/latest/internal/external-db-sync/sequencer/route.ts

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,6 @@ function parseMaxDurationMs(value: string | undefined): number {
2727
return parsed;
2828
}
2929

30-
function parseStopWhenIdle(value: string | undefined): boolean {
31-
if (!value) return false;
32-
if (value === "true") return true;
33-
if (value === "false") return false;
34-
throw new StatusError(400, "stopWhenIdle must be 'true' or 'false'");
35-
}
36-
3730
function getSequencerBatchSize(): number {
3831
const rawValue = getEnvVariable(SEQUENCER_BATCH_SIZE_ENV, "");
3932
if (!rawValue) return DEFAULT_BATCH_SIZE;
@@ -169,7 +162,6 @@ export const GET = createSmartRouteHandler({
169162
}).defined(),
170163
query: yupObject({
171164
maxDurationMs: yupString().optional(),
172-
stopWhenIdle: yupString().optional(),
173165
}).defined(),
174166
}),
175167
response: yupObject({
@@ -190,19 +182,17 @@ export const GET = createSmartRouteHandler({
190182
return await traceSpan("external-db-sync.sequencer", async (span) => {
191183
const startTime = performance.now();
192184
const maxDurationMs = parseMaxDurationMs(query.maxDurationMs);
193-
const stopWhenIdle = parseStopWhenIdle(query.stopWhenIdle);
194185
const pollIntervalMs = 50;
195186
const batchSize = getSequencerBatchSize();
196187

197188
span.setAttribute("stack.external-db-sync.max-duration-ms", maxDurationMs);
198-
span.setAttribute("stack.external-db-sync.stop-when-idle", stopWhenIdle);
199189
span.setAttribute("stack.external-db-sync.poll-interval-ms", pollIntervalMs);
200190
span.setAttribute("stack.external-db-sync.batch-size", batchSize);
201191

202192
let iterations = 0;
203193

204194
type SequencerIterationResult = {
205-
stopReason: "disabled" | "idle" | null,
195+
stopReason: "disabled" | null,
206196
};
207197

208198
while (performance.now() - startTime < maxDurationMs) {
@@ -221,9 +211,6 @@ export const GET = createSmartRouteHandler({
221211
try {
222212
const didUpdate = await backfillSequenceIds(batchSize);
223213
iterationSpan.setAttribute("stack.external-db-sync.did-update", didUpdate);
224-
if (stopWhenIdle && !didUpdate) {
225-
return { stopReason: "idle" };
226-
}
227214
} catch (error) {
228215
iterationSpan.setAttribute("stack.external-db-sync.iteration-error", true);
229216
captureError(

apps/backend/src/lib/external-db-sync-metadata.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,25 @@ const fuseboxSelect = {
1111
pollerEnabled: true,
1212
};
1313

14+
// Default values match the Prisma schema defaults
15+
const defaultFusebox: ExternalDbSyncFusebox = {
16+
sequencerEnabled: true,
17+
pollerEnabled: true,
18+
};
19+
1420
export async function getExternalDbSyncFusebox(): Promise<ExternalDbSyncFusebox> {
15-
return await globalPrismaClient.externalDbSyncMetadata.upsert({
21+
const result = await globalPrismaClient.externalDbSyncMetadata.findFirst({
1622
where: { singleton: BooleanTrue.TRUE },
17-
create: { singleton: BooleanTrue.TRUE },
18-
update: {},
1923
select: fuseboxSelect,
2024
});
25+
// Return defaults if row doesn't exist yet (row is created on first update)
26+
return result ?? defaultFusebox;
2127
}
2228

2329
export async function updateExternalDbSyncFusebox(
2430
updates: ExternalDbSyncFusebox,
2531
): Promise<ExternalDbSyncFusebox> {
32+
// Upsert is fine here - updates are infrequent and typically manual/admin actions
2633
return await globalPrismaClient.externalDbSyncMetadata.upsert({
2734
where: { singleton: BooleanTrue.TRUE },
2835
create: { singleton: BooleanTrue.TRUE, ...updates },

0 commit comments

Comments
 (0)