summaryrefslogtreecommitdiffstats
path: root/.github/workflows/generate-integrations.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/generate-integrations.yml')
-rw-r--r--.github/workflows/generate-integrations.yml98
1 files changed, 98 insertions, 0 deletions
diff --git a/.github/workflows/generate-integrations.yml b/.github/workflows/generate-integrations.yml
new file mode 100644
index 00000000..599cefbc
--- /dev/null
+++ b/.github/workflows/generate-integrations.yml
@@ -0,0 +1,98 @@
+---
+# CI workflow used to regenerate `integrations/integrations.js` when
+# relevant source files are changed.
+name: Generate Integrations
+on:
+ push:
+ branches:
+ - master
+ paths: # If any of these files change, we need to regenerate integrations.js.
+ - 'collectors/**/metadata.yaml'
+ - 'exporting/**/metadata.yaml'
+ - 'health/notifications/**/metadata.yaml'
+ - 'integrations/templates/**'
+ - 'integrations/categories.yaml'
+ - 'integrations/deploy.yaml'
+ - 'integrations/cloud-notifications/metadata.yaml'
+ - 'integrations/gen_integrations.py'
+ - 'packaging/go.d.version'
+ workflow_dispatch: null
+concurrency: # This keeps multiple instances of the job from running concurrently for the same ref.
+ group: integrations-${{ github.ref }}
+ cancel-in-progress: true
+jobs:
+ generate-integrations:
+ name: Generate Integrations
+ runs-on: ubuntu-latest
+ if: github.repository == 'netdata/netdata'
+ steps:
+ - name: Checkout Agent
+ id: checkout-agent
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 1
+ submodules: recursive
+ - name: Get Go Ref
+ id: get-go-ref
+ run: echo "go_ref=$(cat packaging/go.d.version)" >> "${GITHUB_ENV}"
+ - name: Checkout Go
+ id: checkout-go
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 1
+ path: go.d.plugin
+ repository: netdata/go.d.plugin
+ ref: ${{ env.go_ref }}
+ - name: Prepare Dependencies
+ id: prep-deps
+ run: |
+ sudo apt-get install python3-venv
+ python3 -m venv ./virtualenv
+ source ./virtualenv/bin/activate
+ pip install jsonschema referencing jinja2 ruamel.yaml
+ - name: Generate Integrations
+ id: generate
+ run: |
+ source ./virtualenv/bin/activate
+ python3 integrations/gen_integrations.py
+ - name: Clean Up Temporary Data
+ id: clean
+ run: rm -rf go.d.plugin virtualenv
+ - name: Create PR
+ id: create-pr
+ uses: peter-evans/create-pull-request@v5
+ with:
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ commit-message: Regenerate integrations.js
+ branch: integrations-regen
+ title: Regenerate integrations.js
+ body: |
+ Regenerate `integrations/integrations.js` based on the
+ latest code.
+
+ This PR was auto-generated by
+ `.github/workflows/generate-integrations.yml`.
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Integrations regeneration failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to create PR rebuilding integrations.js
+ Checkout Agent: ${{ steps.checkout-agent.outcome }}
+ Get Go Ref: ${{ steps.get-go-ref.outcome }}
+ Checkout Go: ${{ steps.checkout-go.outcome }}
+ Prepare Dependencies: ${{ steps.prep-deps.outcome }}
+ Generate Integrations: ${{ steps.generate.outcome }}
+ Clean Up Temporary Data: ${{ steps.clean.outcome }}
+ Create PR: ${{ steps.create-pr.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && startsWith(github.ref, 'refs/heads/master')
+ && github.repository == 'netdata/netdata'
+ }}