From a26d7b200c90383488880ded912bfce0ac8e394d Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Wed, 5 Nov 2025 21:42:54 +0100 Subject: [PATCH 01/37] Install endform --- package.json | 1 + yarn.lock | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/package.json b/package.json index 5d7dd234e25f1..01cbd454bfd42 100644 --- a/package.json +++ b/package.json @@ -182,6 +182,7 @@ "cypress": "14.3.2", "cypress-file-upload": "5.0.8", "cypress-recurse": "^1.35.3", + "endform": "^0.45.10", "enquirer": "^2.4.1", "esbuild": "0.25.8", "esbuild-loader": "4.3.0", diff --git a/yarn.lock b/yarn.lock index 9a61d066022c6..8f5d884941a0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16118,6 +16118,57 @@ __metadata: languageName: node linkType: hard +"endform-darwin-arm64@npm:0.45.10": + version: 0.45.10 + resolution: "endform-darwin-arm64@npm:0.45.10" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"endform-darwin-x86@npm:0.45.10": + version: 0.45.10 + resolution: "endform-darwin-x86@npm:0.45.10" + conditions: os=darwin & cpu=x86 + languageName: node + linkType: hard + +"endform-linux-arm64@npm:0.45.10": + version: 0.45.10 + resolution: "endform-linux-arm64@npm:0.45.10" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"endform-linux-x86@npm:0.45.10": + version: 0.45.10 + resolution: "endform-linux-x86@npm:0.45.10" + conditions: os=linux & cpu=x86 + languageName: node + linkType: hard + +"endform@npm:^0.45.10": + version: 0.45.10 + resolution: "endform@npm:0.45.10" + dependencies: + endform-darwin-arm64: "npm:0.45.10" + endform-darwin-x86: "npm:0.45.10" + endform-linux-arm64: "npm:0.45.10" + endform-linux-x86: "npm:0.45.10" + dependenciesMeta: + endform-darwin-arm64: + optional: true + endform-darwin-x86: + optional: true + endform-linux-arm64: + optional: true + endform-linux-x86: + optional: true + bin: + endform: bin/endform + checksum: 10/400e818616be580c1a4228f57e72f6f04a56e1abe0a12e5647c4ebbe96e7acd76a47a75e7422af6b8de44d308ba0e626b88efd302c246540a554e79971d77dd9 + languageName: node + linkType: hard + "engine.io-parser@npm:~5.2.1": version: 5.2.3 resolution: "engine.io-parser@npm:5.2.3" @@ -19004,6 +19055,7 @@ __metadata: date-fns: "npm:4.1.0" debounce-promise: "npm:3.1.2" diff: "npm:^8.0.0" + endform: "npm:^0.45.10" enquirer: "npm:^2.4.1" esbuild: "npm:0.25.8" esbuild-loader: "npm:4.3.0" From ec6b3bae2f23af2cbbf2c6f7f578db8900b01468 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Wed, 5 Nov 2025 21:48:17 +0100 Subject: [PATCH 02/37] Modify playwright config --- playwright.config.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/playwright.config.ts b/playwright.config.ts index decf031fbc1d4..c714dcbe5dbc8 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -26,11 +26,10 @@ export const baseConfig: PlaywrightTestConfig = { retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, - reporter: [ - ['html'], // pretty - ], + reporter: [['list']], + timeout: 480_000, expect: { - timeout: 10_000, + timeout: 80_000, }, use: { ...devices['Desktop Chrome'], @@ -54,6 +53,7 @@ export default defineConfig({ url: DEFAULT_URL, stdout: 'pipe', stderr: 'pipe', + reuseExistingServer: true, }, }), projects: [ From d9eda83dcefa5d00a69823c636180303aeef35fe Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Wed, 5 Nov 2025 21:58:23 +0100 Subject: [PATCH 03/37] TODO: Port works, but not URL --- playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playwright.config.ts b/playwright.config.ts index c714dcbe5dbc8..f76a40087ca5d 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -50,7 +50,7 @@ export default defineConfig({ ...(!process.env.GRAFANA_URL && { webServer: { command: 'yarn e2e:plugin:build && ./e2e-playwright/start-server', - url: DEFAULT_URL, + port: 3001, stdout: 'pipe', stderr: 'pipe', reuseExistingServer: true, From 1a25a87316463b91ac5a2ab82d1b22d498732aeb Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 13:52:41 +0100 Subject: [PATCH 04/37] Turn trace on --- playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playwright.config.ts b/playwright.config.ts index f76a40087ca5d..28656c102ef1f 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -34,7 +34,7 @@ export const baseConfig: PlaywrightTestConfig = { use: { ...devices['Desktop Chrome'], baseURL: process.env.GRAFANA_URL ?? DEFAULT_URL, - trace: 'retain-on-failure', + trace: 'on', httpCredentials: { username: 'admin', password: 'admin', From b399ddee6803f105ce06a2c6e697431c6f8191e3 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 13:53:12 +0100 Subject: [PATCH 05/37] Cache assets --- pkg/api/http_server.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pkg/api/http_server.go b/pkg/api/http_server.go index d8b252ba40694..967cc34808790 100644 --- a/pkg/api/http_server.go +++ b/pkg/api/http_server.go @@ -780,19 +780,16 @@ func (hs *HTTPServer) mapStatic(m *web.Mux, rootDir string, dir string, prefix s if prefix == "public/build" { headers = func(c *web.Context) { - c.Resp.Header().Set("Cache-Control", "public, max-age=31536000") + c.Resp.Header().Set("Cache-Control", "public, max-age=31536000, immutable") } - } - - if hs.Cfg.Env == setting.Dev { + } else if prefix == "mockServiceWorker.js" { headers = func(c *web.Context) { c.Resp.Header().Set("Cache-Control", "max-age=0, must-revalidate, no-cache") + c.Resp.Header().Set("Content-Type", "application/javascript") } - } - - if prefix == "mockServiceWorker.js" { + } else if hs.Cfg.Env == setting.Dev { headers = func(c *web.Context) { - c.Resp.Header().Set("Content-Type", "application/javascript") + c.Resp.Header().Set("Cache-Control", "max-age=0, must-revalidate, no-cache") } } From 0274215f5a75247c0ad8a6081fccd442ae560ef7 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 14:02:58 +0100 Subject: [PATCH 06/37] Don't run playwright install --- pkg/build/e2eutil/frontend_container.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/pkg/build/e2eutil/frontend_container.go b/pkg/build/e2eutil/frontend_container.go index e9de7e6c975cd..2e8f903de39f8 100644 --- a/pkg/build/e2eutil/frontend_container.go +++ b/pkg/build/e2eutil/frontend_container.go @@ -25,9 +25,8 @@ func WithFrontendContainer(ctx context.Context, d *dagger.Client, yarnHostSrc *d } nodeBase := WithNode(d, deps.NodeVersion) - playwrightBase := WithPlaywright(d, nodeBase, deps.PlaywrightVersion) - return WithYarnInstall(d, playwrightBase, yarnHostSrc), nil + return WithYarnInstall(d, nodeBase, yarnHostSrc), nil } func GetVersions(ctx context.Context, src *dagger.Directory) (Deps, error) { @@ -59,14 +58,6 @@ func WithNode(d *dagger.Client, version string) *dagger.Container { return d.Container().From(nodeImage) } -func WithPlaywright(d *dagger.Client, base *dagger.Container, version string) *dagger.Container { - brCache := d.CacheVolume("playwright-browsers") - return base. - WithEnvVariable("PLAYWRIGHT_BROWSERS_PATH", "/playwright-cache"). - WithMountedCache("/playwright-cache", brCache). - WithExec([]string{"npx", "-y", "playwright@" + version, "install", "--with-deps"}) -} - func WithYarnInstall(d *dagger.Client, base *dagger.Container, yarnHostSrc *dagger.Directory) *dagger.Container { yarnCache := d.CacheVolume("yarn-cache") From ae439c4dcf5d57f0634216113970b2474a9d6128 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 14:21:14 +0100 Subject: [PATCH 07/37] Upgrade endform CLI --- package.json | 2 +- yarn.lock | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 01cbd454bfd42..202e6095f466a 100644 --- a/package.json +++ b/package.json @@ -182,7 +182,7 @@ "cypress": "14.3.2", "cypress-file-upload": "5.0.8", "cypress-recurse": "^1.35.3", - "endform": "^0.45.10", + "endform": "^0.45.12", "enquirer": "^2.4.1", "esbuild": "0.25.8", "esbuild-loader": "4.3.0", diff --git a/yarn.lock b/yarn.lock index 8f5d884941a0a..49225b795674c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16118,42 +16118,42 @@ __metadata: languageName: node linkType: hard -"endform-darwin-arm64@npm:0.45.10": - version: 0.45.10 - resolution: "endform-darwin-arm64@npm:0.45.10" +"endform-darwin-arm64@npm:0.45.12": + version: 0.45.12 + resolution: "endform-darwin-arm64@npm:0.45.12" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"endform-darwin-x86@npm:0.45.10": - version: 0.45.10 - resolution: "endform-darwin-x86@npm:0.45.10" +"endform-darwin-x86@npm:0.45.12": + version: 0.45.12 + resolution: "endform-darwin-x86@npm:0.45.12" conditions: os=darwin & cpu=x86 languageName: node linkType: hard -"endform-linux-arm64@npm:0.45.10": - version: 0.45.10 - resolution: "endform-linux-arm64@npm:0.45.10" +"endform-linux-arm64@npm:0.45.12": + version: 0.45.12 + resolution: "endform-linux-arm64@npm:0.45.12" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"endform-linux-x86@npm:0.45.10": - version: 0.45.10 - resolution: "endform-linux-x86@npm:0.45.10" +"endform-linux-x86@npm:0.45.12": + version: 0.45.12 + resolution: "endform-linux-x86@npm:0.45.12" conditions: os=linux & cpu=x86 languageName: node linkType: hard -"endform@npm:^0.45.10": - version: 0.45.10 - resolution: "endform@npm:0.45.10" +"endform@npm:^0.45.12": + version: 0.45.12 + resolution: "endform@npm:0.45.12" dependencies: - endform-darwin-arm64: "npm:0.45.10" - endform-darwin-x86: "npm:0.45.10" - endform-linux-arm64: "npm:0.45.10" - endform-linux-x86: "npm:0.45.10" + endform-darwin-arm64: "npm:0.45.12" + endform-darwin-x86: "npm:0.45.12" + endform-linux-arm64: "npm:0.45.12" + endform-linux-x86: "npm:0.45.12" dependenciesMeta: endform-darwin-arm64: optional: true @@ -16165,7 +16165,7 @@ __metadata: optional: true bin: endform: bin/endform - checksum: 10/400e818616be580c1a4228f57e72f6f04a56e1abe0a12e5647c4ebbe96e7acd76a47a75e7422af6b8de44d308ba0e626b88efd302c246540a554e79971d77dd9 + checksum: 10/beba5282d625f1c20a3f1462a7d7ac731734dd9e5502da718b0b58886c669d91562280795a782c748b9dcfdcf6502459fab90ad5d6910dfb359b84e4085bafcc languageName: node linkType: hard @@ -19055,7 +19055,7 @@ __metadata: date-fns: "npm:4.1.0" debounce-promise: "npm:3.1.2" diff: "npm:^8.0.0" - endform: "npm:^0.45.10" + endform: "npm:^0.45.12" enquirer: "npm:^2.4.1" esbuild: "npm:0.25.8" esbuild-loader: "npm:4.3.0" From 24db1c1957a236b8bd7d3a9b2d5a0301dad236e3 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 14:21:31 +0100 Subject: [PATCH 08/37] Use endform CLI instead of Playwright --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 202e6095f466a..440a09a466bde 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "e2e:enterprise": "./e2e/start-and-run-suite enterprise", "e2e:enterprise:dev": "./e2e/start-and-run-suite enterprise dev", "e2e:enterprise:debug": "./e2e/start-and-run-suite enterprise debug", - "e2e:playwright": "yarn playwright test --grep-invert @cloud-plugins", + "e2e:playwright": "yarn endform test --grep-invert @cloud-plugins", "e2e:playwright:cloud-plugins": "yarn playwright test --grep @cloud-plugins", "e2e:playwright:storybook": "yarn playwright test -c playwright.storybook.config.ts", "e2e:acceptance": "yarn playwright test --grep @acceptance", From fe87099002f8536b834cd602d962cb5707dbe7c7 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 14:41:26 +0100 Subject: [PATCH 09/37] Remove extra flags from command --- pkg/build/e2e-playwright/e2e.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pkg/build/e2e-playwright/e2e.go b/pkg/build/e2e-playwright/e2e.go index f23cbdeafe819..0a89a58dc1f9a 100644 --- a/pkg/build/e2e-playwright/e2e.go +++ b/pkg/build/e2e-playwright/e2e.go @@ -99,12 +99,7 @@ func buildPlaywrightCommand(opts RunTestOpts) []string { playwrightExec := strings.Split(opts.PlaywrightCommand, " ") - playwrightCommand := append(playwrightExec, - "--reporter", - strings.Join(playwrightReporters, ","), - "--output", - testResultsDir, - ) + playwrightCommand := playwrightExec if opts.Shard != "" { playwrightCommand = append(playwrightCommand, "--shard", opts.Shard) From 1ce9f7c2a9e46a3c8cac7a81668eb526c4cb5fca Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 14:55:38 +0100 Subject: [PATCH 10/37] Proxy network hosts --- endform.jsonc | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 endform.jsonc diff --git a/endform.jsonc b/endform.jsonc new file mode 100644 index 0000000000000..ad557f333b860 --- /dev/null +++ b/endform.jsonc @@ -0,0 +1,3 @@ +{ + "proxyNetworkHosts": ["", "*.dagger.local"] +} From fd9a082c7b11be4756bae5adfc06d14edaee5fd5 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 15:02:03 +0100 Subject: [PATCH 11/37] More hosts --- endform.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/endform.jsonc b/endform.jsonc index ad557f333b860..08cf1811960ff 100644 --- a/endform.jsonc +++ b/endform.jsonc @@ -1,3 +1,3 @@ { - "proxyNetworkHosts": ["", "*.dagger.local"] + "proxyNetworkHosts": ["", "*.dagger.local", "host.docker.internal", "*:3001"] } From 0436cc71a9459ad87da188007e29e4a7cefdc206 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Sat, 8 Nov 2025 15:09:29 +0100 Subject: [PATCH 12/37] One more --- endform.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/endform.jsonc b/endform.jsonc index 08cf1811960ff..6cbbb8e50b0e0 100644 --- a/endform.jsonc +++ b/endform.jsonc @@ -1,3 +1,3 @@ { - "proxyNetworkHosts": ["", "*.dagger.local", "host.docker.internal", "*:3001"] + "proxyNetworkHosts": ["", "*.dagger.local", "host.docker.internal", "*:3001", "10.87.0.25:3001"] } From d74d0fb4f9e6ae113cbf3b93a0799910c207477c Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 10 Nov 2025 10:05:34 +0100 Subject: [PATCH 13/37] Endform API key --- .github/workflows/pr-e2e-tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index c01507f29230a..3f34184e5913a 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -107,6 +107,8 @@ jobs: name: grafana-tar-gz - name: Run E2E tests uses: dagger/dagger-for-github@d913e70051faf3b907d4dd96ef1161083c88c644 + env: + ENDFORM_API_KEY: ${{ secrets.ENDFORM_API_KEY }} with: version: 0.18.8 verb: run From 19c71d2d0723301aa08bc64c4dbddb025d1caa43 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 10 Nov 2025 10:05:46 +0100 Subject: [PATCH 14/37] No report --- .github/workflows/pr-e2e-tests.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 3f34184e5913a..652bb1583b40b 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -113,9 +113,3 @@ jobs: version: 0.18.8 verb: run args: go run ./pkg/build/e2e-playwright --package=grafana.tar.gz --shard=${{ matrix.shard }}/${{ matrix.shardTotal }} --blob-dir=./blob-report - - uses: actions/upload-artifact@v5 - if: success() || failure() - with: - name: playwright-blob-${{ github.run_number }}-${{ matrix.shard }} - path: ./blob-report - retention-days: 1 From 668cafdb2336f5a127e31e8d1923331e5c798998 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 10 Nov 2025 10:18:05 +0100 Subject: [PATCH 15/37] Order --- .github/workflows/pr-e2e-tests.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 652bb1583b40b..1a7cc010d797b 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -102,14 +102,16 @@ jobs: - uses: actions/checkout@v5 with: persist-credentials: false + - uses: actions/download-artifact@v6 with: name: grafana-tar-gz + - name: Run E2E tests uses: dagger/dagger-for-github@d913e70051faf3b907d4dd96ef1161083c88c644 - env: - ENDFORM_API_KEY: ${{ secrets.ENDFORM_API_KEY }} with: version: 0.18.8 verb: run args: go run ./pkg/build/e2e-playwright --package=grafana.tar.gz --shard=${{ matrix.shard }}/${{ matrix.shardTotal }} --blob-dir=./blob-report + env: + ENDFORM_API_KEY: ${{ secrets.ENDFORM_API_KEY }} From e7cce146e97a70d006952e859939538c9a2e446f Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 10 Nov 2025 10:20:14 +0100 Subject: [PATCH 16/37] Pass env var through --- pkg/build/e2e-playwright/e2e.go | 5 +++++ pkg/build/e2e-playwright/main.go | 2 ++ 2 files changed, 7 insertions(+) diff --git a/pkg/build/e2e-playwright/e2e.go b/pkg/build/e2e-playwright/e2e.go index 0a89a58dc1f9a..584966e4a3481 100644 --- a/pkg/build/e2e-playwright/e2e.go +++ b/pkg/build/e2e-playwright/e2e.go @@ -25,6 +25,7 @@ type RunTestOpts struct { TestResultsExportDir string PlaywrightCommand string CloudPluginCreds *dagger.File + EndformAPIKey string } func RunTest( @@ -56,6 +57,10 @@ func RunTest( e2eContainer = e2eContainer.WithMountedFile("/tmp/outputs.json", opts.CloudPluginCreds) } + if opts.EndformAPIKey != "" { + e2eContainer = e2eContainer.WithEnvVariable("ENDFORM_API_KEY", opts.EndformAPIKey) + } + e2eContainer = e2eContainer.WithExec(playwrightCommand, dagger.ContainerWithExecOpts{ Expect: dagger.ReturnTypeAny, }) diff --git a/pkg/build/e2e-playwright/main.go b/pkg/build/e2e-playwright/main.go index 97f4caf2e0efd..6a2699e06f5c6 100644 --- a/pkg/build/e2e-playwright/main.go +++ b/pkg/build/e2e-playwright/main.go @@ -97,6 +97,7 @@ func run(ctx context.Context, cmd *cli.Command) error { htmlDir := cmd.String("html-dir") blobDir := cmd.String("blob-dir") playwrightCommand := cmd.String("playwright-command") + endformAPIKey := os.Getenv("ENDFORM_API_KEY") // pa11yConfigPath := cmd.String("config") // pa11yResultsPath := cmd.String("results") // noThresholdFail := cmd.Bool("no-threshold-fail") @@ -194,6 +195,7 @@ func run(ctx context.Context, cmd *cli.Command) error { BlobReportExportDir: blobDir, PlaywrightCommand: playwrightCommand, CloudPluginCreds: cloudPluginCreds, + EndformAPIKey: endformAPIKey, } c, runErr := RunTest(ctx, d, runOpts) From e5bedbdf5707c977316331883a25244728fef0d2 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 10 Nov 2025 10:55:19 +0100 Subject: [PATCH 17/37] Try with just installing ca-certificates package --- pkg/build/e2eutil/frontend_container.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/build/e2eutil/frontend_container.go b/pkg/build/e2eutil/frontend_container.go index 2e8f903de39f8..522240dae08f9 100644 --- a/pkg/build/e2eutil/frontend_container.go +++ b/pkg/build/e2eutil/frontend_container.go @@ -55,7 +55,10 @@ func GetVersions(ctx context.Context, src *dagger.Directory) (Deps, error) { func WithNode(d *dagger.Client, version string) *dagger.Container { nodeImage := fmt.Sprintf("node:%s-slim", strings.TrimPrefix(version, "v")) - return d.Container().From(nodeImage) + return d.Container().From(nodeImage). + WithExec([]string{"apt-get", "update"}). + WithExec([]string{"apt-get", "install", "-y", "ca-certificates"}). + WithExec([]string{"rm", "-rf", "/var/lib/apt/lists/*"}) } func WithYarnInstall(d *dagger.Client, base *dagger.Container, yarnHostSrc *dagger.Directory) *dagger.Container { From 4f8da62971930ab4144f87a95883c3f815381efc Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 10 Nov 2025 11:10:20 +0100 Subject: [PATCH 18/37] Proxy host 3ugvf97q49rve --- endform.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/endform.jsonc b/endform.jsonc index 6cbbb8e50b0e0..76a9d7d15a221 100644 --- a/endform.jsonc +++ b/endform.jsonc @@ -1,3 +1,3 @@ { - "proxyNetworkHosts": ["", "*.dagger.local", "host.docker.internal", "*:3001", "10.87.0.25:3001"] + "proxyNetworkHosts": ["", "*.dagger.local", "host.docker.internal", "*:3001", "10.87.0.25:3001", "3ugvf97q49rve"] } From 008cc5185d6b9f0c18cdb86dd0f91c863d941557 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 10 Nov 2025 11:32:35 +0100 Subject: [PATCH 19/37] With explicit port --- endform.jsonc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/endform.jsonc b/endform.jsonc index 76a9d7d15a221..6a3afb78aec05 100644 --- a/endform.jsonc +++ b/endform.jsonc @@ -1,3 +1,3 @@ { - "proxyNetworkHosts": ["", "*.dagger.local", "host.docker.internal", "*:3001", "10.87.0.25:3001", "3ugvf97q49rve"] + "proxyNetworkHosts": ["", "*.dagger.local", "host.docker.internal", "*:3001", "10.87.0.25:3001", "3ugvf97q49rve", "3ugvf97q49rve:3001"] } From abc29d851ce7c9c6cd6b7f9c655fdd1b5cbc71a1 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 16:04:08 +0100 Subject: [PATCH 20/37] WITHOUT DAGGER START --- .github/workflows/pr-e2e-tests.yml | 104 +++++++++++++++++++++++++---- 1 file changed, 92 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 1a7cc010d797b..81bd0e2e28555 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -40,13 +40,38 @@ jobs: build-dir # If no cache hit, build Grafana - - name: Build Grafana + - name: Setup Go + if: steps.cache.outputs.cache-hit != 'true' + uses: actions/setup-go@v5 + with: + go-version: '1.25.3' + + - name: Setup Node.js if: steps.cache.outputs.cache-hit != 'true' - uses: dagger/dagger-for-github@d913e70051faf3b907d4dd96ef1161083c88c644 + uses: actions/setup-node@v4 with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/cmd artifacts -a targz:grafana:linux/amd64 -a docker:grafana:linux/amd64 --grafana-dir="${PWD}" > out.txt + node-version: '24.11.0' + + - name: Cache Node modules + if: steps.cache.outputs.cache-hit != 'true' + uses: actions/cache@v4 + with: + path: | + ~/.npm + .yarn/cache + key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: | + yarn install --frozen-lockfile + + - name: Build Grafana + if: steps.cache.outputs.cache-hit != 'true' + run: | + go run ./pkg/build/cmd artifacts -a targz:grafana:linux/amd64 -a docker:grafana:linux/amd64 --grafana-dir="${PWD}" > out.txt - name: Cat built artifact if: steps.cache.outputs.cache-hit != 'true' run: cat out.txt @@ -107,11 +132,66 @@ jobs: with: name: grafana-tar-gz - - name: Run E2E tests - uses: dagger/dagger-for-github@d913e70051faf3b907d4dd96ef1161083c88c644 + - name: Setup Go + uses: actions/setup-go@v5 with: - version: 0.18.8 - verb: run - args: go run ./pkg/build/e2e-playwright --package=grafana.tar.gz --shard=${{ matrix.shard }}/${{ matrix.shardTotal }} --blob-dir=./blob-report - env: - ENDFORM_API_KEY: ${{ secrets.ENDFORM_API_KEY }} + go-version: '1.25.3' + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '24.11.0' + + - name: Cache Node modules + uses: actions/cache@v4 + with: + path: | + ~/.npm + .yarn/cache + key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + run: | + yarn install --frozen-lockfile + + - name: Build test plugins + run: | + yarn e2e:plugin:build + + - name: Extract Grafana + run: | + mkdir -p grafana-extracted + tar --strip-components=1 -xzf grafana.tar.gz -C grafana-extracted + + - name: Start Grafana server + run: | + cd grafana-extracted + ./bin/grafana-server server \ + --home-path=/tmp/grafana \ + --config=../scripts/grafana-server/custom.ini \ + --http-port=3001 \ + --server.http.addr=0.0.0.0 & + GRAFANA_PID=$! + echo "GRAFANA_PID=$GRAFANA_PID" >> $GITHUB_ENV + + # Wait for Grafana to be ready + timeout 60 bash -c 'until curl -f http://localhost:3001/api/health; do sleep 2; done' + + - name: Run E2E tests + run: | + export CI=true + export GRAFANA_URL=http://localhost:3001 + export PLAYWRIGHT_HTML_OPEN=never + export PLAYWRIGHT_BLOB_OUTPUT_DIR=./blob-report + export ENDFORM_API_KEY=${{ secrets.ENDFORM_API_KEY }} + + yarn e2e:playwright --shard=${{ matrix.shard }}/${{ matrix.shardTotal }} + + - name: Stop Grafana server + if: always() + run: | + if [ -n "$GRAFANA_PID" ]; then + kill $GRAFANA_PID || true + fi From b784f72386ca0333e901d75bb16885135f5fa2f4 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 16:24:39 +0100 Subject: [PATCH 21/37] don't set GRAFANA_URL --- .github/workflows/pr-e2e-tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 81bd0e2e28555..4ee764fab2551 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -182,7 +182,6 @@ jobs: - name: Run E2E tests run: | export CI=true - export GRAFANA_URL=http://localhost:3001 export PLAYWRIGHT_HTML_OPEN=never export PLAYWRIGHT_BLOB_OUTPUT_DIR=./blob-report export ENDFORM_API_KEY=${{ secrets.ENDFORM_API_KEY }} From c9a36d39ef4678d2b70f507e1b7b3da6b67fd168 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 16:48:20 +0100 Subject: [PATCH 22/37] Formatting --- .github/workflows/pr-e2e-tests.yml | 36 +++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 4ee764fab2551..264ff440e814b 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -44,14 +44,14 @@ jobs: if: steps.cache.outputs.cache-hit != 'true' uses: actions/setup-go@v5 with: - go-version: '1.25.3' - + go-version: "1.25.3" + - name: Setup Node.js if: steps.cache.outputs.cache-hit != 'true' uses: actions/setup-node@v4 with: - node-version: '24.11.0' - + node-version: "24.11.0" + - name: Cache Node modules if: steps.cache.outputs.cache-hit != 'true' uses: actions/cache@v4 @@ -62,12 +62,12 @@ jobs: key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-node- - + - name: Install dependencies if: steps.cache.outputs.cache-hit != 'true' run: | yarn install --frozen-lockfile - + - name: Build Grafana if: steps.cache.outputs.cache-hit != 'true' run: | @@ -135,13 +135,13 @@ jobs: - name: Setup Go uses: actions/setup-go@v5 with: - go-version: '1.25.3' - + go-version: "1.25.3" + - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: '24.11.0' - + node-version: "24.11.0" + - name: Cache Node modules uses: actions/cache@v4 with: @@ -151,20 +151,20 @@ jobs: key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-node- - + - name: Install dependencies run: | yarn install --frozen-lockfile - + - name: Build test plugins run: | yarn e2e:plugin:build - + - name: Extract Grafana run: | mkdir -p grafana-extracted tar --strip-components=1 -xzf grafana.tar.gz -C grafana-extracted - + - name: Start Grafana server run: | cd grafana-extracted @@ -175,19 +175,19 @@ jobs: --server.http.addr=0.0.0.0 & GRAFANA_PID=$! echo "GRAFANA_PID=$GRAFANA_PID" >> $GITHUB_ENV - + # Wait for Grafana to be ready timeout 60 bash -c 'until curl -f http://localhost:3001/api/health; do sleep 2; done' - + - name: Run E2E tests run: | export CI=true export PLAYWRIGHT_HTML_OPEN=never export PLAYWRIGHT_BLOB_OUTPUT_DIR=./blob-report export ENDFORM_API_KEY=${{ secrets.ENDFORM_API_KEY }} - + yarn e2e:playwright --shard=${{ matrix.shard }}/${{ matrix.shardTotal }} - + - name: Stop Grafana server if: always() run: | From 812d7109331d8fe4c1238e5af1d4f5a57dd29d75 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 16:52:27 +0100 Subject: [PATCH 23/37] Make run --- .github/workflows/pr-e2e-tests.yml | 110 +---------------------------- 1 file changed, 2 insertions(+), 108 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 264ff440e814b..e8408a85a913f 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -19,99 +19,7 @@ env: RUNNER_DEBUG: 1 jobs: - build-grafana: - name: Build & Package Grafana - runs-on: blacksmith-8vcpu-ubuntu-2404 - permissions: - contents: read - steps: - - uses: actions/checkout@v5 - with: - persist-credentials: false - - # TODO: add a cleanup workflow to remove the cache when the PR is closed - # https://github.com/actions/cache/blob/main/tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy - # TODO: maybe we could just use the cache to store the build, instead of uploading as an artifact? - - uses: actions/cache@v4 - id: cache - with: - key: "build-grafana-${{ runner.os }}-${{ hashFiles('yarn.lock', 'public/*', 'packages/*', 'conf/*', 'pkg/**/*.go', '**/go.mod', '**/go.sum', '!**_test.go', '!**.test.ts', '!**.test.tsx', 'Dockerfile') }}" - path: | - build-dir - - # If no cache hit, build Grafana - - name: Setup Go - if: steps.cache.outputs.cache-hit != 'true' - uses: actions/setup-go@v5 - with: - go-version: "1.25.3" - - - name: Setup Node.js - if: steps.cache.outputs.cache-hit != 'true' - uses: actions/setup-node@v4 - with: - node-version: "24.11.0" - - - name: Cache Node modules - if: steps.cache.outputs.cache-hit != 'true' - uses: actions/cache@v4 - with: - path: | - ~/.npm - .yarn/cache - key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install dependencies - if: steps.cache.outputs.cache-hit != 'true' - run: | - yarn install --frozen-lockfile - - - name: Build Grafana - if: steps.cache.outputs.cache-hit != 'true' - run: | - go run ./pkg/build/cmd artifacts -a targz:grafana:linux/amd64 -a docker:grafana:linux/amd64 --grafana-dir="${PWD}" > out.txt - - name: Cat built artifact - if: steps.cache.outputs.cache-hit != 'true' - run: cat out.txt - - name: Move built artifacts - if: steps.cache.outputs.cache-hit != 'true' - run: | - mkdir -p build-dir - mv "$(grep 'grafana_.*tar.gz$' out.txt | grep -Fv -m1 'docker')" build-dir/grafana.tar.gz - mv "$(grep 'grafana_.*docker.tar.gz$' out.txt)" build-dir/grafana.docker.tar.gz - - # If cache hit, validate the artifact is present - - name: Validate artifact - if: steps.cache.outputs.cache-hit == 'true' - run: | - if [ ! -f build-dir/grafana.tar.gz ]; then - echo "Error: build-dir/grafana.tar.gz not found in cache" - exit 1 - fi - - - name: Set artifact name - run: echo "artifact=grafana-server-${{github.run_number}}" >> "$GITHUB_OUTPUT" - id: artifact - - - name: Upload grafana.tar.gz - uses: actions/upload-artifact@v5 - with: - retention-days: 1 - name: grafana-tar-gz - path: build-dir/grafana.tar.gz - - - name: Upload grafana docker tarball - uses: actions/upload-artifact@v5 - with: - retention-days: 1 - name: grafana-docker-tar-gz - path: build-dir/grafana.docker.tar.gz - run-playwright-tests: - needs: - - build-grafana name: Playwright E2E tests (${{ matrix.shard }}/${{ matrix.shardTotal }}) runs-on: blacksmith-8vcpu-ubuntu-2404 permissions: @@ -128,10 +36,6 @@ jobs: with: persist-credentials: false - - uses: actions/download-artifact@v6 - with: - name: grafana-tar-gz - - name: Setup Go uses: actions/setup-go@v5 with: @@ -160,24 +64,14 @@ jobs: run: | yarn e2e:plugin:build - - name: Extract Grafana - run: | - mkdir -p grafana-extracted - tar --strip-components=1 -xzf grafana.tar.gz -C grafana-extracted - - name: Start Grafana server run: | - cd grafana-extracted - ./bin/grafana-server server \ - --home-path=/tmp/grafana \ - --config=../scripts/grafana-server/custom.ini \ - --http-port=3001 \ - --server.http.addr=0.0.0.0 & + make run & GRAFANA_PID=$! echo "GRAFANA_PID=$GRAFANA_PID" >> $GITHUB_ENV # Wait for Grafana to be ready - timeout 60 bash -c 'until curl -f http://localhost:3001/api/health; do sleep 2; done' + timeout 60 bash -c 'until curl -f http://localhost:3000/api/health; do sleep 2; done' - name: Run E2E tests run: | From be7ead056876075d8df3aefa8c512de76df3b203 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 16:55:44 +0100 Subject: [PATCH 24/37] 180s timeout --- .github/workflows/pr-e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index e8408a85a913f..a72e462385eda 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -71,7 +71,7 @@ jobs: echo "GRAFANA_PID=$GRAFANA_PID" >> $GITHUB_ENV # Wait for Grafana to be ready - timeout 60 bash -c 'until curl -f http://localhost:3000/api/health; do sleep 2; done' + timeout 180 bash -c 'until curl -f http://localhost:3000/api/health; do sleep 2; done' - name: Run E2E tests run: | From b38f34f636a9f2c2afcbb969334f91cc5bc7e754 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 17:09:52 +0100 Subject: [PATCH 25/37] Grafana version --- playwright.config.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/playwright.config.ts b/playwright.config.ts index 28656c102ef1f..4e369280181ce 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -7,6 +7,8 @@ export const testDirRoot = 'e2e-playwright'; const pluginDirRoot = path.join(testDirRoot, 'plugin-e2e'); export const DEFAULT_URL = 'http://localhost:3001'; +process.env.GRAFANA_VERSION = '12.2.1'; + export function withAuth(project: Project): Project { project.dependencies ??= []; project.use ??= {}; From 24630346e3abd8fb39f7f88f5eb78e099d4eaeff Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 17:10:17 +0100 Subject: [PATCH 26/37] Fewer tests --- .github/workflows/pr-e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index a72e462385eda..ebe6e21854a4b 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -29,7 +29,7 @@ jobs: fail-fast: false matrix: shard: [1] - shardTotal: [8] + shardTotal: [40] steps: - uses: actions/checkout@v5 From 4436753edbb8d813626e1d508b41135843ea9a2b Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 17:17:11 +0100 Subject: [PATCH 27/37] Shorter timeouts --- playwright.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playwright.config.ts b/playwright.config.ts index 4e369280181ce..f9aa44c65d784 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -29,9 +29,9 @@ export const baseConfig: PlaywrightTestConfig = { /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, reporter: [['list']], - timeout: 480_000, + timeout: 30_000, expect: { - timeout: 80_000, + timeout: 10_000, }, use: { ...devices['Desktop Chrome'], From 5acf2f2d893890ccc88f2d1f6c6728e90b304175 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 17:26:47 +0100 Subject: [PATCH 28/37] Log server output --- .github/workflows/pr-e2e-tests.yml | 11 ++++++++++- playwright.config.ts | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index ebe6e21854a4b..edca0f901ff9b 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -66,7 +66,7 @@ jobs: - name: Start Grafana server run: | - make run & + make run > grafana-server.log 2>&1 & GRAFANA_PID=$! echo "GRAFANA_PID=$GRAFANA_PID" >> $GITHUB_ENV @@ -88,3 +88,12 @@ jobs: if [ -n "$GRAFANA_PID" ]; then kill $GRAFANA_PID || true fi + + - name: Upload server logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: server-logs-${{ matrix.shard }} + path: | + grafana-server.log + playwright-webserver.log diff --git a/playwright.config.ts b/playwright.config.ts index f9aa44c65d784..546e01a8cf074 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -51,7 +51,7 @@ export default defineConfig({ ...baseConfig, ...(!process.env.GRAFANA_URL && { webServer: { - command: 'yarn e2e:plugin:build && ./e2e-playwright/start-server', + command: 'yarn e2e:plugin:build && ./e2e-playwright/start-server > playwright-webserver.log 2>&1', port: 3001, stdout: 'pipe', stderr: 'pipe', From fab91ff7451bb53cb68bbf6bf8b42aaa214c3a9e Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Mon, 17 Nov 2025 17:27:04 +0100 Subject: [PATCH 29/37] Fewer tests --- .github/workflows/pr-e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index edca0f901ff9b..2545c0a5fb2bf 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -29,7 +29,7 @@ jobs: fail-fast: false matrix: shard: [1] - shardTotal: [40] + shardTotal: [80] steps: - uses: actions/checkout@v5 From 074a768cb6183a791385d4addf23f6845d8b26f1 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 09:29:19 +0100 Subject: [PATCH 30/37] Build app --- .github/workflows/pr-e2e-tests.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 2545c0a5fb2bf..b9b072af2ce0d 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -60,6 +60,10 @@ jobs: run: | yarn install --frozen-lockfile + - name: Build app + run: | + yarn build + - name: Build test plugins run: | yarn e2e:plugin:build From 85eef1c23b2ef3e8c57f925e994deb47de027c85 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 09:36:54 +0100 Subject: [PATCH 31/37] Crank it up to 1/8 --- .github/workflows/pr-e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index b9b072af2ce0d..c8652f67ec6cd 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -29,7 +29,7 @@ jobs: fail-fast: false matrix: shard: [1] - shardTotal: [80] + shardTotal: [8] steps: - uses: actions/checkout@v5 From 9344361e8a10d339f2ed4b207cb37e3e1a38207d Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 09:51:45 +0100 Subject: [PATCH 32/37] Increase timeouts --- playwright.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playwright.config.ts b/playwright.config.ts index 546e01a8cf074..6b987a0fd8828 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -29,9 +29,9 @@ export const baseConfig: PlaywrightTestConfig = { /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, reporter: [['list']], - timeout: 30_000, + timeout: 60_000, expect: { - timeout: 10_000, + timeout: 15_000, }, use: { ...devices['Desktop Chrome'], From fc24a412cc9ffe2643f089caa7491603eb753d3e Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 09:52:05 +0100 Subject: [PATCH 33/37] Crank it up to 1/2 --- .github/workflows/pr-e2e-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index c8652f67ec6cd..2e22114c1268a 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -29,7 +29,7 @@ jobs: fail-fast: false matrix: shard: [1] - shardTotal: [8] + shardTotal: [2] steps: - uses: actions/checkout@v5 From 22d7f8a239ecd4f9ff37e48eed353cea03a30f19 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 10:03:31 +0100 Subject: [PATCH 34/37] Fix type imports --- e2e/old-arch/utils/index.ts | 2 +- e2e/utils/index.ts | 2 +- packages/grafana-e2e-selectors/src/selectors/index.ts | 4 ++-- public/app/plugins/datasource/azuremonitor/e2e/selectors.ts | 2 +- .../app/plugins/datasource/cloud-monitoring/e2e/selectors.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e/old-arch/utils/index.ts b/e2e/old-arch/utils/index.ts index 011250f7b8a35..d4d28a62cdfc0 100644 --- a/e2e/old-arch/utils/index.ts +++ b/e2e/old-arch/utils/index.ts @@ -1,4 +1,4 @@ -import { E2ESelectors, Selectors, selectors } from '@grafana/e2e-selectors'; +import { type E2ESelectors, type Selectors, selectors } from '@grafana/e2e-selectors'; import * as flows from './flows'; import { e2eFactory } from './support'; diff --git a/e2e/utils/index.ts b/e2e/utils/index.ts index 011250f7b8a35..d4d28a62cdfc0 100644 --- a/e2e/utils/index.ts +++ b/e2e/utils/index.ts @@ -1,4 +1,4 @@ -import { E2ESelectors, Selectors, selectors } from '@grafana/e2e-selectors'; +import { type E2ESelectors, type Selectors, selectors } from '@grafana/e2e-selectors'; import * as flows from './flows'; import { e2eFactory } from './support'; diff --git a/packages/grafana-e2e-selectors/src/selectors/index.ts b/packages/grafana-e2e-selectors/src/selectors/index.ts index bfe90848026b8..4121569bc1a6b 100644 --- a/packages/grafana-e2e-selectors/src/selectors/index.ts +++ b/packages/grafana-e2e-selectors/src/selectors/index.ts @@ -1,8 +1,8 @@ import { resolveSelectors } from '../resolver'; import { E2ESelectors } from '../types'; -import { versionedComponents, VersionedComponents } from './components'; -import { versionedPages, VersionedPages } from './pages'; +import { versionedComponents, type VersionedComponents } from './components'; +import { versionedPages, type VersionedPages } from './pages'; const Pages = resolveSelectors(versionedPages); const Components = resolveSelectors(versionedComponents); diff --git a/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts b/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts index fade27c12bbf6..ddfc761e28cb1 100644 --- a/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts +++ b/public/app/plugins/datasource/azuremonitor/e2e/selectors.ts @@ -1,4 +1,4 @@ -import { E2ESelectors } from '@grafana/e2e-selectors'; +import type { E2ESelectors } from '@grafana/e2e-selectors'; export const components = { configEditor: { diff --git a/public/app/plugins/datasource/cloud-monitoring/e2e/selectors.ts b/public/app/plugins/datasource/cloud-monitoring/e2e/selectors.ts index fd88d490408a9..8f979bf6f3437 100644 --- a/public/app/plugins/datasource/cloud-monitoring/e2e/selectors.ts +++ b/public/app/plugins/datasource/cloud-monitoring/e2e/selectors.ts @@ -1,4 +1,4 @@ -import { E2ESelectors } from '@grafana/e2e-selectors'; +import type { E2ESelectors } from '@grafana/e2e-selectors'; export const components = { queryEditor: { From ac8b94900ec51f21d2355ed94da304df551f36ae Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 10:03:55 +0100 Subject: [PATCH 35/37] Increase timeouts --- playwright.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playwright.config.ts b/playwright.config.ts index 6b987a0fd8828..acca37b42f654 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -29,9 +29,9 @@ export const baseConfig: PlaywrightTestConfig = { /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, reporter: [['list']], - timeout: 60_000, + timeout: 120_000, expect: { - timeout: 15_000, + timeout: 20_000, }, use: { ...devices['Desktop Chrome'], From 0389b892dd6dcda15e03bfd1409e4d0c113bdf26 Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 10:17:33 +0100 Subject: [PATCH 36/37] Run 8/8 shards --- .github/workflows/pr-e2e-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 2e22114c1268a..97ed027577704 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -28,8 +28,8 @@ jobs: strategy: fail-fast: false matrix: - shard: [1] - shardTotal: [2] + shard: [1, 2, 3, 4, 5, 6, 7, 8] + shardTotal: [8] steps: - uses: actions/checkout@v5 From f09c9dbdd275b6054ad1e212b0167a21e20a030b Mon Sep 17 00:00:00 2001 From: Jakob Norlin Date: Tue, 18 Nov 2025 10:25:00 +0100 Subject: [PATCH 37/37] Try slower runners --- .github/workflows/pr-e2e-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index 97ed027577704..7042aa751abe9 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -21,7 +21,7 @@ env: jobs: run-playwright-tests: name: Playwright E2E tests (${{ matrix.shard }}/${{ matrix.shardTotal }}) - runs-on: blacksmith-8vcpu-ubuntu-2404 + runs-on: blacksmith-2vcpu-ubuntu-2404 permissions: contents: read @@ -75,7 +75,7 @@ jobs: echo "GRAFANA_PID=$GRAFANA_PID" >> $GITHUB_ENV # Wait for Grafana to be ready - timeout 180 bash -c 'until curl -f http://localhost:3000/api/health; do sleep 2; done' + timeout 240 bash -c 'until curl -f http://localhost:3000/api/health; do sleep 2; done' - name: Run E2E tests run: |