From 7070c6c8b29d9bc9c18ea742c29514d91381c57b Mon Sep 17 00:00:00 2001 From: jev forsberg Date: Tue, 5 Aug 2025 10:22:28 -0600 Subject: [PATCH] Rollback: OSS E2E infrastructure to 11.4.8 baseline E2E Infrastructure Rollback: - Revert e2e/ directory to 11.4.8 baseline (removes modern test infrastructure) - Revert .github/workflows/pr-e2e-tests.yml to 11.4.8 baseline - Regenerate yarn.lock to remove E2E test plugin workspace dependencies - Resolves E2E test compatibility issues with 11.4.8 codebase Keep Modern CI Infrastructure: - Keep package.json improvements (i18n-extract, betterer:ci, webpack-subresource-integrity) - Keep all other GitHub Actions modernizations - Keep Dagger build system and modern tooling Result: Working E2E tests designed for 11.4.8 + modern CI foundation --- .github/workflows/pr-e2e-tests.yml | 220 +++--------------- e2e/panels-suite/panelEdit_queries.spec.ts | 8 +- .../grafana-extensionstest-app/package.json | 5 +- yarn.lock | 12 +- 4 files changed, 53 insertions(+), 192 deletions(-) diff --git a/.github/workflows/pr-e2e-tests.yml b/.github/workflows/pr-e2e-tests.yml index baad1228376..a8f2e1cd54a 100644 --- a/.github/workflows/pr-e2e-tests.yml +++ b/.github/workflows/pr-e2e-tests.yml @@ -7,51 +7,31 @@ on: - main - release-*.*.* -# Temporarily disabled concurrency to bypass stuck workflow -# concurrency: -# group: ${{ github.workflow }}-${{ github.ref }} -# cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} - -permissions: {} +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }} jobs: - detect-changes: - name: Detect whether code changed - runs-on: github-hosted-ubuntu-x64-large - permissions: - contents: read - outputs: - changed: ${{ steps.detect-changes.outputs.e2e }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: true # required to get more history in the changed-files action - fetch-depth: 2 - - name: Detect changes - id: detect-changes - uses: ./.github/actions/change-detection - with: - self: .github/workflows/pr-e2e-tests.yml - build-grafana: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' name: Build & Package Grafana - runs-on: github-hosted-ubuntu-x64-large - permissions: - contents: read + runs-on: ubuntu-latest-16-cores outputs: artifact: ${{ steps.artifact.outputs.artifact }} steps: - uses: actions/checkout@v4 with: - path: ./grafana + repository: 'grafana/grafana-build' + ref: 'main' persist-credentials: false + - uses: actions/checkout@v4 + with: + path: ./grafana + - run: echo "GRAFANA_GO_VERSION=$(grep "go 1." grafana/go.work | cut -d\ -f2)" >> "$GITHUB_ENV" - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e with: verb: run - args: go -C grafana run ./pkg/build/cmd artifacts -a targz:grafana:linux/amd64 --grafana-dir="${PWD}/grafana" > out.txt - - run: mv "$(cat out.txt)" grafana.tar.gz + args: go run ./cmd artifacts -a targz:grafana:linux/amd64 --grafana-dir=grafana --go-version=${GRAFANA_GO_VERSION} > out.txt + - run: mv $(cat out.txt) grafana.tar.gz - run: echo "artifact=grafana-e2e-${{github.run_number}}" >> "$GITHUB_OUTPUT" id: artifact - uses: actions/upload-artifact@v4 @@ -60,157 +40,33 @@ jobs: retention-days: 1 name: ${{ steps.artifact.outputs.artifact }} path: grafana.tar.gz - - build-e2e-runner: - needs: detect-changes - if: needs.detect-changes.outputs.changed == 'true' - name: Build E2E test runner - runs-on: github-hosted-ubuntu-x64-large - permissions: - contents: read - outputs: - artifact: ${{ steps.artifact.outputs.artifact }} - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup Go - uses: actions/setup-go@v5 - with: - go-version-file: go.mod - cache: ${{ !github.event.pull_request.head.repo.fork }} - - name: Build E2E test runner - id: artifact - run: | - set -euo pipefail - # We want a static binary, so we need to set CGO_ENABLED=0 - CGO_ENABLED=0 go build -o ./e2e-runner ./e2e/ - echo "artifact=e2e-runner-${{github.run_number}}" >> "$GITHUB_OUTPUT" - - uses: actions/upload-artifact@v4 - id: upload - with: - retention-days: 1 - name: ${{ steps.artifact.outputs.artifact }} - path: e2e-runner - - run-e2e-tests: - needs: - - build-grafana - - build-e2e-runner - strategy: - fail-fast: false - matrix: - include: - - suite: various-suite - path: e2e/various-suite - - suite: dashboards-suite - path: e2e/dashboards-suite - - suite: smoke-tests-suite - path: e2e/smoke-tests-suite - - suite: panels-suite - path: e2e/panels-suite - - suite: various-suite (old arch) - path: e2e/old-arch/various-suite - flags: --flags="--env DISABLE_SCENES=true" - - suite: dashboards-suite (old arch) - path: e2e/old-arch/dashboards-suite - flags: --flags="--env DISABLE_SCENES=true" - - suite: smoke-tests-suite (old arch) - path: e2e/old-arch/smoke-tests-suite - flags: --flags="--env DISABLE_SCENES=true" - - suite: panels-suite (old arch) - path: e2e/old-arch/panels-suite - flags: --flags="--env DISABLE_SCENES=true" + e2e-matrix: name: ${{ matrix.suite }} - runs-on: github-hosted-ubuntu-x64-large - permissions: - contents: read - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/download-artifact@v4 - with: - name: ${{ needs.build-grafana.outputs.artifact }} - - uses: actions/download-artifact@v4 - with: - name: ${{ needs.build-e2e-runner.outputs.artifact }} - - name: chmod +x - run: chmod +x ./e2e-runner - - name: Run E2E tests - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - verb: run - args: go run ./pkg/build/e2e --package=grafana.tar.gz - --suite=${{ matrix.path }} - ${{ matrix.flags }} - - name: Set suite name - id: set-suite-name - if: success() || failure() - env: - SUITE: ${{ matrix.path }} - run: | - set -euo pipefail - echo "suite=$(echo "$SUITE" | sed 's/\//-/g')" >> "$GITHUB_OUTPUT" - - uses: actions/upload-artifact@v4 - if: success() || failure() - with: - name: ${{ steps.set-suite-name.outputs.suite }}-${{ github.run_number }} - path: videos - retention-days: 1 - - run-a11y-test: + strategy: + matrix: + suite: + - various-suite + - dashboards-suite + - smoke-tests-suite + - panels-suite needs: - build-grafana - name: A11y test - runs-on: github-hosted-ubuntu-x64-large - permissions: - contents: read - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/download-artifact@v4 - with: - name: ${{ needs.build-grafana.outputs.artifact }} - - name: Run PR a11y test - if: github.event_name == 'pull_request' - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - verb: run - args: go run ./pkg/build/a11y --package=grafana.tar.gz - - name: Run non-PR a11y test - if: github.event_name != 'pull_request' - uses: dagger/dagger-for-github@e47aba410ef9bb9ed81a4d2a97df31061e5e842e - with: - verb: run - args: go run ./pkg/build/a11y --package=grafana.tar.gz --no-threshold-fail - - # This is the job that is actually required by rulesets. - # We want to only require one job instead of all the individual tests. - # Future work also allows us to start skipping some tests based on changed files. - required-e2e-tests: + uses: ./.github/workflows/run-e2e-suite.yml + with: + package: ${{ needs.build-grafana.outputs.artifact }} + suite: ${{ matrix.suite }} + e2e-matrix-old-arch: + name: ${{ matrix.suite }} (old arch) + strategy: + matrix: + suite: + - old-arch/various-suite + - old-arch/dashboards-suite + - old-arch/smoke-tests-suite + - old-arch/panels-suite needs: - - run-e2e-tests - # a11y test is not listed on purpose: it is not an important E2E test. - # It is also totally fine to fail right now. - # always() is the best function here. - # success() || failure() will skip this function if any need is also skipped. - # That means conditional test suites will fail the entire requirement check. - if: always() - - name: All E2E tests complete - runs-on: github-hosted-ubuntu-x64-large - steps: - - name: Check test suites - env: - NEEDS: ${{ toJson(needs) }} - run: | - FAILURES="$(echo "$NEEDS" | jq 'with_entries(select(.value.result == "failure")) | map_values(.result)')" - echo "$FAILURES" - if [ "$(echo "$FAILURES" | jq '. | length')" != "0" ]; then - exit 1 - fi - echo "All OK!" + - build-grafana + uses: ./.github/workflows/run-e2e-suite.yml + with: + package: ${{ needs.build-grafana.outputs.artifact }} + suite: ${{ matrix.suite }} diff --git a/e2e/panels-suite/panelEdit_queries.spec.ts b/e2e/panels-suite/panelEdit_queries.spec.ts index 0ee19e4d09d..1700a00ea9f 100644 --- a/e2e/panels-suite/panelEdit_queries.spec.ts +++ b/e2e/panels-suite/panelEdit_queries.spec.ts @@ -7,13 +7,7 @@ describe('Panel edit tests - queries', () => { e2e.flows.login(Cypress.env('USERNAME'), Cypress.env('PASSWORD')); }); - it.skip('Tests various Panel edit queries scenarios', () => { - // Skip during CI migration - UI element selector evolution between release branches - // Error: cy.scrollIntoView() found 2 elements instead of 1 for QueryTab.addQuery() - // This indicates DOM structure changes between release-11.6.4 and release-12.0.3 - // UI functionality works fine, but test expects different element count - // TODO: Update test selectors after CI migration completion to handle multiple elements - + it('Tests various Panel edit queries scenarios', () => { e2e.flows.openDashboard({ uid: '5SdHCadmz', queryParams: { editPanel: 3 } }); // New panel editor opens when navigating from Panel menu diff --git a/e2e/test-plugins/grafana-extensionstest-app/package.json b/e2e/test-plugins/grafana-extensionstest-app/package.json index 787085b7da4..b4e797d73d0 100644 --- a/e2e/test-plugins/grafana-extensionstest-app/package.json +++ b/e2e/test-plugins/grafana-extensionstest-app/package.json @@ -1,6 +1,6 @@ { "name": "@test-plugins/extensions-test-app", - "version": "11.5.8", + "version": "11.4.7", "private": true, "scripts": { "build": "webpack -c ./webpack.config.ts --env production", @@ -11,9 +11,10 @@ "author": "Grafana Labs", "license": "Apache-2.0", "devDependencies": { + "@grafana/eslint-config": "7.0.0", "@grafana/plugin-configs": "workspace:*", "@types/lodash": "4.17.7", - "@types/node": "22.10.2", + "@types/node": "20.14.14", "@types/prismjs": "1.26.4", "@types/react": "18.3.3", "@types/react-dom": "18.2.25", diff --git a/yarn.lock b/yarn.lock index 4617de06374..b654c8597d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9161,12 +9161,13 @@ __metadata: dependencies: "@emotion/css": "npm:11.11.2" "@grafana/data": "workspace:*" + "@grafana/eslint-config": "npm:7.0.0" "@grafana/plugin-configs": "workspace:*" "@grafana/runtime": "workspace:*" "@grafana/schema": "workspace:*" "@grafana/ui": "workspace:*" "@types/lodash": "npm:4.17.7" - "@types/node": "npm:22.10.2" + "@types/node": "npm:20.14.14" "@types/prismjs": "npm:1.26.4" "@types/react": "npm:18.3.3" "@types/react-dom": "npm:18.2.25" @@ -10331,6 +10332,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:20.14.14": + version: 20.14.14 + resolution: "@types/node@npm:20.14.14" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10/035bc347e3de04888d537801e23eb4b4f99522975ca002dbfef978edd853710031b7cd43bf022670d6aba4ed5d4ac75ea1b5ff77ff8f80998bffd943b7bcef48 + languageName: node + linkType: hard + "@types/node@npm:22.10.2": version: 22.10.2 resolution: "@types/node@npm:22.10.2"