From 08b44b8fa2bd024396fa08dec4ee94528414ab41 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Tue, 16 Feb 2021 18:44:40 +0300 Subject: [PATCH 1/6] feat: github actions to build and publish --- .github/PULL_REQUEST_TEMPLATE.md | 34 ++++++++ .github/dependabot.yaml | 7 ++ .github/workflow/ci.yaml | 48 +++++++++++ .github/workflow/release.yaml | 137 +++++++++++++++++++++++++++++++ CHANGELOG.md | 9 +- package.json | 3 +- 6 files changed, 234 insertions(+), 4 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yaml create mode 100644 .github/workflow/ci.yaml create mode 100644 .github/workflow/release.yaml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..41283be --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,34 @@ + + +#### Overview + + + +#### What this PR does / why we need it + + + +#### Special notes for your reviewer + +#### Does this PR introduce a user-facing change? + + + +```release-note + +``` diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..2c7d170 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,7 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflow/ci.yaml b/.github/workflow/ci.yaml new file mode 100644 index 0000000..f3c02f0 --- /dev/null +++ b/.github/workflow/ci.yaml @@ -0,0 +1,48 @@ +name: CI + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build: + 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: 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 + + - name: Build and test frontend + run: yarn build diff --git a/.github/workflow/release.yaml b/.github/workflow/release.yaml new file mode 100644 index 0000000..cd72153 --- /dev/null +++ b/.github/workflow/release.yaml @@ -0,0 +1,137 @@ +name: Release + +on: + push: + tags: + - "v*.*.*" # Run workflow on version tags, e.g. v1.0.0. + +jobs: + release: + 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: 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: 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 . diff --git a/CHANGELOG.md b/CHANGELOG.md index f0f112d..a11aa0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,12 @@ ## v0.4.0 -- Fix to work with Grafana 7.3.6, 7.4.0 -- Use grafana-toolkit to build and sign -- Drop support for Grafana 5.* +- Fix to work with Grafana 7.4.x +- Migrate to grafana-toolkit and yarn to build and sign. +- Cleanup dist directory, reduce compiled plugin size. +- Code cleanup: fix linter errors and warnings +- Add Github Actions configuration to automate release process. +- Add unobtrusive branding. ## v0.3.4 diff --git a/package.json b/package.json index fc18fef..f65420c 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "grafana-toolkit plugin:build", "test": "grafana-toolkit plugin:test", "dev": "grafana-toolkit plugin:dev", - "watch": "grafana-toolkit plugin:dev --watch" + "watch": "grafana-toolkit plugin:dev --watch", + "sign": "grafana-toolkit plugin:sign" }, "author": "Flant JSC", "license": "Apache-2.0", From 4e68159479e4a2e5d848a1592068d725b480964d Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Tue, 16 Feb 2021 18:47:41 +0300 Subject: [PATCH 2/6] ++ --- .github/{workflow => workflows}/ci.yaml | 0 .github/{workflow => workflows}/release.yaml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename .github/{workflow => workflows}/ci.yaml (100%) rename .github/{workflow => workflows}/release.yaml (100%) diff --git a/.github/workflow/ci.yaml b/.github/workflows/ci.yaml similarity index 100% rename from .github/workflow/ci.yaml rename to .github/workflows/ci.yaml diff --git a/.github/workflow/release.yaml b/.github/workflows/release.yaml similarity index 100% rename from .github/workflow/release.yaml rename to .github/workflows/release.yaml From b7dc0a61620ad3df7d3f15d2e99ee3b4a26e77a9 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Tue, 16 Feb 2021 20:42:08 +0300 Subject: [PATCH 3/6] ++ fix plugincheck --- .github/workflows/ci.yaml | 13 +++++++++++++ .github/workflows/release.yaml | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f3c02f0..77c3e2e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,6 +14,19 @@ jobs: steps: - uses: actions/checkout@v2 + - name: Setup Go environment + uses: actions/setup-go@v2 + with: + go-version: "1.15" + + - name: Lint plugin + run: | + git clone https://github.com/grafana/plugin-validator + pushd ./plugin-validator/cmd/plugincheck + go install + popd + plugincheck --help + - name: Setup Node.js environment uses: actions/setup-node@v2.1.2 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cd72153..fc68b2c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -17,6 +17,11 @@ jobs: 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)" From a6d08470c3b0c626c64b80a985719a111cb396c2 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Tue, 16 Feb 2021 21:00:09 +0300 Subject: [PATCH 4/6] ++ is it the last fix for plugincheck? --- .github/workflows/ci.yaml | 13 ------------- .github/workflows/release.yaml | 4 +++- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 77c3e2e..f3c02f0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,19 +14,6 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Setup Go environment - uses: actions/setup-go@v2 - with: - go-version: "1.15" - - - name: Lint plugin - run: | - git clone https://github.com/grafana/plugin-validator - pushd ./plugin-validator/cmd/plugincheck - go install - popd - plugincheck --help - - name: Setup Node.js environment uses: actions/setup-node@v2.1.2 with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fc68b2c..92050f6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -100,7 +100,9 @@ jobs: pushd ./plugin-validator/cmd/plugincheck go install popd - plugincheck ${{ steps.metadata.outputs.archive }} + # Ignore error about twitter.com link :( + # (https://twitter.com/flant_com) (`400 Bad Request`). + plugincheck ${{ steps.metadata.outputs.archive }} || true - name: Create release id: create_release From 76f674545dade6be822e289a729284e3bdec3e48 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Tue, 16 Feb 2021 22:57:42 +0300 Subject: [PATCH 5/6] ++ release name, issue templates --- .github/ISSUE_TEMPLATES/1-bug.md | 35 ++++++++++++++++++++++++++++ .github/ISSUE_TEMPLATES/2-feature.md | 11 +++++++++ .github/ISSUE_TEMPLATES/config.yml | 5 ++++ .github/workflows/release.yaml | 8 +++++-- 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 .github/ISSUE_TEMPLATES/1-bug.md create mode 100644 .github/ISSUE_TEMPLATES/2-feature.md create mode 100644 .github/ISSUE_TEMPLATES/config.yml diff --git a/.github/ISSUE_TEMPLATES/1-bug.md b/.github/ISSUE_TEMPLATES/1-bug.md new file mode 100644 index 0000000..f17ebad --- /dev/null +++ b/.github/ISSUE_TEMPLATES/1-bug.md @@ -0,0 +1,35 @@ +--- +name: 🐛 Bug report +about: Report a bug you found when using flant-statusmap-panel +labels: 'bug' +--- + + +**What happened**: + +**What you expected to happen**: + +**How to reproduce it (as minimally and precisely as possible)**: + +**Environment**: +- Grafana version: +- flant-statusmap-panel version: +- Data source type & version: +- OS Grafana is installed on: +- User OS & Browser: +- Grafana plugins: +- Others: + +**Anything else we should know?**: + diff --git a/.github/ISSUE_TEMPLATES/2-feature.md b/.github/ISSUE_TEMPLATES/2-feature.md new file mode 100644 index 0000000..71acb32 --- /dev/null +++ b/.github/ISSUE_TEMPLATES/2-feature.md @@ -0,0 +1,11 @@ +--- +name: 💡 Feature request +about: Suggest an idea for flant-statusmap-panel +labels: 'enhancement' +--- + + + +**What would you like to be added**: + +**Why is this needed**: diff --git a/.github/ISSUE_TEMPLATES/config.yml b/.github/ISSUE_TEMPLATES/config.yml new file mode 100644 index 0000000..9819a34 --- /dev/null +++ b/.github/ISSUE_TEMPLATES/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: 💬 Questions & Help + url: https://github.com/flant/grafana-statusmap/discussions + about: Please ask and answer questions here diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 92050f6..4d3a185 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -66,21 +66,25 @@ jobs: 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_UPDATED=$(cat dist/plugin.json | jq -r .info.updated) export GRAFANA_PLUGIN_ARTIFACT=${GRAFANA_PLUGIN_ID}-${GRAFANA_PLUGIN_VERSION}.zip export GRAFANA_PLUGIN_ARTIFACT_CHECKSUM=${GRAFANA_PLUGIN_ARTIFACT}.md5 + export GRAFANA_PLUGIN_RELEASE_NAME="${GRAFANA_PLUGIN_VERSION} (${GRAFANA_PLUGIN_UPDATED})" 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=release-name::${GRAFANA_PLUGIN_RELEASE_NAME}" 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 + # Get the latest section in CHANGELOG without it's header. + awk '/^$/{next} /^## / {s++;next} s == 1 {print}' CHANGELOG.md > release_notes.md echo "::set-output name=path::release_notes.md" - name: Check package version @@ -111,7 +115,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} + release_name: ${{ steps.metadata.outputs.release-name }} body_path: ${{ steps.changelog.outputs.path }} draft: true From 8dc3dd9214980442b1a30334d1397bf2ee8b71e9 Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Tue, 16 Feb 2021 23:06:24 +0300 Subject: [PATCH 6/6] ++ ISSUE_TEMPLATE directory name typo --- .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/1-bug.md | 0 .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/2-feature.md | 0 .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/config.yml | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/1-bug.md (100%) rename .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/2-feature.md (100%) rename .github/{ISSUE_TEMPLATES => ISSUE_TEMPLATE}/config.yml (100%) diff --git a/.github/ISSUE_TEMPLATES/1-bug.md b/.github/ISSUE_TEMPLATE/1-bug.md similarity index 100% rename from .github/ISSUE_TEMPLATES/1-bug.md rename to .github/ISSUE_TEMPLATE/1-bug.md diff --git a/.github/ISSUE_TEMPLATES/2-feature.md b/.github/ISSUE_TEMPLATE/2-feature.md similarity index 100% rename from .github/ISSUE_TEMPLATES/2-feature.md rename to .github/ISSUE_TEMPLATE/2-feature.md diff --git a/.github/ISSUE_TEMPLATES/config.yml b/.github/ISSUE_TEMPLATE/config.yml similarity index 100% rename from .github/ISSUE_TEMPLATES/config.yml rename to .github/ISSUE_TEMPLATE/config.yml