From 9814932d37089ce5e5d5fd6b917465504dec0cf3 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 24 May 2026 23:08:20 -0700 Subject: [PATCH] Provision extension-capable Chromium in plugin CI --- .github/workflows/test-parallel.yml | 70 ++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-parallel.yml b/.github/workflows/test-parallel.yml index f870b5f9..cc7236c1 100644 --- a/.github/workflows/test-parallel.yml +++ b/.github/workflows/test-parallel.yml @@ -70,7 +70,12 @@ jobs: json_array+="," fi - json_array+="{\"plugin\":\"$plugin_name\",\"name\":\"plugin/$plugin_name\"}" + needs_chromium=false + if grep -Riq "chrom" "abx-plugins/abx_plugins/plugins/$plugin_name"; then + needs_chromium=true + fi + + json_array+="{\"plugin\":\"$plugin_name\",\"name\":\"plugin/$plugin_name\",\"needs_chromium\":$needs_chromium}" done json_array+="]" @@ -214,6 +219,69 @@ jobs: uv sync --dev --all-extras --no-sources --no-cache uv pip install -e ./abxpkg -e ./abx-plugins[dev] -e ./abx-dl + - name: Select Chromium for extension-capable CDP + if: ${{ matrix.plugin.needs_chromium }} + env: + MIN_CHROMIUM_MAJOR: "149" + LIB_DIR: ${{ runner.temp }}/abx-lib + ABXPKG_LIB_DIR: ${{ runner.temp }}/abx-lib + run: | + set -euo pipefail + mkdir -p "$LIB_DIR" + echo "LIB_DIR=$LIB_DIR" >> "$GITHUB_ENV" + echo "ABXPKG_LIB_DIR=$ABXPKG_LIB_DIR" >> "$GITHUB_ENV" + + candidate="/usr/bin/chromium" + version="" + major=0 + if [ -x "$candidate" ]; then + version="$("$candidate" --version || true)" + major="$(printf '%s\n' "$version" | sed -E 's/.* ([0-9]+)\..*/\1/' | head -1)" + case "$major" in + ''|*[!0-9]*) major=0 ;; + esac + fi + + if [ "$major" -ge "$MIN_CHROMIUM_MAJOR" ]; then + echo "Using runner Chromium: $candidate ($version)" + echo "CHROME_BINARY=$candidate" >> "$GITHUB_ENV" + exit 0 + fi + + echo "Runner Chromium is unavailable or too old: ${version:-not found}" + echo "Installing Playwright Chromium into $LIB_DIR..." + uv run --no-sync --no-sources abxpkg install \ + --binproviders=npm \ + --lib="$LIB_DIR" \ + --postinstall-scripts=false \ + --min-release-age=0 \ + --no-cache \ + --overrides='{"npm":{"install_args":["playwright@next"]}}' \ + playwright + uv run --no-sync --no-sources abxpkg install \ + --binproviders=playwright \ + --lib="$LIB_DIR" \ + --bin-dir="$LIB_DIR/env/bin" \ + --min-version="$MIN_CHROMIUM_MAJOR" \ + chromium + + candidate="$LIB_DIR/env/bin/chromium" + if [ ! -x "$candidate" ]; then + echo "Playwright Chromium shim was not created at $candidate" >&2 + exit 1 + fi + version="$("$candidate" --version || true)" + major="$(printf '%s\n' "$version" | sed -E 's/.* ([0-9]+)\..*/\1/' | head -1)" + case "$major" in + ''|*[!0-9]*) major=0 ;; + esac + if [ "$major" -lt "$MIN_CHROMIUM_MAJOR" ]; then + echo "Playwright Chromium is still too old: ${version:-unknown}" >&2 + exit 1 + fi + echo "Using Playwright Chromium: $candidate ($version)" + echo "CHROME_BINARY=$candidate" >> "$GITHUB_ENV" + - name: Run plugin tests - ${{ matrix.plugin.name }} env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}