diff options
Diffstat (limited to 'packaging/manual_nightly_deployment.sh')
-rwxr-xr-x | packaging/manual_nightly_deployment.sh | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/packaging/manual_nightly_deployment.sh b/packaging/manual_nightly_deployment.sh new file mode 100755 index 00000000..a0999bb1 --- /dev/null +++ b/packaging/manual_nightly_deployment.sh @@ -0,0 +1,127 @@ +#!/usr/bin/env bash +# +# This tool allows netdata team to manually deploy nightlies +# It emulates the nightly operations required for a new version to be published for our users +# +# Copyright: SPDX-License-Identifier: GPL-3.0-or-later +# +# Author : Pavlos Emm. Katsoulakis <paul@netdata.cloud> +# +set -e + +# If we are not in netdata git repo, at the top level directory, fail +TOP_LEVEL=$(basename "$(git rev-parse --show-toplevel)") +CWD=$(git rev-parse --show-cdup || echo "") +if [ -n "${CWD}" ] || [ ! "${TOP_LEVEL}" == "netdata" ]; then + echo "Run as .travis/$(basename "$0") from top level directory of netdata git repository" + echo "Changelog generation process aborted" + exit 1 +fi + +if [ $# -lt 1 ] || [ $# -gt 2 ]; then + echo "Run as ./$(basename "$0") [docker|gcs]|all] from the top level directory of netdata GIT repository" + exit 1 +fi + +GSUTIL_BINARY=$(command -v gsutil 2> /dev/null) +if [ -z "${GSUTIL_BINARY}" ]; then + echo "No gsutil utility available, you need gsutil deployed to manually deploy to GCS" + exit 1 +fi; + +# Function declarations +publish_docker() { + + # Ensure REPOSITORY present + if [ -z "${REPOSITORY}" ]; then + echo "Please provide the repository to deploy the containers:" + read -r REPOSITORY + export REPOSITORY + else + echo "Docker publishing to ${REPOSITORY}" + fi + + # Ensure DOCKER_USERNAME present + if [ -z "${DOCKER_USERNAME}" ]; then + echo "For repository ${REPOSITORY}, Please provide the docker USERNAME to use:" + read -r DOCKER_USERNAME + export DOCKER_USERNAME + else + echo "Using docker username ${DOCKER_USERNAME}" + fi + + # Ensure DOCKER_PASS present + if [ -z "${DOCKER_PASS}" ]; then + echo "Username ${DOCKER_USERNAME} received, now give me the password:" + read -r -s DOCKER_PASS + export DOCKER_PASS + else + echo "Docker password has already been set to env, using that" + fi + + echo "Building Docker images.." + packaging/docker/build.sh + + echo "Publishing Docker images.." + packaging/docker/publish.sh +} + +publish_nightly_binaries() { + echo "Publishing nightly binaries to GCS" + + echo "Please select the bucket to sync, from the ones available to you:" + bucket_list=$(${GSUTIL_BINARY} list | tr '\n' ' ') + declare -A buckets + idx=0 + for abucket in ${bucket_list}; do + echo "${idx}. ${abucket}" + buckets["${idx}"]=${abucket} + ((idx=idx+1)) + done + read -p"Selection>" -r -n 1 selected_bucket + + echo "Ok!" + echo "Syncing artifacts directory contents with GCS bucket: ${buckets[${selected_bucket}]}" + if [ -d artifacts ]; then + ${GSUTIL_BINARY} -m rsync -r artifacts "${buckets["${selected_bucket}"]}" + echo "GCS Sync complete!" + else + echo "Directory artifacts does not exist, nothing to do on GCS" + fi +} + +prepare_and_publish_gcs() { + # Prepare the artifacts directory + echo "Preparing artifacts directory contents" + .travis/create_artifacts.sh + + # Publish it to GCS + publish_nightly_binaries + + # Clean up + echo "Cleaning up repository" + make clean || echo "Nothing to clean" + make distclean || echo "Nothing to distclean" + rm -rf artifacts +} + +# Mandatory variable declarations +export TRAVIS_REPO_SLUG="netdata/netdata" + +echo "Manual nightly deployment procedure started" +case "$1" in + "docker") + publish_docker + ;; + "gcs") + prepare_and_publish_gcs + ;; + "all") + publish_docker + prepare_and_publish_gcs + ;; + *) + echo "ERROR: Invalid request parameter $1. Valid values are: docker, gcs, all" + ;; +esac +echo "Manual nightly deployment completed!" |