Skip to content

Commit

Permalink
[CI] Run PR against chrome-beta (#192257)
Browse files Browse the repository at this point in the history
## Summary
This PR's goal is to enable developers (or automation) to test against
chrome-beta with a PR label - to adjust sensitive tests, or to foresee
test breakages.

⚠️ Risk: a PR verified/built with the chrome beta setting, would pass
the PR tests, but might not pass the on-merge suite in the end.

Addresses: elastic/kibana-operations#199
Depends on: elastic/ci-agent-images#907

It highlights the errors visible only on the next versions:
https://buildkite.com/elastic/kibana-pull-request/builds/233373
And it doesn't break with non-beta run:
https://buildkite.com/elastic/kibana-pull-request/builds/233716
  • Loading branch information
delanni authored Sep 17, 2024
1 parent 15c752c commit e66450e
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
32 changes: 30 additions & 2 deletions .buildkite/pipeline-utils/ci-stats/pick_test_group_run_order.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,32 @@ function getEnabledFtrConfigs(patterns?: string[]) {
}
}

/**
* Collects environment variables from labels on the PR
* TODO: extract this (and other functions from this big file) to a separate module
*/
function collectEnvFromLabels() {
const LABEL_MAPPING: Record<string, Record<string, string>> = {
'ci:use-chrome-beta': {
USE_CHROME_BETA: 'true',
},
};

const envFromlabels: Record<string, string> = {};
if (!process.env.GITHUB_PR_LABELS) {
return envFromlabels;
} else {
const labels = process.env.GITHUB_PR_LABELS.split(',');
labels.forEach((label) => {
const env = LABEL_MAPPING[label];
if (env) {
Object.assign(envFromlabels, env);
}
});
return envFromlabels;
}
}

export async function pickTestGroupRunOrder() {
const bk = new BuildkiteClient();
const ciStats = new CiStatsClient();
Expand Down Expand Up @@ -273,9 +299,10 @@ export async function pickTestGroupRunOrder() {
.filter(Boolean)
: ['build'];

const FTR_EXTRA_ARGS: Record<string, string> = process.env.FTR_EXTRA_ARGS
const ftrExtraArgs: Record<string, string> = process.env.FTR_EXTRA_ARGS
? { FTR_EXTRA_ARGS: process.env.FTR_EXTRA_ARGS }
: {};
const envFromlabels: Record<string, string> = collectEnvFromLabels();

const { defaultQueue, ftrConfigsByQueue } = getEnabledFtrConfigs(FTR_CONFIG_PATTERNS);

Expand Down Expand Up @@ -514,7 +541,8 @@ export async function pickTestGroupRunOrder() {
agents: expandAgentQueue(queue),
env: {
FTR_CONFIG_GROUP_KEY: key,
...FTR_EXTRA_ARGS,
...ftrExtraArgs,
...envFromlabels,
},
retry: {
automatic: [
Expand Down
13 changes: 13 additions & 0 deletions .buildkite/scripts/steps/test/ftr_configs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,19 @@ while read -r config; do

start=$(date +%s)

if [[ "${USE_CHROME_BETA:-}" =~ ^(1|true)$ ]]; then
echo "USE_CHROME_BETA was set - using google-chrome-beta"
export TEST_BROWSER_BINARY_PATH="$(which google-chrome-beta)"

# download the beta version of chromedriver
export CHROMEDRIVER_VERSION=$(curl https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json -s | jq -r '.channels.Beta.version')
export DETECT_CHROMEDRIVER_VERSION=false
node node_modules/chromedriver/install.js --chromedriver-force-download

# set annotation on the build
buildkite-agent annotate --style info --context chrome-beta "This build uses Google Chrome Beta @ ${CHROMEDRIVER_VERSION}"
fi

# prevent non-zero exit code from breaking the loop
set +e;
node ./scripts/functional_tests \
Expand Down

0 comments on commit e66450e

Please sign in to comment.