Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/blog-auditor.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/cloclo.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/daily-model-inventory.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/daily-multi-device-docs-tester.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/docs-noob-tester.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/slide-deck-maintainer.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/smoke-claude.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/smoke-codex.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/smoke-copilot-aoai-apikey.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/smoke-copilot-aoai-entra.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/smoke-copilot-arm.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/smoke-copilot.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/visual-regression-checker.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .github/workflows/weekly-editors-health-check.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions pkg/constants/version_constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,11 @@ const MCPGIntegrityReactionsMinVersion Version = "v0.2.18"
// DefaultPlaywrightMCPVersion is the default version of the @playwright/mcp package
const DefaultPlaywrightMCPVersion Version = "0.0.77"

// DefaultPlaywrightCLIVersion is the default version of the @playwright/cli package
// DefaultPlaywrightCLIVersion is the default version of the @playwright/cli package.
// Used when tools.playwright.mode is "cli" to install the CLI tool instead of the MCP server.
const DefaultPlaywrightCLIVersion Version = "0.1.15"
// Keep this version outside the default 3-day npm release-age cooldown window enforced by
// generated Playwright CLI install steps. See TestDefaultPlaywrightCLIVersionOutsideCooldownWindow.
const DefaultPlaywrightCLIVersion Version = "0.1.14"

// DefaultPlaywrightBrowserVersion is the default version of the Playwright browser Docker image
const DefaultPlaywrightBrowserVersion Version = "v1.61.1"
Expand Down
30 changes: 30 additions & 0 deletions pkg/constants/version_constants_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//go:build !integration

package constants

import (
"testing"
"time"
)

func TestDefaultPlaywrightCLIVersionOutsideCooldownWindow(t *testing.T) {
const (
expectedVersion Version = "0.1.14"
publishedAtRFC3339 = "2026-06-10T00:20:51.773Z"
minReleaseAge = 72 * time.Hour
)

if DefaultPlaywrightCLIVersion != expectedVersion {
t.Fatalf("DefaultPlaywrightCLIVersion = %q, want %q; update this test metadata when changing the pinned default", DefaultPlaywrightCLIVersion, expectedVersion)
}

publishedAt, err := time.Parse(time.RFC3339Nano, publishedAtRFC3339)
if err != nil {
t.Fatalf("parse publishedAtRFC3339: %v", err)
}

age := time.Since(publishedAt)
if age < minReleaseAge {
t.Fatalf("@playwright/cli@%s is only %s old, but Playwright CLI installs enforce a %s npm release-age cooldown", DefaultPlaywrightCLIVersion, age.Round(time.Second), minReleaseAge)
}
}
33 changes: 33 additions & 0 deletions pkg/workflow/playwright_cli_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//go:build !integration

package workflow

import (
"strings"
"testing"

"github.com/github/gh-aw/pkg/constants"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestGeneratePlaywrightCLIInstallSteps_DefaultVersionUsesCooldown(t *testing.T) {
steps := generatePlaywrightCLIInstallSteps(&WorkflowData{
Tools: map[string]any{
"playwright": map[string]any{
"mode": "cli",
},
},
})

require.Len(t, steps, 2, "expected npm install step plus skills install step")

installStep := strings.Join(steps[0], "\n")
assert.Contains(t, installStep, "npm install -g @playwright/cli@"+string(constants.DefaultPlaywrightCLIVersion))
assert.Contains(t, installStep, "NPM_CONFIG_MIN_RELEASE_AGE: '3'")
assert.Contains(t, installStep, "timeout-minutes: 10")

skillsStep := strings.Join(steps[1], "\n")
assert.Contains(t, skillsStep, "playwright-cli install --skills")
assert.Contains(t, skillsStep, "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1'")
}
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ jobs:
- name: Install AWF binary
run: bash "${RUNNER_TEMP}/gh-aw/actions/install_awf_binary.sh" v0.27.20 --rootless
- name: Install Playwright CLI
run: npm install -g @playwright/cli@0.1.15
run: npm install -g @playwright/cli@0.1.14
env:
NPM_CONFIG_MIN_RELEASE_AGE: '3'
timeout-minutes: 10
Expand Down