show-me-secrets/ci/scripts/shipit

104 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
#
# ci/scripts/shipit
#
# Script for finalizing and packaging Helm chart
# and managing release notes
#
# author: Dr Nic Williams <drnicwilliams@gmail.com>
# created: 2018-11-09
set -eu
header() {
echo
echo "###############################################"
echo
echo $*
echo
}
: ${CHART_NAME:?required}
: ${CHART_ROOT:?required}
: ${REPO_ROOT:?required}
: ${VERSION_FROM:?required}
: ${RELEASE_ROOT:?required}
: ${REPO_OUT:?required}
: ${BRANCH:?required}
: ${GITHUB_OWNER:?required}
: ${GIT_EMAIL:?required}
: ${GIT_NAME:?required}
: ${NOTIFICATION_OUT:?required}
: ${AWS_ACCESS_KEY_ID:?required}
: ${AWS_SECRET_ACCESS_KEY:?required}
: ${HELM_S3_BUCKET_URI:?required}
HELM_VERSION=2.11.0
if [[ ! -f ${VERSION_FROM} ]]; then
echo >&2 "Version file (${VERSION_FROM}) not found. Did you misconfigure Concourse?"
exit 2
fi
VERSION=$(cat ${VERSION_FROM})
if [[ -z ${VERSION} ]]; then
echo >&2 "Version file (${VERSION_FROM}) was empty. Did you misconfigure Concourse?"
exit 2
fi
if [[ ! -f ${REPO_ROOT}/ci/release_notes.md ]]; then
echo >&2 "ci/release_notes.md not found. Did you forget to write them?"
exit 1
fi
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
###############################################################
git clone ${REPO_ROOT} ${REPO_OUT}
pushd ${REPO_OUT}
header "Bump version in Chart.yaml"
tmpfile=$(mktemp /tmp/chart-yaml.XXXX)
sed -e "s/^version:.*$/version: ${VERSION}/g" ${CHART_ROOT}/Chart.yaml > $tmpfile
cp $tmpfile ${CHART_ROOT}/Chart.yaml
header "Bump docker image version in Values.yaml"
tmpfile=$(mktemp /tmp/chart-yaml.XXXX)
sed -e "s/^ tag:.*$/ tag: ${VERSION}/g" ${CHART_ROOT}/values.yaml > $tmpfile
cp $tmpfile ${CHART_ROOT}/values.yaml
popd
header "Build helm chart"
mkdir -p ${RELEASE_ROOT}/artifacts
helm package ${REPO_OUT}/${CHART_ROOT} -d ${RELEASE_ROOT}/artifacts
helm repo add our-repo ${HELM_S3_BUCKET_URI}
header "Uploading helm chart to ${HELM_S3_BUCKET_URI}"
set -e
helm s3 push ${RELEASE_ROOT}/artifacts/${CHART_NAME}*.tgz our-repo --force
set +e
header "Update git repo with final release..."
if [[ -z $(git config --global user.email) ]]; then
git config --global user.email "${GIT_EMAIL}"
fi
if [[ -z $(git config --global user.name) ]]; then
git config --global user.name "${GIT_NAME}"
fi
echo "v${VERSION}" > ${RELEASE_ROOT}/tag
echo "v${VERSION}" > ${RELEASE_ROOT}/name
mv ${REPO_OUT}/ci/release_notes.md ${RELEASE_ROOT}/notes.md
pushd $REPO_OUT
git merge --no-edit ${BRANCH}
git add -A
git status
git commit -m "release v${VERSION}"
popd
cat > ${NOTIFICATION_OUT:-notifications}/message <<EOS
New ${CHART_NAME} v${VERSION} released. <https://github.com/${GITHUB_OWNER}/${CHART_NAME}/releases/tag/v${VERSION}|Release notes>.
EOS