From 2cae68c8d06d5111fc8457579b643f1798d13eb4 Mon Sep 17 00:00:00 2001 From: yesoreyeram <153843+yesoreyeram@users.noreply.github.com> Date: Sat, 11 Jan 2025 08:47:09 +0000 Subject: [PATCH 1/5] github actions workflows added --- .github/workflows/lint.yml | 15 --------------- .github/workflows/publish.yaml | 31 +++++++++++++++++++++++++++++++ .github/workflows/push.yaml | 17 +++++++++++++++++ 3 files changed, 48 insertions(+), 15 deletions(-) delete mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/publish.yaml create mode 100644 .github/workflows/push.yaml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index f4a18b8..0000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -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 diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 0000000..0808912 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,31 @@ +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: + branch: ${{ github.event.inputs.branch }} + environment: ${{ github.event.inputs.environment }} + docs-only: ${{ fromJSON(github.event.inputs.docs-only) }} + run-playwright: true diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml new file mode 100644 index 0000000..03b4e1b --- /dev/null +++ b/.github/workflows/push.yaml @@ -0,0 +1,17 @@ +name: Plugins - CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + ci: + name: CI + uses: grafana/plugin-ci-workflows/.github/workflows/ci.yml@main + with: + plugin-version-suffix: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || '' }} + run-playwright: true From 3b3a20c624ac7949a85b30ae15fa7262472803b6 Mon Sep 17 00:00:00 2001 From: yesoreyeram <153843+yesoreyeram@users.noreply.github.com> Date: Sat, 11 Jan 2025 08:49:39 +0000 Subject: [PATCH 2/5] added playwright tests --- .gitignore | 8 ++++- package.json | 7 ++-- playwright.config.ts | 52 ++++++++++++++++++++++++++++++ yarn.lock | 76 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 playwright.config.ts diff --git a/.gitignore b/.gitignore index b15d24b..4fbc799 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,13 @@ dist/ artifacts/ work/ ci/ -e2e-results/ + +# playwright +test-results/ +playwright-report/ +blob-report/ +playwright/.cache/ +playwright/.auth/ # Editor .idea diff --git a/package.json b/package.json index fe802d7..2c2a65a 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,10 @@ "scripts": { "build": "webpack -c ./.config/webpack/webpack.config.ts --env production", "dev": "webpack -w -c ./.config/webpack/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": "docker compose up --build", "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", @@ -46,7 +45,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.75", "@swc/helpers": "^0.5.0", "@swc/jest": "^0.2.26", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..3d74e3a --- /dev/null +++ b/playwright.config.ts @@ -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({ + 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'], + }, + ], +}); diff --git a/yarn.lock b/yarn.lock index 95c731f..15b778a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -954,6 +954,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" @@ -994,6 +1004,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/runtime@10.4.2": version "10.4.2" resolved "https://registry.yarnpkg.com/@grafana/runtime/-/runtime-10.4.2.tgz#863f53d7c2344196e91d689c6ad91e4cdaf78309" @@ -1023,6 +1043,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" @@ -1596,6 +1621,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": version "2.11.8" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" @@ -4606,6 +4638,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" @@ -6674,6 +6711,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" @@ -7606,6 +7657,11 @@ selection-is-backward@^1.0.0: resolved "https://registry.yarnpkg.com/selection-is-backward/-/selection-is-backward-1.0.0.tgz#97a54633188a511aba6419fc5c1fa91b467e6be1" integrity sha512-C+6PCOO55NLCfS8uQjUKV/6E5XMuUcfOVsix5m0QqCCCKi495NgeQVNfWtAaD71NKHsdmFCJoXUGfir3qWdr9A== +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" @@ -8270,6 +8326,11 @@ tslib@2.6.2, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.0: 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" @@ -8370,6 +8431,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" @@ -8460,6 +8526,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" @@ -8790,6 +8861,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" From 570ca5f058932d5dc8db72d911fb9a85c16c5b25 Mon Sep 17 00:00:00 2001 From: Gareth Dawson Date: Fri, 31 Jan 2025 21:46:33 +0700 Subject: [PATCH 3/5] Update .github/workflows/push.yaml Co-authored-by: Sriram <153843+yesoreyeram@users.noreply.github.com> --- .github/workflows/push.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml index 03b4e1b..25f1c40 100644 --- a/.github/workflows/push.yaml +++ b/.github/workflows/push.yaml @@ -5,8 +5,6 @@ on: branches: - main pull_request: - branches: - - main jobs: ci: From efc3fe286cb817ef2e03c7be649dbaf10a080624 Mon Sep 17 00:00:00 2001 From: Gareth Dawson Date: Fri, 31 Jan 2025 21:48:22 +0700 Subject: [PATCH 4/5] Update .github/workflows/push.yaml Co-authored-by: Sriram <153843+yesoreyeram@users.noreply.github.com> --- .github/workflows/push.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml index 25f1c40..299189a 100644 --- a/.github/workflows/push.yaml +++ b/.github/workflows/push.yaml @@ -11,5 +11,6 @@ jobs: 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 From d058946980cc9cab0a61a569d522f0dccd08f4b0 Mon Sep 17 00:00:00 2001 From: Gareth Dawson Date: Fri, 31 Jan 2025 21:48:39 +0700 Subject: [PATCH 5/5] Update .github/workflows/publish.yaml Co-authored-by: Sriram <153843+yesoreyeram@users.noreply.github.com> --- .github/workflows/publish.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 0808912..5383c79 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -25,6 +25,7 @@ jobs: 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) }}