summaryrefslogtreecommitdiffstats
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/build.yml100
-rw-r--r--.github/workflows/checks.yml2
-rw-r--r--.github/workflows/cloud_regression.yml25
-rw-r--r--.github/workflows/codeql.yml20
-rw-r--r--.github/workflows/docker.yml60
-rw-r--r--.github/workflows/labeler.yml21
-rw-r--r--.github/workflows/packaging.yml66
-rw-r--r--.github/workflows/repoconfig-packages.yml55
-rw-r--r--.github/workflows/review.yml30
9 files changed, 178 insertions, 201 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 53f1590f8..c3924fb0c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -57,7 +57,7 @@ jobs:
--with-math \
--with-user=netdata
make dist
- echo "::set-output name=distfile::$(find . -name 'netdata-*.tar.gz')"
+ echo "distfile=$(find . -name 'netdata-*.tar.gz')" >> "${GITHUB_OUTPUT}"
cp netdata-*.tar.gz artifacts/
- name: Store
id: store
@@ -171,6 +171,7 @@ jobs:
matrix: # Generate the shared build matrix for our build tests.
name: Prepare Build Matrix
runs-on: ubuntu-latest
+ if: github.event_name != 'workflow_dispatch'
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
@@ -183,39 +184,10 @@ jobs:
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']):
- e = {
- 'artifact_key': v['distro'] + str(v['version']).replace('.', ''),
- 'version': v['version'],
- }
-
- if 'base_image' in v:
- e['distro'] = ':'.join([v['base_image'], str(v['version'])])
- else:
- e['distro'] = ':'.join([v['distro'], str(v['version'])])
-
- if 'env_prep' in v:
- e['env_prep'] = v['env_prep']
-
- if 'jsonc_removal' in v:
- e['jsonc_removal'] = v['jsonc_removal']
-
- entries.append(e)
-
- entries.sort(key=lambda k: k['distro'])
- matrix = json.dumps({'include': entries}, sort_keys=True)
- print('Generated Matrix: ' + matrix)
- print('::set-output name=matrix::' + matrix)
+ matrix="$(.github/scripts/gen-matrix-build.py)"
+ echo "Generated matrix: ${matrix}"
+ echo "matrix=${matrix}" >> "${GITHUB_OUTPUT}"
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
@@ -241,12 +213,13 @@ jobs:
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
+ if: github.event_name != 'workflow_dispatch'
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
+ # Unlike the actual 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) }}
@@ -269,7 +242,7 @@ jobs:
BASE=${{ matrix.distro }}
PRE=${{ matrix.env_prep }}
RMJSONC=${{ matrix.jsonc_removal }}
- outputs: type=oci,dest=/tmp/image.tar
+ outputs: type=docker,dest=/tmp/image.tar
tags: test:${{ matrix.artifact_key }}
- name: Retry delay
if: ${{ steps.build1.outcome == 'failure' }}
@@ -287,7 +260,7 @@ jobs:
BASE=${{ matrix.distro }}
PRE=${{ matrix.env_prep }}
RMJSONC=${{ matrix.jsonc_removal }}
- outputs: type=oci,dest=/tmp/image.tar
+ outputs: type=docker,dest=/tmp/image.tar
tags: test:${{ matrix.artifact_key }}
- name: Retry delay
if: ${{ steps.build1.outcome == 'failure' && steps.build2.outcome == 'failure' }}
@@ -304,7 +277,7 @@ jobs:
BASE=${{ matrix.distro }}
PRE=${{ matrix.env_prep }}
RMJSONC=${{ matrix.jsonc_removal }}
- outputs: type=oci,dest=/tmp/image.tar
+ outputs: type=docker,dest=/tmp/image.tar
tags: test:${{ matrix.artifact_key }}
- name: Upload image artifact
id: upload
@@ -341,6 +314,7 @@ jobs:
source-build: # Test various source build arrangements.
name: Test Source Build
runs-on: ubuntu-latest
+ if: github.event_name != 'workflow_dispatch'
needs:
- matrix
- prepare-test-images
@@ -361,29 +335,27 @@ jobs:
name: ${{ matrix.artifact_key }}-test-env
- name: Load test environment
id: load
- run: |
- docker load --input image.tar | tee image-info.txt
- echo "::set-output name=image::$(cut -d ':' -f 3 image-info.txt)"
+ run: docker load --input image.tar
- name: Regular build on ${{ matrix.distro }}
id: build-basic
run: |
- docker run --security-opt seccomp=unconfined -w /netdata sha256:${{ steps.load.outputs.image }} \
+ docker run --security-opt seccomp=unconfined -w /netdata test:${{ matrix.artifact_key }} \
/bin/sh -c 'autoreconf -ivf && ./configure --disable-dependency-tracking && 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 }} \
+ docker run --security-opt seccomp=unconfined -w /netdata test:${{ matrix.artifact_key }} \
/bin/sh -c './netdata-installer.sh --dont-wait --dont-start-it --disable-cloud --one-time-build'
- 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 }} \
+ docker run --security-opt seccomp=unconfined -w /netdata test:${{ matrix.artifact_key }} \
/bin/sh -c './netdata-installer.sh --dont-wait --dont-start-it --require-cloud --one-time-build'
- name: netdata-installer on ${{ matrix.distro }}, require cloud, no JSON-C
id: build-no-jsonc
if: matrix.jsonc_removal != ''
run: |
- docker run --security-opt seccomp=unconfined -w /netdata sha256:${{ steps.load.outputs.image }} \
+ docker run --security-opt seccomp=unconfined -w /netdata test:${{ matrix.artifact_key }} \
/bin/sh -c '/rmjsonc.sh && ./netdata-installer.sh --dont-wait --dont-start-it --require-cloud --one-time-build'
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
@@ -414,6 +386,7 @@ jobs:
updater-check: # Test the generated dist archive using the updater code.
name: Test Generated Distfile and Updater Code
runs-on: ubuntu-latest
+ if: github.event_name != 'workflow_dispatch'
needs:
- build-dist
- matrix
@@ -442,10 +415,10 @@ jobs:
- name: Prepare artifact directory
id: prepare
run: |
- mkdir -p artifacts || exit 1
- echo "9999.0.0-0" > artifacts/latest-version.txt || exit 1
- cp dist-tarball/* artifacts || exit 1
- cd artifacts || exit 1
+ mkdir -p artifacts/download/latest || exit 1
+ echo "9999.0.0-0" > artifacts/download/latest/latest-version.txt || exit 1
+ cp dist-tarball/* artifacts/download/latest || exit 1
+ cd artifacts/download/latest || exit 1
ln -s ${{ needs.build-dist.outputs.distfile }} netdata-latest.tar.gz || exit 1
sha256sum -b ./* > "sha256sums.txt" || exit 1
cat sha256sums.txt
@@ -456,13 +429,11 @@ jobs:
name: ${{ matrix.artifact_key }}-test-env
- name: Load test environment
id: load
- run: |
- docker load --input image.tar | tee image-info.txt
- echo "::set-output name=image::$(cut -d ':' -f 3 image-info.txt)"
+ run: docker load --input image.tar
- name: Install netdata and run the updater on ${{ matrix.distro }}
id: updater-check
run: |
- docker run --security-opt seccomp=unconfined -e DISABLE_TELEMETRY=1 --network host -w /netdata sha256:${{ steps.load.outputs.image }} \
+ docker run --security-opt seccomp=unconfined -e DISABLE_TELEMETRY=1 --network host -w /netdata test:${{ matrix.artifact_key }} \
/netdata/.github/scripts/run-updater-check.sh
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
@@ -578,10 +549,15 @@ jobs:
with:
name: final-artifacts
path: artifacts
+ - name: Prepare artifacts directory
+ id: prepare
+ run: |
+ mkdir -p download/latest
+ mv artifacts/* download/latest
- name: Verify that artifacts work with installer
id: verify
env:
- NETDATA_TARBALL_BASEURL: http://localhost:8080/artifacts
+ NETDATA_TARBALL_BASEURL: http://localhost:8080/
run: packaging/installer/kickstart.sh --build-only --dont-start-it --disable-telemetry --dont-wait
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
@@ -627,10 +603,15 @@ jobs:
with:
name: final-artifacts
path: artifacts
+ - name: Prepare artifacts directory
+ id: prepare
+ run: |
+ mkdir -p download/latest
+ mv artifacts/* download/latest
- name: Verify that artifacts work with installer
id: verify
env:
- NETDATA_TARBALL_BASEURL: http://localhost:8080/artifacts
+ NETDATA_TARBALL_BASEURL: http://localhost:8080/
run: packaging/installer/kickstart.sh --static-only --dont-start-it --disable-telemetry
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
@@ -659,8 +640,6 @@ jobs:
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' && github.event.inputs.type == 'nightly' && github.repository == 'netdata/netdata'
needs:
- - updater-check
- - source-build
- artifact-verification-dist
- artifact-verification-static
steps:
@@ -714,8 +693,6 @@ jobs:
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' && github.event.inputs.type == 'nightly' && github.repository == 'netdata/netdata'
needs:
- - updater-check
- - source-build
- artifact-verification-dist
- artifact-verification-static
steps:
@@ -755,6 +732,7 @@ jobs:
repo: netdata-nightlies
body: Netdata nightly build for ${{ steps.version.outputs.date }}.
commit: ${{ steps.version.outputs.commit }}
+ makeLatest: true
tag: ${{ steps.version.outputs.version }}
token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
- name: Failure Notification
@@ -790,9 +768,9 @@ jobs:
id: tag
run: |
if echo ${{ github.event.inputs.version }} | grep -qE '^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+$'; then
- echo "::set-output name=tag::v${{ github.event.inputs.version }}"
+ echo "tag=v${{ github.event.inputs.version }}" >> "${GITHUB_OUTPUT}"
else
- echo "::set-output name=tag::${{ github.event.inputs.version }}"
+ echo "tag=${{ github.event.inputs.version }}" >> "${GITHUB_OUTPUT}"
fi
upload-release: # Create the draft release and upload the build artifacts.
@@ -800,8 +778,6 @@ jobs:
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' && github.event.inputs.type == 'release' && github.repository == 'netdata/netdata'
needs:
- - updater-check
- - source-build
- artifact-verification-dist
- artifact-verification-static
- normalize-tag
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index 65ad6acbc..799f8d991 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -51,7 +51,7 @@ jobs:
- name: Prepare environment
run: ./packaging/installer/install-required-packages.sh --dont-wait --non-interactive netdata
- name: Build netdata
- run: ./netdata-installer.sh --dont-start-it --disable-telemetry --dont-wait --install /tmp/install --one-time-build
+ run: ./netdata-installer.sh --dont-start-it --disable-telemetry --dont-wait --install-prefix /tmp/install --one-time-build
- name: Check that repo is clean
run: |
git status --porcelain=v1 > /tmp/porcelain
diff --git a/.github/workflows/cloud_regression.yml b/.github/workflows/cloud_regression.yml
index b6e321fe1..01fcdca4d 100644
--- a/.github/workflows/cloud_regression.yml
+++ b/.github/workflows/cloud_regression.yml
@@ -33,12 +33,12 @@ jobs:
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}"
+ echo "netdata_repo=${NETDATA_CUSTOM_REPO}" >> $GITHUB_OUTPUT
+ echo "netdata_branch=${NETDATA_CUSTOM_BRANCH}" >> $GITHUB_OUTPUT
+ echo "netdata_pr_number=${NETDATA_CUSTOM_PR_NUMBER}" >> $GITHUB_OUTPUT
+ echo "netdata_commit_hash=${NETDATA_CUSTOM_COMMIT_HASH}" >> $GITHUB_OUTPUT
- - name: Trigger Cloud Regression
+ - name: Trigger Full Cloud Regression
uses: aurelien-baudet/workflow-dispatch@v2
with:
repo: netdata/test-automation
@@ -52,3 +52,18 @@ jobs:
"custom_netdata_image": "true"
}'
wait-for-completion: false
+
+ - name: Trigger Agent Parent/Child with Cloud Integration tests
+ uses: aurelien-baudet/workflow-dispatch@v2
+ with:
+ repo: netdata/test-automation
+ ref: refs/heads/master
+ workflow: agent_smoke_tests.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: true
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 021376a2d..b2af615e4 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -32,39 +32,39 @@ jobs:
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/codeql') }}" = "true" ]; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo '::notice::Found ci/codeql label, unconditionally running all CodeQL checks.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
else
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
fi
- name: Check for C/C++ changes
id: cpp
run: |
if [ "${{ steps.always.outputs.run }}" = "false" ]; then
if git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*\.[ch](xx|\+\+)?' ; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo '::notice::C/C++ code has changed, need to run CodeQL.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
else
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
fi
- name: Check for python changes
id: python
run: |
if [ "${{ steps.always.outputs.run }}" = "false" ]; then
if git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq 'collectors/python.d.plugin/.*\.py' ; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo '::notice::Python code has changed, need to run CodeQL.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
else
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
fi
analyze-cpp:
@@ -87,7 +87,7 @@ jobs:
- name: Prepare environment
run: ./packaging/installer/install-required-packages.sh --dont-wait --non-interactive netdata
- name: Build netdata
- run: ./netdata-installer.sh --dont-start-it --disable-telemetry --dont-wait --install /tmp/install --one-time-build
+ run: ./netdata-installer.sh --dont-start-it --disable-telemetry --dont-wait --install-prefix /tmp/install --one-time-build
- name: Run CodeQL
uses: github/codeql-action/analyze@v2
with:
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index b7eb53c8e..78a39d5a2 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -129,9 +129,9 @@ jobs:
id: tag
run: |
if echo ${{ github.event.inputs.version }} | grep -qE '^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+$'; then
- echo "::set-output name=tag::v${{ github.event.inputs.version }}"
+ echo "tag=v${{ github.event.inputs.version }}" >> "${GITHUB_OUTPUT}"
else
- echo "::set-output name=tag::${{ github.event.inputs.version }}"
+ echo "tag=${{ github.event.inputs.version }}" >> "${GITHUB_OUTPUT}"
fi
docker-publish:
@@ -151,13 +151,13 @@ jobs:
id: release-tags
if: github.event.inputs.version != 'nightly'
run: |
- echo "tags=netdata/netdata:latest,netdata/netdata:stable,$(.github/scripts/gen-docker-tags.py ${{ needs.normalize-tag.outputs.tag }} '')" \
+ echo "tags=netdata/netdata:latest,netdata/netdata:stable,ghcr.io/netdata/netdata:latest,ghcr.io/netdata/netdata:stable,quay.io/netdata/netdata:latest,quay.io/netdata/netdata:stable,$(.github/scripts/gen-docker-tags.py ${{ needs.normalize-tag.outputs.tag }} '')" \
>> "${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,ghcr.io/netdata/netdata:latest,ghcr.io/netdata/netdata:edge,quay.io/netdata/netdata:latest,quay.io/netdata/netdata:edge" >> "${GITHUB_ENV}"
- name: Mark image as official
id: env
if: github.repository == 'netdata/netdata'
@@ -169,12 +169,28 @@ jobs:
id: buildx
uses: docker/setup-buildx-action@v2
- name: Docker Hub Login
- id: login
+ id: docker-hub-login
if: github.repository == 'netdata/netdata'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
+ - name: GitHub Container Registry Login
+ id: ghcr-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v2
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Quay.io Login
+ id: quay-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v2
+ with:
+ registry: quay.io
+ username: ${{ secrets.NETDATABOT_QUAY_USERNAME }}
+ password: ${{ secrets.NETDATABOT_QUAY_TOKEN }}
- name: Docker Build
id: build
uses: docker/build-push-action@v3
@@ -199,7 +215,9 @@ jobs:
Setup environment: ${{ steps.env.outcome }}
Setup QEMU: ${{ steps.qemu.outcome }}
Setup buildx: ${{ steps.buildx.outcome }}
- Authenticate against DockerHub: ${{ steps.login.outcome }}
+ Login to DockerHub: ${{ steps.docker-hub-login.outcome }}
+ Login to GHCR: ${{ steps.ghcr-login.outcome }}
+ Login to Quay: ${{ steps.quay-login.outcome }}
Build and publish images: ${{ steps.build.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
@@ -221,7 +239,7 @@ jobs:
docker-dbg-publish:
if: github.event_name == 'workflow_dispatch'
- name: Docker Build and Publish (Debuging Image)
+ name: Docker Build and Publish (Debugging Image)
needs:
- docker-test
- normalize-tag
@@ -236,13 +254,13 @@ jobs:
id: release-tags
if: github.event.inputs.version != 'nightly'
run: |
- echo "tags=netdata/netdata-debug:latest,netdata/netdata-debug:stable,$(.github/scripts/gen-docker-tags.py ${{ needs.normalize-tag.outputs.tag }} '-debug')" \
+ echo "tags=netdata/netdata-debug:latest,netdata/netdata-debug:stable,ghcr.io/netdata/netdata-debug:latest,ghcr.io/netdata/netdata-debug:stable,quay.io/netdata/netdata-debug:latest,quay.io/netdata/netdata-debug:stable,$(.github/scripts/gen-docker-tags.py ${{ needs.normalize-tag.outputs.tag }} '-debug')" \
>> "${GITHUB_ENV}"
- name: Determine which tags to use
id: nightly-tags
if: github.event.inputs.version == 'nightly'
run: |
- echo "tags=netdata/netdata-debug:latest,netdata/netdata-debug:edge" >> "${GITHUB_ENV}"
+ echo "tags=netdata/netdata-debug:latest,netdata/netdata-debug:edge,ghcr.io/netdata/netdata-debug:latest,ghcr.io/netdata/netdata-debug:edge,quay.io/netdata/netdata-debug:latest,quay.io/netdata/netdata-debug:edge" >> "${GITHUB_ENV}"
- name: Mark image as official
id: env
if: github.repository == 'netdata/netdata'
@@ -254,12 +272,28 @@ jobs:
id: buildx
uses: docker/setup-buildx-action@v2
- name: Docker Hub Login
- id: login
+ id: docker-hub-login
if: github.repository == 'netdata/netdata'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
+ - name: GitHub Container Registry Login
+ id: ghcr-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v2
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Quay.io Login
+ id: quay-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v2
+ with:
+ registry: quay.io
+ username: ${{ secrets.NETDATABOT_QUAY_USERNAME }}
+ password: ${{ secrets.NETDATABOT_QUAY_TOKEN }}
- name: Docker Build
id: build
uses: docker/build-push-action@v3
@@ -280,13 +314,15 @@ jobs:
SLACK_USERNAME: 'GitHub Actions'
SLACK_MESSAGE: |-
${{ github.repository }}: Failed to build or publish Docker debug images.
- CHeckout: ${{ steps.checkout.outcome }}
+ 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 }}
+ Login to DockerHub: ${{ steps.docker-hub-login.outcome }}
+ Login to GHCR: ${{ steps.ghcr-login.outcome }}
+ Login to Quay: ${{ steps.quay-login.outcome }}
Build and publish images: ${{ steps.build.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 0854080a7..2b8b41fcb 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -2,17 +2,20 @@
# Handles labelling of PR's.
name: Pull Request Labeler
on:
- schedule:
- - cron: '*/10 * * * *'
-env:
- DISABLE_TELEMETRY: 1
+ pull_request_target: null
+concurrency:
+ group: pr-label-${{ github.ref }}
+ cancel-in-progress: true
jobs:
labeler:
+ name: Apply PR Labels
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: write
steps:
- - uses: docker://docker.io/ilyam8/periodic-pr-labeler:v0.1.0
+ - uses: actions/labeler@v4
if: github.repository == 'netdata/netdata'
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- GITHUB_REPOSITORY: ${{ github.repository }}
- LABEL_MAPPINGS_FILE: .github/labeler.yml
+ with:
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"
+ sync-labels: true
diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index ddd8356e4..c99f535ab 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -44,41 +44,15 @@ jobs:
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
- import os
- ALWAYS_RUN_ARCHES = ["amd64", "x86_64"]
- 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 "${{ !contains(github.event.pull_request.labels.*.name, 'run-ci/packaging') }}":
- 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'],
- 'repo_distro': 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: (data['arch_order'].index(k['arch']), k['distro'], k['version']))
- matrix = json.dumps({'include': entries}, sort_keys=True)
- print('Generated Matrix: ' + matrix)
- print('::set-output name=matrix::' + matrix)
+ if [ "${{ github.event_name }}" = "pull_request" ] && \
+ [ "${{ !contains(github.event.pull_request.labels.*.name, 'run-ci/packaging') }}" = "true" ]; then
+ matrix="$(.github/scripts/gen-matrix-packaging.py 1)"
+ else
+ matrix="$(.github/scripts/gen-matrix-packaging.py 0)"
+ fi
+ echo "Generated matrix: ${matrix}"
+ echo "matrix=${matrix}" >> "${GITHUB_OUTPUT}"
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
@@ -117,24 +91,24 @@ jobs:
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"
+ echo "repo=${REPO_PREFIX}" >> "${GITHUB_OUTPUT}"
+ echo "version=${{ github.event.inputs.version }}" >> "${GITHUB_OUTPUT}"
+ echo "retention=365" >> "${GITHUB_OUTPUT}"
;;
"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 "repo=${REPO_PREFIX}-edge" >> "${GITHUB_OUTPUT}"
+ echo "version=$(tr -d 'v' < packaging/version)" >> "${GITHUB_OUTPUT}"
+ echo "retention=30" >> "${GITHUB_OUTPUT}"
;;
*)
- echo "::set-output name=repo::${REPO_PREFIX}-devel"
- echo "::set-output name=version::0.${GITHUB_SHA}"
- echo "::set-output name=retention::30"
+ echo "repo=${REPO_PREFIX}-devel" >> "${GITHUB_OUTPUT}"
+ echo "version=0.${GITHUB_SHA}" >> "${GITHUB_OUTPUT}"
+ echo "retention=30" >> "${GITHUB_OUTPUT}"
;;
esac
else
- echo "::set-output name=version::$(cut -d'-' -f 1 packaging/version | tr -d 'v')"
- echo "::set-output name=retention::0"
+ echo "version=$(cut -d'-' -f 1 packaging/version | tr -d 'v')" >> "${GITHUB_OUTPUT}"
+ echo "retention=0" >> "${GITHUB_OUTPUT}"
fi
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
@@ -186,7 +160,7 @@ jobs:
id: docker-config
shell: bash
run: |
- echo '{"cgroup-parent": "/actions_job", "experimental": true}' | sudo tee /etc/docker/daemon.json 2>/dev/null
+ echo '{"cgroup-parent": "actions-job.slice", "experimental": true}' | sudo tee /etc/docker/daemon.json 2>/dev/null
sudo service docker restart
- name: Fetch images
id: fetch-images
diff --git a/.github/workflows/repoconfig-packages.yml b/.github/workflows/repoconfig-packages.yml
index 824ddd341..f8a3dc406 100644
--- a/.github/workflows/repoconfig-packages.yml
+++ b/.github/workflows/repoconfig-packages.yml
@@ -34,31 +34,10 @@ jobs:
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']
- })
-
- entries.sort(key=lambda k: (k['distro'], k['version']))
- matrix = json.dumps({'include': entries}, sort_keys=True)
- print('Generated Matrix: ' + matrix)
- print('::set-output name=matrix::' + matrix)
+ matrix="$(.github/scripts/gen-matrix-repoconfig.py)"
+ echo "Generated matrix: ${matrix}"
+ echo "matrix=${matrix}" >> "${GITHUB_OUTPUT}"
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
@@ -117,7 +96,7 @@ jobs:
/netdata/packaging/repoconfig/build-${{ matrix.format }}.sh
- name: SSH setup
id: ssh-setup
- if: github.event_name == 'workflow_dispatch'
+ if: github.event_name != 'pull_request' && github.repository == 'netdata/netdata'
continue-on-error: true
uses: shimataro/ssh-key-action@v2
with:
@@ -127,23 +106,17 @@ jobs:
- name: Upload to packages.netdata.cloud
id: package-upload
continue-on-error: true
- if: github.event_name == 'workflow_dispatch'
+ if: github.event_name != 'pull_request' && github.repository == 'netdata/netdata'
run: |
- .github/scripts/package-upload.sh \
- ${{ matrix.repo_distro }} \
- ${{ matrix.arch }} \
- ${{ matrix.format }} \
- netdata/netdata
- .github/scripts/package-upload.sh \
- ${{ matrix.repo_distro }} \
- ${{ matrix.arch }} \
- ${{ matrix.format }} \
- netdata/netdata-edge
- .github/scripts/package-upload.sh \
- ${{ matrix.repo_distro }} \
- ${{ matrix.arch }} \
- ${{ matrix.format }} \
- netdata/netdata-repoconfig
+ for arch in ${{ matrix.arches }}; do
+ for suffix in '' -edge -repoconfig ; do
+ .github/scripts/package-upload.sh \
+ ${{ matrix.pkgclouddistro }} \
+ ${arch} \
+ ${{ matrix.format }} \
+ netdata/netdata${suffix}
+ done
+ done
- name: Upload Packages
id: publish
if: github.event_name != 'pull_request' && github.repository == 'netdata/netdata'
diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml
index 5679b246c..7f12aeecd 100644
--- a/.github/workflows/review.yml
+++ b/.github/workflows/review.yml
@@ -29,56 +29,56 @@ jobs:
id: actionlint
run: |
if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/actionlint') }}" = "true" ]; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '\.github/workflows/.*' ; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo 'GitHub Actions workflows have changed, need to run actionlint.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
- name: Check files for eslint
id: eslint
run: |
if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/eslint') }}" = "true" ]; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -v "web/gui/dashboard" | grep -Eq '.*\.js|node\.d\.plugin\.in' ; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo 'JS files have changed, need to run ESLint.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
- name: Check files for hadolint
id: hadolint
run: |
if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/hadolint') }}" = "true" ]; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*Dockerfile.*' ; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo 'Dockerfiles have changed, need to run Hadolint.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
- name: Check files for shellcheck
id: shellcheck
run: |
if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/shellcheck') }}" = "true" ]; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*\.sh.*' ; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo 'Shell scripts have changed, need to run shellcheck.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
- name: Check files for yamllint
id: yamllint
run: |
if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/yamllint') }}" = "true" ]; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*\.ya?ml|python\.d/.*\.conf' ; then
- echo '::set-output name=run::true'
+ echo "run=true" >> "${GITHUB_OUTPUT}"
echo 'YAML files have changed, need to run yamllint.'
else
- echo '::set-output name=run::false'
+ echo "run=false" >> "${GITHUB_OUTPUT}"
fi
actionlint: