blob: 7d13bc1f36879e2cb150c1bbcce8c4682aa8aa3c [file] [log] [blame]
#!/usr/bin/env bash
#*******************************************************************************
# Copyright (c) 2021 Eclipse Foundation and others.
# This program and the accompanying materials are made available
# under the terms of the Eclipse Public License 2.0
# which is available at http://www.eclipse.org/legal/epl-v20.html,
# or the MIT License which is available at https://opensource.org/licenses/MIT.
# SPDX-License-Identifier: EPL-2.0 OR MIT
#*******************************************************************************
# Bash strict-mode
set -o errexit
set -o nounset
set -o pipefail
SCRIPT_FOLDER="$(dirname "$(readlink -f "${0}")")"
# Parameters:
RELEASE_NAME="${1:-}"
if [ "${RELEASE_NAME}" == "" ]; then
printf "ERROR: a release name must be given.\n"
exit 1
fi
open_url() {
local url=$1
if which xdg-open > /dev/null; then # most Linux
xdg-open "${url}"
elif which open > /dev/null; then # macOS
open "${url}"
fi
}
open_infocenter_in_browser() {
local release_name=$1
local url="https://help.eclipse.org/${release_name}"
# This might require something like:
wget -O - --tries=1 --header='X-Cache-Bypass: true' "${url}" > /dev/null
# Update banner specifically
wget -O - --tries=1 --header='X-Cache-Bypass: true' "${url}/topic/org.foundation.helpbanner2/banner.html" > /dev/null
# open url in browser
open_url "${url}"
}
yes_skip_exit() {
echo
read -rp "Do you want to $1? (Y)es, (S)kip, E(x)it: " yn
shift
case $yn in
[Yy]* ) "${@}";;
[Ss]* ) echo "Skipping...";;
[Xx]* ) exit;;
* ) echo "Please answer (Y)es, (S)kip, E(x)it";;
esac
}
config_create_infocenter_job() {
echo
echo "Add the latest p2_repo_dir to the Choice Parameter in https://ci.eclipse.org/simrel/job/simrel.create_infocenter..."
echo " - Dir can be found here: https://download.eclipse.org/releases/${RELEASE_NAME} (e.g. releases/2022-03/202203161000)"
open_url "https://ci.eclipse.org/simrel/job/simrel.create_infocenter/configure"
echo
read -p "Press enter to continue or CTRL-C to stop the script"
}
run_create_infocenter_job() {
echo
echo "Run https://ci.eclipse.org/simrel/job/simrel.create_infocenter to package a new infocenter... "
open_url "https://ci.eclipse.org/simrel/job/simrel.create_infocenter/build?delay=0sec"
#TODO: set the parameters via URL
echo " - set the release_name parameter (${RELEASE_NAME})"
echo " - make sure that use_latest_platform is enabled (unless you know exactly what you are doing)"
echo " - select latest p2_repo_dir"
echo " - wait for the build to finish"
#TODO: set build description automatically
echo " - set build description (e.g. '${RELEASE_NAME} with 4.xx platform')"
echo
read -p "Press enter to continue or CTRL-C to stop the script"
}
run_publish_infocenter_job() {
echo
echo "Run https://ci.eclipse.org/simrel/job/simrel.publish_infocenter_pipeline to build and push a new docker image with the latest info center to docker hub..."
open_url "https://ci.eclipse.org/simrel/job/simrel.publish_infocenter_pipeline/build?delay=0sec"
echo " - set the release_name parameter (${RELEASE_NAME})"
echo " - set the url parameter"
echo " - wait for the build to finish"
echo " - copy <sha256> (without the sha256: prefix) from the last lines in the console log"
echo
read -p "Press enter to continue or CTRL-C to stop the script"
}
create_and_deploy_infocenter() {
echo
echo "Create infocenter YAML and deploy it on the cluster..."
pushd "${SCRIPT_FOLDER}/k8s"
# skip creation if it exists already
if [[ -d "${RELEASE_NAME}" ]]; then
echo "Directory ${RELEASE_NAME} already exists, skipping creation..."
else
# create info center
read -rp " sha256: " sha_256
#TODO: remove the "sha256:" prefix automatically
echo "Creating yaml file..."
./createInfoCenter_yaml.sh "${RELEASE_NAME}" "${sha_256}"
fi
# deploy info center
echo "Deploying infocenter ${RELEASE_NAME}..."
./deployInfoCenter.sh "${RELEASE_NAME}"
echo "Check that infocenter container is running on the cluster (wait for it ~2min20sec)..."
kubectl rollout status -n "infocenter" "deployment/infocenter-${RELEASE_NAME}"
oc get pods -n infocenter
read -p "Press enter to continue or CTRL-C to stop the script"
popd
}
shutdown_oldest_infocenter() {
echo
echo "Shutdown oldest infocenter on the cluster and remove the folder in the repo..."
pushd k8s
#TODO: find oldest release directory automatically
read -rp "Oldest release name: " oldest_release_name
#TODO: check that ${oldest_release_name} exists
if [[ ! -d "${oldest_release_name}" ]]; then
echo "ERROR: ${oldest_release_name} does not exist. Skipping..."
else
echo "Removing info center ${oldest_release_name}..."
./removeInfoCenter.sh "${oldest_release_name}"
#- remove the oldest directory
git add "${oldest_release_name}"
fi
popd
}
commit_changes() {
echo
echo "Commit the changes in /org.eclipse.simrel.tools/infoCenter/k8s..."
#- new directory for the latest release (e.g. 2019-12)
git add k8s/"${RELEASE_NAME}"
#TODO: add instructions for updating the second to latest infocenter
echo
git status
echo
echo "Please double-check the staged files and commit them with a commit message (e.g. 'Add infocenter ${RELEASE_NAME}, remove oldest infocenter') ..."
#TODO: add commit message
#TODO: confirm before comitting
echo
read -p "Press enter to continue or CTRL-C to stop the script"
}
adapt_nginx() {
echo
echo "Adapt nginx config in puppet..."
#Adapt nginx config in puppet (ssh://<username>@foundation.eclipse.org:29418/puppet/modules):
#/modules/nginx/files/etc/nginx/conf.d/help.eclipse.org.common
echo " - add new location to /modules/nginx/files/etc/nginx/conf.d/help.eclipse.org.common:"
echo
echo " #eclipse 4.xx (${RELEASE_NAME})"
echo " location /${RELEASE_NAME} {"
echo " rewrite ^/${RELEASE_NAME}/?\$ /${RELEASE_NAME}/index.jsp redirect;"
echo " proxy_pass https://okd-ingress-tls\$request_uri;"
echo " }"
echo
echo " - add redirection from oldest location to /latest"
echo " - e.g. rewrite ^/2020-03(.*)\$ https://help.eclipse.org/latest\$1 redirect;"
echo " - remove oldest location"
echo " - commit changes"
echo " - commit message: \"Update infocenters\""
#Commit the change and wait for nginx to reload (=> manually reload nginx for now!)
echo " - run puppet"
echo " - reload nginx manually"
#TODO: or use expect script? security issues?
#ssh outage4@nginx1
#su -
#/usr/bin/puppet agent --server puppet.eclipse.org --no-daemonize -o -d -l /dev/stdout
#cat /etc/nginx/conf.d/help.eclipse.org.common
#nginx -t
#systemctl reload nginx
read -p "Press enter to continue or CTRL-C to stop the script"
}
check_after_deployment(){
echo
echo "Check that the new infocenter works after the deployment..."
open_infocenter_in_browser "${RELEASE_NAME}"
echo
read -p "Press enter to continue or CTRL-C to stop the script"
}
update_latest_redirection(){
echo
#TODO: extract that and do it only on release day?
echo "Update /org.eclipse.simrel.tools/infoCenter/k8s/route_latest.yml to point to the latest info center..."
#- update route
route_latest_file="k8s/route_latest.yml"
sed -i -E "s/infocenter-[0-9]{4}-[0-9]{2}/infocenter-${RELEASE_NAME}/" "${route_latest_file}"
cat "${route_latest_file}"
#- Deploy the route
oc apply -f "${route_latest_file}"
echo "Sleep for 20 seconds..."
sleep 20
echo "Check that https://help.eclipse.org/latest shows the latest version..."
open_infocenter_in_browser "latest"
echo "TODO:"
git add "k8s/route_latest.yml"
echo "- Commit k8s/route_latest.yml"
echo
read -p "Press enter to continue or CTRL-C to stop the script"
}
update_check_infocenter_job(){
echo
echo "Add new info center to the shell script in this job (and remove oldest):"
echo "=> https://ci.eclipse.org/simrel/job/simrel.check_infocenter"
open_url "https://ci.eclipse.org/simrel/job/simrel.check_infocenter/configure"
echo
read -p "Press enter to continue or CTRL-C to stop the script"
}
echo "Create infocenter for release ${RELEASE_NAME}:"
echo "======================================"
yes_skip_exit "configure the simrel.create_infocenter job" config_create_infocenter_job
yes_skip_exit "run the simrel.create_infocenter job" run_create_infocenter_job
yes_skip_exit "run the simrel.publish_infocenter job" run_publish_infocenter_job
yes_skip_exit "create and deploy the new infocenter" create_and_deploy_infocenter
yes_skip_exit "shutdown the oldest infocenter" shutdown_oldest_infocenter
yes_skip_exit "commit the changes" commit_changes
yes_skip_exit "adapt the nginx configuration" adapt_nginx
yes_skip_exit "check infocenter after deployment" check_after_deployment
yes_skip_exit "update the latest redirection" update_latest_redirection
yes_skip_exit "update simrel.check_infocenter job" update_check_infocenter_job
echo "Done."