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/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..86c8a34 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,16 @@ +# Development + +To test and improve the plugin you can run local Grafana instance in Docker container: + +``` +git clone https://github.com/flant/grafana-statusmap.git +cd grafana-statusmap +docker run --rm -it -v $PWD:/var/lib/grafana/plugins/flant-statusmap-panel \ + -p 3000:3000 --name grafana.docker \ + --env=GF_USERS_DEFAULT_THEME=light \ + grafana/grafana:7.3.4 +``` + +The `-v` flag exposes plugin directory from your machine to Grafana container. Now run `yarn watch` to compile `dist` directory and follow changes in src directory. + + diff --git a/README.md b/README.md index 66fc6ec..2b69df1 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Download from GitHub](https://img.shields.io/github/tag-date/flant/grafana-statusmap.svg?logo=github&label=latest)](https://github.com/flant/grafana-statusmap/releases/latest) [![GH Discussions](https://img.shields.io/badge/GitHub-discussions-brightgreen)](https://github.com/flant/grafana-statusmap/discussions) [![Telegram chat RU](https://img.shields.io/badge/@statusmap_ru-RU-informational.svg?logo=telegram)](https://t.me/statusmap_ru) +[![Follow Flant on Twitter](https://img.shields.io/twitter/follow/flant_com?label=Follow%20Flant&style=social)](https://twitter.com/flant_com) Panel to show discrete statuses of multiple targets over time. @@ -19,8 +20,6 @@ Panel to show discrete statuses of multiple targets over time. * Increasing rows/buckets' interval for better visual representation * Representing null values as empty bucket or zero value -:calendar: New features are planned in [#62](https://github.com/flant/grafana-statusmap/issues/62) - ### Supported environment * Tested with datasources: @@ -31,25 +30,6 @@ Panel to show discrete statuses of multiple targets over time. - 6.7+ are the most priority (6.7, 7.0-7.4) - also works in 5.4.3 and 6.0+ -## Installation - -The preferred way of installation is Grafana configuration, e.g. with environment variable GF_INSTALL_PLUGINS="flant-statusmap-panel". - -Also, you can download a released .zip file from [Releases](https://github.com/flant/grafana-statusmap/releases) page and uncompress it into Grafana's plugin directory (/var/lib/grafana/plugins/flant-statusmap-panel). - - -``` -curl -sLO -unzip flant-statusmap-panel-v0.4.0.zip -d /var/lib/grafana/plugins/flant-statusmap-panel -``` - -For 5.x and 6.x versions of Grafana you can clone this repo: - -``` -git clone git@github.com:flant/grafana-statusmap.git /var/lib/grafana/plugins/flant-statusmap-panel -``` - - ## Motivation We had a desperate need to visualize a set of timeseries statuses over time period, so we can @@ -214,29 +194,13 @@ Each URL has a template, icon, label and formating options: lowercase and date f ![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-editor.png) -## Development - -To test and improve the plugin you can run Grafana instance in Docker: - -``` -cd grafana-statusmap -docker run --rm -it -v $PWD:/var/lib/grafana/plugins/flant-statusmap-panel \ - -p 3000:3000 --name grafana.docker \ - --env=GF_USERS_DEFAULT_THEME=light \ - grafana/grafana:7.3.4 -``` - -The `-v` flag exposes plugin directory from your machine to Grafana container. Now run `yarn run watch` to compile dist directory and start changes watcher. - -## Changelog - -The latest changes can be found here: [CHANGELOG.md](https://github.com/flant/grafana-statusmap/blob/master/CHANGELOG.md) - -## Community -Please feel free to reach developers/maintainers and users via [GitHub Discussions](https://github.com/flant/grafana-statusmap/discussions) for any questions regarding grafana-statusmap. +## Learn more -You're also welcome to follow [@flant_com](https://twitter.com/flant_com) to stay informed about all our Open Source initiatives. +* [Changelog](https://github.com/flant/grafana-statusmap/blob/master/CHANGELOG.md) +* Use [GitHub Discussions](https://github.com/flant/grafana-statusmap/discussions) to ask for help. +* [Installation](https://grafana.com/grafana/plugins/flant-statusmap-panel/installation) +* Setup [development](https://github.com/flant/grafana-statusmap/blob/master/DEVELOPMENT.md) environment to help us improve the plugin. ## Acknowledgements diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md index f0f112d..a11aa0e 100644 --- a/dist/CHANGELOG.md +++ b/dist/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/dist/README.md b/dist/README.md index 66fc6ec..2b69df1 100644 --- a/dist/README.md +++ b/dist/README.md @@ -3,6 +3,7 @@ [![Download from GitHub](https://img.shields.io/github/tag-date/flant/grafana-statusmap.svg?logo=github&label=latest)](https://github.com/flant/grafana-statusmap/releases/latest) [![GH Discussions](https://img.shields.io/badge/GitHub-discussions-brightgreen)](https://github.com/flant/grafana-statusmap/discussions) [![Telegram chat RU](https://img.shields.io/badge/@statusmap_ru-RU-informational.svg?logo=telegram)](https://t.me/statusmap_ru) +[![Follow Flant on Twitter](https://img.shields.io/twitter/follow/flant_com?label=Follow%20Flant&style=social)](https://twitter.com/flant_com) Panel to show discrete statuses of multiple targets over time. @@ -19,8 +20,6 @@ Panel to show discrete statuses of multiple targets over time. * Increasing rows/buckets' interval for better visual representation * Representing null values as empty bucket or zero value -:calendar: New features are planned in [#62](https://github.com/flant/grafana-statusmap/issues/62) - ### Supported environment * Tested with datasources: @@ -31,25 +30,6 @@ Panel to show discrete statuses of multiple targets over time. - 6.7+ are the most priority (6.7, 7.0-7.4) - also works in 5.4.3 and 6.0+ -## Installation - -The preferred way of installation is Grafana configuration, e.g. with environment variable GF_INSTALL_PLUGINS="flant-statusmap-panel". - -Also, you can download a released .zip file from [Releases](https://github.com/flant/grafana-statusmap/releases) page and uncompress it into Grafana's plugin directory (/var/lib/grafana/plugins/flant-statusmap-panel). - - -``` -curl -sLO -unzip flant-statusmap-panel-v0.4.0.zip -d /var/lib/grafana/plugins/flant-statusmap-panel -``` - -For 5.x and 6.x versions of Grafana you can clone this repo: - -``` -git clone git@github.com:flant/grafana-statusmap.git /var/lib/grafana/plugins/flant-statusmap-panel -``` - - ## Motivation We had a desperate need to visualize a set of timeseries statuses over time period, so we can @@ -214,29 +194,13 @@ Each URL has a template, icon, label and formating options: lowercase and date f ![Tooltip items editor](https://raw.githubusercontent.com/flant/grafana-statusmap/master/docs/img/tooltip-editor.png) -## Development - -To test and improve the plugin you can run Grafana instance in Docker: - -``` -cd grafana-statusmap -docker run --rm -it -v $PWD:/var/lib/grafana/plugins/flant-statusmap-panel \ - -p 3000:3000 --name grafana.docker \ - --env=GF_USERS_DEFAULT_THEME=light \ - grafana/grafana:7.3.4 -``` - -The `-v` flag exposes plugin directory from your machine to Grafana container. Now run `yarn run watch` to compile dist directory and start changes watcher. - -## Changelog - -The latest changes can be found here: [CHANGELOG.md](https://github.com/flant/grafana-statusmap/blob/master/CHANGELOG.md) - -## Community -Please feel free to reach developers/maintainers and users via [GitHub Discussions](https://github.com/flant/grafana-statusmap/discussions) for any questions regarding grafana-statusmap. +## Learn more -You're also welcome to follow [@flant_com](https://twitter.com/flant_com) to stay informed about all our Open Source initiatives. +* [Changelog](https://github.com/flant/grafana-statusmap/blob/master/CHANGELOG.md) +* Use [GitHub Discussions](https://github.com/flant/grafana-statusmap/discussions) to ask for help. +* [Installation](https://grafana.com/grafana/plugins/flant-statusmap-panel/installation) +* Setup [development](https://github.com/flant/grafana-statusmap/blob/master/DEVELOPMENT.md) environment to help us improve the plugin. ## Acknowledgements diff --git a/dist/plugin.json b/dist/plugin.json index f321bb9..ac5e87b 100644 --- a/dist/plugin.json +++ b/dist/plugin.json @@ -26,7 +26,7 @@ {"name": "Queries example", "path": "img/queries-example.png"} ], "version": "0.4.0-pre", - "updated": "2021-02-15" + "updated": "2021-02-17" }, "dependencies": { 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",