From 88b732e062344bce98fae33d235a3ae5ae2d3917 Mon Sep 17 00:00:00 2001 From: Sriram <153843+yesoreyeram@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:03:46 +0000 Subject: [PATCH] github actions workflows added (#1947) * github actions workflows added * added playwright tests * Apply suggestions from code review * Update .github/workflows/push.yaml --- .github/workflows/lint.yml | 15 ------- .github/workflows/publish.yaml | 32 ++++++++++++++ .github/workflows/push.yaml | 16 +++++++ .gitignore | 10 +++-- cspell.config.json | 7 +--- package.json | 11 ++--- playwright.config.ts | 52 +++++++++++++++++++++++ yarn.lock | 76 ++++++++++++++++++++++++++++++++++ 8 files changed, 190 insertions(+), 29 deletions(-) delete mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/publish.yaml create mode 100644 .github/workflows/push.yaml create mode 100644 playwright.config.ts diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index f4a18b851..000000000 --- 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 000000000..5383c7903 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -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 diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml new file mode 100644 index 000000000..299189a4c --- /dev/null +++ b/.github/workflows/push.yaml @@ -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 diff --git a/.gitignore b/.gitignore index 00e0ad6d1..3724c0b72 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/cspell.config.json b/cspell.config.json index e41254fc3..4a8a0514d 100644 --- a/cspell.config.json +++ b/cspell.config.json @@ -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", diff --git a/package.json b/package.json index fd6a00c98..c7a1285ac 100644 --- a/package.json +++ b/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", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..3d74e3aa4 --- /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 c8f77037a..8846e9d41 100644 --- a/yarn.lock +++ b/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"