diff --git a/.github/ISSUE_TEMPLATE/1-bug.md b/.github/ISSUE_TEMPLATE/1-bug.md new file mode 100644 index 0000000..f17ebad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/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_TEMPLATE/2-feature.md b/.github/ISSUE_TEMPLATE/2-feature.md new file mode 100644 index 0000000..71acb32 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/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_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..9819a34 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/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/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/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..f3c02f0 --- /dev/null +++ b/.github/workflows/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/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..4d3a185 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,148 @@ +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: 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: 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_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: | + # 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 + 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 + # 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 + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ steps.metadata.outputs.release-name }} + 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",