diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3e0576d..e17beeb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,10 +3,10 @@ name: CI on: push: branches: - - master + - main pull_request: branches: - - master + - main jobs: build: runs-on: ubuntu-latest @@ -16,7 +16,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v2.1.2 with: - node-version: "14.x" + node-version: "20.x" - name: Get yarn cache directory path id: yarn-cache-dir-path @@ -58,7 +58,7 @@ jobs: if: steps.check-for-backend.outputs.has-backend == 'true' uses: actions/setup-go@v2 with: - go-version: "1.15" + go-version: "1.22.6" - name: Test backend if: steps.check-for-backend.outputs.has-backend == 'true' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2a070dd..48a243d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,164 +1,27 @@ +{{!-- /* 🚨 The `$\{{ }}` Github workflow expressions need to be escaped so they are not being interpreted by Handlebars. (this comment is going to be removed after scaffolding) 🚨 */ --}} +# 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: push: tags: - - "v*.*.*" # Run workflow on version tags, e.g. v1.0.0. + - 'v*' # Run workflow on version tags, e.g. v1.0.0. + +permissions: read-all jobs: release: + permissions: + contents: write runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - name: Setup Node.js environment - uses: actions/setup-node@v2.1.2 - with: - node-version: "14.x" - - - name: Setup Go environment - uses: actions/setup-go@v2 - with: - go-version: "1.15" - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn cache dir)" - - - name: Cache yarn cache - uses: actions/cache@v2 - id: cache-yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Cache node_modules - id: cache-node-modules - uses: actions/cache@v2 - with: - path: node_modules - key: ${{ runner.os }}-${{ matrix.node-version }}-nodemodules-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-${{ matrix.node-version }}-nodemodules- - - - name: Install dependencies - run: yarn install --frozen-lockfile; - if: | - steps.cache-yarn-cache.outputs.cache-hit != 'true' || - steps.cache-node-modules.outputs.cache-hit != 'true' - - - name: Build and test frontend - run: yarn build - - - name: Check for backend - id: check-for-backend - run: | - if [ -f "Magefile.go" ] - then - echo "::set-output name=has-backend::true" - fi - - - name: Test backend - if: steps.check-for-backend.outputs.has-backend == 'true' - uses: magefile/mage-action@v1 - with: - version: latest - args: coverage - - - name: Build backend - if: steps.check-for-backend.outputs.has-backend == 'true' - uses: magefile/mage-action@v1 - with: - version: latest - args: buildAll - - - name: Sign plugin - run: yarn sign - env: - GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} # Requires a Grafana API key from Grafana.com. - - - 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 "::set-output name=plugin-id::${GRAFANA_PLUGIN_ID}" - echo "::set-output name=plugin-version::${GRAFANA_PLUGIN_VERSION}" - echo "::set-output name=plugin-type::${GRAFANA_PLUGIN_TYPE}" - echo "::set-output name=archive::${GRAFANA_PLUGIN_ARTIFACT}" - echo "::set-output name=archive-checksum::${GRAFANA_PLUGIN_ARTIFACT_CHECKSUM}" - - echo ::set-output name=github-tag::${GITHUB_REF#refs/*/} - - - name: Read changelog - id: changelog - run: | - awk '/^## / {s++} s == 1 {print}' CHANGELOG.md > release_notes.md - echo "::set-output name=path::release_notes.md" - - - 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 "::set-output name=checksum::$(cat ./${{ steps.metadata.outputs.archive-checksum }} | cut -d' ' -f1)" - - - name: Lint plugin - run: | - git clone https://github.com/grafana/plugin-validator - pushd ./plugin-validator/cmd/plugincheck - go install - popd - plugincheck ${{ steps.metadata.outputs.archive }} - - - name: Create release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - body_path: ${{ steps.changelog.outputs.path }} - draft: true - - - name: Add plugin to release - id: upload-plugin-asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./${{ steps.metadata.outputs.archive }} - asset_name: ${{ steps.metadata.outputs.archive }} - asset_content_type: application/zip - - - name: Add checksum to release - id: upload-checksum-asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./${{ steps.metadata.outputs.archive-checksum }} - asset_name: ${{ steps.metadata.outputs.archive-checksum }} - asset_content_type: text/plain - - - name: Publish to Grafana.com - run: | - echo A draft release has been created for your plugin. Please review and publish it. Then submit your plugin to grafana.com/plugins by opening a PR to https://github.com/grafana/grafana-plugin-repository with the following entry: - echo - echo '{ "id": "${{ steps.metadata.outputs.plugin-id }}", "type": "${{ steps.metadata.outputs.plugin-type }}", "url": "https://github.com/${{ github.repository }}", "versions": [ { "version": "${{ steps.metadata.outputs.plugin-version }}", "commit": "${{ github.sha }}", "url": "https://github.com/${{ github.repository }}", "download": { "any": { "url": "https://github.com/${{ github.repository }}/releases/download/v${{ steps.metadata.outputs.plugin-version }}/${{ steps.metadata.outputs.archive }}", "md5": "${{ steps.package-plugin.outputs.checksum }}" } } } ] }' | jq . + - 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: + # Make sure to save the token in your repository secrets + #policy_token: ${{ secrets.GRAFANA_ACCESS_POLICY_TOKEN }} + # Usage of GRAFANA_API_KEY is deprecated, prefer `policy_token` option above + #grafana_token: ${{ secrets.GRAFANA_API_KEY }} \ No newline at end of file