Skip to content

Use panel setting to determine API mode #378

Use panel setting to determine API mode

Use panel setting to determine API mode #378

Workflow file for this run

name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
name: Build, lint and unit tests
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
plugin-id: ${{ steps.metadata.outputs.plugin-id }}
plugin-version: ${{ steps.metadata.outputs.plugin-version }}
has-e2e: ${{ steps.check-for-e2e.outputs.has-e2e }}
has-backend: ${{ steps.check-for-backend.outputs.has-backend }}
env:
GRAFANA_ACCESS_POLICY_TOKEN: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }}
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Check types
run: bun run typecheck
- name: Format check
run: bun run fmt:check
- name: Lint
run: bun run lint
- name: Check if versions are in sync
run: bun run ./scripts/check-version.js
- name: Unit tests
run: bun run test:ci
- name: Build frontend
run: bun run build
- name: Check for E2E
id: check-for-e2e
run: |
if [ -f "playwright.config.ts" ]
then
echo "has-e2e=true" >> $GITHUB_OUTPUT
fi
- name: Get plugin metadata
id: metadata
run: |
sudo apt-get install jq
export GRAFANA_PLUGIN_ID=$(cat dist/plugin.json | jq -r .id)
export GRAFANA_PLUGIN_VERSION=$(cat dist/plugin.json | jq -r .info.version)
export GRAFANA_PLUGIN_ARTIFACT=${GRAFANA_PLUGIN_ID}-${GRAFANA_PLUGIN_VERSION}.zip
echo "plugin-id=${GRAFANA_PLUGIN_ID}" >> $GITHUB_OUTPUT
echo "plugin-version=${GRAFANA_PLUGIN_VERSION}" >> $GITHUB_OUTPUT
echo "archive=${GRAFANA_PLUGIN_ARTIFACT}" >> $GITHUB_OUTPUT
- name: Package plugin
id: package-plugin
run: |
mv dist ${PLUGIN_ID}
zip ${ARCHIVE} ${PLUGIN_ID} -r
env:
ARCHIVE: ${{ steps.metadata.outputs.archive }}
PLUGIN_ID: ${{ steps.metadata.outputs.plugin-id }}
- name: Check plugin.json
run: |
docker run --pull=always \
-v $PWD/${ARCHIVE}:/archive.zip \
grafana/plugin-validator-cli -analyzer=metadatavalid /archive.zip
env:
ARCHIVE: ${{ steps.metadata.outputs.archive }}
- name: Archive Build
uses: actions/upload-artifact@v4
with:
name: ${{ steps.metadata.outputs.plugin-id }}-${{ steps.metadata.outputs.plugin-version }}
path: ${{ steps.metadata.outputs.plugin-id }}
retention-days: 5
resolve-versions:
name: Resolve e2e images
runs-on: ubuntu-latest
permissions:
contents: read
timeout-minutes: 3
if: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
outputs:
matrix: ${{ steps.resolve-versions.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Resolve Grafana E2E versions
id: resolve-versions
uses: grafana/plugin-actions/e2e-version@main # zizmor: ignore[unpinned-uses] provided by grafana
playwright-tests:
needs: [resolve-versions]
timeout-minutes: 30
permissions:
contents: read
id-token: write
pull-requests: write
strategy:
fail-fast: false
matrix:
GRAFANA_IMAGE: ${{fromJson(needs.resolve-versions.outputs.matrix)}}
name: e2e test ${{ matrix.GRAFANA_IMAGE.name }}@${{ matrix.GRAFANA_IMAGE.VERSION }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Build plugin (without child count for standard Tempo tests)
run: bun run build:without-child-count
- name: Start Grafana
run: |
docker compose pull
ANONYMOUS_AUTH_ENABLED=false DEVELOPMENT=false GRAFANA_VERSION=${{ matrix.GRAFANA_IMAGE.VERSION }} GRAFANA_IMAGE=${{ matrix.GRAFANA_IMAGE.NAME }} docker compose up -d
- name: Wait for grafana server
uses: grafana/plugin-actions/wait-for-grafana@main # zizmor: ignore[unpinned-uses] provided by grafana
with:
url: http://localhost:3000/login
- name: Install Playwright Browsers
run: bunx playwright install chromium --with-deps
- name: Provision sample data
run: bun run scripts/e2e-tempo-trace.js
- name: Fetch trace
run: curl "http://localhost:3200/api/search?q=%7B%7D"
- name: Run Playwright tests (regular)
id: run-tests-regular
run: bun run e2e
- name: Upload e2e test summary (regular)
uses: grafana/plugin-actions/playwright-gh-pages/upload-report-artifacts@main # zizmor: ignore[unpinned-uses] provided by grafana
if: ${{ always() && !cancelled() }}
with:
upload-report: false
github-token: ${{ secrets.GITHUB_TOKEN }}
test-outcome: ${{ steps.run-tests-regular.outcome }}
- name: Stop grafana docker (after regular tests)
run: docker compose down
- name: Build plugin (with child count, default)
run: bun run build
- name: Start Grafana (for child count tests)
run: |
docker compose -f ./local-tempo-docker-compose.yml pull
ANONYMOUS_AUTH_ENABLED=false DEVELOPMENT=false GRAFANA_VERSION=${{ matrix.GRAFANA_IMAGE.VERSION }} GRAFANA_IMAGE=${{ matrix.GRAFANA_IMAGE.NAME }} docker compose -f ./local-tempo-docker-compose.yml up --build -d
- name: Wait for grafana server (child count)
uses: grafana/plugin-actions/wait-for-grafana@main # zizmor: ignore[unpinned-uses] provided by grafana
with:
url: http://localhost:3000/login
- name: Start server with child count support
run: |
bun run tests/test-api.ts &
echo $! > /tmp/test-api.pid
echo "Started test API server with PID: $(cat /tmp/test-api.pid)"
- name: Run Playwright tests (with child count)
id: run-tests-child-count
run: bun run e2e
- name: Stop test API server
if: always()
run: |
if [ -f /tmp/test-api.pid ]; then
PID=$(cat /tmp/test-api.pid)
echo "Stopping test API server with PID: $PID"
kill $PID 2>/dev/null || echo "Process $PID not found or already stopped"
rm -f /tmp/test-api.pid
else
echo "No test API server PID file found"
fi
- name: Upload e2e test summary (with child count)
uses: grafana/plugin-actions/playwright-gh-pages/upload-report-artifacts@main # zizmor: ignore[unpinned-uses] provided by grafana
if: ${{ always() && !cancelled() }}
with:
upload-report: false
github-token: ${{ secrets.GITHUB_TOKEN }}
test-outcome: ${{ steps.run-tests-child-count.outcome }}
plugin-name: gresearch-grafanaincrementaltraceviewer-panel-0.2.0-with-child-count
- name: Docker logs
if: ${{ always() && (steps.run-tests-regular.outcome == 'failure' || steps.run-tests-child-count.outcome == 'failure') }}
run: |
docker logs gresearch-grafanaincrementaltraceviewer-app >& grafana-server.log
- name: Stop grafana docker (final)
run: docker compose down
# Uncomment this step to upload the server log to Github artifacts. Remember Github artifacts are public on the Internet if the repository is public.
# - name: Upload server log
# uses: actions/upload-artifact@v4
# if: ${{ always() && (steps.run-tests-regular.outcome == 'failure' || steps.run-tests-child-count.outcome == 'failure') }}
# with:
# name: ${{ matrix.GRAFANA_IMAGE.NAME }}-v${{ matrix.GRAFANA_IMAGE.VERSION }}-${{github.run_id}}-server-log
# path: grafana-server.log
# retention-days: 5
# PR comment functionality disabled due to repository permissions
# The Playwright tests are working correctly - reports are available as artifacts
# publish-report:
# if: ${{ always() && !cancelled() && github.event_name == 'pull_request' }}
# permissions:
# contents: write
# id-token: write
# pull-requests: write
# issues: write
# needs: [playwright-tests]
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# with:
# persist-credentials: true
# - name: Publish report
# uses: grafana/plugin-actions/playwright-gh-pages/deploy-report-pages@main
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}