Playwright: Gate server start up with `GRAFANA_URL` env var (#108302)

* refactor so server is created unless GRAFANA_URL is provided

* update documentation

* don't swallow errors from the server process
pull/108339/head
Ashley Harrison 2 days ago committed by GitHub
parent a7a17c6929
commit 2d1fb94f2d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      .drone.yml
  2. 8
      contribute/developer-guide.md
  3. 8
      contribute/style-guides/e2e-plugins.md
  4. 5
      e2e-playwright/start-server
  5. 1
      package.json
  6. 9
      pkg/build/e2e-playwright/e2e.go
  7. 1
      pkg/build/e2e-playwright/main.go
  8. 11
      playwright.config.ts
  9. 2
      scripts/drone/steps/lib.star

@ -289,7 +289,7 @@ steps:
- commands: - commands:
- npx wait-on@7.0.1 http://$HOST:$PORT - npx wait-on@7.0.1 http://$HOST:$PORT
- yarn playwright install --with-deps chromium - yarn playwright install --with-deps chromium
- yarn e2e:playwright --grep @plugins - GRAFANA_URL=http://$HOST:$PORT yarn e2e:playwright --grep @plugins
depends_on: depends_on:
- grafana-server - grafana-server
- build-test-plugins - build-test-plugins
@ -761,7 +761,7 @@ steps:
- commands: - commands:
- npx wait-on@7.0.1 http://$HOST:$PORT - npx wait-on@7.0.1 http://$HOST:$PORT
- yarn playwright install --with-deps chromium - yarn playwright install --with-deps chromium
- yarn e2e:playwright --grep @plugins - GRAFANA_URL=http://$HOST:$PORT yarn e2e:playwright --grep @plugins
depends_on: depends_on:
- grafana-server - grafana-server
- build-test-plugins - build-test-plugins
@ -2986,6 +2986,6 @@ kind: secret
name: gcr_credentials name: gcr_credentials
--- ---
kind: signature kind: signature
hmac: d20f1d6e2e8347701f82114ad352f53db57dc95b5b3831941fa93d063a92b9d8 hmac: 70e5888d6be34ca57086672bc58d6de7de0029210e4485190571452972774e54
... ...

@ -251,18 +251,20 @@ Each version of Playwright needs specific versions of browser binaries to operat
yarn playwright install chromium yarn playwright install chromium
``` ```
To run all tests in a headless Chromium browser and display results in the terminal. This assumes you have Grafana running on port 3000. The following script starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) (same server that is being used when running e2e tests in CI) on port 3001 and runs all the Playwright tests. The development server is provisioned with the [devenv](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#add-data-sources) dashboards, data sources and apps.
``` ```
yarn e2e:playwright yarn e2e:playwright
``` ```
The following script starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) (same server that is being used when running e2e tests in Drone CI) on port 3001 and runs the Playwright tests. The development server is provisioned with the [devenv](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#add-data-sources) dashboards, data sources and apps. You can run against an arbitrary instance by setting the `GRAFANA_URL` environment variable:
``` ```
yarn e2e:playwright:server GRAFANA_URL=http://localhost:3000 yarn e2e:playwright
``` ```
Note this will not start a development server, so you must ensure that Grafana is running and accessible at the specified URL.
## Configure Grafana for development ## Configure Grafana for development
The default configuration, `defaults.ini`, is located in the `conf` directory. The default configuration, `defaults.ini`, is located in the `conf` directory.

@ -32,10 +32,12 @@ You can add Playwright end-to-end tests for plugins to the [`e2e-playwright/plug
- `yarn e2e:playwright` runs all Playwright tests. Optionally, you can provide the `--project mysql` argument to run tests in a specific project. - `yarn e2e:playwright` runs all Playwright tests. Optionally, you can provide the `--project mysql` argument to run tests in a specific project.
The `yarn e2e:playwright` script assumes you have Grafana running on `localhost:3000`. You may change this with an environment variable: The `yarn e2e:playwright` command starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) on port 3001 and runs the Playwright tests.
`HOST=127.0.0.1 PORT=3001 yarn e2e:playwright` You can run against an arbitrary instance by setting the `GRAFANA_URL` environment variable:
The `yarn e2e:playwright:server` starts a Grafana [development server](https://github.com/grafana/grafana/blob/main/scripts/grafana-server/start-server) on port 3001 and runs the Playwright tests. `GRAFANA_URL=http://localhost:3000 yarn e2e:playwright`
Note this will not start a development server, so you must ensure that Grafana is running and accessible at the specified URL.
- You can provision the development server with the [devenv](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#add-data-sources) dashboards, data sources, and apps. - You can provision the development server with the [devenv](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#add-data-sources) dashboards, data sources, and apps.

@ -15,9 +15,6 @@ fi
if [ "$BASE_URL" != "" ]; then if [ "$BASE_URL" != "" ]; then
echo -e "BASE_URL set, skipping starting server" echo -e "BASE_URL set, skipping starting server"
else else
# Start it in the background ./scripts/grafana-server/start-server $LICENSE_PATH > scripts/grafana-server/server.log
./scripts/grafana-server/start-server $LICENSE_PATH 2>&1 > scripts/grafana-server/server.log &
./scripts/grafana-server/wait-for-grafana
fi fi
PORT=3001 HOST=localhost yarn playwright test

@ -24,7 +24,6 @@
"e2e:enterprise:dev": "./e2e/start-and-run-suite enterprise dev", "e2e:enterprise:dev": "./e2e/start-and-run-suite enterprise dev",
"e2e:enterprise:debug": "./e2e/start-and-run-suite enterprise debug", "e2e:enterprise:debug": "./e2e/start-and-run-suite enterprise debug",
"e2e:playwright": "yarn playwright test", "e2e:playwright": "yarn playwright test",
"e2e:playwright:server": "yarn e2e:plugin:build && ./e2e-playwright/start-and-run-suite",
"e2e:playwright:storybook": "yarn playwright test -c playwright.storybook.config.ts", "e2e:playwright:storybook": "yarn playwright test -c playwright.storybook.config.ts",
"e2e:storybook": "PORT=9001 ./e2e/run-suite storybook true", "e2e:storybook": "PORT=9001 ./e2e/run-suite storybook true",
"e2e:plugin:build": "nx run-many -t build --projects='@test-plugins/*'", "e2e:plugin:build": "nx run-many -t build --projects='@test-plugins/*'",

@ -32,12 +32,17 @@ func RunTest(
) (*dagger.Container, error) { ) (*dagger.Container, error) {
playwrightCommand := buildPlaywrightCommand(opts) playwrightCommand := buildPlaywrightCommand(opts)
grafanaHost, err := opts.GrafanaService.Hostname(ctx)
if err != nil {
return nil, err
}
e2eContainer := opts.FrontendContainer. e2eContainer := opts.FrontendContainer.
WithWorkdir("/src"). WithWorkdir("/src").
WithDirectory("/src", opts.HostSrc). WithDirectory("/src", opts.HostSrc).
WithMountedCache(".nx", d.CacheVolume("nx-cache")). WithMountedCache(".nx", d.CacheVolume("nx-cache")).
WithEnvVariable("HOST", grafanaHost). WithEnvVariable("CI", "true").
WithEnvVariable("PORT", fmt.Sprint(grafanaPort)). WithEnvVariable("GRAFANA_URL", fmt.Sprintf("http://%s:%d", grafanaHost, grafanaPort)).
WithServiceBinding(grafanaHost, opts.GrafanaService). WithServiceBinding(grafanaHost, opts.GrafanaService).
WithEnvVariable("bustcache", "1"). WithEnvVariable("bustcache", "1").
WithEnvVariable("PLAYWRIGHT_HTML_OPEN", "never"). WithEnvVariable("PLAYWRIGHT_HTML_OPEN", "never").

@ -12,7 +12,6 @@ import (
) )
var ( var (
grafanaHost = "grafana"
grafanaPort = 3001 grafanaPort = 3001
) )

@ -5,6 +5,7 @@ import { PluginOptions } from '@grafana/plugin-e2e';
const testDirRoot = 'e2e-playwright'; const testDirRoot = 'e2e-playwright';
const pluginDirRoot = path.join(testDirRoot, 'plugin-e2e'); const pluginDirRoot = path.join(testDirRoot, 'plugin-e2e');
const DEFAULT_URL = 'http://localhost:3001';
export default defineConfig<PluginOptions>({ export default defineConfig<PluginOptions>({
fullyParallel: true, fullyParallel: true,
@ -16,7 +17,7 @@ export default defineConfig<PluginOptions>({
['html'], // pretty ['html'], // pretty
], ],
use: { use: {
baseURL: `http://${process.env.HOST || 'localhost'}:${process.env.PORT || 3000}`, baseURL: process.env.GRAFANA_URL ?? DEFAULT_URL,
trace: 'retain-on-failure', trace: 'retain-on-failure',
httpCredentials: { httpCredentials: {
username: 'admin', username: 'admin',
@ -26,6 +27,14 @@ export default defineConfig<PluginOptions>({
permissions: ['clipboard-read', 'clipboard-write'], permissions: ['clipboard-read', 'clipboard-write'],
provisioningRootDir: path.join(process.cwd(), process.env.PROV_DIR ?? 'conf/provisioning'), provisioningRootDir: path.join(process.cwd(), process.env.PROV_DIR ?? 'conf/provisioning'),
}, },
...(!process.env.GRAFANA_URL && {
webServer: {
command: 'yarn e2e:plugin:build && ./e2e-playwright/start-server',
url: DEFAULT_URL,
stdout: 'pipe',
stderr: 'pipe',
},
}),
projects: [ projects: [
// Login to Grafana with admin user and store the cookie on disk for use in other tests // Login to Grafana with admin user and store the cookie on disk for use in other tests
{ {

@ -834,7 +834,7 @@ def playwright_e2e_tests_step():
"commands": [ "commands": [
"npx wait-on@7.0.1 http://$HOST:$PORT", "npx wait-on@7.0.1 http://$HOST:$PORT",
"yarn playwright install --with-deps chromium", "yarn playwright install --with-deps chromium",
"yarn e2e:playwright --grep @plugins", "GRAFANA_URL=http://$HOST:$PORT yarn e2e:playwright --grep @plugins",
], ],
} }

Loading…
Cancel
Save