@cryptotaxi247 / netdata-1 / commits / 00836aec8

Final migration of release code off of Travis CI. (#12239)

* Initial version of release workflow. * Remove release code from Travis config. Final removal of the Travis CI code will be handled separately. * Do not push changes if not running in GHA. This simplifies testing the core logic locally. * Remove remote branch existence checking. It is not strictly nesescary for the expected execution context, and it makes it harder to test locally safely. * Fixed some minor oversights. * Make git config repo local to make testing easier.

Austin S. Hemmelgarn committed Mar 9, 2022 at 08:30 UTC 00836aec828d6f4f2a4d4e38f160c0640d4e06e1
5 files changed +387 -88
.github/scripts/prepare-changelog.sh new
+215
@@ -0,0 +1,215 @@
1 +#!/bin/sh
2 +
3 +set -e
4 +
5 +REPO="${1}"
6 +EVENT_NAME="${2}"
7 +EVENT_TYPE="${3}"
8 +EVENT_VERSION="${4}"
9 +
10 +##############################################################
11 +# Utility functions
12 +
13 +generate_changelog() {
14 + echo "::group::Generating changelog"
15 +
16 + if [ -n "${1}" ]; then
17 + OPTS="--future-release ${1}"
18 + fi
19 +
20 + # shellcheck disable=SC2086
21 + docker run -it -v "$(pwd)":/project markmandel/github-changelog-generator:latest \
22 + --user "netdata" \
23 + --project "netdata" \
24 + --token "${GITHUB_TOKEN}" \
25 + --since-tag "v1.10.0" \
26 + --unreleased-label "**Next release**" \
27 + --no-issues \
28 + --exclude-labels "stale,duplicate,question,invalid,wontfix,discussion,no changelog" \
29 + --max-issues 500 \
30 + --bug-labels IGNOREBUGS ${OPTS}
31 +
32 + echo "::endgroup::"
33 +}
34 +
35 +commit_changes() {
36 + branch="${1}"
37 + msg="${2}"
38 + tag="${3}"
39 +
40 + echo "::group::Committing changelog and version file and pushing changes."
41 +
42 + git checkout "${branch}"
43 + git add packaging/version CHANGELOG.md
44 + git commit -m "[ci skip] ${msg}"
45 + if [ -n "${tag}" ]; then
46 + git tag "${tag}"
47 + opts="--tags"
48 + fi
49 +
50 + if [ -n "${GITHUB_ACTIONS}" ]; then
51 + git push -u origin ${opts} "${branch}"
52 + else
53 + echo "Not pushing changes as we are not running in GitHub Actions."
54 + echo "Would have pushed ${branch} to origin, with additional options '${opts}'"
55 + fi
56 +
57 + echo "::endgroup::"
58 +}
59 +
60 +##############################################################
61 +# Version validation functions
62 +
63 +check_version_format() {
64 + if ! echo "${EVENT_VERSION}" | grep -qE '^v[[::digit::]]+\.[[::digit::]]+\.[[::digit::]]+$'; then
65 + echo "::error::The supplied version (${EVENT_VERSION}) is not a valid version string."
66 + return 1
67 + fi
68 +}
69 +
70 +patch_is_zero() {
71 + if ! echo "${EVENT_VERSION}" | grep -qE '^v[[::digit::]]+\.[[::digit::]]+\.0$'; then
72 + echo "::error::The patch number for a ${EVENT_TYPE} build must be 0."
73 + return 1
74 + fi
75 +}
76 +
77 +minor_is_zero() {
78 + if ! echo "${EVENT_VERSION}" | grep -qE '^v[[::digit::]]+\.0'; then
79 + echo "::error::The minor version number for a ${EVENT_TYPE} build must be 0."
80 + return 1
81 + fi
82 +}
83 +
84 +major_matches() {
85 + current_major="$(cut -f 1 -d '-' packaging/version | cut -f 1 -d '.' | cut -f 2 -d 'v')"
86 + target_major="$(echo "${EVENT_VERSION}" | cut -f 1 -d '.' | cut -f 2 -d 'v')"
87 +
88 + if [ "${target_major}" != "${current_major}" ]; then
89 + echo "::error::Major version mismatch, expected ${current_major} but got ${target_major}."
90 + return 1
91 + fi
92 +}
93 +
94 +minor_matches() {
95 + current_minor="$(cut -f 1 -d '-' packaging/version | cut -f 2 -d '.')"
96 + target_minor="$(echo "${EVENT_VERSION}" | cut -f 2 -d '.')"
97 +
98 + if [ "${target_minor}" != "${current_minor}" ]; then
99 + echo "::error::Minor version mismatch, expected ${current_minor} but got ${target_minor}."
100 + return 1
101 + fi
102 +}
103 +
104 +check_for_existing_tag() {
105 + if git tag | grep -qE "^${EVENT_VERSION}$"; then
106 + echo "::error::A tag for version ${EVENT_VERSION} already exists."
107 + return 1
108 + fi
109 +}
110 +
111 +check_newer_major_version() {
112 + current="$(cut -f 1 -d '-' packaging/version | cut -f 1 -d '.' | cut -f 2 -d 'v')"
113 + target="$(echo "${EVENT_VERSION}" | cut -f 1 -d '.' | cut -f 2 -d 'v')"
114 +
115 + if [ "${target}" -le "${current}" ]; then
116 + echo "::error::Version ${EVENT_VERSION} is not newer than the current version."
117 + return 1
118 + fi
119 +}
120 +
121 +check_newer_minor_version() {
122 + current="$(cut -f 1 -d '-' packaging/version | cut -f 2 -d '.')"
123 + target="$(echo "${EVENT_VERSION}" | cut -f 2 -d '.')"
124 +
125 + if [ "${target}" -le "${current}" ]; then
126 + echo "::error::Version ${EVENT_VERSION} is not newer than the current version."
127 + return 1
128 + fi
129 +}
130 +
131 +check_newer_patch_version() {
132 + current="$(cut -f 1 -d '-' packaging/version | cut -f 3 -d '.')"
133 + target="$(echo "${EVENT_VERSION}" | cut -f 3 -d '.')"
134 +
135 + if [ "${target}" -le "${current}" ]; then
136 + echo "::error::Version ${EVENT_VERSION} is not newer than the current version."
137 + return 1
138 + fi
139 +}
140 +
141 +##############################################################
142 +# Core logic
143 +
144 +git config user.name "netdatabot"
145 +git config user.email "bot@netdata.cloud"
146 +
147 +if [ "${REPO}" != "netdata/netdata" ]; then
148 + echo "::notice::Not running in the netdata/netdata repository, not queueing a release build."
149 + echo "::set-output name=run::false"
150 +elif [ "${EVENT_NAME}" = 'schedule' ] || [ "${EVENT_TYPE}" = 'nightly' ]; then
151 + echo "::notice::Preparing a nightly release build."
152 + LAST_TAG=$(git describe --abbrev=0 --tags)
153 + COMMITS_SINCE_RELEASE=$(git rev-list "${LAST_TAG}"..HEAD --count)
154 + NEW_VERSION="${LAST_TAG}-$((COMMITS_SINCE_RELEASE + 1))-nightly"
155 + generate_changelog "" || exit 1
156 + echo "${NEW_VERSION}" > packaging/version || exit 1
157 + commit_changes master "Update changelog and version for nightly build: ${NEW_VERSION}."
158 + echo "::set-output name=run::true"
159 + echo "::set-output name=ref::master"
160 +elif [ "${EVENT_TYPE}" = 'patch' ] && [ "${EVENT_VERSION}" != "nightly" ]; then
161 + echo "::notice::Preparing a patch release build."
162 + check_version_format || exit 1
163 + check_for_existing_tag || exit 1
164 + branch_name="$(echo "${EVENT_VERSION}" | cut -f 1-2 -d '.')"
165 + if [ -z "$(git branch --list "${branch_name}")" ]; then
166 + echo "::error::Could not find a branch for the ${branch_name}.x release series."
167 + exit 1
168 + fi
169 + git checkout "${branch_name}"
170 + minor_matches || exit 1
171 + major_matches || exit 1
172 + check_newer_patch_number || exit 1
173 + generate_changelog "${EVENT_VERSION}" || exit 1
174 + echo "${EVENT_VERSION}" > packaging/version || exit 1
175 + commit_changes "${branch_name}" "Patch release ${EVENT_VERSION}." "${EVENT_VERSION}" || exit 1
176 + echo "::set-output name=run::true"
177 + echo "::set-output name=ref::${EVENT_VERSION}"
178 +elif [ "${EVENT_TYPE}" = 'minor' ] && [ "${EVENT_VERSION}" != "nightly" ]; then
179 + echo "::notice::Preparing a minor release build."
180 + check_version_format || exit 1
181 + patch_is_zero || exit 1
182 + major_matches || exit 1
183 + check_newer_minor_version || exit 1
184 + check_for_existing_tag || exit 1
185 + branch_name="$(echo "${EVENT_VERSION}" | cut -f 1-2 -d '.')"
186 + if [ -n "$(git branch --list "${branch_name}")" ]; then
187 + echo "::error::A branch named ${branch_name} already exists in the repository."
188 + exit 1
189 + fi
190 + git branch "${branch_name}"
191 + git checkout "${branch_name}"
192 + generate_changelog "${EVENT_VERSION}" || exit 1
193 + echo "${EVENT_VERSION}" > packaging/version || exit 1
194 + commit_changes "${branch_name}" "Minor release ${EVENT_VERSION}." "${EVENT_VERSION}" || exit 1
195 + echo "::set-output name=run::true"
196 + echo "::set-output name=ref::${EVENT_VERSION}"
197 +elif [ "${EVENT_TYPE}" = 'major' ] && [ "${EVENT_VERSION}" != "nightly" ]; then
198 + echo "::notice::Preparing a major release build."
199 + check_version_format || exit 1
200 + minor_is_zero || exit 1
201 + patch_is_zero || exit 1
202 + check_newer_major_version || exit 1
203 + check_for_existing_tag || exit 1
204 + generate_changelog "${EVENT_VERSION}" || exit 1
205 + echo "${EVENT_VERSION}" > packaging/version || exit 1
206 + commit_changes master "Major release ${EVENT_VERSION}." "${EVENT_VERSION}" || exit 1
207 + echo "::set-output name=run::true"
208 + echo "::set-output name=ref::${EVENT_VERSION}"
209 +else
210 + echo '::error::Unrecognized release type or invalid version.'
211 + exit 1
212 +fi
213 +
214 +# shellcheck disable=SC2002
215 +echo "::set-output name=version::$(cat packaging/version | sed 's/^v//' packaging/version)"
.github/workflows/build.yml
+1 -1
@@ -17,7 +17,7 @@ on:
17 default: nightly
18 required: true
19 concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type.
20 - group: release-${{ github.ref }}-${{ github.event_name }}
20 + group: build-${{ github.ref }}-${{ github.event_name }}
21 cancel-in-progress: true
22 jobs:
23 build-dist: # Build the distribution tarball and store it as an artifact.
.github/workflows/release.yml new
+170
@@ -0,0 +1,170 @@
1 +---
2 +# Workflow for triggering a release.
3 +name: Release
4 +on:
5 + schedule:
6 + - cron: '0 0 * * *'
7 + workflow_dispatch: # Dispatch runs build and validate, then push to the appropriate storage location.
8 + inputs:
9 + type:
10 + description: Build Type
11 + default: nightly
12 + required: true
13 + version:
14 + description: Version Tag
15 + default: nightly
16 + required: true
17 +concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type.
18 + group: release-${{ github.ref }}-${{ github.event_name }}
19 + cancel-in-progress: true
20 +jobs:
21 + update-changelogs:
22 + name: Update changelog
23 + runs-on: ubuntu-latest
24 + outputs:
25 + ref: ${{ steps.target.outputs.ref }}
26 + version: ${{ steps.target.outputs.version }}
27 + run: ${{ steps.target.outputs.run }}
28 + steps:
29 + - name: Checkout
30 + id: checkout
31 + uses: actions/checkout@v2
32 + with:
33 + fetch-depth: 0
34 + submodules: recursive
35 + - name: Login to DockerHub # Needed to avoid ratelimits in the script we run in the next step.
36 + id: login
37 + uses: docker/login-action@v1
38 + with:
39 + username: ${{ secrets.DOCKER_HUB_USERNAME }}
40 + password: ${{ secrets.DOCKER_HUB_TOKEN }}
41 + - name: Prepare base ref
42 + id: target
43 + env:
44 + GITHUB_TOKEN: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
45 + run: >-
46 + .github/scripts/prepare-changelog.sh \
47 + ${{ github.repository }} \
48 + ${{ github.event_name }} \
49 + ${{ github.event.inputs.type }} \
50 + ${{ github.event.inputs.version }}
51 + - name: Failure Notification
52 + uses: rtCamp/action-slack-notify@v2
53 + env:
54 + SLACK_COLOR: 'danger'
55 + SLACK_FOOTER: ''
56 + SLACK_ICON_EMOJI: ':github-actions:'
57 + SLACK_TITLE: 'Failed to prepare changelog:'
58 + SLACK_USERNAME: 'GitHub Actions'
59 + SLACK_MESSAGE: >-
60 + ${{ github.repository }}: Failed to prepare changelog.
61 + Checkout: ${{ steps.checkout.outcome }}
62 + Login to DockerHub: ${{ steps.login.outcome }}
63 + Prepare base ref: ${{ steps.target.outcome }}
64 + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
65 + if: failure()
66 +
67 + trigger-artifacts:
68 + name: Trigger artifact builds
69 + runs-on: ubuntu-latest
70 + needs: update-changelogs
71 + if: ${{ needs.update-changelogs.outputs.run }} == 'true'
72 + steps:
73 + - name: Checkout
74 + id: checkout
75 + uses: actions/checkout@v2
76 + with:
77 + ref: ${{ needs.update-changelogs.outputs.ref }}
78 + - name: Trigger build
79 + id: trigger
80 + uses: benc-uk/workflow-dispatch@v1
81 + with:
82 + token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
83 + repo: ${{ github.repository }}
84 + workflow: Build
85 + ref: ${{ needs.update-changelogs.outputs.ref }}
86 + inputs: '{"agent_version": "${{ needs.update-changelogs.outputs.version }}", "type": "${{ github.event.inputs.type }}"}'
87 + - name: Failure Notification
88 + uses: rtCamp/action-slack-notify@v2
89 + env:
90 + SLACK_COLOR: 'danger'
91 + SLACK_FOOTER: ''
92 + SLACK_ICON_EMOJI: ':github-actions:'
93 + SLACK_TITLE: 'Failed to trigger ${{ github.event.inputs.type }} artifact builds:'
94 + SLACK_USERNAME: 'GitHub Actions'
95 + SLACK_MESSAGE: >-
96 + ${{ github.repository }}: Failed to trigger ${{ github.event.inputs.type }} artifact builds.
97 + Checkout: ${{ steps.checkout.outcome }}
98 + Trigger build: ${{ steps.trigger.outcome }}
99 + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
100 + if: failure()
101 +
102 + trigger-docker:
103 + name: Trigger docker builds
104 + runs-on: ubuntu-latest
105 + needs: update-changelogs
106 + if: ${{ needs.update-changelogs.outputs.run }} == 'true'
107 + steps:
108 + - name: Checkout
109 + id: checkout
110 + uses: actions/checkout@v2
111 + with:
112 + ref: ${{ needs.update-changelogs.outputs.ref }}
113 + - name: Trigger build
114 + id: trigger
115 + uses: benc-uk/workflow-dispatch@v1
116 + with:
117 + token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
118 + repo: ${{ github.repository }}
119 + workflow: Docker
120 + ref: ${{ needs.update-changelogs.outputs.ref }}
121 + inputs: '{"agent_version": "${{ needs.update-changelogs.outputs.version }}"}'
122 + - name: Failure Notification
123 + uses: rtCamp/action-slack-notify@v2
124 + env:
125 + SLACK_COLOR: 'danger'
126 + SLACK_FOOTER: ''
127 + SLACK_ICON_EMOJI: ':github-actions:'
128 + SLACK_TITLE: 'Failed to trigger ${{ github.event.inputs.type }} Docker builds:'
129 + SLACK_USERNAME: 'GitHub Actions'
130 + SLACK_MESSAGE: >-
131 + ${{ github.repository }}: Failed to trigger ${{ github.event.inputs.type }} Docker builds.
132 + Checkout: ${{ steps.checkout.outcome }}
133 + Trigger build: ${{ steps.trigger.outcome }}
134 + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
135 + if: failure()
136 +
137 + trigger-packages:
138 + name: Trigger package builds
139 + runs-on: ubuntu-latest
140 + needs: update-changelogs
141 + if: ${{ needs.update-changelogs.outputs.run }} == 'true'
142 + steps:
143 + - name: Checkout
144 + id: checkout
145 + uses: actions/checkout@v2
146 + with:
147 + ref: ${{ needs.update-changelogs.outputs.ref }}
148 + - name: Trigger build
149 + id: trigger
150 + uses: benc-uk/workflow-dispatch@v1
151 + with:
152 + token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
153 + repo: ${{ github.repository }}
154 + workflow: Packages
155 + ref: ${{ needs.update-changelogs.outputs.ref }}
156 + inputs: '{"agent_version": "${{ needs.update-changelogs.outputs.version }}", "type": "${{ github.event.inputs.type }}"}'
157 + - name: Failure Notification
158 + uses: rtCamp/action-slack-notify@v2
159 + env:
160 + SLACK_COLOR: 'danger'
161 + SLACK_FOOTER: ''
162 + SLACK_ICON_EMOJI: ':github-actions:'
163 + SLACK_TITLE: 'Failed to trigger ${{ github.event.inputs.type }} package builds:'
164 + SLACK_USERNAME: 'GitHub Actions'
165 + SLACK_MESSAGE: >-
166 + ${{ github.repository }}: Failed to trigger ${{ github.event.inputs.type }} package builds.
167 + Checkout: ${{ steps.checkout.outcome }}
168 + Trigger build: ${{ steps.trigger.outcome }}
169 + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
170 + if: failure()
.travis.yml
-86
@@ -51,26 +51,6 @@ stages:
51 - name: Build process
52 if: commit_message =~ /^((?!\[Package (amd64|arm64|i386) (DEB|RPM)( .*)?\]).)*$/
53
54 - # Nightly operations
55 - - name: Nightly operations
56 - if: branch = master AND type = cron AND env(RUN_NIGHTLY) = yes
57 -
58 - - name: Nightly release
59 - if: branch = master AND type = cron AND env(RUN_NIGHTLY) = yes
60 -
61 - # Scheduled releases
62 - - name: Support activities on main branch
63 - if: branch = master AND type != pull_request AND type != cron AND repo = netdata/netdata
64 -
65 - # We don't run on release candidates
66 - - name: Publish for release
67 - if: >-
68 - branch = master
69 - AND type != pull_request
70 - AND type != cron
71 - AND tag !~ /(-rc)/
72 - AND commit_message =~ /\[netdata (release candidate|(major|minor|patch) release)\]/
73 -
54
55 # Define stage implementation details
56 #
@@ -86,69 +66,3 @@ jobs:
66 script: fakeroot ./netdata-installer.sh --install $HOME --dont-wait --dont-start-it --enable-plugin-nfacct --enable-plugin-freeipmi --disable-lto
67 env: CFLAGS='-O1 -Wall -Wextra -Wformat-signedness -fstack-protector-all -fno-common -DNETDATA_INTERNAL_CHECKS=1 -D_FORTIFY_SOURCE=2 -DNETDATA_VERIFY_LOCKS=1'
68 after_failure: post_message "TRAVIS_MESSAGE" "<!here> standard netdata build is failing (Still dont know which one, will improve soon)"
89 -
90 - - stage: Support activities on main branch
91 - name: Generate changelog for release (only on special and tagged commit msg)
92 - before_script: post_message "TRAVIS_MESSAGE" "Support activities on main branch initiated" "${NOTIF_CHANNEL}"
93 - script:
94 - - echo "GIT Branch:" && git branch
95 - - echo "Last commit:" && git log -1
96 - - echo "GIT Describe:" && git describe
97 - - echo "packaging/version:" && cat packaging/version
98 - - if [[ -z "${GIT_TAG}" ]]; then echo "Running set tag for release" && set_tag_for_release; fi;
99 - - .travis/generate_changelog_and_tag_release.sh
100 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Changelog generation and tag of release, failed"
101 - git:
102 - depth: false
103 - if: commit_message =~ /\[netdata (release candidate|(major|minor|patch) release)\]/ AND tag !~ /(-rc)/ OR (env(GIT_TAG) IS present AND NOT env(GIT_TAG) IS blank)
104 -
105 - # We only publish if a TAG has been set during packaging
106 - - stage: Publish for release
107 - name: Trigger release build and draft release creation
108 - script:
109 - - git checkout "${TRAVIS_BRANCH}" && export BUILD_VERSION="$(cat packaging/version)"
110 - - .travis/trigger_artifact_build.sh "${GITHUB_TOKEN}" "${BUILD_VERSION}" "release"
111 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Failed to trigger release artifact build during nightly release" "${NOTIF_CHANNEL}"
112 -
113 - - name: Trigger Docker image build and publish
114 - script:
115 - - git checkout "${TRAVIS_BRANCH}" && export BUILD_VERSION="$(cat packaging/version | cut -d'-' -f1)"
116 - - .travis/trigger_docker_build.sh "${GITHUB_TOKEN}" "${BUILD_VERSION}"
117 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Failed to trigger docker build during release" "${NOTIF_CHANNEL}"
118 -
119 - - name: Trigger DEB and RPM package build
120 - script:
121 - - git checkout "${TRAVIS_BRANCH}" && export BUILD_VERSION="$(cat packaging/version | sed 's/^v//' | cut -d'-' -f1)"
122 - - .travis/trigger_package_build.sh "${GITHUB_TOKEN}" "${BUILD_VERSION}" "release"
123 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Failed to trigger deb and rpm package build during release" "${NOTIF_CHANNEL}"
124 -
125 -
126 - # This is the nightly pre-execution step (Jobs, preparatory steps for nightly, etc)
127 - - stage: Nightly operations
128 - # This is generating the changelog for nightly release and publish it
129 - name: Generate nightly changelog
130 - script:
131 - - ".travis/nightlies.sh"
132 - - ".travis/check_changelog_last_modification.sh"
133 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Nightly changelog generation failed"
134 - git:
135 - depth: false
136 -
137 - # This is the nightly execution step
138 - #
139 - - stage: Nightly release
140 - name: Trigger nightly artifact build and upload
141 - script:
142 - - git checkout "${TRAVIS_BRANCH}" && export BUILD_VERSION="$(cat packaging/version)"
143 - - .travis/trigger_artifact_build.sh "${GITHUB_TOKEN}" "${BUILD_VERSION}" "nightly"
144 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Failed to trigger release artifact build during nightly release" "${NOTIF_CHANNEL}"
145 -
146 - - name: Trigger Docker image build and publish
147 - script: .travis/trigger_docker_build.sh "${GITHUB_TOKEN}" "nightly"
148 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Failed to trigger docker build during nightly release" "${NOTIF_CHANNEL}"
149 -
150 - - name: Trigger DEB and RPM package build
151 - script:
152 - - git checkout "${TRAVIS_BRANCH}" && export BUILD_VERSION="$(cat packaging/version | sed 's/^v//')"
153 - - .travis/trigger_package_build.sh "${GITHUB_TOKEN}" "${BUILD_VERSION}" "nightly"
154 - after_failure: post_message "TRAVIS_MESSAGE" "<!here> Failed to trigger deb and rpm package build during nightly release" "${NOTIF_CHANNEL}"
netdata-installer.sh
+1 -1
@@ -306,7 +306,7 @@ NETDATA_PREFIX=
306 LIBS_ARE_HERE=0
307 NETDATA_ENABLE_ML=""
308 NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS-}"
309 -RELEASE_CHANNEL="nightly" # check .travis/create_artifacts.sh before modifying
309 +RELEASE_CHANNEL="nightly" # valid values are 'nightly' and 'stable'
310 IS_NETDATA_STATIC_BINARY="${IS_NETDATA_STATIC_BINARY:-"no"}"
311 while [ -n "${1}" ]; do
312 case "${1}" in