Skip to content

Commit a8fb986

Browse files
author
Chris Toshok
authored
[TT-1009][TT-771] add build reason support (#10529)
Use the build-reason machinery to allow iterating against the buildkite pipeline from the devtools repo. See the description [here](https://github.com/replayio/backend/pull/9770) for a full explanation of how things works, but the most immediately useful thing here is: When manually kicking off a new E2E test run (after making a devtools change, e.g.), you can pick the chromium build to test against by specifying one of these env vars in the buildkite UI. `RUNTIME_CHROMIUM_BUILDKITE_BUILD=<the buildkite number of the build to fetch artifacts from>` `RUNTIME_CHROMIUM_BUILDKITE_BRANCH=<the branch to pull from the chromium-build pipeline. fetches the newest build on that branch, every time you rebuild>` `RUNTIME_CHROMIUM_BUILD_ID=<the build id corresponding to the uploaded chromium packages>` `RUNTIME_CHROMIUM_BUILDKITE_BRANCH` is probably the most useful one. You set that to the chromium branch name, and the script will find the newest buildkite build for that branch and test against it. The env vars are all optional, and if none are present the scripts will act as if `RUNTIME_CHROMIUM_BUILDKITE_BRANCH=master` was used.
1 parent 302a430 commit a8fb986

9 files changed

+457
-47
lines changed

.buildkite/runtime-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ steps:
55
commands:
66
- "mkdir -p /mnt/data/replay"
77
- "be_cmd node_deps -- npx yarn install"
8-
- "be_cmd run_tests -- ts-node ./packages/e2e-tests/scripts/buildkite_run_fe_tests_from_artifact-linux-x86_64.ts"
8+
- "be_cmd run_tests -- ts-node ./packages/e2e-tests/scripts/buildkite_run_tests_from_reason-linux-x86_64.ts"
99
agents:
1010
- "deploy=true"
1111
plugins:
@@ -58,7 +58,7 @@ steps:
5858
timeout_in_minutes: 60
5959
commands:
6060
- "be_cmd node_deps -- npx yarn install"
61-
- "be_cmd run_tests -- ts-node ./packages/e2e-tests/scripts/buildkite_run_fe_tests_from_artifact-macos-arm64.ts"
61+
- "be_cmd run_tests -- ts-node ./packages/e2e-tests/scripts/buildkite_run_tests_from_reason-macos-arm64.ts"
6262
agents:
6363
- "os=macos"
6464
- "arch=arm64"

packages/e2e-tests/scripts/build_id_from_artifact.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/e2e-tests/scripts/buildkite_run_fe_tests_from_artifact-linux-x86_64.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/e2e-tests/scripts/buildkite_run_fe_tests_from_artifact-macos-arm64.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

packages/e2e-tests/scripts/buildkite_run_fe_tests_from_artifact.ts

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/* Copyright 2020-2024 Record Replay Inc. */
2+
3+
import { build_from_reason } from "./buildkite_run_tests_from_reason";
4+
5+
build_from_reason("linux", "x86_64");
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/* Copyright 2020-2024 Record Replay Inc. */
2+
3+
import { build_from_reason } from "./buildkite_run_tests_from_reason";
4+
5+
build_from_reason("macOS", "arm64");
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/* Copyright 2020-2024 Record Replay Inc. */
2+
3+
import { execSync } from "child_process";
4+
import * as path from "path";
5+
6+
import { getSecret } from "./aws_secrets";
7+
import { install_build_products } from "./build_products";
8+
import run_fe_tests from "./buildkite_run_fe_tests";
9+
import {
10+
detectAndRecordBuildReason,
11+
fetchLatestChromiumBuildOnBranch,
12+
fetchRuntimeBuildIdFromChromiumBuildId,
13+
fetchRuntimeBuildIdFromChromiumBuildNumber,
14+
} from "./detect_and_record_build_reason";
15+
16+
function run_fe_tests_from_build_id(os: string, arch: string, runtimeBuildId: string) {
17+
console.group("BUILD PREP");
18+
console.time("BUILD PREP");
19+
process.env.RUNTIME_BUILD_ID = runtimeBuildId;
20+
let CHROME_BINARY_PATH = install_build_products(runtimeBuildId, os, arch);
21+
console.timeEnd("BUILD PREP");
22+
console.groupEnd();
23+
24+
run_fe_tests(CHROME_BINARY_PATH);
25+
}
26+
27+
function buildUrl(pipelineSlug, buildNumber) {
28+
return `https://buildkite.com/replay/${pipelineSlug}/builds/${buildNumber}`;
29+
}
30+
31+
function describeReason(markdownMessage, rebuild) {
32+
// do something with `rebuild` here...
33+
execSync(`buildkite-agent annotate --style info "${markdownMessage}"`, {
34+
stdio: "inherit",
35+
});
36+
}
37+
38+
export async function build_from_reason(os, arch) {
39+
const buildReason = await detectAndRecordBuildReason();
40+
41+
if (!process.env.BUILDKITE_TOKEN) {
42+
process.env.BUILDKITE_TOKEN = getSecret("prod/buildkite-retry-graphql-token", "us-east-2");
43+
}
44+
45+
switch (buildReason.reason) {
46+
case "runtime-chromium-build-id": {
47+
describeReason(
48+
`Testing against chromium buildid ${buildReason.chromiumBuildId}`,
49+
buildReason.rebuild
50+
);
51+
run_fe_tests_from_build_id(os, arch, buildReason.chromiumBuildId);
52+
break;
53+
}
54+
case "chromium-build-number": {
55+
describeReason(
56+
`Testing against chromium build number [#${buildReason.buildNumber}](${buildUrl(
57+
"chromium-build",
58+
buildReason.buildNumber
59+
)})`,
60+
buildReason.rebuild
61+
);
62+
const runtimeBuildId = await fetchRuntimeBuildIdFromChromiumBuildNumber(
63+
os,
64+
arch,
65+
buildReason.buildNumber
66+
);
67+
run_fe_tests_from_build_id(os, arch, runtimeBuildId);
68+
break;
69+
}
70+
case "chromium-branch": {
71+
const buildkiteToken = process.env.BUILDKITE_TOKEN;
72+
if (!buildkiteToken) {
73+
throw new Error("Missing BUILDKITE_TOKEN");
74+
}
75+
76+
const { buildId, buildNumber } = await fetchLatestChromiumBuildOnBranch(
77+
buildkiteToken,
78+
buildReason.branch
79+
);
80+
describeReason(
81+
`Testing against latest chromium build on branch \\\`${
82+
buildReason.branch
83+
}\\\`: [#${buildNumber}](${buildUrl("chromium-build", buildNumber)})`,
84+
buildReason.rebuild
85+
);
86+
const runtimeBuildId = await fetchRuntimeBuildIdFromChromiumBuildId(os, arch, buildId);
87+
run_fe_tests_from_build_id(os, arch, runtimeBuildId);
88+
break;
89+
}
90+
case "triggered": {
91+
describeReason(
92+
`Testing triggered from [${buildReason.pipelineSlug}#${buildReason.buildNumber}](${buildUrl(
93+
buildReason.pipelineSlug,
94+
buildReason.buildNumber
95+
)})`,
96+
buildReason.rebuild
97+
);
98+
const runtimeBuildId = await fetchRuntimeBuildIdFromChromiumBuildId(
99+
os,
100+
arch,
101+
buildReason.buildId
102+
);
103+
run_fe_tests_from_build_id(os, arch, runtimeBuildId);
104+
break;
105+
}
106+
default:
107+
throw new Error(`Unknown build reason: ${JSON.stringify(buildReason)}`);
108+
}
109+
}

0 commit comments

Comments
 (0)