mirror of
https://github.com/avatao-content/test-tutorial-framework
synced 2024-12-04 19:21:32 +00:00
Rework release tooling
This commit is contained in:
parent
5e1c763dab
commit
5da0af26a0
@ -8,112 +8,33 @@ libhack_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
||||
source "${libhack_dir}/common.sh"
|
||||
|
||||
|
||||
baseimage::build_as_latest() {
|
||||
pushd "${BASEIMAGE_PATH}"
|
||||
baseimage::build
|
||||
baseimage::tag_as_latest
|
||||
popd
|
||||
}
|
||||
|
||||
baseimage::build() {
|
||||
pushd "${BASEIMAGE_PATH}"
|
||||
docker build -t "${BASEIMAGE_NAME}:$(releasename)" \
|
||||
.
|
||||
popd
|
||||
}
|
||||
|
||||
baseimage::build_if_exists() {
|
||||
if [[ -d "$BASEIMAGE_PATH" ]]; then
|
||||
baseimage::build_as_latest
|
||||
baseimage::assert_exists() {
|
||||
if [[ ! -d "${BASEIMAGE_PATH}" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
baseimage::tag_as_latest() {
|
||||
docker tag "${BASEIMAGE_NAME}:$(releasename)" "${BASEIMAGE_NAME}:latest"
|
||||
baseimage::build_if_exists() {
|
||||
[[ ! -d "${BASEIMAGE_PATH}" ]] && return ||:
|
||||
pushd "${BASEIMAGE_PATH}"
|
||||
local tag
|
||||
tag="${BASEIMAGE_NAME}:$(releasename)"
|
||||
docker build -t "${tag}" .
|
||||
docker tag "${tag}" "${BASEIMAGE_NAME}:latest"
|
||||
popd
|
||||
}
|
||||
|
||||
baseimage::release() {
|
||||
pushd "${BASEIMAGE_PATH}"
|
||||
check_drone_releasename
|
||||
|
||||
local tag
|
||||
tag="$(releasename)"
|
||||
read -p "Tag and push new TFW version \"${tag}\"? [y/N]" -r && echo
|
||||
read -p "Tag and push baseimage \"${tag}\"? [y/N]" -r && echo
|
||||
if [[ $REPLY =~ ^(y|Y|yes|Yes|YES)$ ]]; then
|
||||
prompt_for_tag_description # This command sets $description
|
||||
tag="${tag}" description="${description}" force_push_tag
|
||||
printf "Pushing git tag to upstream...\n"
|
||||
tag="${tag}" description="${tag}" force_push_tag
|
||||
printf "\nPushing image to DockerHub...\n"
|
||||
docker push "${BASEIMAGE_NAME}:${tag}"
|
||||
docker push "${BASEIMAGE_NAME}:latest"
|
||||
fi
|
||||
popd
|
||||
}
|
||||
|
||||
baseimage::builddocs() {
|
||||
mount_point="/mnt/docs"
|
||||
|
||||
docker run --rm \
|
||||
-ti \
|
||||
-v "${BASEIMAGE_PATH}"/docs:"${mount_point}" \
|
||||
"${BASEIMAGE_NAME}" \
|
||||
/bin/bash -c \
|
||||
"cd ${mount_point}
|
||||
pip3 install sphinx
|
||||
make html
|
||||
exit" \
|
||||
&> /dev/null
|
||||
|
||||
if [ "$?" == "0" ]; then
|
||||
echo "Built baseimage docs at ${BASEIMAGE_PATH}/docs/build/html!"
|
||||
else
|
||||
echo "Building baseimage docs failed!"
|
||||
fi
|
||||
}
|
||||
|
||||
releasename() {
|
||||
local version
|
||||
local date
|
||||
version="$(cat VERSION | head -n 1)"
|
||||
date="$(date +%Y%m%d)"
|
||||
printf "${version}-${date}"
|
||||
}
|
||||
|
||||
check_drone_releasename() {
|
||||
local drone_releasename
|
||||
local actual_releasename
|
||||
drone_releasename="$(grep -oP '(?<=branch:\srefs/tags/).+(?=-.+)' .drone.yml)"
|
||||
actual_releasename="$(releasename | grep -oP ".+(?=-\d{8})")"
|
||||
if [ "${drone_releasename}" != "${actual_releasename}" ]; then
|
||||
echo "Release name '${drone_releasename}' in .drone.yml does not match \
|
||||
actual release name '${actual_releasename}' in VERSION."
|
||||
echo "Please make them match before releasing!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
prompt_for_tag_description() {
|
||||
local editor
|
||||
local tempfile
|
||||
editor="$(git config --global core.editor)"
|
||||
tempfile="$(mktemp)"
|
||||
|
||||
printf "\n\n" >> "${tempfile}"
|
||||
echo "# Please enter the description for this release." >> "${tempfile}"
|
||||
echo "# Lines starting with '#' will be ignored." >> "${tempfile}"
|
||||
echo "# An empty description aborts the release." >> "${tempfile}"
|
||||
|
||||
${editor} "${tempfile}"
|
||||
sed -i -e 's/#.*$//' -e '/^$/d' "${tempfile}"
|
||||
sed -i 's/\n/ /g' "${tempfile}"
|
||||
if [[ ! -s "${tempfile}" ]]; then
|
||||
echo "Aborting release due to empty description."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
description="$(tr '\n' ' ' < "${tempfile}")"
|
||||
rm "${tempfile}"
|
||||
}
|
||||
|
||||
force_push_tag() {
|
||||
git tag -d "${tag}" > /dev/null 2>&1 || :
|
||||
git push --delete origin "${tag}" > /dev/null 2>&1 || :
|
||||
git tag -s -m "${description}" "${tag}"
|
||||
git push origin "${tag}"
|
||||
}
|
||||
|
@ -5,3 +5,18 @@ pushd() {
|
||||
popd() {
|
||||
command popd "$@" > /dev/null
|
||||
}
|
||||
|
||||
releasename() {
|
||||
local version
|
||||
local date
|
||||
version="$(cat VERSION | head -n 1)"
|
||||
date="$(date +%Y%m%d)"
|
||||
printf "${version}-${date}"
|
||||
}
|
||||
|
||||
force_push_tag() {
|
||||
git tag -d "${tag}" > /dev/null 2>&1 || :
|
||||
git push --delete origin "${tag}" > /dev/null 2>&1 || :
|
||||
git tag -s -m "${description}" "${tag}"
|
||||
git push origin "${tag}"
|
||||
}
|
||||
|
34
hack/libhack/frontend.sh
Normal file
34
hack/libhack/frontend.sh
Normal file
@ -0,0 +1,34 @@
|
||||
# Requires context:
|
||||
# - FRONTEND_PATH: absolute path of frontend repo
|
||||
|
||||
FRONTEND_IMAGE_NAME="${FRONTEND_IMAGE_NAME:-avatao/frontend-tutorial-framework}"
|
||||
|
||||
libhack_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
||||
source "${libhack_dir}/common.sh"
|
||||
|
||||
|
||||
frontend::assert_exists() {
|
||||
if [[ ! -d "${FRONTEND_PATH}" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
frontend::build() {
|
||||
pushd "${FRONTEND_PATH}"
|
||||
docker build -t "${FRONTEND_IMAGE_NAME}:$(releasename)" .
|
||||
popd
|
||||
}
|
||||
|
||||
frontend::release() {
|
||||
pushd "${FRONTEND_PATH}"
|
||||
local tag
|
||||
tag="$(releasename)"
|
||||
read -p "Tag and push frontend \"${tag}\"? [y/N]" -r && echo
|
||||
if [[ $REPLY =~ ^(y|Y|yes|Yes|YES)$ ]]; then
|
||||
printf "Pushing git tag to upstream...\n"
|
||||
tag="${tag}" description="${tag}" force_push_tag
|
||||
printf "\nPushing image to DockerHub...\n"
|
||||
docker push "${FRONTEND_IMAGE_NAME}:${tag}"
|
||||
fi
|
||||
popd
|
||||
}
|
27
hack/tfw.sh
27
hack/tfw.sh
@ -18,6 +18,7 @@ FRONTEND_PATH="${TFW_PATH}/${FRONTEND_REPO}"
|
||||
|
||||
source "${SCRIPT_DIR}/libhack/baseimage.sh"
|
||||
source "${SCRIPT_DIR}/libhack/challenge.sh"
|
||||
source "${SCRIPT_DIR}/libhack/frontend.sh"
|
||||
|
||||
|
||||
case ${1:-} in
|
||||
@ -29,30 +30,32 @@ case ${1:-} in
|
||||
run)
|
||||
challenge:run ${@:2}
|
||||
;;
|
||||
buildtfw)
|
||||
build-baseimage)
|
||||
baseimage::build_if_exists
|
||||
;;
|
||||
build)
|
||||
baseimage::build_if_exists
|
||||
challenge::build_no_cache
|
||||
;;
|
||||
releasetfw)
|
||||
if [[ -d "$BASEIMAGE_PATH" ]]; then
|
||||
baseimage::release
|
||||
fi
|
||||
build-frontend)
|
||||
frontend::assert_exists
|
||||
frontend::build
|
||||
;;
|
||||
builddocs)
|
||||
if [[ -d "$BASEIMAGE_PATH" ]]; then
|
||||
baseimage::builddocs
|
||||
fi
|
||||
release-baseimage)
|
||||
baseimage::assert_exists
|
||||
baseimage::release
|
||||
;;
|
||||
release-frontend)
|
||||
frontend::assert_exists
|
||||
frontend::release
|
||||
;;
|
||||
*)
|
||||
echo "Usage: tfw.sh [COMMAND]"
|
||||
echo " |--- start: build & run TFW challenge"
|
||||
echo " |--- run: run TFW challenge"
|
||||
echo " |--- buildtfw: build TFW baseimage"
|
||||
echo " |--- build-baseimage: build TFW baseimage"
|
||||
echo " |--- build: build TFW baseimage and challenge"
|
||||
echo " |--- releasetfw: tag TFW baseimage and push to upstream"
|
||||
echo " |--- builddocs: build baseimage documentation (in docs/build/html)"
|
||||
echo " |--- release-baseimage: tag TFW baseimage and push to DockerHub"
|
||||
echo " |--- release-frontend: tag TFW frontend and push to DockerHub"
|
||||
;;
|
||||
esac
|
||||
|
Loading…
Reference in New Issue
Block a user