netdata_netdata/.github/workflows/generate-integrations.yml

95 lines
3.7 KiB
YAML

---
# CI workflow used to regenerate `integrations/integrations.js` and accompanying documentation 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.
- 'src/collectors/**/metadata.yaml'
- 'src/go/collectors/**/metadata.yaml'
- 'src/exporting/**/metadata.yaml'
- 'src/health/notifications/**/metadata.yaml'
- 'integrations/templates/**'
- 'integrations/categories.yaml'
- 'integrations/deploy.yaml'
- 'integrations/cloud-notifications/metadata.yaml'
- 'integrations/gen_integrations.py'
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@v4
with:
fetch-depth: 1
submodules: recursive
- 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: Generate Integrations Documentation
id: generate-integrations-documentation
run: |
python3 integrations/gen_docs_integrations.py
- name: Generate src/collectors/COLLECTORS.md
id: generate-collectors-md
run: |
python3 integrations/gen_doc_collector_page.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@v6
with:
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
commit-message: Regenerate integrations.js
branch: integrations-regen
title: Regenerate integrations.js
body: |
Regenerate `integrations/integrations.js`, and documentation 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 }}
Prep python env and deps: ${{ steps.prep-deps.outcome }}
Generate Integrations: ${{ steps.generate.outcome }}
Generate Integrations Documentation: ${{ steps.generate-integrations-documentation.outcome }}
Generate src/collectors/COLLECTORS.md: ${{ steps.generate-collectors-md.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'
}}