summaryrefslogtreecommitdiffstats
path: root/.github/workflows
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2022-04-14 18:12:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2022-04-14 18:12:14 +0000
commitbb50acdcb8073654ea667b8c0272e335bd43f844 (patch)
tree1e00c8a29871426f8182658928dcb62e42d57ce8 /.github/workflows
parentReleasing debian version 1.33.1-1. (diff)
downloadnetdata-bb50acdcb8073654ea667b8c0272e335bd43f844.tar.xz
netdata-bb50acdcb8073654ea667b8c0272e335bd43f844.zip
Merging upstream version 1.34.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/build.yml283
-rw-r--r--.github/workflows/checks.yml21
-rw-r--r--.github/workflows/cloud_regression.yml53
-rw-r--r--.github/workflows/coverity.yml14
-rw-r--r--.github/workflows/dashboard-pr.yml24
-rw-r--r--.github/workflows/docker.yml86
-rw-r--r--.github/workflows/docs.yml4
-rw-r--r--.github/workflows/labeler.yml2
-rw-r--r--.github/workflows/packaging.yml268
-rw-r--r--.github/workflows/release.yml207
-rw-r--r--.github/workflows/repoconfig-packages.yml118
-rw-r--r--.github/workflows/review.yml14
-rw-r--r--.github/workflows/tests.yml8
-rw-r--r--.github/workflows/trigger-learn-update.yml37
14 files changed, 922 insertions, 217 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index abf08c2ea..caa49e290 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -17,7 +17,7 @@ on:
default: nightly
required: true
concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type.
- group: release-${{ github.ref }}-${{ github.event_name }}
+ group: build-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: true
jobs:
build-dist: # Build the distribution tarball and store it as an artifact.
@@ -27,11 +27,13 @@ jobs:
distfile: ${{ steps.build.outputs.distfile }}
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: recursive
- name: Mark Stable
+ id: channel
if: github.event_name == 'workflow_dispatch' && github.event.inputs.type != 'nightly'
run: |
sed -i 's/^RELEASE_CHANNEL="nightly" *#/RELEASE_CHANNEL="stable" #/' netdata-installer.sh
@@ -52,7 +54,8 @@ jobs:
echo "::set-output name=distfile::$(find . -name 'netdata-*.tar.gz')"
cp netdata-*.tar.gz artifacts/
- name: Store
- uses: actions/upload-artifact@v2
+ id: store
+ uses: actions/upload-artifact@v3
with:
name: dist-tarball
path: artifacts/*.tar.gz
@@ -63,9 +66,14 @@ jobs:
SLACK_COLOR: 'danger'
SLACK_FOOTER: ''
SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Distribution tarball build failed:'
+ SLACK_TITLE: 'Distribution tarball creation failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Distribution tarball build failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to create source tarball for distribution.
+ Checkout: ${{ steps.checkout.outcome }}
+ Mark stable: ${{ steps.channel.outcome }}
+ Build: ${{ steps.build.outcome }}
+ Store: ${{ steps.store.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -86,18 +94,22 @@ jobs:
- 'ppc64le'
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: recursive
- name: Mark Stable
+ id: channel
if: github.event_name == 'workflow_dispatch' && github.event.inputs.type != 'nightly'
run: |
sed -i 's/^RELEASE_CHANNEL="nightly" *#/RELEASE_CHANNEL="stable" #/' netdata-installer.sh packaging/makeself/install-or-update.sh
- name: Build
+ id: build
run: .github/scripts/build-static.sh ${{ matrix.arch }}
- name: Store
- uses: actions/upload-artifact@v2
+ id: store
+ uses: actions/upload-artifact@v3
with:
name: static-archive
path: artifacts/*.gz.run
@@ -108,9 +120,14 @@ jobs:
SLACK_COLOR: 'danger'
SLACK_FOOTER: ''
SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Static build for ${{ matrix.arch }} failed:'
+ SLACK_TITLE: 'Static build failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Static build for ${{ matrix.arch }} failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to create static installer archive for ${{ matrix.arch }}.
+ Checkout: ${{ steps.checkout.outcome }}
+ Mark stable: ${{ steps.channel.outcome }}
+ Build: ${{ steps.build.outcome }}
+ Store: ${{ steps.store.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -126,33 +143,112 @@ jobs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
- name: Prepare tools
+ id: prepare
run: |
- sudo apt-get update && sudo apt-get install -y jq
+ sudo apt-get update && sudo apt-get install -y python3-ruamel.yaml
- name: Read build matrix
id: set-matrix
+ shell: python3 {0}
run: |
- TASKS="$(jq -c . .github/data/build-matrix.json)"
- echo "Generated Matrix: $TASKS"
- echo "::set-output name=matrix::$TASKS"
+ from ruamel.yaml import YAML
+ import json
+ yaml = YAML(typ='safe')
+ with open('.github/data/distros.yml') as f:
+ data = yaml.load(f)
+ del data['platform_map']
+ for i, v in enumerate(data['include']):
+ data['include'][i]['artifact_key'] = data['include'][i]['distro'] + str(data['include'][i]['version']).replace('.', '')
+ if 'packages' in data['include'][i]:
+ del data['include'][i]['packages']
+ if 'base_image' in data['include'][i]:
+ data['include'][i]['distro'] = data['include'][i]['base_image']
+ del data['include'][i]['base_image']
+ data['include'][i]['distro'] = ':'.join([data['include'][i]['distro'], str(data['include'][i]['version'])])
+ del data['include'][i]['version']
+ matrix = json.dumps(data, sort_keys=True)
+ print('Generated Matrix: ' + matrix)
+ print('::set-output name=matrix::' + matrix)
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Build matrix preparation failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to prepare build matrix for build checks.
+ Checkout: ${{ steps.checkout.outcome }}
+ Prepare tools: ${{ steps.prepare.outcome }}
+ Read build matrix: ${{ steps.set-matrix.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && startsWith(github.ref, 'refs/heads/master')
+ && github.event_name != 'pull_request'
+ }}
prepare-test-images: # Prepare the test environments for our build checks. This also checks dependency handling code for each tested environment.
name: Prepare Test Environments
runs-on: ubuntu-latest
needs:
- matrix
+ env:
+ RETRY_DELAY: 300
strategy:
# Unlike the actal build tests, this completes _very_ fast (average of about 3 minutes for each job), so we
# just run everything in parallel instead lof limiting job concurrency.
fail-fast: false
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
steps:
- - name: Git clone repository
- uses: actions/checkout@v2
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
- name: Setup Buildx
+ id: buildx
uses: docker/setup-buildx-action@v1
- name: Build test environment
+ id: build1
+ uses: docker/build-push-action@v2
+ continue-on-error: true # We retry 3 times at 5 minute intervals if there is a failure here.
+ with:
+ push: false
+ load: false
+ file: .github/dockerfiles/Dockerfile.build_test
+ build-args: |
+ BASE=${{ matrix.distro }}
+ PRE=${{ matrix.env_prep }}
+ RMJSONC=${{ matrix.jsonc_removal }}
+ outputs: type=oci,dest=/tmp/image.tar
+ tags: test:${{ matrix.artifact_key }}
+ - name: Retry delay
+ if: ${{ steps.build1.outcome }} == 'failure'
+ run: sleep "${RETRY_DELAY}"
+ - name: Build test environment (attempt 2)
+ if: ${{ steps.build1.outcome }} == 'failure'
+ id: build2
+ uses: docker/build-push-action@v2
+ continue-on-error: true # We retry 3 times at 5 minute intervals if there is a failure here.
+ with:
+ push: false
+ load: false
+ file: .github/dockerfiles/Dockerfile.build_test
+ build-args: |
+ BASE=${{ matrix.distro }}
+ PRE=${{ matrix.env_prep }}
+ RMJSONC=${{ matrix.jsonc_removal }}
+ outputs: type=oci,dest=/tmp/image.tar
+ tags: test:${{ matrix.artifact_key }}
+ - name: Retry delay
+ if: ${{ steps.build1.outcome }} == 'failure' && ${{ steps.build2.outcome }} == 'failure'
+ run: sleep "${RETRY_DELAY}"
+ - name: Build test environment (attempt 3)
+ if: ${{ steps.build1.outcome }} == 'failure' && ${{ steps.build2.outcome }} == 'failure'
+ id: build3
uses: docker/build-push-action@v2
with:
push: false
@@ -160,12 +256,13 @@ jobs:
file: .github/dockerfiles/Dockerfile.build_test
build-args: |
BASE=${{ matrix.distro }}
- PRE=${{ matrix.pre }}
- RMJSONC=${{ matrix.rmjsonc }}
+ PRE=${{ matrix.env_prep }}
+ RMJSONC=${{ matrix.jsonc_removal }}
outputs: type=oci,dest=/tmp/image.tar
tags: test:${{ matrix.artifact_key }}
- name: Upload image artifact
- uses: actions/upload-artifact@v2
+ id: upload
+ uses: actions/upload-artifact@v3
with:
name: ${{ matrix.artifact_key }}-test-env
path: /tmp/image.tar
@@ -178,7 +275,14 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Test environment preparation for ${{ matrix.distro }} failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Test environment preparation for ${{ matrix.distro }} failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Test environment preparation for ${{ matrix.distro }} failed.
+ Checkout: ${{ steps.checkout.outcome }}
+ Set up Buildx: ${{ steps.buildx.outcome }}
+ Build test environment: ${{ steps.build1.outcome }}
+ Build test environment (attempt 2): ${{ steps.build2.outcome }}
+ Build test environment (attempt 3): ${{ steps.build3.outcome }}
+ Upload: ${{ steps.upload.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -198,12 +302,14 @@ jobs:
max-parallel: 8
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
steps:
- - name: Git clone repository
- uses: actions/checkout@v2
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Fetch test environment
- uses: actions/download-artifact@v2
+ id: fetch
+ uses: actions/download-artifact@v3
with:
name: ${{ matrix.artifact_key }}-test-env
- name: Load test environment
@@ -212,19 +318,23 @@ jobs:
docker load --input image.tar | tee image-info.txt
echo "::set-output name=image::$(cut -d ':' -f 3 image-info.txt)"
- name: Regular build on ${{ matrix.distro }}
+ id: build-basic
run: |
docker run --security-opt seccomp=unconfined -w /netdata sha256:${{ steps.load.outputs.image }} \
/bin/sh -c 'autoreconf -ivf && ./configure && make -j2'
- name: netdata-installer on ${{ matrix.distro }}, disable cloud
+ id: build-no-cloud
run: |
docker run --security-opt seccomp=unconfined -w /netdata sha256:${{ steps.load.outputs.image }} \
/bin/sh -c './netdata-installer.sh --dont-wait --dont-start-it --disable-cloud'
- name: netdata-installer on ${{ matrix.distro }}, require cloud
+ id: build-cloud
run: |
docker run --security-opt seccomp=unconfined -w /netdata sha256:${{ steps.load.outputs.image }} \
/bin/sh -c './netdata-installer.sh --dont-wait --dont-start-it --require-cloud'
- name: netdata-installer on ${{ matrix.distro }}, require cloud, no JSON-C
- if: matrix.rmjsonc != ''
+ id: build-no-jsonc
+ if: matrix.jsonc_removal != ''
run: |
docker run --security-opt seccomp=unconfined -w /netdata sha256:${{ steps.load.outputs.image }} \
/bin/sh -c '/rmjsonc.sh && ./netdata-installer.sh --dont-wait --dont-start-it --require-cloud'
@@ -236,7 +346,15 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Build tests for ${{ matrix.distro }} failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Build tests for ${{ matrix.distro }} failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Build tests for ${{ matrix.distro }} failed.
+ Checkout: ${{ steps.checkout.outcome }}
+ Fetch test environment: ${{ steps.fetch.outcome }}
+ Load test environment: ${{ steps.load.outcome }}
+ Regular build: ${{ steps.build-basic.outcome }}
+ netdata-installer, disable cloud: ${{ steps.build-no-cloud.outcome }}
+ netdata-installer, require cloud: ${{ steps.build-cloud.outcome }}
+ netdata-installer, no JSON-C: ${{ steps.build-no-jsonc.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -265,13 +383,16 @@ jobs:
- ${{ github.workspace }}:/usr/local/apache2/htdocs/
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
- name: Fetch dist tarball artifacts
- uses: actions/download-artifact@v2
+ id: fetch-tarball
+ uses: actions/download-artifact@v3
with:
name: dist-tarball
path: dist-tarball
- name: Prepare artifact directory
+ id: prepare
run: |
mkdir -p artifacts || exit 1
echo "9999.0.0-0" > artifacts/latest-version.txt || exit 1
@@ -281,7 +402,8 @@ jobs:
sha256sum -b ./* > "sha256sums.txt" || exit 1
cat sha256sums.txt
- name: Fetch test environment
- uses: actions/download-artifact@v2
+ id: fetch-test-environment
+ uses: actions/download-artifact@v3
with:
name: ${{ matrix.artifact_key }}-test-env
- name: Load test environment
@@ -290,8 +412,9 @@ jobs:
docker load --input image.tar | tee image-info.txt
echo "::set-output name=image::$(cut -d ':' -f 3 image-info.txt)"
- name: Install netdata and run the updater on ${{ matrix.distro }}
+ id: updater-check
run: |
- docker run --security-opt seccomp=unconfined -e DO_NOT_TRACK=1 --network host -w /netdata sha256:${{ steps.load.outputs.image }} \
+ docker run --security-opt seccomp=unconfined -e DISABLE_TELEMETRY=1 --network host -w /netdata sha256:${{ steps.load.outputs.image }} \
/netdata/.github/scripts/run-updater-check.sh
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
@@ -301,7 +424,14 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Updater checks for ${{ matrix.distro }} failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Updater checks for ${{ matrix.distro }} failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Updater checks for ${{ matrix.distro }} failed.
+ Checkout: ${{ steps.checkout.outcome }}
+ Fetch dist tarball: ${{ steps.fetch-tarball.outcome }}
+ Prepare artifact directory: ${{ steps.prepare.outcome }}
+ Fetch test environment: ${{ steps.fetch-test-environment.outcome }}
+ Load test environment: ${{ steps.load.outcome }}
+ Updater check: ${{ steps.updater-check.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -318,20 +448,25 @@ jobs:
- build-static
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
- name: Prepare Environment
+ id: prepare
run: mkdir -p artifacts
- name: Retrieve Dist Tarball
- uses: actions/download-artifact@v2
+ id: fetch-dist
+ uses: actions/download-artifact@v3
with:
name: dist-tarball
path: dist-tarball
- name: Retrieve Static Build Artifacts
- uses: actions/download-artifact@v2
+ id: fetch-static
+ uses: actions/download-artifact@v3
with:
name: static-archive
path: static-archive
- name: Prepare Artifacts
+ id: consolidate
working-directory: ./artifacts/
run: |
mv ../dist-tarball/* . || exit 1
@@ -341,7 +476,8 @@ jobs:
sha256sum -b ./* > sha256sums.txt || exit 1
cat sha256sums.txt
- name: Store Artifacts
- uses: actions/upload-artifact@v2
+ id: store
+ uses: actions/upload-artifact@v3
with:
name: final-artifacts
path: artifacts/*
@@ -354,7 +490,14 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Failed to prepare release artifacts for upload:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Failed to prepare release artifacts for upload."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to prepare release artifacts for upload.
+ CHeckout: ${{ steps.checkout.outcome }}
+ Prepare environment: ${{ steps.prepare.outcome }}
+ Fetch dist tarball: ${{ steps.fetch-dist.outcome }}
+ Fetch static builds: ${{ steps.fetch-static.outcome }}
+ Consolidate artifacts: ${{ steps.consolidate.outcome }}
+ Store: ${{ steps.store.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -377,13 +520,16 @@ jobs:
- ${{ github.workspace }}:/usr/local/apache2/htdocs/
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
- name: Fetch artifacts
- uses: actions/download-artifact@v2
+ id: fetch
+ uses: actions/download-artifact@v3
with:
name: final-artifacts
path: artifacts
- name: Verify that artifacts work with installer
+ id: verify
env:
NETDATA_TARBALL_BASEURL: http://localhost:8080/artifacts
run: packaging/installer/kickstart.sh --build-only --dont-start-it --disable-telemetry --dont-wait
@@ -395,7 +541,11 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Artifact verification for source tarball failed.'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Artifact verification for source tarball failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Artifact verification for source tarball failed.
+ Checkout: ${{ steps.checkout.outcome }}
+ Fetch artifacts: ${{ steps.fetch.outcome }}
+ Verify artifacts: ${{ steps.verify.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -418,13 +568,16 @@ jobs:
- ${{ github.workspace }}:/usr/local/apache2/htdocs/
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
- name: Fetch artifacts
- uses: actions/download-artifact@v2
+ id: fetch-artifacts
+ uses: actions/download-artifact@v3
with:
name: final-artifacts
path: artifacts
- name: Verify that artifacts work with installer
+ id: verify
env:
NETDATA_TARBALL_BASEURL: http://localhost:8080/artifacts
run: packaging/installer/kickstart.sh --static-only --dont-start-it --disable-telemetry
@@ -436,7 +589,11 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Artifact verification for static build failed.'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Artifact verification for static build failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Artifact verification for static build failed.
+ Checkout: ${{ steps.checkout.outcome }}
+ Fetch artifacts: ${{ steps.fetch-artifacts.outcome }}
+ Verify artifacts: ${{ steps.verify.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -456,18 +613,21 @@ jobs:
- artifact-verification-static
steps:
- name: Retrieve Artifacts
- uses: actions/download-artifact@v2
+ id: fetch
+ uses: actions/download-artifact@v3
with:
name: final-artifacts
path: final-artifacts
- name: Setup Gcloud
- uses: google-github-actions/setup-gcloud@v0.5.0
+ id: gcloud
+ uses: google-github-actions/setup-gcloud@v0.6.0
with:
project_id: ${{ secrets.GCP_NIGHTLY_STORAGE_PROJECT }}
service_account_key: ${{ secrets.GCP_STORAGE_SERVICE_ACCOUNT_KEY }}
export_default_credentials: true
- name: Upload Artifacts
- uses: google-github-actions/upload-cloud-storage@v0.5.0
+ id: upload
+ uses: google-github-actions/upload-cloud-storage@v0.9.0
with:
destination: ${{ secrets.GCP_NIGHTLY_STORAGE_BUCKET }}
gzip: false
@@ -481,7 +641,11 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Failed to upload nightly release artifacts:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Failed to upload nightly release artifacts."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to upload nightly release artifacts.
+ Fetch artifacts: ${{ steps.fetch.outcome }}
+ Setup GCloud: ${{ steps.gcloud.outcome }}
+ Upload artifacts: ${{ steps.upload.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
@@ -501,13 +665,16 @@ jobs:
- artifact-verification-static
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
- name: Retrieve Artifacts
- uses: actions/download-artifact@v2
+ id: fetch
+ uses: actions/download-artifact@v3
with:
name: final-artifacts
path: final-artifacts
- name: Create Release
+ id: create-release
uses: ncipollo/release-action@v1
with:
allowUpdates: false
@@ -524,11 +691,29 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Failed to draft release:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Failed to draft release."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to create draft release or attach artifacts.
+ Checkout: ${{ steps.checkout.outcome }}
+ Fetch artifacts: ${{ steps.fetch.outcome }}
+ Create draft release: ${{ steps.create-release.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
failure()
- && startsWith(github.ref, 'refs/heads/master')
+ && github.event_name == 'workflow_dispatch'
+ }}
+ - name: Success Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'good'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Created agent draft release:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: "${{ github.repository }}: ${{ steps.create-release.outputs.html_url }}"
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ success()
&& github.event_name == 'workflow_dispatch'
}}
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index bc746f9ac..5f9a9c8c6 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -6,30 +6,17 @@ on:
- master
pull_request: null
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
concurrency:
group: checks-${{ github.ref }}
cancel-in-progress: true
jobs:
- checksum-checks:
- name: Checksums
- runs-on: ubuntu-latest
- steps:
- - name: Git clone repository
- uses: actions/checkout@v2
- with:
- submodules: recursive
- - name: Run checksum checks on kickstart files
- env:
- LOCAL_ONLY: "true"
- run: |
- ./tests/installer/checksums.sh
libressl-checks:
name: LibreSSL
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Build
@@ -47,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Build
@@ -58,7 +45,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Prepare environment
diff --git a/.github/workflows/cloud_regression.yml b/.github/workflows/cloud_regression.yml
new file mode 100644
index 000000000..03b12c157
--- /dev/null
+++ b/.github/workflows/cloud_regression.yml
@@ -0,0 +1,53 @@
+name: Trigger Cloud Regression E2E Tests
+on:
+ push:
+ branches: [master]
+ paths:
+ - 'CMakeLists.txt'
+ - '**.c'
+ - '**.cc'
+ - '**.cpp'
+ - '**.h'
+ - 'mqtt_websockets/**'
+ - 'aclk/aclk-schemas/**'
+jobs:
+ trigger_cloud_regression_tests:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Evaluate workflow dispatch parameters
+ env:
+ PR_REPO_NAME: ${{ github.event.pull_request.head.repo.full_name }}
+ PR_BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
+ PR_COMMIT_HASH: ${{ github.event.pull_request.head.sha }}
+ id: output-workflow-dispatch-params
+ run: |
+ if [ ${{ github.event_name }} == 'pull_request_target' ]; then
+ NETDATA_CUSTOM_REPO="$PR_REPO_NAME"
+ NETDATA_CUSTOM_BRANCH="$PR_BRANCH_NAME"
+ NETDATA_CUSTOM_PR_NUMBER="${{ github.event.number }}"
+ NETDATA_CUSTOM_COMMIT_HASH="$PR_COMMIT_HASH"
+ elif [ ${{ github.event_name }} == 'push' ]; then
+ NETDATA_CUSTOM_REPO="netdata/netdata"
+ NETDATA_CUSTOM_BRANCH="master"
+ NETDATA_CUSTOM_PR_NUMBER=""
+ NETDATA_CUSTOM_COMMIT_HASH="${{ github.sha }}"
+ fi
+ echo "::set-output name=netdata_repo::${NETDATA_CUSTOM_REPO}"
+ echo "::set-output name=netdata_branch::${NETDATA_CUSTOM_BRANCH}"
+ echo "::set-output name=netdata_pr_number::${NETDATA_CUSTOM_PR_NUMBER}"
+ echo "::set-output name=netdata_commit_hash::${NETDATA_CUSTOM_COMMIT_HASH}"
+
+ - name: Trigger Cloud Regression
+ uses: aurelien-baudet/workflow-dispatch@v2
+ with:
+ repo: netdata/test-automation
+ ref: refs/heads/master
+ workflow: regression.yml
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ inputs: '{ "netdata_branch": "${{ steps.output-workflow-dispatch-params.outputs.netdata_branch }}",
+ "netdata_repo": "${{ steps.output-workflow-dispatch-params.outputs.netdata_repo }}",
+ "netdata_pr_number": "${{ steps.output-workflow-dispatch-params.outputs.netdata_pr_number }}",
+ "netdata_branch_commit_hash": "${{ steps.output-workflow-dispatch-params.outputs.netdata_commit_hash }}",
+ "custom_netdata_image": "true"
+ }'
+ wait-for-completion: false
diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml
index c9e25ebf9..9d1119a82 100644
--- a/.github/workflows/coverity.yml
+++ b/.github/workflows/coverity.yml
@@ -9,7 +9,7 @@ on:
- .github/workflows/coverity.yml
- coverity-scan.sh
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
concurrency:
group: coverity-${{ github.ref }}
cancel-in-progress: true
@@ -19,10 +19,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
+ id: checkout
with:
submodules: recursive
- name: Prepare environment
+ id: prepare
env:
DEBIAN_FRONTEND: 'noninteractive'
run: |
@@ -33,12 +35,13 @@ jobs:
libprotoc-dev libssl-dev protobuf-compiler \
libnetfilter-acct-dev
- name: Run coverity-scan
+ id: run
env:
REPOSITORY: 'netdata/netdata'
COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
COVERITY_SCAN_SUBMIT_MAIL: ${{ secrets.COVERITY_SCAN_SUBMIT_MAIL }}
run: |
- ./coverity-scan.sh --with-install
+ bash -x ./coverity-scan.sh --with-install
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
@@ -47,6 +50,11 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Coverity run failed:'
SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Coverity failed to run correctly.
+ Checkout: ${{ steps.checkout.outcome }}
+ Environment preparation: ${{ steps.prepare.outcome }}
+ Coverity run: ${{ steps.run.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: ${{
failure()
diff --git a/.github/workflows/dashboard-pr.yml b/.github/workflows/dashboard-pr.yml
index 711cf1e1f..c99f98919 100644
--- a/.github/workflows/dashboard-pr.yml
+++ b/.github/workflows/dashboard-pr.yml
@@ -12,7 +12,7 @@ on:
required: true
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
jobs:
dashboard-pr:
@@ -20,12 +20,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
- name: Update Files
+ id: update
run: |
web/gui/bundle_dashboard.py ${{ github.event.inputs.dashboard_version }}
- name: Create Pull Request
- uses: peter-evans/create-pull-request@v3
+ id: pr
+ uses: peter-evans/create-pull-request@v4
with:
title: 'Update dashboard to version ${{ github.event.inputs.dashboard_version }}.'
body: 'See https://github.com/netdata/dashboard/releases/tag/${{ github.event.inputs.dashboard_version }} for changes.'
@@ -34,3 +37,18 @@ jobs:
delete-branch: true
commit-message: 'Update dashboard to version ${{ github.event.inputs.dashboard_version }}.'
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Dashboard update PR creation failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to create PR to update dashboard code to newest release.
+ Checkout: ${{ steps.checkout.outcome }}
+ Update files: ${{ steps.update.outcome }}
+ Create PR: ${{ steps.pr.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure()
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index f8a1d6855..5a45b0f98 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -8,11 +8,11 @@ on:
workflow_dispatch:
inputs:
version:
- name: Version Tag
+ description: Version Tag
default: nightly
required: true
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
concurrency:
group: docker-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: true
@@ -22,19 +22,44 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup Buildx
+ id: prepare
uses: docker/setup-buildx-action@v1
- name: Test Build
+ id: build
uses: docker/build-push-action@v2
with:
load: true
push: false
tags: netdata/netdata:test
- name: Test Image
+ id: test
run: .github/scripts/docker-test.sh
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Docker runtime testing failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Building or testing Docker image for linux/amd64 failed.
+ CHeckout: ${{ steps.checkout.outcome }}
+ Setup buildx: ${{ steps.prepare.outcome }}
+ Build image: ${{ steps.build.outcome }}
+ Test image: ${{ steps.test.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ }}
docker-ci:
if: github.event_name != 'workflow_dispatch'
@@ -50,21 +75,46 @@ jobs:
- linux/ppc64le
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup QEMU
+ id: qemu
if: matrix.platforms != 'linux/i386'
uses: docker/setup-qemu-action@v1
- name: Setup Buildx
+ id: buildx
uses: docker/setup-buildx-action@v1
- name: Build
+ id: build
uses: docker/build-push-action@v2
with:
platforms: ${{ matrix.platforms }}
load: false
push: false
tags: netdata/netdata:test
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Docker build testing failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Building Docker image for ${{ matrix.platforms }} failed.
+ CHeckout: ${{ steps.checkout.outcome }}
+ Setup QEMU: ${{ steps.qemu.outcome }}
+ Setup buildx: ${{ steps.buildx.outcome }}
+ Build image: ${{ steps.build.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ }}
docker-publish:
if: github.event_name == 'workflow_dispatch'
@@ -73,30 +123,39 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Determine which tags to use
+ id: release-tags
if: github.event.inputs.version != 'nightly'
run: |
- echo "tags=netdata/netdata:latest,netdata/netdata:stable,$(.github/scripts/gen-docker-tags.py ${{ github.event.inputs.version }})" >> $GITHUB_ENV
+ echo "tags=netdata/netdata:latest,netdata/netdata:stable,$(.github/scripts/gen-docker-tags.py ${{ github.event.inputs.version }})" \
+ >> "${GITHUB_ENV}"
- name: Determine which tags to use
+ id: nightly-tags
if: github.event.inputs.version == 'nightly'
run: |
- echo "tags=netdata/netdata:latest,netdata/netdata:edge" >> $GITHUB_ENV
+ echo "tags=netdata/netdata:latest,netdata/netdata:edge" >> "${GITHUB_ENV}"
- name: Mark image as official
+ id: env
if: github.repository == 'netdata/netdata'
- run: echo "OFFICIAL_IMAGE=true" >> $GITHUB_ENV
+ run: echo "OFFICIAL_IMAGE=true" >> "${GITHUB_ENV}"
- name: Setup QEMU
+ id: qemu
uses: docker/setup-qemu-action@v1
- name: Setup Buildx
+ id: buildx
uses: docker/setup-buildx-action@v1
- name: Docker Hub Login
+ id: login
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Docker Build
+ id: build
uses: docker/build-push-action@v2
with:
platforms: linux/amd64,linux/i386,linux/arm/v7,linux/arm64,linux/ppc64le
@@ -111,7 +170,16 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Docker Build failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "Docker image build failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to build or publish Docker images.
+ CHeckout: ${{ steps.checkout.outcome }}
+ Generate release tags: ${{ steps.release-tags.outcome }}
+ Generate nightly tags: ${{ steps.nightly-tags.outcome }}
+ Setup environment: ${{ steps.env.outcome }}
+ Setup QEMU: ${{ steps.qemu.outcome }}
+ Setup buildx: ${{ steps.buildx.outcome }}
+ Authenticate against DockerHub: ${{ steps.login.outcome }}
+ Build and publish images: ${{ steps.build.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 73bcc8773..69fda40c3 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -10,14 +10,14 @@ on:
paths:
- '**.md'
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
jobs:
markdown-link-check:
name: Broken Links
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Run link check
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index a4937a9db..0854080a7 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -5,7 +5,7 @@ on:
schedule:
- cron: '*/10 * * * *'
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
jobs:
labeler:
runs-on: ubuntu-latest
diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index 38a78731b..dbf334d59 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -6,164 +6,235 @@ on:
branches:
- master
- develop
+ push:
+ branches:
+ - master
workflow_dispatch:
inputs:
type:
- name: Package build type
+ description: Package build type
default: devel
required: true
version:
- name: Package version
+ description: Package version
required: false
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
+ REPO_PREFIX: netdata/netdata
concurrency:
group: packages-${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: true
jobs:
+ matrix:
+ name: Prepare Build Matrix
+ runs-on: ubuntu-latest
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
+ - name: Prepare tools
+ id: prepare
+ run: |
+ sudo apt-get update && sudo apt-get install -y python3-ruamel.yaml
+ - name: Read build matrix
+ id: set-matrix
+ shell: python3 {0}
+ run: |
+ from ruamel.yaml import YAML
+ import json
+ import re
+ FULL_CI_REGEX = '/actions run full ci'
+ ALWAYS_RUN_ARCHES = ["amd64"]
+ PR_BODY = """${{ github.event.pull_request.body }}"""
+ yaml = YAML(typ='safe')
+ entries = list()
+ run_limited = False
+
+ with open('.github/data/distros.yml') as f:
+ data = yaml.load(f)
+
+ if "${{ github.event_name }}" == "pull_request" and re.search(FULL_CI_REGEX, PR_BODY, re.I) is None:
+ run_limited = True
+
+ for i, v in enumerate(data['include']):
+ if 'packages' in data['include'][i]:
+ for arch in data['include'][i]['packages']['arches']:
+ if arch in ALWAYS_RUN_ARCHES or not run_limited:
+ entries.append({
+ 'distro': data['include'][i]['distro'],
+ 'version': data['include'][i]['version'],
+ 'pkgclouddistro': data['include'][i]['packages']['repo_distro'],
+ 'format': data['include'][i]['packages']['type'],
+ 'base_image': data['include'][i]['base_image'] if 'base_image' in data['include'][i] else data['include'][i]['distro'],
+ 'platform': data['platform_map'][arch],
+ 'arch': arch
+ })
+
+ entries.sort(key=lambda k: (k['arch'], k['distro'], k['version']))
+ matrix = json.dumps({'include': entries}, sort_keys=True)
+ print('Generated Matrix: ' + matrix)
+ print('::set-output name=matrix::' + matrix)
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Package Build matrix generation failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to generate build matrix for package build.
+ Checkout: ${{ steps.checkout.outcome }}
+ Prepare Tools: ${{ steps.prepare.outcome }}
+ Read Build Matrix: ${{ steps.set-matrix.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ }}
+
+ version-check:
+ name: Version check
+ runs-on: ubuntu-latest
+ outputs:
+ repo: ${{ steps.check-version.outputs.repo }}
+ version: ${{ steps.check-version.outputs.version }}
+ retention: ${{ steps.check-version.outputs.retention }}
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
+ - name: Check Version
+ id: check-version
+ run: |
+ if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
+ case "${{ github.event.inputs.type }}" in
+ "release")
+ echo "::set-output name=repo::${REPO_PREFIX}"
+ echo "::set-output name=version::${{ github.event.inputs.version }}"
+ echo "::set-output name=retention::365"
+ ;;
+ "nightly")
+ echo "::set-output name=repo::${REPO_PREFIX}-edge"
+ echo "::set-output name=version::$(tr -d 'v' < packaging/version)"
+ echo "::set-output name=retention::30"
+ ;;
+ *)
+ echo "::set-output name=repo::${REPO_PREFIX}-devel"
+ echo "::set-output name=version::0.${GITHUB_SHA}"
+ echo "::set-output name=retention::30"
+ ;;
+ esac
+ else
+ echo "::set-output name=version::$(cut -d'-' -f 1 packaging/version | tr -d 'v')"
+ echo "::set-output name=retention::0"
+ fi
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Package Build version check failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to generate version information for package build.
+ Checkout: ${{ steps.checkout.outcome }}
+ Check Version: ${{ steps.check-version.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ }}
+
build:
name: Build
runs-on: ubuntu-latest
env:
DOCKER_CLI_EXPERIMENTAL: enabled
+ needs:
+ - matrix
+ - version-check
strategy:
- matrix:
- include:
- - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/amd64, arch: amd64}
- - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/i386, arch: i386}
- - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/arm/v7, arch: armhf}
- - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/arm64/v8, arch: arm64}
- - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/amd64, arch: amd64}
- - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/i386, arch: i386}
- - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/arm/v7, arch: armhf}
- - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/arm64/v8, arch: arm64}
- - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/amd64, arch: amd64, alias: bullseye}
- - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/i386, arch: i386, alias: bullseye}
- - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/arm/v7, arch: armhf, alias: bullseye}
- - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/arm64/v8, arch: arm64, alias: bullseye}
- - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
- - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/i386, arch: i386}
- - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/arm/v7, arch: armhf}
- - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/arm64/v8, arch: arm64}
- - {distro: ubuntu, version: "20.04", pkgclouddistro: ubuntu/focal, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
- - {distro: ubuntu, version: "20.04", pkgclouddistro: ubuntu/focal, format: deb, base_image: ubuntu, platform: linux/arm/v7, arch: armhf}
- - {distro: ubuntu, version: "20.04", pkgclouddistro: ubuntu/focal, format: deb, base_image: ubuntu, platform: linux/arm64/v8, arch: arm64}
- - {distro: ubuntu, version: "21.10", pkgclouddistro: ubuntu/impish, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
- - {distro: ubuntu, version: "21.10", pkgclouddistro: ubuntu/impish, format: deb, base_image: ubuntu, platform: linux/arm/v7, arch: armhf}
- - {distro: ubuntu, version: "21.10", pkgclouddistro: ubuntu/impish, format: deb, base_image: ubuntu, platform: linux/arm64/v8, arch: arm64}
- - {distro: centos, version: "7", pkgclouddistro: el/7, format: rpm, base_image: centos, platform: linux/amd64, arch: amd64}
- - {distro: rockylinux, version: "8", pkgclouddistro: el/8, format: rpm, base_image: rockylinux/rockylinux, platform: linux/amd64, arch: amd64}
- - {distro: rockylinux, version: "8", pkgclouddistro: el/8, format: rpm, base_image: rockylinux/rockylinux, platform: linux/arm64/v8, arch: arm64}
- - {distro: fedora, version: "34", pkgclouddistro: fedora/34, format: rpm, base_image: fedora, platform: linux/amd64, arch: amd64}
- - {distro: fedora, version: "34", pkgclouddistro: fedora/34, format: rpm, base_image: fedora, platform: linux/arm/v7, arch: armhf}
- - {distro: fedora, version: "34", pkgclouddistro: fedora/34, format: rpm, base_image: fedora, platform: linux/arm64/v8, arch: arm64}
- - {distro: fedora, version: "35", pkgclouddistro: fedora/35, format: rpm, base_image: fedora, platform: linux/amd64, arch: amd64}
- - {distro: fedora, version: "35", pkgclouddistro: fedora/35, format: rpm, base_image: fedora, platform: linux/arm/v7, arch: armhf}
- - {distro: fedora, version: "35", pkgclouddistro: fedora/35, format: rpm, base_image: fedora, platform: linux/arm64/v8, arch: arm64}
- - {distro: opensuse, version: "15.3", pkgclouddistro: opensuse/15.3, format: rpm, base_image: opensuse/leap, platform: linux/amd64, arch: amd64}
- - {distro: opensuse, version: "15.3", pkgclouddistro: opensuse/15.3, format: rpm, base_image: opensuse/leap, platform: linux/arm64/v8, arch: arm64}
- - {distro: oraclelinux, version: "8", pkgclouddistro: ol/8, format: rpm, base_image: oraclelinux, platform: linux/amd64, arch: amd64}
- - {distro: oraclelinux, version: "8", pkgclouddistro: ol/8, format: rpm, base_image: oraclelinux, platform: linux/arm64/v8, arch: arm64}
+ matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
# We intentiaonally disable the fail-fast behavior so that a
# build failure for one version doesn't prevent us from publishing
# successfully built and tested packages for another version.
fail-fast: false
max-parallel: 8
steps:
- - name: Checkout PR # Checkout the PR if it's a PR.
- if: github.event_name == 'pull_request'
- uses: actions/checkout@v2
- with:
- fetch-depth: 0 # We need full history for versioning
- submodules: recursive
- - name: Checkout Tag # Otherwise check out the tag that triggered this.
- if: github.event_name == 'workflow_dispatch'
- uses: actions/checkout@v2
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
with:
- ref: ${{ github.event.ref }}
fetch-depth: 0 # We need full history for versioning
submodules: recursive
- - name: Check Base Branch
- run: |
- if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
- echo "runtype=${{ github.event.inputs.type }}" >> $GITHUB_ENV
- case "${{ github.event.inputs.type }}" in
- "release")
- echo "repo=${{ secrets.PACKAGE_CLOUD_REPO }}" >> $GITHUB_ENV
- echo "pkg_version=${{ github.event.inputs.version }}" >> $GITHUB_ENV
- echo "pkg_retention_days=365" >> $GITHUB_ENV
- ;;
- "nightly")
- echo "repo=${{ secrets.PACKAGE_CLOUD_REPO }}-edge" >> $GITHUB_ENV
- echo "pkg_version=${{ github.event.inputs.version }}" >> $GITHUB_ENV
- echo "pkg_retention_days=30" >> $GITHUB_ENV
- ;;
- *)
- echo "repo=${{ secrets.PACKAGE_CLOUD_REPO }}-devel" >> $GITHUB_ENV
- echo "pkg_version=0.${GITHUB_SHA}" >> $GITHUB_ENV
- echo "pkg_retention_days=30" >> $GITHUB_ENV
- ;;
- esac
- else
- echo "runtype=test" >> $GITHUB_ENV
- echo "pkg_version=$(cut -d'-' -f 1 packaging/version | sed -e 's/^v//')" >> $GITHUB_ENV
- fi
- name: Setup QEMU
+ id: qemu
if: matrix.platform != 'linux/amd64' && matrix.platform != 'linux/i386'
uses: docker/setup-qemu-action@v1
- name: Prepare Docker Environment
+ id: docker-config
shell: bash
run: |
echo '{"cgroup-parent": "/actions_job", "experimental": true}' | sudo tee /etc/docker/daemon.json 2>/dev/null
sudo service docker restart
- - name: Set Base Image Version
- shell: bash
- run: |
- if [ -z "${{ matrix.alias }}" ] ; then
- echo "version=${{ matrix.version }}" >> $GITHUB_ENV
- else
- echo "version=${{ matrix.alias }}" >> $GITHUB_ENV
- fi
- - name: Fetch base image
+ - name: Fetch images
+ id: fetch-images
uses: nick-invision/retry@v2
with:
max_attempts: 3
retry_wait_seconds: 30
timeout_seconds: 900
command: |
- docker pull --platform ${{ matrix.platform }} ${{ matrix.base_image }}:${{ env.version }}
+ docker pull --platform ${{ matrix.platform }} ${{ matrix.base_image }}:${{ matrix.version }}
docker pull --platform ${{ matrix.platform }} netdata/package-builders:${{ matrix.distro }}${{ matrix.version }}
- name: Build Packages
+ id: build
shell: bash
run: |
- docker run --security-opt seccomp=unconfined -e DO_NOT_TRACK=1 -e VERSION=${{ env.pkg_version }} --platform=${{ matrix.platform }} -v $PWD:/netdata netdata/package-builders:${{ matrix.distro }}${{ matrix.version }}
+ docker run --security-opt seccomp=unconfined -e DISABLE_TELEMETRY=1 -e VERSION=${{ needs.version-check.outputs.version }} \
+ --platform=${{ matrix.platform }} -v "$PWD":/netdata netdata/package-builders:${{ matrix.distro }}${{ matrix.version }}
- name: Test Packages
+ id: test
shell: bash
run: |
- docker run --security-opt seccomp=unconfined -e DO_NOT_TRACK=1 -e DISTRO=${{ matrix.distro }} -e VERSION=${{ env.pkg_version }} -e DISTRO_VERSION=${{ env.version }} --platform=${{ matrix.platform }} -v $PWD:/netdata ${{ matrix.base_image }}:${{ env.version }} /netdata/.github/scripts/pkg-test.sh
+ docker run --security-opt seccomp=unconfined -e DISABLE_TELEMETRY=1 -e DISTRO=${{ matrix.distro }} \
+ -e VERSION=${{ needs.version-check.outputs.version }} -e DISTRO_VERSION=${{ matrix.version }} \
+ --platform=${{ matrix.platform }} -v "$PWD":/netdata ${{ matrix.base_image }}:${{ matrix.version }} \
+ /netdata/.github/scripts/pkg-test.sh
- name: Save Packages
- uses: actions/upload-artifact@v2
+ id: artifacts
+ continue-on-error: true
+ uses: actions/upload-artifact@v3
with:
name: ${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }}-packages
path: ${{ github.workspace }}/artifacts/*
- name: Upload to PackageCloud
+ id: upload
if: github.event_name == 'workflow_dispatch'
shell: bash
env:
PKG_CLOUD_TOKEN: ${{ secrets.PACKAGE_CLOUD_API_KEY }}
run: |
- echo "Packages to upload:\n$(ls artifacts/*.${{ matrix.format }})"
+ printf "Packages to upload:\n%s" "$(ls artifacts/*.${{ matrix.format }})"
for pkgfile in artifacts/*.${{ matrix.format }} ; do
- .github/scripts/package_cloud_wrapper.sh yank ${{ env.repo }}/${{ matrix.pkgclouddistro }} $(basename ${pkgfile}) || true
- .github/scripts/package_cloud_wrapper.sh push ${{ env.repo }}/${{ matrix.pkgclouddistro }} ${pkgfile}
+ .github/scripts/package_cloud_wrapper.sh yank ${{ needs.version-check.outputs.repo }}/${{ matrix.pkgclouddistro }} \
+ "$(basename "${pkgfile}")" || true
+ .github/scripts/package_cloud_wrapper.sh push ${{ needs.version-check.outputs.repo }}/${{ matrix.pkgclouddistro }} "${pkgfile}"
done
- name: Clean
+ id: cleanup
if: github.event_name == 'workflow_dispatch'
shell: bash
env:
- REPO: ${{ env.repo }}
+ REPO: ${{ needs.version-check.outputs.repo }}
PKG_CLOUD_TOKEN: ${{ secrets.PACKAGE_CLOUD_API_KEY }}
- PACKAGE_CLOUD_RETENTION_DAYS: ${{ env.pkg_retention_days }}
+ PACKAGE_CLOUD_RETENTION_DAYS: ${{ needs.version-check.outputs.retention }}
run: .github/scripts/old_package_purging.sh
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
@@ -172,7 +243,16 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Package Build failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "${{ matrix.pkgclouddistro }} ${{ matrix.version }} package build for ${{ matrix.arch }} failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: ${{ matrix.pkgclouddistro }} ${{ matrix.version }} package build for ${{ matrix.arch }} failed.
+ Checkout: ${{ steps.checkout.outcome }}
+ Setup QEMU: ${{ steps.qemu.outcome }}
+ Setup Docker: ${{ steps.docker-config.outcome }}
+ Fetch images: ${{ steps.fetch-images.outcome }}
+ Build: ${{ steps.build.outcome }}
+ Test: ${{ steps.test.outcome }}
+ Publish: ${{ steps.upload.outcome }}
+ Cleanup: ${{ steps.cleanup.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 000000000..248e45e07
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,207 @@
+---
+# Workflow for triggering a release.
+name: Release
+on:
+ schedule:
+ - cron: '0 0 * * *'
+ workflow_dispatch: # Dispatch runs build and validate, then push to the appropriate storage location.
+ inputs:
+ type:
+ description: Build Type
+ default: nightly
+ required: true
+ version:
+ description: Version Tag
+ default: nightly
+ required: true
+concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type.
+ group: release-${{ github.ref }}-${{ github.event_name }}
+ cancel-in-progress: true
+jobs:
+ update-changelogs:
+ name: Update changelog
+ runs-on: ubuntu-latest
+ outputs:
+ ref: ${{ steps.target.outputs.ref }}
+ version: ${{ steps.target.outputs.version }}
+ type: ${{ steps.target.outputs.type }}
+ run: ${{ steps.target.outputs.run }}
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ submodules: recursive
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ - name: Prepare base ref
+ id: target
+ run: >-
+ .github/scripts/prepare-release-base.sh \
+ ${{ github.repository }} \
+ ${{ github.event_name }} \
+ ${{ github.event.inputs.type }} \
+ ${{ github.event.inputs.version }}
+ - name: Generate Nightly Changleog
+ id: nightly-changelog
+ if: steps.target.outputs.run == 'true' && steps.target.outputs.type == 'nightly'
+ uses: heinrichreimer/github-changelog-generator-action@v2.3
+ with:
+ bugLabels: IGNOREBUGS
+ excludeLabels: "stale,duplicate,question,invalid,wontfix,discussion,no changelog"
+ issues: false
+ sinceTag: v1.10.0
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ unreleasedLabel: "**Next release**"
+ verbose: true
+ maxIssues: 500
+ - name: Generate Release Changelog
+ id: release-changelog
+ if: steps.target.outputs.run == 'true' && steps.target.outputs.type != 'nightly'
+ uses: heinrichreimer/github-changelog-generator-action@v2.3
+ with:
+ bugLabels: IGNOREBUGS
+ excludeLabels: "stale,duplicate,question,invalid,wontfix,discussion,no changelog"
+ futureRelease: ${{ github.event.inputs.version }}
+ issues: false
+ sinceTag: v1.10.0
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ unreleasedLabel: "**Next release**"
+ verbose: true
+ maxIssues: 500
+ - name: Commit Changes
+ id: commit
+ if: steps.target.outputs.run == 'true'
+ env:
+ GITHUB_TOKEN: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ run: |
+ git config user.name "netdatabot"
+ git config user.email "bot@netdata.cloud"
+ git add packaging/version CHANGELOG.md
+ git commit -m "[ci skip] ${{ steps.target.outputs.message }}"
+ if [ "${{ steps.target.outputs.type }}" != "nightly" ]; then
+ git tag ${{ github.event.inputs.version }}
+ fi
+ git push --follow-tags origin ${{ steps.target.outputs.branch }}
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Failed to prepare changelog:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to prepare changelog.
+ Checkout: ${{ steps.checkout.outcome }}
+ Prepare base ref: ${{ steps.target.outcome }}
+ Generate nightly changelog: ${{ steps.nightly-changelog.outcome }}
+ Generate release changelog: ${{ steps.release-changelog.outcome }}
+ Commit changes: ${{ steps.commit.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure()
+
+ trigger-artifacts:
+ name: Trigger artifact builds
+ runs-on: ubuntu-latest
+ needs: update-changelogs
+ if: ${{ needs.update-changelogs.outputs.run }} == 'true'
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v2
+ with:
+ ref: ${{ needs.update-changelogs.outputs.ref }}
+ - name: Trigger build
+ id: trigger
+ uses: benc-uk/workflow-dispatch@v1
+ with:
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ repo: ${{ github.repository }}
+ workflow: Build
+ ref: ${{ needs.update-changelogs.outputs.ref }}
+ inputs: '{"version": "${{ needs.update-changelogs.outputs.version }}", "type": "${{ needs.update-changelogs.outputs.type }}"}'
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Failed to trigger ${{ needs.update-changelogs.outputs.type }} artifact builds:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to trigger ${{ needs.update-changelogs.outputs.type }} artifact builds.
+ Checkout: ${{ steps.checkout.outcome }}
+ Trigger build: ${{ steps.trigger.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure()
+
+ trigger-docker:
+ name: Trigger docker builds
+ runs-on: ubuntu-latest
+ needs: update-changelogs
+ if: ${{ needs.update-changelogs.outputs.run }} == 'true'
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v2
+ with:
+ ref: ${{ needs.update-changelogs.outputs.ref }}
+ - name: Trigger build
+ id: trigger
+ uses: benc-uk/workflow-dispatch@v1
+ with:
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ repo: ${{ github.repository }}
+ workflow: Docker
+ ref: ${{ needs.update-changelogs.outputs.ref }}
+ inputs: '{"version": "${{ needs.update-changelogs.outputs.version }}"}'
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Failed to trigger ${{ needs.update-changelogs.outputs.type }} Docker builds:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to trigger ${{ needs.update-changelogs.outputs.type }} Docker builds.
+ Checkout: ${{ steps.checkout.outcome }}
+ Trigger build: ${{ steps.trigger.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure()
+
+ trigger-packages:
+ name: Trigger package builds
+ runs-on: ubuntu-latest
+ needs: update-changelogs
+ if: ${{ needs.update-changelogs.outputs.run }} == 'true'
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v2
+ with:
+ ref: ${{ needs.update-changelogs.outputs.ref }}
+ - name: Trigger build
+ id: trigger
+ uses: benc-uk/workflow-dispatch@v1
+ with:
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ repo: ${{ github.repository }}
+ workflow: Packages
+ ref: ${{ needs.update-changelogs.outputs.ref }}
+ inputs: '{"version": "${{ needs.update-changelogs.outputs.version }}", "type": "${{ needs.update-changelogs.outputs.type }}"}'
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Failed to trigger ${{ needs.update-changelogs.outputs.type }} package builds:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to trigger ${{ needs.update-changelogs.outputs.type }} package builds.
+ Checkout: ${{ steps.checkout.outcome }}
+ Trigger build: ${{ steps.trigger.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure()
diff --git a/.github/workflows/repoconfig-packages.yml b/.github/workflows/repoconfig-packages.yml
index b8d0ff67c..b0600cc0b 100644
--- a/.github/workflows/repoconfig-packages.yml
+++ b/.github/workflows/repoconfig-packages.yml
@@ -14,30 +14,80 @@ on:
- packaging/repoconfig/**
- .github/workflows/repoconfig-packages.yml
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
+ REPO_PREFIX: netdata/netdata
jobs:
+ matrix:
+ name: Prepare Build Matrix
+ runs-on: ubuntu-latest
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v3
+ - name: Prepare tools
+ id: prepare
+ run: |
+ sudo apt-get update && sudo apt-get install -y python3-ruamel.yaml
+ - name: Read build matrix
+ id: set-matrix
+ shell: python3 {0}
+ run: |
+ from ruamel.yaml import YAML
+ import json
+ yaml = YAML(typ='safe')
+ entries = list()
+
+ with open('.github/data/distros.yml') as f:
+ data = yaml.load(f)
+
+ for i, v in enumerate(data['include']):
+ if 'packages' in data['include'][i]:
+ entries.append({
+ 'distro': data['include'][i]['distro'],
+ 'version': data['include'][i]['version'],
+ 'pkgclouddistro': data['include'][i]['packages']['repo_distro'],
+ 'format': data['include'][i]['packages']['type'],
+ 'base_image': data['include'][i]['base_image'] if 'base_image' in data['include'][i] else data['include'][i]['distro'],
+ 'platform': data['platform_map']['amd64'],
+ 'arch': 'amd64'
+ })
+
+ entries.sort(key=lambda k: (k['arch'], k['distro'], k['version']))
+ matrix = json.dumps({'include': entries}, sort_keys=True)
+ print('Generated Matrix: ' + matrix)
+ print('::set-output name=matrix::' + matrix)
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Repository Package Build matrix generation failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to generate build matrix for repository package build.
+ Checkout: ${{ steps.checkout.outcome }}
+ Prepare Tools: ${{ steps.prepare.outcome }}
+ Read Build Matrix: ${{ steps.set-matrix.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ }}
+
build:
name: Build
runs-on: ubuntu-latest
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
DOCKER_CLI_EXPERIMENTAL: enabled
+ needs:
+ - matrix
strategy:
- # This needs to be kept in sync with the matrix in packaging.yml, but should only include the AMD64 lines.
- matrix:
- include:
- - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/amd64, arch: amd64}
- - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/amd64, arch: amd64}
- - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/amd64, arch: amd64}
- - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
- - {distro: ubuntu, version: "20.04", pkgclouddistro: ubuntu/focal, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
- - {distro: ubuntu, version: "21.10", pkgclouddistro: ubuntu/impish, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
- - {distro: centos, version: "7", pkgclouddistro: el/7, format: rpm, base_image: centos, platform: linux/amd64, arch: amd64}
- - {distro: rockylinux, version: "8", pkgclouddistro: el/8, format: rpm, base_image: rockylinux/rockylinux, platform: linux/amd64, arch: amd64}
- - {distro: fedora, version: "34", pkgclouddistro: fedora/34, format: rpm, base_image: fedora, platform: linux/amd64, arch: amd64}
- - {distro: fedora, version: "35", pkgclouddistro: fedora/35, format: rpm, base_image: fedora, platform: linux/amd64, arch: amd64}
- - {distro: opensuse, version: "15.3", pkgclouddistro: opensuse/15.3, format: rpm, base_image: opensuse/leap, platform: linux/amd64, arch: amd64}
- - {distro: oraclelinux, version: "8", pkgclouddistro: ol/8, format: rpm, base_image: oraclelinux, platform: linux/amd64, arch: amd64}
+ matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
# We intentiaonally disable the fail-fast behavior so that a
# build failure for one version doesn't prevent us from publishing
# successfully built and tested packages for another version.
@@ -45,9 +95,11 @@ jobs:
max-parallel: 8
steps:
- name: Checkout
- uses: actions/checkout@v2
+ id: checkout
+ uses: actions/checkout@v3
# Unlike normally, we do not need a deep clone or submodules for this.
- name: Fetch base image
+ id: fetch-images
uses: nick-invision/retry@v2
with:
max_attempts: 3
@@ -55,25 +107,30 @@ jobs:
timeout_seconds: 900
command: docker pull --platform ${{ matrix.platform }} ${{ matrix.base_image }}:${{ matrix.version }}
- name: Build Packages
+ id: build
shell: bash
run: |
- docker run --security-opt seccomp=unconfined -e DO_NOT_TRACK=1 --platform ${{ matrix.platform }} \
- -v $PWD:/netdata ${{ matrix.base_image }}:${{ matrix.version }} \
+ docker run --security-opt seccomp=unconfined -e DISABLE_TELEMETRY=1 --platform ${{ matrix.platform }} \
+ -v "$PWD":/netdata ${{ matrix.base_image }}:${{ matrix.version }} \
/netdata/packaging/repoconfig/build-${{ matrix.format }}.sh
- name: Upload Packages
+ id: publish
if: github.event_name != 'pull_request' && github.repository == 'netdata/netdata'
shell: bash
env:
PKG_CLOUD_TOKEN: ${{ secrets.PACKAGE_CLOUD_API_KEY }}
run: |
- echo "Packages to upload:\n$(ls artifacts/*.${{ matrix.format }})"
+ printf "Packages to upload:\n%s" "$(ls artifacts/*.${{ matrix.format }})"
for pkgfile in artifacts/*.${{ matrix.format }} ; do
- .github/scripts/package_cloud_wrapper.sh yank ${{ secrets.PACKAGE_CLOUD_REPO }}/${{ matrix.pkgclouddistro }} $(basename ${pkgfile}) || true
- .github/scripts/package_cloud_wrapper.sh push ${{ secrets.PACKAGE_CLOUD_REPO }}/${{ matrix.pkgclouddistro }} ${pkgfile}
- .github/scripts/package_cloud_wrapper.sh yank ${{ secrets.PACKAGE_CLOUD_REPO }}-edge/${{ matrix.pkgclouddistro }} $(basename ${pkgfile}) || true
- .github/scripts/package_cloud_wrapper.sh push ${{ secrets.PACKAGE_CLOUD_REPO }}-edge/${{ matrix.pkgclouddistro }} ${pkgfile}
- .github/scripts/package_cloud_wrapper.sh yank ${{ secrets.PACKAGE_CLOUD_REPO }}-repoconfig/${{ matrix.pkgclouddistro }} $(basename ${pkgfile}) || true
- .github/scripts/package_cloud_wrapper.sh push ${{ secrets.PACKAGE_CLOUD_REPO }}-repoconfig/${{ matrix.pkgclouddistro }} ${pkgfile}
+ .github/scripts/package_cloud_wrapper.sh yank "${REPO_PREFIX}/${{ matrix.pkgclouddistro }}" \
+ "$(basename "${pkgfile}")" || true
+ .github/scripts/package_cloud_wrapper.sh push "${REPO_PREFIX}/${{ matrix.pkgclouddistro }}" "${pkgfile}"
+ .github/scripts/package_cloud_wrapper.sh yank "${REPO_PREFIX}-edge/${{ matrix.pkgclouddistro }}" \
+ "$(basename "${pkgfile}")" || true
+ .github/scripts/package_cloud_wrapper.sh push "${REPO_PREFIX}-edge/${{ matrix.pkgclouddistro }}" "${pkgfile}"
+ .github/scripts/package_cloud_wrapper.sh yank "${REPO_PREFIX}-repoconfig/${{ matrix.pkgclouddistro }}" \
+ "$(basename "${pkgfile}")" || true
+ .github/scripts/package_cloud_wrapper.sh push "${REPO_PREFIX}-repoconfig/${{ matrix.pkgclouddistro }}" "${pkgfile}"
done
- name: Failure Notification
if: ${{ failure() }}
@@ -84,5 +141,10 @@ jobs:
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Repository Package Build failed:'
SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: "${{ matrix.pkgclouddistro }} ${{ matrix.version }} repository package build failed."
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: ${{ matrix.pkgclouddistro }} ${{ matrix.version }} repository package build failed.
+ Checkout: ${{ steps.checkout.outcome }}
+ Fetch images: ${{ steps.fetch-images.outcome }}
+ Build: ${{ steps.build.outcome }}
+ Publish: ${{ steps.publish.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml
index b6ee6fcf7..f631b929a 100644
--- a/.github/workflows/review.yml
+++ b/.github/workflows/review.yml
@@ -4,7 +4,7 @@ name: Review
on:
pull_request: null
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
concurrency:
group: review-${{ github.ref }}
cancel-in-progress: true
@@ -20,7 +20,7 @@ jobs:
yamllint: ${{ steps.yamllint.outputs.run }}
steps:
- name: Clone repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@@ -77,7 +77,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Git clone repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@@ -94,7 +94,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Git clone repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@@ -114,7 +114,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Git clone repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Run hadolint
@@ -130,7 +130,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Git clone repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
@@ -150,7 +150,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Git clone repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 20c6f7b8c..7e53c4979 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -15,7 +15,7 @@ on:
- '**.c'
- '**.h'
env:
- DO_NOT_TRACK: 1
+ DISABLE_TELEMETRY: 1
concurrency:
group: tests-${{ github.ref }}
cancel-in-progress: true
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Prepare environment
@@ -45,7 +45,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
submodules: recursive
- name: Prepare environment
@@ -90,7 +90,7 @@ jobs:
find . -type f -name '*.log' -exec cp {} ../logs/ \;
popd || exit 1
- name: Upload Artifacts
- uses: actions/upload-artifact@v2.2.4
+ uses: actions/upload-artifact@v3
if: always()
with:
name: logs
diff --git a/.github/workflows/trigger-learn-update.yml b/.github/workflows/trigger-learn-update.yml
new file mode 100644
index 000000000..3d39ebabc
--- /dev/null
+++ b/.github/workflows/trigger-learn-update.yml
@@ -0,0 +1,37 @@
+---
+name: Trigger Netdata Learn documentation update
+on:
+ push:
+ branches:
+ - master
+ paths:
+ - "**.mdx?"
+ - "packaging/installer/kickstart.sh"
+concurrency:
+ group: learn-trigger-${{ github.ref }}
+ cancel-in-progress: true
+jobs:
+ trigger-ingest:
+ name: Trigger Netdata Learn ingest workflow.
+ if: github.repository == 'netdata/netdata'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Trigger Netdata Learn ingest workflow.
+ uses: benc-uk/workflow-dispatch@v1
+ with:
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ repo: netdata/learn
+ workflow: Ingest
+ ref: refs/heads/master
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Triggering Netdata Learn documentation update failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to trigger Netdata Learn documentation update workflow.
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: failure()