summaryrefslogtreecommitdiffstats
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rw-r--r--.github/CODEOWNERS60
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md30
-rw-r--r--.github/data/build-matrix.json98
-rw-r--r--.github/data/distros.yml155
-rw-r--r--.github/dockerfiles/Dockerfile.build_test2
-rw-r--r--.github/labeler.yml106
-rwxr-xr-x.github/scripts/docker-test.sh4
-rwxr-xr-x.github/scripts/prepare-release-base.sh177
-rwxr-xr-x.github/scripts/run_install_with_dist_file.sh2
-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
23 files changed, 1396 insertions, 377 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 9aae48d57..fb371e4f7 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -5,63 +5,55 @@
* @Ferroin
# Ownership by directory structure
-.travis/ @Ferroin @iigorkarpov @maneamarius @kaskavel @vkalintiris
-.github/ @Ferroin @iigorkarpov @maneamarius @kaskavel @vkalintiris
+.travis/ @Ferroin @iigorkarpov @maneamarius
+.github/ @Ferroin @iigorkarpov @maneamarius
aclk/ @stelfrag @underhood
-backends/ @thiagoftsm @vlvkobal
-backends/graphite/ @thiagoftsm @vlvkobal
-backends/json/ @thiagoftsm @vlvkobal
-backends/opentsdb/ @thiagoftsm @vlvkobal
-backends/prometheus/ @vlvkobal @thiagoftsm
build/ @Ferroin @iigorkarpov @maneamarius
-contrib/debian @Ferroin @iigorkarpov @maneamarius @vkalintiris
-collectors/ @vlvkobal
-collectors/charts.d.plugin/ @ilyam8 @Ferroin
-collectors/freebsd.plugin/ @vlvkobal @thiagoftsm
+contrib/debian @Ferroin @iigorkarpov @maneamarius
+collectors/ @vlvkobal @surajnpn
collectors/ebpf.plugin/ @thiagoftsm @vlvkobal
-collectors/macos.plugin/ @vlvkobal @thiagoftsm
+collectors/charts.d.plugin/ @ilyam8 @surajnpn @Ferroin
+collectors/freebsd.plugin/ @vlvkobal @thiagoftsm @surajnpn
+collectors/macos.plugin/ @vlvkobal @thiagoftsm @surajnpn
collectors/node.d.plugin/ @jacekkolasa
-collectors/node.d.plugin/fronius/ @ccremer
collectors/node.d.plugin/snmp/ @jacekkolasa
-collectors/node.d.plugin/stiebeleltron/ @ccremer
collectors/python.d.plugin/ @ilyam8
collectors/cups.plugin/ @simonnagl @vlvkobal @thiagoftsm
exporting/ @vlvkobal @thiagoftsm
-daemon/ @thiagoftsm
+daemon/ @thiagoftsm @vkalintiris
database/ @thiagoftsm @vkalintiris
docs/ @DShreve2 @kickoke
health/ @thiagoftsm @vlvkobal @vkalintiris
health/health.d/ @thiagoftsm @vlvkobal
health/notifications/ @Ferroin @thiagoftsm
ml/ @andrewm4894 @vkalintiris
-libnetdata/ @thiagofsm
-packaging/ @Ferroin @iigorkarpov @maneamarius @vkalintiris
+libnetdata/ @thiagoftsm @vkalintiris
+packaging/ @Ferroin @iigorkarpov @maneamarius
registry/ @jacekkolasa
streaming/ @thiagoftsm @vlvkobal
-system/ @Ferroin @iigorkarpov @maneamarius @vkalintiris
-tests/ @Ferroin @iigorkarpov @maneamarius @kaskavel @vkalintiris
+system/ @Ferroin @iigorkarpov @maneamarius
+tests/ @Ferroin @iigorkarpov @maneamarius @vkalintiris
web/ @thiagoftsm @vlvkobal @vkalintiris
web/gui/ @jacekkolasa
# Ownership by filetype (overwrites ownership by directory)
-*.am @Ferroin @iigorkarpov @maneamarius @vkalintiris
+*.am @Ferroin @iigorkarpov @maneamarius
*.md @DShreve2 @kickoke
-Dockerfile* @Ferroin @iigorkarpov @maneamarius @vkalintiris
+Dockerfile* @Ferroin @iigorkarpov @maneamarius
# Ownership of specific files
.gitignore @Ferroin @iigorkarpov @maneamarius @vkalintiris
-.travis.yml @Ferroin @iigorkarpov @maneamarius @kaskavel @vkalintiris
-.lgtm.yml @Ferroin @iigorkarpov @maneamarius @vkalintiris
-.eslintrc @Ferroin @iigorkarpov @maneamarius @vkalintiris
-.eslintignore @Ferroin @iigorkarpov @maneamarius @vkalintiris
-.csslintrc @Ferroin @iigorkarpov @maneamarius @vkalintiris
-.codeclimate.yml @Ferroin @iigorkarpov @maneamarius @vkalintiris
-.codacy.yml @Ferroin @iigorkarpov @maneamarius @vkalintiris
-.yamllint.yml @Ferroin @iigorkarpov @maneamarius @vkalintiris
-netdata.spec.in @Ferroin @iigorkarpov @maneamarius @vkalintiris
-netdata-installer.sh @Ferroin @iigorkarpov @maneamarius @vkalintiris
-package.json @jacekkolasa @Ferroin @iigorkarpov @maneamarius @vkalintiris
-packaging/version @netdatabot @Ferroin @iigorkarpov @maneamarius @vkalintiris
+.travis.yml @Ferroin @iigorkarpov @maneamarius
+.lgtm.yml @Ferroin @iigorkarpov @maneamarius
+.eslintrc @Ferroin @iigorkarpov @maneamarius
+.eslintignore @Ferroin @iigorkarpov @maneamarius
+.csslintrc @Ferroin @iigorkarpov @maneamarius
+.codeclimate.yml @Ferroin @iigorkarpov @maneamarius
+.codacy.yml @Ferroin @iigorkarpov @maneamarius
+.yamllint.yml @Ferroin @iigorkarpov @maneamarius
+netdata.spec.in @Ferroin @iigorkarpov @maneamarius
+netdata-installer.sh @Ferroin @iigorkarpov @maneamarius
+packaging/version @netdatabot @Ferroin @iigorkarpov @maneamarius
LICENSE.md @DShreve2 @Ferroin @vkalintiris
-CHANGELOG.md @netdatabot @Ferroin @iigorkarpov @maneamarius @vkalintiris
+CHANGELOG.md @netdatabot @Ferroin @iigorkarpov @maneamarius
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 74f9918e2..829d8e647 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,23 +1,27 @@
+##### Summary
<!--
Describe the change in summary section, including rationale and design decisions.
Include "Fixes #nnn" if you are fixing an existing issue.
-
-In "Test Plan" provide enough detail on how you plan to test this PR so that a reviewer can validate your tests. If our CI covers sufficient tests, then state which tests cover the change.
-
-If you have more information you want to add, write them in "Additional
-Information" section. This is usually used to help others understand your
-motivation behind this change. A step-by-step reproduction of the problem is
-helpful if there is no related issue.
-->
-##### Summary
-
##### Test Plan
-<!---
-Provide enough detail so that your reviewer can understand which test-cases you
-have covered, and recreate them if necessary. If sufficient tests are covered
-by our CI, then state which tests cover the change.
+<!--
+Provide enough detail so that your reviewer can understand which test cases you
+have covered, and recreate them if necessary. If our CI covers sufficient tests, then state which tests cover the change.
-->
##### Additional Information
+<!-- This is usually used to help others understand your
+motivation behind this change. A step-by-step reproduction of the problem is
+helpful if there is no related issue. -->
+
+<details> <summary>For users: How does this change affect me?</summary>
+ <!--
+Describe the PR affects users:
+- Which area of Netdata is affected by the change?
+- Can they see the change or is it an under the hood? If they can see it, where?
+- How is the user impacted by the change?
+- What are there any benefits of the change?
+-->
+</details>
diff --git a/.github/data/build-matrix.json b/.github/data/build-matrix.json
deleted file mode 100644
index 6ceb9fa54..000000000
--- a/.github/data/build-matrix.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
- "include": [
- {
- "distro": "alpine:edge",
- "artifact_key": "alpine-edge",
- "pre": "apk add -U bash",
- "rmjsonc": "apk del json-c-dev"
- },
- {
- "distro": "alpine:3.14",
- "artifact_key": "alpine-3.14",
- "pre": "apk add -U bash",
- "rmjsonc": "apk del json-c-dev"
- },
- {
- "distro": "alpine:3.13",
- "artifact_key": "alpine-3.13",
- "pre": "apk add -U bash",
- "rmjsonc": "apk del json-c-dev"
- },
- {
- "distro": "alpine:3.12",
- "artifact_key": "alpine-3.12",
- "pre": "apk add -U bash",
- "rmjsonc": "apk del json-c-dev"
- },
- {
- "distro": "archlinux:latest",
- "artifact_key": "archlinux",
- "pre": "pacman --noconfirm -Syu && pacman --noconfirm -Sy grep libffi"
- },
- {
- "distro": "centos:7",
- "artifact_key": "centos7"
- },
- {
- "distro": "rockylinux/rockylinux:8",
- "artifact_key": "rockylinux8",
- "rmjsonc": "dnf remove -y json-c-devel"
- },
- {
- "distro": "debian:11",
- "artifact_key": "debian11",
- "pre": "apt-get update",
- "rmjsonc": "apt-get remove -y libjson-c-dev"
- },
- {
- "distro": "debian:10",
- "artifact_key": "debian10",
- "pre": "apt-get update",
- "rmjsonc": "apt-get remove -y libjson-c-dev"
- },
- {
- "distro": "debian:9",
- "artifact_key": "debian9",
- "pre": "apt-get update",
- "rmjsonc": "apt-get remove -y libjson-c-dev"
- },
- {
- "distro": "fedora:35",
- "artifact_key": "fedora35",
- "rmjsonc": "dnf remove -y json-c-devel"
- },
- {
- "distro": "fedora:34",
- "artifact_key": "fedora34",
- "rmjsonc": "dnf remove -y json-c-devel"
- },
- {
- "distro": "opensuse/leap:15.3",
- "artifact_key": "opensuse15.3",
- "rmjsonc": "zypper rm -y libjson-c-devel"
- },
- {
- "distro": "oraclelinux:8",
- "artifact_key": "oraclelinux8",
- "rmjsonc": "dnf remove -y json-c-devel"
- },
- {
- "distro": "ubuntu:21.10",
- "artifact_key": "ubuntu21.10",
- "pre": "rm -f /etc/apt/apt.conf.d/docker && apt-get update",
- "rmjsonc": "apt-get remove -y libjson-c-dev"
- },
- {
- "distro": "ubuntu:20.04",
- "artifact_key": "ubuntu20.04",
- "pre": "apt-get update",
- "rmjsonc": "apt-get remove -y libjson-c-dev"
- },
- {
- "distro": "ubuntu:18.04",
- "artifact_key": "ubuntu18.04",
- "pre": "apt-get update",
- "rmjsonc": "apt-get remove -y libjson-c-dev"
- }
- ]
-}
diff --git a/.github/data/distros.yml b/.github/data/distros.yml
new file mode 100644
index 000000000..8d58f4d23
--- /dev/null
+++ b/.github/data/distros.yml
@@ -0,0 +1,155 @@
+# This defines the full set of distros we run CI on.
+---
+platform_map: # map packaging architectures to docker platforms
+ i386: linux/i386
+ amd64: linux/amd64
+ armhf: linux/arm/v7
+ arm64: linux/arm64/v8
+include:
+ - &alpine
+ distro: alpine
+ version: edge
+ env_prep: |
+ apk add -U bash
+ jsonc_removal: |
+ apk del json-c-dev
+ - <<: *alpine
+ version: "3.15"
+ - <<: *alpine
+ version: "3.14"
+ - <<: *alpine
+ version: "3.13"
+ - <<: *alpine
+ version: "3.12"
+
+ - distro: archlinux
+ version: latest
+ env_prep: |
+ pacman --noconfirm -Syu && pacman --noconfirm -Sy grep libffi
+
+ - distro: rockylinux
+ version: "8"
+ base_image: rockylinux/rockylinux
+ jsonc_removal: |
+ dnf remove -y json-c-devel
+ packages:
+ type: rpm
+ repo_distro: el/8
+ arches:
+ - amd64
+ - arm64
+ - distro: centos
+ version: "7"
+ packages:
+ type: rpm
+ repo_distro: el/7
+ arches:
+ - amd64
+
+ - &debian
+ distro: debian
+ version: "11"
+ env_prep: |
+ apt-get update
+ jsonc_removal: |
+ apt-get purge -y libjson-c-dev
+ packages: &debian_packages
+ type: deb
+ repo_distro: debian/bullseye
+ arches:
+ - i386
+ - amd64
+ - armhf
+ - arm64
+ - <<: *debian
+ version: "10"
+ packages:
+ <<: *debian_packages
+ repo_distro: debian/buster
+ - <<: *debian
+ version: "9"
+ packages:
+ <<: *debian_packages
+ repo_distro: debian/stretch
+
+ - &fedora
+ distro: fedora
+ version: "36"
+ jsonc_removal: |
+ dnf remove -y json-c-devel
+ packages: &fedora_packages
+ type: rpm
+ repo_distro: fedora/36
+ arches:
+ - amd64
+ - armhf
+ - arm64
+ - <<: *fedora
+ version: "35"
+ packages:
+ <<: *fedora_packages
+ repo_distro: fedora/35
+ - <<: *fedora
+ version: "34"
+ packages:
+ <<: *fedora_packages
+ repo_distro: fedora/34
+
+ - &opensuse
+ distro: opensuse
+ version: "15.3"
+ base_image: opensuse/leap
+ jsonc_removal: |
+ zypper rm -y libjson-c-devel
+ packages:
+ type: rpm
+ repo_distro: opensuse/15.3
+ arches:
+ - amd64
+ - arm64
+
+ - distro: oraclelinux
+ version: "8"
+ jsonc_removal: |
+ dnf remove -y json-c-devel
+ packages:
+ type: rpm
+ repo_distro: ol/8
+ arches:
+ - amd64
+ - arm64
+
+ - &ubuntu
+ distro: ubuntu
+ version: "22.04"
+ env_prep: |
+ rm -f /etc/apt/apt.conf.d/docker && apt-get update
+ jsonc_removal: |
+ apt-get remove -y libjson-c-dev
+ packages: &ubuntu_packages
+ type: deb
+ repo_distro: ubuntu/jammy
+ arches:
+ - amd64
+ - armhf
+ - arm64
+ - <<: *ubuntu
+ version: "21.10"
+ packages:
+ <<: *ubuntu_packages
+ repo_distro: ubuntu/impish
+ - <<: *ubuntu
+ version: "20.04"
+ packages:
+ <<: *ubuntu_packages
+ repo_distro: ubuntu/focal
+ - <<: *ubuntu
+ version: "18.04"
+ packages:
+ <<: *ubuntu_packages
+ repo_distro: ubuntu/bionic
+ arches:
+ - i386
+ - amd64
+ - armhf
+ - arm64
diff --git a/.github/dockerfiles/Dockerfile.build_test b/.github/dockerfiles/Dockerfile.build_test
index 50cfdee06..c275d61d6 100644
--- a/.github/dockerfiles/Dockerfile.build_test
+++ b/.github/dockerfiles/Dockerfile.build_test
@@ -6,7 +6,7 @@ ARG PRE
ENV PRE=${PRE}
ARG RMJSONC
ENV RMJSONC=${RMJSONC}
-ENV DO_NOT_TRACK=1
+ENV DISABLE_TELEMETRY=1
ENV GITHUB_ACTIONS=true
RUN echo "${PRE}" > /prep-cmd.sh && \
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 4c0d857de..d576b937d 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -15,10 +15,6 @@ ACLK:
- aclk/**/*
- mqtt_websockets
-area/backends:
- - backends/*
- - backends/**/*
-
area/claim:
- claim/*
@@ -42,10 +38,6 @@ area/ci:
- .github/*
- .github/**/*
-area/collectors:
- - collectors/*
- - collectors/**/*
-
area/daemon:
- daemon/*
- daemon/**/*
@@ -60,16 +52,106 @@ area/docs:
- diagrams/*
- diagrams/**/*
-area/external/python:
- - collectors/python.d.plugin/*
- - collectors/python.d.plugin/**/*
+# -----------------collectors----------------------
+
+area/collectors:
+ - collectors/*
+ - collectors/**/*
+
+collectors/plugins.d:
+ - collectors/plugins.d/*
+ - collectors/plugins.d/**/*
+
+collectors/apps:
+ - collectors/apps.plugin/*
+ - collectors/apps.plugin/**/*
+
+collectors/cgroups:
+ - collectors/cgroups.plugin/*
+ - collectors/cgroups.plugin/**/*
-area/external:
+collectors/charts.d:
- collectors/charts.d.plugin/*
- collectors/charts.d.plugin/**/*
+
+collectors/cups:
+ - collectors/cups.plugin/*
+ - collectors/cups.plugin/**/*
+
+collectors/diskspace:
+ - collectors/diskspace.plugin/*
+ - collectors/diskspace.plugin/**/*
+
+collectors/ebpf:
+ - collectors/ebpf.plugin/*
+ - collectors/ebpf.plugin/**/*
+
+collectors/fping:
+ - collectors/fping.plugin/*
+ - collectors/fping.plugin/**/*
+
+collectors/freebsd:
+ - collectors/freebsd.plugin/*
+ - collectors/freebsd.plugin/**/*
+
+collectors/freeipmi:
+ - collectors/freeipmi.plugin/*
+ - collectors/freeipmi.plugin/**/*
+
+collectors/idlejitter:
+ - collectors/idlejitter.plugin/*
+ - collectors/idlejitter.plugin/**/*
+
+collectors/ioping:
+ - collectors/ioping.plugin/*
+ - collectors/ioping.plugin/**/*
+
+collectors/macos:
+ - collectors/macos.plugin/*
+ - collectors/macos.plugin/**/*
+
+collectors/nfacct:
+ - collectors/nfacct.plugin/*
+ - collectors/nfacct.plugin/**/*
+
+collectors/node.d:
- collectors/node.d.plugin/*
- collectors/node.d.plugin/**/*
+collectors/perf:
+ - collectors/perf.plugin/*
+ - collectors/perf.plugin/**/*
+
+collectors/proc:
+ - collectors/proc.plugin/*
+ - collectors/proc.plugin/**/*
+
+collectors/python.d:
+ - collectors/python.d.plugin/*
+ - collectors/python.d.plugin/**/*
+
+collectors/slabinfo:
+ - collectors/slabinfo.plugin/*
+ - collectors/slabinfo.plugin/**/*
+
+collectors/statsd:
+ - collectors/statsd.plugin/*
+ - collectors/statsd.plugin/**/*
+
+collectors/tc:
+ - collectors/tc.plugin/*
+ - collectors/tc.plugin/**/*
+
+collectors/timex:
+ - collectors/timex.plugin/*
+ - collectors/timex.plugin/**/*
+
+collectors/xenstat:
+ - collectors/xenstat.plugin/*
+ - collectors/xenstat.plugin/**/*
+
+# ----------------/collectors----------------------
+
area/health:
- health/*
- health/**/*
diff --git a/.github/scripts/docker-test.sh b/.github/scripts/docker-test.sh
index 795711b1a..22821d17e 100755
--- a/.github/scripts/docker-test.sh
+++ b/.github/scripts/docker-test.sh
@@ -33,7 +33,9 @@ wait_for() {
printf "OK\n"
}
-apt-get update && apt-get upgrade -y && apt get install -y netcat
+if [ -z "$(command -v nc 2>/dev/null)" ] && [ -z "$(command -v netcat 2>/dev/null)" ]; then
+ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y netcat
+fi
docker run -d --name=netdata \
-p 19999:19999 \
diff --git a/.github/scripts/prepare-release-base.sh b/.github/scripts/prepare-release-base.sh
new file mode 100755
index 000000000..cb6be8e7c
--- /dev/null
+++ b/.github/scripts/prepare-release-base.sh
@@ -0,0 +1,177 @@
+#!/bin/sh
+
+set -e
+
+REPO="${1}"
+EVENT_NAME="${2}"
+EVENT_TYPE="${3}"
+EVENT_VERSION="${4}"
+
+##############################################################
+# Version validation functions
+
+check_version_format() {
+ if ! echo "${EVENT_VERSION}" | grep -qE '^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+$'; then
+ echo "::error::The supplied version (${EVENT_VERSION}) is not a valid version string."
+ return 1
+ fi
+}
+
+patch_is_zero() {
+ if ! echo "${EVENT_VERSION}" | grep -qE '^v[[:digit:]]+\.[[:digit:]]+\.0$'; then
+ echo "::error::The patch number for a ${EVENT_TYPE} build must be 0."
+ return 1
+ fi
+}
+
+minor_is_zero() {
+ if ! echo "${EVENT_VERSION}" | grep -qE '^v[[:digit:]]+\.0'; then
+ echo "::error::The minor version number for a ${EVENT_TYPE} build must be 0."
+ return 1
+ fi
+}
+
+major_matches() {
+ current_major="$(cut -f 1 -d '-' packaging/version | cut -f 1 -d '.' | cut -f 2 -d 'v')"
+ target_major="$(echo "${EVENT_VERSION}" | cut -f 1 -d '.' | cut -f 2 -d 'v')"
+
+ if [ "${target_major}" != "${current_major}" ]; then
+ echo "::error::Major version mismatch, expected ${current_major} but got ${target_major}."
+ return 1
+ fi
+}
+
+minor_matches() {
+ current_minor="$(cut -f 1 -d '-' packaging/version | cut -f 2 -d '.')"
+ target_minor="$(echo "${EVENT_VERSION}" | cut -f 2 -d '.')"
+
+ if [ "${target_minor}" != "${current_minor}" ]; then
+ echo "::error::Minor version mismatch, expected ${current_minor} but got ${target_minor}."
+ return 1
+ fi
+}
+
+check_for_existing_tag() {
+ if git tag | grep -qE "^${EVENT_VERSION}$"; then
+ echo "::error::A tag for version ${EVENT_VERSION} already exists."
+ return 1
+ fi
+}
+
+check_newer_major_version() {
+ current="$(cut -f 1 -d '-' packaging/version | cut -f 1 -d '.' | cut -f 2 -d 'v')"
+ target="$(echo "${EVENT_VERSION}" | cut -f 1 -d '.' | cut -f 2 -d 'v')"
+
+ if [ "${target}" -le "${current}" ]; then
+ echo "::error::Version ${EVENT_VERSION} is not newer than the current version."
+ return 1
+ fi
+}
+
+check_newer_minor_version() {
+ current="$(cut -f 1 -d '-' packaging/version | cut -f 2 -d '.')"
+ target="$(echo "${EVENT_VERSION}" | cut -f 2 -d '.')"
+
+ if [ "${target}" -le "${current}" ]; then
+ echo "::error::Version ${EVENT_VERSION} is not newer than the current version."
+ return 1
+ fi
+}
+
+check_newer_patch_version() {
+ current="$(cut -f 1 -d '-' packaging/version | cut -f 3 -d '.')"
+ target="$(echo "${EVENT_VERSION}" | cut -f 3 -d '.')"
+
+ if [ "${target}" -le "${current}" ]; then
+ echo "::error::Version ${EVENT_VERSION} is not newer than the current version."
+ return 1
+ fi
+}
+
+##############################################################
+# Core logic
+
+git config user.name "netdatabot"
+git config user.email "bot@netdata.cloud"
+
+if [ "${REPO}" != "netdata/netdata" ]; then
+ echo "::notice::Not running in the netdata/netdata repository, not queueing a release build."
+ echo "::set-output name=run::false"
+elif [ "${EVENT_NAME}" = 'schedule' ] || [ "${EVENT_TYPE}" = 'nightly' ]; then
+ echo "::notice::Preparing a nightly release build."
+ LAST_TAG=$(git describe --abbrev=0 --tags)
+ COMMITS_SINCE_RELEASE=$(git rev-list "${LAST_TAG}"..HEAD --count)
+ NEW_VERSION="${LAST_TAG}-$((COMMITS_SINCE_RELEASE + 1))-nightly"
+ LAST_VERSION_COMMIT="$(git rev-list -1 HEAD packaging/version)"
+ HEAD_COMMIT="$(git rev-parse HEAD)"
+ if [ "${EVENT_NAME}" = 'schedule' ] && [ "${LAST_VERSION_COMMIT}" = "${HEAD_COMMIT}" ] && grep -qE '.*-nightly$' packaging/version; then
+ echo "::notice::No commits since last nightly build, not publishing a new nightly build."
+ echo "::set-output name=run::false"
+ else
+ echo "${NEW_VERSION}" > packaging/version || exit 1
+ echo "::set-output name=run::true"
+ echo "::set-output name=message::Update changelog and version for nightly build: ${NEW_VERSION}."
+ echo "::set-output name=ref::master"
+ echo "::set-output name=type::nightly"
+ echo "::set-output name=branch::master"
+ echo "::set-output name=version::nightly"
+ fi
+elif [ "${EVENT_TYPE}" = 'patch' ] && [ "${EVENT_VERSION}" != "nightly" ]; then
+ echo "::notice::Preparing a patch release build."
+ check_version_format || exit 1
+ check_for_existing_tag || exit 1
+ branch_name="$(echo "${EVENT_VERSION}" | cut -f 1-2 -d '.')"
+ if [ -z "$(git branch --list "${branch_name}")" ]; then
+ echo "::error::Could not find a branch for the ${branch_name}.x release series."
+ exit 1
+ fi
+ git checkout "${branch_name}"
+ minor_matches || exit 1
+ major_matches || exit 1
+ check_newer_patch_number || exit 1
+ echo "${EVENT_VERSION}" > packaging/version || exit 1
+ echo "::set-output name=run::true"
+ echo "::set-output name=message::Patch release ${EVENT_VERSION}."
+ echo "::set-output name=ref::${EVENT_VERSION}"
+ echo "::set-output name=type::release"
+ echo "::set-output name=branch::${branch_name}"
+ echo "::set-output name=version::$(tr -d 'v' < packaging/version)"
+elif [ "${EVENT_TYPE}" = 'minor' ] && [ "${EVENT_VERSION}" != "nightly" ]; then
+ echo "::notice::Preparing a minor release build."
+ check_version_format || exit 1
+ patch_is_zero || exit 1
+ major_matches || exit 1
+ check_newer_minor_version || exit 1
+ check_for_existing_tag || exit 1
+ branch_name="$(echo "${EVENT_VERSION}" | cut -f 1-2 -d '.')"
+ if [ -n "$(git branch --list "${branch_name}")" ]; then
+ echo "::error::A branch named ${branch_name} already exists in the repository."
+ exit 1
+ fi
+ git branch "${branch_name}"
+ git checkout "${branch_name}"
+ echo "${EVENT_VERSION}" > packaging/version || exit 1
+ echo "::set-output name=run::true"
+ echo "::set-output name=message::Minor release ${EVENT_VERSION}."
+ echo "::set-output name=ref::${EVENT_VERSION}"
+ echo "::set-output name=type::release"
+ echo "::set-output name=branch::${branch_name}"
+ echo "::set-output name=version::$(tr -d 'v' < packaging/version)"
+elif [ "${EVENT_TYPE}" = 'major' ] && [ "${EVENT_VERSION}" != "nightly" ]; then
+ echo "::notice::Preparing a major release build."
+ check_version_format || exit 1
+ minor_is_zero || exit 1
+ patch_is_zero || exit 1
+ check_newer_major_version || exit 1
+ check_for_existing_tag || exit 1
+ echo "${EVENT_VERSION}" > packaging/version || exit 1
+ echo "::set-output name=run::true"
+ echo "::set-output name=message::Major release ${EVENT_VERSION}"
+ echo "::set-output name=ref::${EVENT_VERSION}"
+ echo "::set-output name=type::release"
+ echo "::set-output name=branch::master"
+ echo "::set-output name=version::$(tr -d 'v' < packaging/version)"
+else
+ echo '::error::Unrecognized release type or invalid version.'
+ exit 1
+fi
diff --git a/.github/scripts/run_install_with_dist_file.sh b/.github/scripts/run_install_with_dist_file.sh
index 18cf80927..83559f267 100755
--- a/.github/scripts/run_install_with_dist_file.sh
+++ b/.github/scripts/run_install_with_dist_file.sh
@@ -29,7 +29,7 @@ printf >&2 "Entering %s and starting docker run ..." "${distdir}"
pushd "${distdir}" || exit 1
docker run \
- -e DO_NOT_TRACK=1 \
+ -e DISABLE_TELEMETRY=1 \
-v "${PWD}:/netdata" \
-w /netdata \
"ubuntu:latest" \
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()