diff --git a/.github/workflows/bundle-stats.yml b/.github/workflows/bundle-stats.yml index f4f3fb0..03598b9 100644 --- a/.github/workflows/bundle-stats.yml +++ b/.github/workflows/bundle-stats.yml @@ -12,7 +12,9 @@ permissions: jobs: compare: - runs-on: ubuntu-latest + runs-on: + group: databricks-protected-runner-group + labels: linux-ubuntu-latest steps: - name: Checkout repository diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f323960..2566186 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,14 +18,14 @@ permissions: jobs: build: name: Build, lint and unit tests - runs-on: ubuntu-latest + runs-on: + group: databricks-protected-runner-group + labels: linux-ubuntu-latest 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 - name: Setup Node.js environment @@ -87,10 +87,6 @@ jobs: echo "has-e2e=true" >> $GITHUB_OUTPUT fi - - name: Sign plugin - run: npm run sign - if: ${{ env.GRAFANA_ACCESS_POLICY_TOKEN != '' }} - - name: Get plugin metadata id: metadata run: | @@ -133,7 +129,9 @@ jobs: resolve-versions: name: Resolve e2e images - runs-on: ubuntu-latest + runs-on: + group: databricks-protected-runner-group + labels: linux-ubuntu-latest timeout-minutes: 3 needs: build if: ${{ needs.build.outputs.has-e2e == 'true' }} @@ -146,70 +144,72 @@ jobs: id: resolve-versions uses: grafana/plugin-actions/e2e-version@main - playwright-tests: - needs: [resolve-versions, build] - timeout-minutes: 15 - 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 - - - name: Download plugin - uses: actions/download-artifact@v4 - with: - path: dist - name: ${{ needs.build.outputs.plugin-id }}-${{ needs.build.outputs.plugin-version }} - - - name: Execute permissions on binary - if: needs.build.outputs.has-backend == 'true' - run: | - chmod +x ./dist/gpx_* - - - name: Setup Node.js environment - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - - name: Install dev dependencies - run: npm ci - - - 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 - with: - url: http://localhost:3000/login - - - name: Install Playwright Browsers - run: npm exec playwright install chromium --with-deps - - - name: Run Playwright tests - id: run-tests - run: npm run e2e - - - name: Upload e2e test summary - uses: grafana/plugin-actions/playwright-gh-pages/upload-report-artifacts@main - if: ${{ always() && !cancelled() }} - with: - upload-report: false - github-token: ${{ secrets.GITHUB_TOKEN }} - test-outcome: ${{ steps.run-tests.outcome }} - - - name: Docker logs - if: ${{ always() && steps.run-tests.outcome == 'failure' }} - run: | - docker logs databricks-grafana-datasource >& grafana-server.log - - - name: Stop grafana docker - run: docker compose down + # playwright-tests: + # needs: [resolve-versions, build] + # timeout-minutes: 15 + # 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: + # group: databricks-protected-runner-group + # labels: linux-ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + + # - name: Download plugin + # uses: actions/download-artifact@v4 + # with: + # path: dist + # name: ${{ needs.build.outputs.plugin-id }}-${{ needs.build.outputs.plugin-version }} + + # - name: Execute permissions on binary + # if: needs.build.outputs.has-backend == 'true' + # run: | + # chmod +x ./dist/gpx_* + + # - name: Setup Node.js environment + # uses: actions/setup-node@v4 + # with: + # node-version: '22' + # cache: 'npm' + + # - name: Install dev dependencies + # run: npm ci + + # - 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 + # with: + # url: http://localhost:3000/login + + # - name: Install Playwright Browsers + # run: npm exec playwright install chromium --with-deps + + # - name: Run Playwright tests + # id: run-tests + # run: npm run e2e + + # - name: Upload e2e test summary + # uses: grafana/plugin-actions/playwright-gh-pages/upload-report-artifacts@main + # if: ${{ always() && !cancelled() }} + # with: + # upload-report: false + # github-token: ${{ secrets.GITHUB_TOKEN }} + # test-outcome: ${{ steps.run-tests.outcome }} + + # - name: Docker logs + # if: ${{ always() && steps.run-tests.outcome == 'failure' }} + # run: | + # docker logs databricks-grafana-datasource >& grafana-server.log + + # - name: Stop grafana docker + # 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 @@ -220,13 +220,15 @@ jobs: # path: grafana-server.log # retention-days: 5 - publish-report: - if: ${{ always() && !cancelled() }} - needs: [playwright-tests] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Publish report - uses: grafana/plugin-actions/playwright-gh-pages/deploy-report-pages@main - with: - github-token: ${{ secrets.GITHUB_TOKEN }} + # publish-report: + # if: ${{ always() && !cancelled() }} + # needs: [playwright-tests] + # runs-on: + # group: databricks-protected-runner-group + # labels: linux-ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # - name: Publish report + # uses: grafana/plugin-actions/playwright-gh-pages/deploy-report-pages@main + # with: + # github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/cp-update.yml b/.github/workflows/cp-update.yml index edfec47..3beafa8 100644 --- a/.github/workflows/cp-update.yml +++ b/.github/workflows/cp-update.yml @@ -16,7 +16,9 @@ permissions: jobs: release: - runs-on: ubuntu-latest + runs-on: + group: databricks-protected-runner-group + labels: linux-ubuntu-latest steps: - uses: grafana/plugin-actions/create-plugin-update@main # Uncomment to use a fine-grained personal access token instead of default github token diff --git a/.github/workflows/is-compatible.yml b/.github/workflows/is-compatible.yml index f448b38..d93bf9a 100644 --- a/.github/workflows/is-compatible.yml +++ b/.github/workflows/is-compatible.yml @@ -3,7 +3,9 @@ on: [pull_request] jobs: compatibilitycheck: - runs-on: ubuntu-latest + runs-on: + group: databricks-protected-runner-group + labels: linux-ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js environment diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e3d7763..a1a5dfb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,5 +1,4 @@ -# This GitHub Action automates the process of building Grafana plugins. -# (For more information, see https://github.com/grafana/plugin-actions/blob/main/build-plugin/README.md) +# This GitHub Action builds and packages the Grafana plugin for release. name: Release on: @@ -7,15 +6,101 @@ on: tags: - 'v*' # Run workflow on version tags, e.g. v1.0.0. -permissions: read-all +permissions: + contents: write + id-token: write jobs: release: - permissions: - contents: write - runs-on: ubuntu-latest + name: Build and Release Plugin + runs-on: + group: databricks-protected-runner-group + labels: linux-ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: grafana/plugin-actions/build-plugin@main + + - name: Setup Node.js environment + uses: actions/setup-node@v4 with: - policy_token: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} + node-version: '22' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Check types + run: npm run typecheck + + - name: Lint + run: npm run lint + + - name: Unit tests + run: npm run test:ci + + - name: Build frontend + run: npm run build + + - name: Check for backend + id: check-for-backend + run: | + if [ -f "Magefile.go" ] + then + echo "has-backend=true" >> $GITHUB_OUTPUT + fi + + - name: Setup Go environment + if: steps.check-for-backend.outputs.has-backend == 'true' + uses: actions/setup-go@v5 + with: + go-version: '1.22' + + - name: Test backend + if: steps.check-for-backend.outputs.has-backend == 'true' + uses: magefile/mage-action@v3 + with: + version: latest + args: coverage + + - name: Build backend + if: steps.check-for-backend.outputs.has-backend == 'true' + uses: magefile/mage-action@v3 + with: + version: latest + args: buildAllNoLinuxArm + + - 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 ${{ steps.metadata.outputs.plugin-id }} + zip ${{ steps.metadata.outputs.archive }} ${{ steps.metadata.outputs.plugin-id }} -r + + - name: Validate plugin + run: | + docker run --pull=always \ + -v $PWD/${{ steps.metadata.outputs.archive }}:/archive.zip \ + grafana/plugin-validator-cli -analyzer=metadatavalid /archive.zip + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + files: ${{ steps.metadata.outputs.archive }} + tag_name: ${{ github.ref_name }} + name: Release ${{ github.ref_name }} + draft: false + prerelease: false + generate_release_notes: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}