From bd60fddf5fec867567670ed9e6bc1c7dc3ced3ae Mon Sep 17 00:00:00 2001 From: Dalvany <9901407+Dalvany@users.noreply.github.com> Date: Tue, 16 Apr 2024 21:18:43 +0200 Subject: [PATCH] Update CI scripts (#91) --- .github/workflows/ci.yml | 70 ++++++++++++--- .github/workflows/is-compatible.yml | 8 +- .github/workflows/release.yml | 133 +++------------------------- src/{module.tsx => module.ts} | 0 4 files changed, 75 insertions(+), 136 deletions(-) rename src/{module.tsx => module.ts} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea113d7..d901fe1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,15 +10,19 @@ on: - master - main +permissions: read-all + jobs: build: runs-on: ubuntu-latest + env: + GRAFANA_ACCESS_POLICY_TOKEN: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Node.js environment - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' cache: 'yarn' - name: Install dependencies @@ -43,20 +47,20 @@ jobs: - name: Setup Go environment if: steps.check-for-backend.outputs.has-backend == 'true' - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: - go-version: '1.20' + go-version: '1.21' - name: Test backend if: steps.check-for-backend.outputs.has-backend == 'true' - uses: magefile/mage-action@v2 + 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@v2 + uses: magefile/mage-action@v3 with: version: latest args: buildAll @@ -64,16 +68,30 @@ jobs: - name: Check for E2E id: check-for-e2e run: | - if [ -d "cypress" ] + if [ -f "playwright.config.ts" ] then echo "has-e2e=true" >> $GITHUB_OUTPUT fi + - name: Install Playwright Browsers + if: steps.check-for-e2e.outputs.has-e2e == 'true' + run: yarn exec playwright install --with-deps + - name: Start grafana docker if: steps.check-for-e2e.outputs.has-e2e == 'true' run: docker-compose up -d + - name: Wait for Grafana to start + if: steps.check-for-e2e.outputs.has-e2e == 'true' + uses: nev7n/wait_for_response@v1 + with: + url: 'http://localhost:3000/' + responseCode: 200 + timeout: 60000 + interval: 500 + - name: Run e2e tests + id: run-e2e-tests if: steps.check-for-e2e.outputs.has-e2e == 'true' run: yarn run e2e @@ -82,9 +100,39 @@ jobs: run: docker-compose down - name: Archive E2E output - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: steps.check-for-e2e.outputs.has-e2e == 'true' && steps.run-e2e-tests.outcome != 'success' with: - name: cypress-videos - path: cypress/videos + name: playwright-report + path: playwright-report/ + retention-days: 5 + + - name: Sign plugin + run: yarn run sign + if: ${{ env.GRAFANA_ACCESS_POLICY_TOKEN != '' }} + + - 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: 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 diff --git a/.github/workflows/is-compatible.yml b/.github/workflows/is-compatible.yml index 2f3de94..3e39a07 100644 --- a/.github/workflows/is-compatible.yml +++ b/.github/workflows/is-compatible.yml @@ -5,15 +5,15 @@ jobs: compatibilitycheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Node.js environment - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' cache: 'yarn' - name: Install dependencies run: yarn install --immutable --prefer-offline - name: Build plugin run: yarn run build - name: Compatibility check - run: npx @grafana/levitate@latest is-compatible --path src/module.tsx --target @grafana/data,@grafana/ui,@grafana/runtime + run: npx @grafana/levitate@latest is-compatible --path src/module.ts --target @grafana/data,@grafana/ui,@grafana/runtime diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 63436f7..72229d7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,3 +1,5 @@ +# 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) name: Release on: @@ -5,129 +7,18 @@ on: tags: - 'v*' # Run workflow on version tags, e.g. v1.0.0. +permissions: read-all + jobs: release: + permissions: + contents: write runs-on: ubuntu-latest - env: - # usage of GRAFANA_API_KEY is deprecated - # GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} - GRAFANA_ACCESS_POLICY_TOKEN: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} steps: - - uses: actions/checkout@v3 - - name: Setup Node.js environment - uses: actions/setup-node@v3 - with: - node-version: '18' - cache: 'yarn' - - - name: Setup Go environment - uses: actions/setup-go@v3 - with: - go-version: '1.19' - - - name: Install dependencies - run: yarn install --immutable --prefer-offline - - - name: Build and test frontend - run: yarn run build - - - name: Check for backend - id: check-for-backend - run: | - if [ -f "Magefile.go" ] - then - echo "has-backend=true" >> $GITHUB_OUTPUT - fi - - - name: Test backend - if: steps.check-for-backend.outputs.has-backend == 'true' - uses: magefile/mage-action@v2 - with: - version: latest - args: coverage - - - name: Build backend - if: steps.check-for-backend.outputs.has-backend == 'true' - uses: magefile/mage-action@v2 - with: - version: latest - args: buildAll - - - name: Warn missing Grafana access policy token - run: | - echo Please generate a Grafana access policy token: https://grafana.com/docs/grafana/latest/developers/plugins/sign-a-plugin/#generate-a-token - echo Once done please follow the instructions found here: https://github.com/${{github.repository}}/blob/main/README.md#using-github-actions-release-workflow - if: ${{ env.GRAFANA_ACCESS_POLICY_TOKEN == '' }} - - - name: Sign plugin - run: yarn run sign - if: ${{ env.GRAFANA_ACCESS_POLICY_TOKEN != '' }} - - - 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_TYPE=$(cat dist/plugin.json | jq -r .type) - export GRAFANA_PLUGIN_ARTIFACT=${GRAFANA_PLUGIN_ID}-${GRAFANA_PLUGIN_VERSION}.zip - export GRAFANA_PLUGIN_ARTIFACT_CHECKSUM=${GRAFANA_PLUGIN_ARTIFACT}.md5 - - echo "plugin-id=${GRAFANA_PLUGIN_ID}" >> $GITHUB_OUTPUT - echo "plugin-version=${GRAFANA_PLUGIN_VERSION}" >> $GITHUB_OUTPUT - echo "plugin-type=${GRAFANA_PLUGIN_TYPE}" >> $GITHUB_OUTPUT - echo "archive=${GRAFANA_PLUGIN_ARTIFACT}" >> $GITHUB_OUTPUT - echo "archive-checksum=${GRAFANA_PLUGIN_ARTIFACT_CHECKSUM}" >> $GITHUB_OUTPUT - - echo "github-tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT - - - name: Read changelog - id: changelog - run: | - awk '/^## / {s++} s == 1 {print}' CHANGELOG.md > release_notes.md - echo "path=release_notes.md" >> $GITHUB_OUTPUT - - - name: Check package version - run: if [ "v${{ steps.metadata.outputs.plugin-version }}" != "${{ steps.metadata.outputs.github-tag }}" ]; then printf "\033[0;31mPlugin version doesn't match tag name\033[0m\n"; exit 1; fi - - - 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 - md5sum ${{ steps.metadata.outputs.archive }} > ${{ steps.metadata.outputs.archive-checksum }} - echo "checksum=$(cat ./${{ steps.metadata.outputs.archive-checksum }} | cut -d' ' -f1)" >> $GITHUB_OUTPUT - - - name: Validate plugin - run: | - git clone https://github.com/grafana/plugin-validator - pushd ./plugin-validator/pkg/cmd/plugincheck2 - go install - popd - plugincheck2 -config ./plugin-validator/config/default.yaml ${{ steps.metadata.outputs.archive }} - - - name: Create Github release - uses: softprops/action-gh-release@v1 + - uses: actions/checkout@v4 + - uses: grafana/plugin-actions/build-plugin@release + # Uncomment to enable plugin signing + # (For more info on how to generate the access policy token see https://grafana.com/developers/plugin-tools/publish-a-plugin/sign-a-plugin#generate-an-access-policy-token) with: - draft: true - generate_release_notes: true - files: | - ./${{ steps.metadata.outputs.archive }} - ./${{ steps.metadata.outputs.archive-checksum }} - body: | - **This Github draft release has been created for your plugin.** - - _Note: if this is the first release for your plugin please consult the [distributing-your-plugin section](https://github.com/${{github.repository}}/blob/main/README.md#distributing-your-plugin) of the README_ - - If you would like to submit this release to Grafana please consider the following steps: - - - Check the Validate plugin step in the [release workflow](https://github.com/${{github.repository}}/commit/${{github.sha}}/checks/${{github.run_id}}) for any warnings that need attention - - Navigate to https://grafana.com/auth/sign-in/ to sign into your account - - Once logged in click **My Plugins** in the admin navigation - - Click the **Submit Plugin** button - - Fill in the Plugin Submission form: - - Paste this [.zip asset link](https://github.com/${{ github.repository }}/releases/download/v${{ steps.metadata.outputs.plugin-version }}/${{ steps.metadata.outputs.archive }}) in the Plugin URL field - - Paste this [.zip.md5 link](https://github.com/${{ github.repository }}/releases/download/v${{ steps.metadata.outputs.plugin-version }}/${{ steps.metadata.outputs.archive-checksum }}) in the MD5 field - - Once done please remove these instructions and publish this release. + # Make sure to save the token in your repository secrets + policy_token: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} diff --git a/src/module.tsx b/src/module.ts similarity index 100% rename from src/module.tsx rename to src/module.ts