Skip to content
2 changes: 2 additions & 0 deletions docs/src/content/docs/reference/network.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,10 @@ Mix ecosystem identifiers with specific domains for fine-grained control:
| `containers` | Docker Hub, GitHub Container Registry, Quay |
| `linux-distros` | Debian, Alpine, and other Linux package repositories |
| `dotnet`, `dart`, `go`, `haskell`, `java`, `julia`, `node`, `perl`, `php`, `python`, `ruby`, `rust`, `swift` | Language-specific package managers and registries |
| `deno` | Deno runtime (`deno.land`, `jsr.io`, `*.jsr.io`, `googleapis.deno.dev`, `fresh.deno.dev`) |
| `terraform` | HashiCorp and Terraform domains |
| `playwright` | Playwright testing framework domains (see [Playwright Reference](/gh-aw/reference/playwright/)) |
| `chrome` | Headless Chrome/Puppeteer browser testing (`*.google.com`, `*.googleapis.com`, `*.gvt1.com`) |

Common identifiers: `python` (PyPI/pip), `node` (npm/yarn/pnpm), `containers` (Docker Hub/GHCR), `go` (proxy.golang.org). See the [Network Configuration Guide](/gh-aw/guides/network-configuration/) for complete domain lists.

Expand Down
6 changes: 4 additions & 2 deletions pkg/workflow/data/ecosystem_domains.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"bazel": ["releases.bazel.build", "mirror.bazel.build", "bcr.bazel.build", "blog.bazel.build", "pypi.org", "files.pythonhosted.org"],
"bazel": ["releases.bazel.build", "mirror.bazel.build", "bcr.bazel.build", "blog.bazel.build"],
"chrome": ["*.google.com", "*.googleapis.com", "*.gvt1.com"],
"clojure": ["repo.clojars.org", "clojars.org"],
"containers": ["ghcr.io", "registry.hub.docker.com", "*.docker.io", "*.docker.com", "production.cloudflare.docker.com", "dl.k8s.io", "pkgs.k8s.io", "quay.io", "mcr.microsoft.com", "gcr.io", "auth.docker.io"],
"dart": ["pub.dev", "pub.dartlang.org", "storage.googleapis.com"],
Expand Down Expand Up @@ -40,6 +41,7 @@
"packages.microsoft.com",
"www.googleapis.com"
],
"deno": ["deno.land", "jsr.io", "*.jsr.io", "googleapis.deno.dev", "fresh.deno.dev"],
"dev-tools": [
"app.renovatebot.com",
"appveyor.com",
Expand All @@ -62,7 +64,6 @@
"sonarqube.com",
"travis-ci.com"
],
"local": ["127.0.0.1", "::1", "localhost"],
"dotnet": [
"nuget.org",
"dist.nuget.org",
Expand Down Expand Up @@ -176,6 +177,7 @@
"download.opensuse.org",
"cdn.redhat.com"
],
"local": ["127.0.0.1", "::1", "localhost"],
"lua": ["luarocks.org", "www.luarocks.org"],
"node": [
"npmjs.org",
Expand Down
8 changes: 6 additions & 2 deletions pkg/workflow/domains.go
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,11 @@ func getDomainsFromRuntimes(runtimes map[string]any) []string {
//
// # Supported ecosystem identifiers:
// - "defaults": basic infrastructure (certs, JSON schema, Ubuntu, package mirrors)
// - "chrome": headless Chrome/Puppeteer browser testing (*.google.com, *.googleapis.com, *.gvt1.com)
// - "clojure": Clojure/Clojars
// - "containers": container registries (Docker, GHCR, etc.)
// - "dart": Dart/Flutter ecosystem
// - "deno": Deno runtime (deno.land, *.jsr.io, googleapis.deno.dev, fresh.deno.dev)
// - "dotnet": .NET and NuGet ecosystem
// - "elixir": Elixir/Hex
// - "github": GitHub domains (*.githubusercontent.com, github.githubassets.com, etc.)
Expand Down Expand Up @@ -342,14 +344,16 @@ var ecosystemPriority = []string{
"dart",
"defaults",
"dev-tools",
"deno", // before "node" — deno-specific domains take precedence over the broader node set
"dotnet",
"elixir",
"fonts",
"fonts", // before "chrome" — fonts.googleapis.com is a fonts domain, not a chrome domain
"github",
"github-actions",
"go",
"haskell",
"java",
"java", // before "chrome" — maven.google.com and dl.google.com are Java domains, not chrome domains
"chrome",
"kotlin",
"linux-distros",
"local",
Expand Down
83 changes: 82 additions & 1 deletion pkg/workflow/domains_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func TestGetDomainEcosystem(t *testing.T) {
expected: "containers",
},

// Fonts ecosystem
// Fonts ecosystem (takes priority over chrome for fonts.googleapis.com)
{
name: "fonts ecosystem - fonts.googleapis.com",
domain: "fonts.googleapis.com",
Expand All @@ -55,6 +55,77 @@ func TestGetDomainEcosystem(t *testing.T) {
expected: "fonts",
},

// Chrome ecosystem (headless Chrome/Puppeteer browser testing)
{
name: "chrome ecosystem - accounts.google.com",
domain: "accounts.google.com",
expected: "chrome",
},
{
name: "chrome ecosystem - www.google.com",
domain: "www.google.com",
expected: "chrome",
},
{
name: "chrome ecosystem - safebrowsing.googleapis.com",
domain: "safebrowsing.googleapis.com",
expected: "chrome",
},
{
name: "chrome ecosystem - optimizationguide-pa.googleapis.com",
domain: "optimizationguide-pa.googleapis.com",
expected: "chrome",
},
{
name: "chrome ecosystem - update.googleapis.com",
domain: "update.googleapis.com",
expected: "chrome",
},
{
name: "chrome ecosystem - redirector.gvt1.com",
domain: "redirector.gvt1.com",
expected: "chrome",
},
// Java ecosystem takes priority over chrome for its Google domains
{
name: "java ecosystem - maven.google.com (not chrome)",
domain: "maven.google.com",
expected: "java",
},
{
name: "java ecosystem - dl.google.com (not chrome)",
domain: "dl.google.com",
expected: "java",
},
// Defaults ecosystem takes priority over chrome for packages.cloud.google.com
{
name: "defaults ecosystem - packages.cloud.google.com (not chrome)",
domain: "packages.cloud.google.com",
expected: "defaults",
},

// Deno ecosystem
{
name: "deno ecosystem - fresh.deno.dev",
domain: "fresh.deno.dev",
expected: "deno",
},
{
name: "deno ecosystem - googleapis.deno.dev",
domain: "googleapis.deno.dev",
expected: "deno",
},
{
name: "deno ecosystem - deno.land",
domain: "deno.land",
expected: "deno",
},
{
name: "deno ecosystem - jsr.io subdomain",
domain: "api.jsr.io",
expected: "deno",
},

// Node CDNs ecosystem
{
name: "node-cdns ecosystem - cdn.jsdelivr.net",
Expand Down Expand Up @@ -433,6 +504,16 @@ func TestGetAllowedDomains_VariousCombinations(t *testing.T) {
allowed: []string{"fonts"},
expectContains: []string{"fonts.googleapis.com", "fonts.gstatic.com"},
},
{
name: "chrome ecosystem",
allowed: []string{"chrome"},
expectContains: []string{"*.google.com", "*.googleapis.com", "*.gvt1.com"},
},
{
name: "deno ecosystem",
allowed: []string{"deno"},
expectContains: []string{"deno.land", "jsr.io", "*.jsr.io", "googleapis.deno.dev", "fresh.deno.dev"},
},
{
name: "node-cdns ecosystem",
allowed: []string{"node-cdns"},
Expand Down
Loading