跳至主要内容

CI 工作流程

您可以使用 CI 工作流程来运行端到端测试,使您可以持续检查故障。我们建议您在 GitHub 存储库中的每个 PR 中使用以下 GitHub 工作流程,以针对一系列 Grafana 版本运行端到端测试。

注意

这些是基于前端和后端插件的通用示例。在您的插件中使用之前,您可能需要更改或删除 playwright-tests 作业中的某些步骤。

后端插件工作流程

.github/workflows/e2e.yml
name: E2E tests
on:
pull_request:

permissions:
contents: read
id-token: write

jobs:
resolve-versions:
name: Resolve Grafana images
runs-on: ubuntu-latest
timeout-minutes: 3
outputs:
matrix: ${{ steps.resolve-versions.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Resolve Grafana E2E versions
id: resolve-versions
uses: grafana/plugin-actions/e2e-version@main

playwright-tests:
needs: resolve-versions
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
GRAFANA_IMAGE: ${{fromJson(needs.resolve-versions.outputs.matrix)}}
name: e2e ${{ matrix.GRAFANA_IMAGE.name }}@${{ matrix.GRAFANA_IMAGE.VERSION }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc

- name: Install npm dependencies
run: npm ci

- name: Install Mage
uses: magefile/mage-action@v3
with:
install-only: true

- name: Build binaries
run: mage -v build:linux

- name: Build frontend
run: npm run build

- name: Install Playwright Browsers
run: npx playwright install --with-deps

- name: Start Grafana
run: |
docker compose pull
GRAFANA_VERSION=${{ matrix.GRAFANA_IMAGE.VERSION }} GRAFANA_IMAGE=${{ matrix.GRAFANA_IMAGE.NAME }} docker compose up -d

- name: Wait for Grafana to start
uses: nev7n/wait_for_response@v1
with:
url: 'https://127.0.0.1:3000/'
responseCode: 200
timeout: 60000
interval: 500

- name: Run Playwright tests
id: run-tests
run: npx playwright test

# Uncomment this step to upload the Playwright report to Github artifacts.
# If your repository is public, the report will be public on the Internet so beware not to expose sensitive information.
# - name: Upload artifacts
# uses: actions/upload-artifact@v4
# if: ${{ (always() && steps.run-tests.outcome == 'success') || (failure() && steps.run-tests.outcome == 'failure') }}
# with:
# name: playwright-report-${{ matrix.GRAFANA_IMAGE.NAME }}-v${{ matrix.GRAFANA_IMAGE.VERSION }}-${{github.run_id}}
# path: playwright-report/
# retention-days: 30

前端插件工作流程

.github/workflows/e2e.yml
name: E2E tests
on:
pull_request:

permissions:
contents: read
id-token: write

jobs:
resolve-versions:
name: Resolve Grafana images
runs-on: ubuntu-latest
timeout-minutes: 3
outputs:
matrix: ${{ steps.resolve-versions.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Resolve Grafana E2E versions
id: resolve-versions
uses: grafana/plugin-actions/e2e-version@main

playwright-tests:
needs: resolve-versions
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
GRAFANA_IMAGE: ${{fromJson(needs.resolve-versions.outputs.matrix)}}
name: e2e ${{ matrix.GRAFANA_IMAGE.name }}@${{ matrix.GRAFANA_IMAGE.VERSION }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Node.js environment
uses: actions/setup-node@v4
with:
node-version-file: .nvmrc

- name: Install npm dependencies
run: npm ci

- name: Build frontend
run: npm run build

- name: Install Playwright Browsers
run: npx playwright install --with-deps

- name: Start Grafana
run: |
docker compose pull
GRAFANA_VERSION=${{ matrix.GRAFANA_IMAGE.VERSION }} GRAFANA_IMAGE=${{ matrix.GRAFANA_IMAGE.NAME }} docker compose up -d

- name: Wait for Grafana to start
uses: nev7n/wait_for_response@v1
with:
url: 'https://127.0.0.1:3000/'
responseCode: 200
timeout: 60000
interval: 500

- name: Run Playwright tests
id: run-tests
run: npx playwright test

# Uncomment this step to upload the Playwright report to Github artifacts.
# If your repository is public, the report will be public on the Internet so beware not to expose sensitive information.
# - name: Upload artifacts
# uses: actions/upload-artifact@v4
# if: ${{ (always() && steps.run-tests.outcome == 'success') || (failure() && steps.run-tests.outcome == 'failure') }}
# with:
# name: playwright-report-${{ matrix.GRAFANA_IMAGE.NAME }}-v${{ matrix.GRAFANA_IMAGE.VERSION }}-${{github.run_id}}
# path: playwright-report/
# retention-days: 30

e2e-versions 操作

这些示例工作流程有一个名为 Resolve Grafana images 的作业,它使用 e2e-version 操作来解析 Grafana 图像列表。对于返回的每个图像,都会启动一个新作业,该作业会构建插件、启动 Grafana 并运行端到端测试。

该操作支持两种模式

  • plugin-grafana-dependency
  • version-support-policy.

使用 plugin-grafana-dependency 模式

plugin-grafana-dependency 模式是默认模式,因此如果您没有为 version-resolver-type 输入参数指定值,则将使用此解析器。

此模式返回最新的 grafana-dev 图像。此外,它还返回自 plugin.json 中指定为 grafanaDependency 的版本以来的所有最新 Grafana Enterprise 修补程序版本。为了避免启动太多作业,输出限制为 6 个版本。

plugin-grafana-dependency mode
plugin-grafana-dependency 模式

使用 version-support-policy 模式

除了解析最新的 grafana-dev 图像外,version-support-policy 模式还会根据 Grafana 的插件兼容性支持策略解析版本。具体来说,它会检索当前 Grafana 主要版本中每个次要版本的最新修补程序版本。此外,它还包括前一个 Grafana 主要版本的最新次要版本的最新版本。

Grafana version support policy
Grafana 版本支持策略

要使用 version-support-policy 模式,您需要像此示例一样指定 version-resolver-type 输入参数

- name: Resolve Grafana E2E versions
id: resolve-versions
uses: grafana/plugin-actions/e2e-version
with:
version-resolver-type: version-support-policy

Playwright 报告

端到端工具为正在测试的每个 Grafana 版本生成一个 Playwright HTML 测试报告。如果任何测试失败,还会生成一个 Playwright 跟踪查看器以及报告。示例工作流程中的 Upload artifacts 步骤将报告作为工件上传到 GitHub。

要查找有关如何下载和查看报告的信息,请参阅 Playwright 文档