blob: 5be91df743602db7ec172cfd256c348671bc4f15 [file] [edit]
#!/usr/bin/env bash
# Refresh pinned browsers/drivers; when a new stable Chrome major has no checked-in DevTools
# version, regenerate CDP so the two never drift. Writes the job "output" as space-separated tags
# the PR reports: "major" on a Chrome/Firefox major bump (CI then runs the full Ruby matrix) and
# "cdp" when DevTools was regenerated.
#
# set -e is load-bearing: if update_cdp fails the job fails before "output" is written, so
# create-pr is skipped and a Chrome bump can never land ahead of its CDP.
set -euo pipefail
old="$RUNNER_TEMP/repositories-old.bzl"
git show HEAD:common/repositories.bzl > "$old"
bazel run //scripts:pinned_browsers
# Sorted-unique major versions of one family in a repositories.bzl; $1 = file, $2 = ERE matching
# "<download-url marker><major digits>".
majors_for() { grep -oE "$2" "$1" | grep -oE '[0-9]+$' | sort -un; }
# Only Chrome and Firefox majors warrant the full matrix: they ship ~monthly and are the likeliest
# to break the bindings. Edge tracks Chromium; driver-only and build/patch bumps do not count. Each
# ERE matches the marker preceding the major in the download URLs pinned in repositories.bzl.
declare -A families=(
[chrome]='chrome-for-testing-public/[0-9]+'
[firefox]='(firefox/releases/|Firefox%20)[0-9]+'
)
# New stable Chrome is the lowest pinned major (beta runs ahead). Tolerate a no-match (|| true) so a
# marker/format change in repositories.bzl fails with a clear message, not a bare pipefail exit.
chrome_majors=$(majors_for common/repositories.bzl "${families[chrome]}") || true
chrome=${chrome_majors%%$'\n'*}
if [ -z "$chrome" ]; then
echo "::error::Could not parse a stable Chrome major from common/repositories.bzl (pattern: ${families[chrome]})" >&2
exit 1
fi
echo "Stable Chrome major: v${chrome}"
# Regenerate CDP when the stable Chrome major has no checked-in devtools dir.
regen_cdp=false
if [ -d "common/devtools/chromium/v${chrome}" ]; then
echo "DevTools for Chrome v${chrome} already present; skipping CDP regeneration"
else
echo "No DevTools for Chrome v${chrome}; regenerating CDP"
bazel run //scripts:update_cdp -- --chrome_channel=Stable
# update_cdp resolves the Stable channel itself; verify it produced this major's dir so a Stable
# release mid-run can't leave us pinning Chrome ahead of its DevTools (blocks the PR if it did).
if [ ! -d "common/devtools/chromium/v${chrome}" ]; then
echo "::error::CDP regeneration did not produce common/devtools/chromium/v${chrome}; refusing to pin Chrome ahead of its DevTools" >&2
exit 1
fi
# the selenium-devtools version has updated, need to re-resolve the lockfile
bazel run //rb:bundle-lock
regen_cdp=true
fi
major=false
for pattern in "${families[@]}"; do
if [ "$(majors_for "$old" "$pattern")" != "$(majors_for common/repositories.bzl "$pattern")" ]; then
major=true
break
fi
done
output=""
[ "$major" = true ] && output="major"
[ "$regen_cdp" = true ] && output="${output:+$output }cdp"
echo "Update tags: ${output:-none}"
echo "output=$output" >> "$GITHUB_OUTPUT"