github actions workflows added (#1947)
* github actions workflows added * added playwright tests * Apply suggestions from code review * Update .github/workflows/push.yaml
This commit is contained in:
15
.github/workflows/lint.yml
vendored
15
.github/workflows/lint.yml
vendored
@@ -1,15 +0,0 @@
|
||||
name: Lint frontend
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'yarn'
|
||||
- run: yarn install
|
||||
- run: yarn lint
|
||||
32
.github/workflows/publish.yaml
vendored
Normal file
32
.github/workflows/publish.yaml
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
name: Plugins - CD
|
||||
run-name: Deploy ${{ inputs.branch }} to ${{ inputs.environment }} by @${{ github.actor }}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: Branch to publish from. Can be used to deploy PRs to dev
|
||||
default: main
|
||||
environment:
|
||||
description: Environment to publish to
|
||||
required: true
|
||||
type: choice
|
||||
options:
|
||||
- 'dev'
|
||||
- 'ops'
|
||||
- 'prod'
|
||||
docs-only:
|
||||
description: Only publish docs, do not publish the plugin
|
||||
default: false
|
||||
type: boolean
|
||||
|
||||
jobs:
|
||||
cd:
|
||||
name: CD
|
||||
uses: grafana/plugin-ci-workflows/.github/workflows/cd.yml@main
|
||||
with:
|
||||
go-version: '1.23.5'
|
||||
branch: ${{ github.event.inputs.branch }}
|
||||
environment: ${{ github.event.inputs.environment }}
|
||||
docs-only: ${{ fromJSON(github.event.inputs.docs-only) }}
|
||||
run-playwright: true
|
||||
16
.github/workflows/push.yaml
vendored
Normal file
16
.github/workflows/push.yaml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
name: Plugins - CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
name: CI
|
||||
uses: grafana/plugin-ci-workflows/.github/workflows/ci.yml@main
|
||||
with:
|
||||
go-version: '1.23.5'
|
||||
plugin-version-suffix: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || '' }}
|
||||
run-playwright: true
|
||||
10
.gitignore
vendored
10
.gitignore
vendored
@@ -28,9 +28,13 @@ coverage/
|
||||
|
||||
artifacts/
|
||||
work/
|
||||
e2e-results/
|
||||
**/cypress/videos
|
||||
**/cypress/report.json
|
||||
|
||||
# playwright
|
||||
test-results/
|
||||
playwright-report/
|
||||
blob-report/
|
||||
playwright/.cache/
|
||||
playwright/.auth/
|
||||
|
||||
# Tools logs
|
||||
npm-debug.log
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"ignorePaths": [
|
||||
"coverage/**",
|
||||
"cypress/**",
|
||||
"dist/**",
|
||||
"go.sum",
|
||||
"mage_output_file.go",
|
||||
@@ -30,11 +29,7 @@
|
||||
"src/**",
|
||||
"pkg/**"
|
||||
],
|
||||
"ignoreRegExpList": [
|
||||
"import\\s*\\((.|[\r\n])*?\\)",
|
||||
"import\\s*.*\".*?\"",
|
||||
"\\[@.+\\]"
|
||||
],
|
||||
"ignoreRegExpList": ["import\\s*\\((.|[\r\n])*?\\)", "import\\s*.*\".*?\"", "\\[@.+\\]"],
|
||||
"words": [
|
||||
"alexanderzobnin",
|
||||
"datapoint",
|
||||
|
||||
11
package.json
11
package.json
@@ -15,13 +15,12 @@
|
||||
"scripts": {
|
||||
"build": "webpack -c ./webpack.config.ts --env production",
|
||||
"dev": "webpack -w -c ./webpack.config.ts --env development",
|
||||
"e2e": "yarn exec cypress install && yarn exec grafana-e2e run",
|
||||
"e2e:update": "yarn exec cypress install && yarn exec grafana-e2e run --update-screenshots",
|
||||
"e2e": "yarn playwright test",
|
||||
"lint": "eslint --cache --ignore-path ./.gitignore --ext .js,.jsx,.ts,.tsx .",
|
||||
"lint:fix": "yarn run lint --fix",
|
||||
"server": "docker-compose up --build",
|
||||
"server:down": "docker-compose --file ./devenv/default/docker-compose.yml down",
|
||||
"server:stop": "docker-compose --file ./devenv/default/docker-compose.yml stop",
|
||||
"server": "docker compose up --build",
|
||||
"server:down": "docker compose --file ./devenv/default/docker-compose.yml down",
|
||||
"server:stop": "docker compose --file ./devenv/default/docker-compose.yml stop",
|
||||
"sign": "npx --yes @grafana/sign-plugin@latest",
|
||||
"spellcheck": "cspell -c cspell.config.json \"**/*.{ts,tsx,js,go,md,mdx,yml,yaml,json,scss,css}\"",
|
||||
"test": "jest --watch --onlyChanged",
|
||||
@@ -44,7 +43,9 @@
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.21.4",
|
||||
"@grafana/eslint-config": "^6.0.0",
|
||||
"@grafana/plugin-e2e": "^1.14.6",
|
||||
"@grafana/tsconfig": "^1.2.0-rc1",
|
||||
"@playwright/test": "^1.48.0",
|
||||
"@swc/core": "^1.3.90",
|
||||
"@swc/helpers": "^0.5.0",
|
||||
"@swc/jest": "^0.2.26",
|
||||
|
||||
52
playwright.config.ts
Normal file
52
playwright.config.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import type { PluginOptions } from '@grafana/plugin-e2e';
|
||||
import { defineConfig, devices } from '@playwright/test';
|
||||
import { dirname } from 'node:path';
|
||||
|
||||
const pluginE2eAuth = `${dirname(require.resolve('@grafana/plugin-e2e'))}/auth`;
|
||||
|
||||
/**
|
||||
* Read environment variables from file.
|
||||
* https://github.com/motdotla/dotenv
|
||||
*/
|
||||
// require('dotenv').config();
|
||||
|
||||
/**
|
||||
* See https://playwright.dev/docs/test-configuration.
|
||||
*/
|
||||
export default defineConfig<PluginOptions>({
|
||||
testDir: './tests',
|
||||
/* Run tests in files in parallel */
|
||||
fullyParallel: true,
|
||||
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
||||
forbidOnly: !!process.env.CI,
|
||||
/* Retry on CI only */
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
/* Opt out of parallel tests on CI. */
|
||||
workers: process.env.CI ? 1 : undefined,
|
||||
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
||||
reporter: 'html',
|
||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
||||
use: {
|
||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
||||
baseURL: 'http://localhost:3000',
|
||||
|
||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||
trace: 'on-first-retry',
|
||||
},
|
||||
|
||||
/* Configure projects for major browsers */
|
||||
projects: [
|
||||
// 1. Login to Grafana and store the cookie on disk for use in other tests.
|
||||
{
|
||||
name: 'auth',
|
||||
testDir: pluginE2eAuth,
|
||||
testMatch: [/.*\.js/],
|
||||
},
|
||||
// 2. Run tests in Google Chrome. Every test will start authenticated as admin user.
|
||||
{
|
||||
name: 'chromium',
|
||||
use: { ...devices['Desktop Chrome'], storageState: 'playwright/.auth/admin.json' },
|
||||
dependencies: ['auth'],
|
||||
},
|
||||
],
|
||||
});
|
||||
76
yarn.lock
76
yarn.lock
@@ -1000,6 +1000,16 @@
|
||||
tslib "2.6.2"
|
||||
typescript "5.3.3"
|
||||
|
||||
"@grafana/e2e-selectors@^11.5.0-216287":
|
||||
version "11.5.0-216566"
|
||||
resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-11.5.0-216566.tgz#bec2387690e2a9046dcd97e29102fc22f72af11d"
|
||||
integrity sha512-uhMZxhVOsMjLIRNI7yJRXcfm+F1LXLITdCCkKNh5ATMLe67utpTKWK89Yi9534R0SN38i8w8ReChehetbR0gFA==
|
||||
dependencies:
|
||||
"@grafana/tsconfig" "^2.0.0"
|
||||
semver "7.6.3"
|
||||
tslib "2.8.1"
|
||||
typescript "5.7.3"
|
||||
|
||||
"@grafana/eslint-config@^6.0.0":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@grafana/eslint-config/-/eslint-config-6.0.1.tgz#70f3e1990ab83591b566dec7bce214a1eb4d09c4"
|
||||
@@ -1031,6 +1041,16 @@
|
||||
ua-parser-js "^1.0.32"
|
||||
web-vitals "^3.1.1"
|
||||
|
||||
"@grafana/plugin-e2e@^1.14.6":
|
||||
version "1.14.6"
|
||||
resolved "https://registry.yarnpkg.com/@grafana/plugin-e2e/-/plugin-e2e-1.14.6.tgz#3ad08b4fd5aadee8dfd9170c7bb6d5e31a67bb53"
|
||||
integrity sha512-YnARXviUFI+Ez0ygi1CypBHZGY+rNIShI428Mnrj8bn48mr0lCeiI/V2NGsQUz5YJegIfP1JSb05gb/7t8avBQ==
|
||||
dependencies:
|
||||
"@grafana/e2e-selectors" "^11.5.0-216287"
|
||||
semver "^7.5.4"
|
||||
uuid "^11.0.2"
|
||||
yaml "^2.3.4"
|
||||
|
||||
"@grafana/plugin-ui@^0.9.1":
|
||||
version "0.9.1"
|
||||
resolved "https://registry.yarnpkg.com/@grafana/plugin-ui/-/plugin-ui-0.9.1.tgz#87f382191cdcb08a0ccfe04a963bf83f563a604b"
|
||||
@@ -1077,6 +1097,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@grafana/tsconfig/-/tsconfig-1.2.0-rc1.tgz#10973c978ec95b0ea637511254b5f478bce04de7"
|
||||
integrity sha512-+SgQeBQ1pT6D/E3/dEdADqTrlgdIGuexUZ8EU+8KxQFKUeFeU7/3z/ayI2q/wpJ/Kr6WxBBNlrST6aOKia19Ag==
|
||||
|
||||
"@grafana/tsconfig@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@grafana/tsconfig/-/tsconfig-2.0.0.tgz#277aba907ddbe0301dc37248923e6bd2b68f5151"
|
||||
integrity sha512-cxC3Htv/GidI5FeVGAzj/lYZTMMz/Cfsc8VOQFO3Ichjx3hUjyjeoBUIpVSVMnIjKUdA5ycdxtMYPHIuIrk8+A==
|
||||
|
||||
"@grafana/ui@10.4.2":
|
||||
version "10.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-10.4.2.tgz#4781a9172a0aae4d420161dce1414876d62d3ae4"
|
||||
@@ -1653,6 +1678,13 @@
|
||||
picocolors "^1.0.0"
|
||||
tslib "^2.6.0"
|
||||
|
||||
"@playwright/test@^1.48.0":
|
||||
version "1.49.1"
|
||||
resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.49.1.tgz#55fa360658b3187bfb6371e2f8a64f50ef80c827"
|
||||
integrity sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==
|
||||
dependencies:
|
||||
playwright "1.49.1"
|
||||
|
||||
"@popperjs/core@2.11.8", "@popperjs/core@^2.11.5":
|
||||
version "2.11.8"
|
||||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
|
||||
@@ -4875,6 +4907,11 @@ fs.realpath@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
||||
|
||||
fsevents@2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||
|
||||
fsevents@^2.3.2, fsevents@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||
@@ -7005,6 +7042,20 @@ pkg-dir@^4.2.0:
|
||||
dependencies:
|
||||
find-up "^4.0.0"
|
||||
|
||||
playwright-core@1.49.1:
|
||||
version "1.49.1"
|
||||
resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.49.1.tgz#32c62f046e950f586ff9e35ed490a424f2248015"
|
||||
integrity sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==
|
||||
|
||||
playwright@1.49.1:
|
||||
version "1.49.1"
|
||||
resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.49.1.tgz#830266dbca3008022afa7b4783565db9944ded7c"
|
||||
integrity sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==
|
||||
dependencies:
|
||||
playwright-core "1.49.1"
|
||||
optionalDependencies:
|
||||
fsevents "2.3.2"
|
||||
|
||||
portfinder@^1.0.17:
|
||||
version "1.0.32"
|
||||
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81"
|
||||
@@ -8150,6 +8201,11 @@ semver@7.5.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.1, semver
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
semver@7.6.3:
|
||||
version "7.6.3"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
|
||||
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||
|
||||
semver@^6.0.0, semver@^6.3.0, semver@^6.3.1:
|
||||
version "6.3.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||
@@ -8845,6 +8901,11 @@ tslib@2.6.2, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
|
||||
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
|
||||
|
||||
tslib@2.8.1:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
|
||||
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
|
||||
|
||||
tslib@^1.8.1:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
@@ -8940,6 +9001,11 @@ typescript@5.3.3:
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
|
||||
integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
|
||||
|
||||
typescript@5.7.3:
|
||||
version "5.7.3"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e"
|
||||
integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==
|
||||
|
||||
ua-parser-js@^1.0.32:
|
||||
version "1.0.36"
|
||||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.36.tgz#a9ab6b9bd3a8efb90bb0816674b412717b7c428c"
|
||||
@@ -9035,6 +9101,11 @@ uuid@9.0.1:
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
|
||||
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
|
||||
|
||||
uuid@^11.0.2:
|
||||
version "11.0.5"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.5.tgz#07b46bdfa6310c92c3fb3953a8720f170427fc62"
|
||||
integrity sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==
|
||||
|
||||
uuid@^8.3.2:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
@@ -9390,6 +9461,11 @@ yaml@^1.10.0:
|
||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
||||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
||||
|
||||
yaml@^2.3.4:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98"
|
||||
integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==
|
||||
|
||||
yargs-parser@^21.1.1:
|
||||
version "21.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
|
||||
|
||||
Reference in New Issue
Block a user