From 813d1e7b40fb22d9b76e7dae5c27f4e3de66a27b Mon Sep 17 00:00:00 2001 From: "R. Richard" Date: Thu, 5 Sep 2019 18:23:57 +0200 Subject: [PATCH] Refactor hack script due to multistage building --- hack/bootstrap.sh | 191 -------------------------------------- hack/libhack/challenge.sh | 4 +- hack/libhack/frontend.sh | 14 --- hack/tfw.sh | 38 ++------ 4 files changed, 8 insertions(+), 239 deletions(-) delete mode 100755 hack/bootstrap.sh delete mode 100644 hack/libhack/frontend.sh diff --git a/hack/bootstrap.sh b/hack/bootstrap.sh deleted file mode 100755 index a6aedfa..0000000 --- a/hack/bootstrap.sh +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env bash -set -eu -set -o pipefail -set -o errtrace -shopt -s expand_aliases -[ "$(uname)" == "Darwin" ] && alias sed="gsed" && alias grep="ggrep" || : - -HERE="$(pwd)" -CHALLENGE=${CHALLENGE:-test-tutorial-framework} -BASEIMAGE_NAME="${BASEIMAGE_NAME:-eu.gcr.io/avatao-challengestore/tutorial-framework}" -BASEIMAGE_REPO="${BASEIMAGE_REPO:-baseimage-tutorial-framework}" -FRONTEND_REPO="${FRONTEND_REPO:-frontend-tutorial-framework}" - -LOGFILE=/tmp/bootstrap_tfw.log -REMOTEBASE="git@github.com:avatao-content" - -run() { - trap 'exit 1' INT - trap handle_exit EXIT - : > "${LOGFILE}" - - check_dependencies - clone_required_repos_ask_ssh_or_https - local tag - tag="${BASEIMAGE_ONLY:-$(remotebase="${REMOTEBASE}" baseimage_latest_upstream_tag)}" - tag=${tag} verify_baseimage_tag - tag=${tag} build_baseimage - - if [ -z "${BASEIMAGE_ONLY:-}" ]; then - tag=${tag} pin_baseimage - install_frontend_deps - if [ "${TFWDEV:-0}" == "0" ]; then - cleanup_repos - merge_repos - fi - else - delete_repos - fi - - echo - if [ -z "${BASEIMAGE_ONLY:-}" ]; then - echo "You can build & start TFW by executing the command: ${CHALLENGE}/hack/tfw.sh start" - else - echo "Baseimage version ${BASEIMAGE_ONLY} built successfully!" - fi -} - -handle_exit() { - if [[ $? -ne 0 ]]; then - delete_repos - showlog - fi - cleanlog -} - -logged() { "$@" >> "${LOGFILE}" 2>&1; } -showlog() { echo && echo "Error! Showing logs:" && cat "${LOGFILE}"; } -cleanlog() { rm "${LOGFILE}"; } -delete_repos() { cd "${HERE}" && rm -rf "${BASEIMAGE_REPO}" "${FRONTEND_REPO}" "${CHALLENGE}"; } - -check_dependencies() { - local dependencies=("git" "docker" "yarn" "ng") - local missing="0" - for dep in ${dependencies[@]}; do - if ! type "${dep}" > /dev/null 2>&1; then - logged echo "Dependency '${dep}' not found!" - missing="1" - fi - done - if [ "${missing}" == "1" ]; then - logged echo "Please install the missing packages and retry!" - exit 1 - fi - - if [ "${TFWDEV:-0}" == "0" ]; then - if ! docker info > /dev/null 2>&1; then - logged echo "The Docker daemon appears to be stopped. Please start it and try again!" - exit 1 - fi - fi -} - -clone_required_repos_ask_ssh_or_https() { - if [[ -z "${HTTPS_REMOTES:-}" ]]; then - read -p "Repos are pulled over SSH by default. Should I use HTTPS instead? [y/N]" -r -t 5 || : - echo - if [[ ${REPLY} =~ ^(y|Y|yes|Yes|YES)$ ]]; then - HTTPS_REMOTES=1 clone_required_repos - else - HTTPS_REMOTES=0 clone_required_repos - fi - else - clone_required_repos - fi -} - -clone_required_repos() { - [[ "${HTTPS_REMOTES:-0}" == "1" ]] && REMOTEBASE="https://github.com/avatao-content" - - echo -n "Cloning TFW repositories... " - echo -n "baseimage... " && logged git clone ${REMOTEBASE}/${BASEIMAGE_REPO}.git - if [ -z "${BASEIMAGE_ONLY:-}" ]; then - echo -n "frontend... " && logged git clone ${REMOTEBASE}/${FRONTEND_REPO}.git - echo -n "test... " && logged git clone ${REMOTEBASE}/${CHALLENGE}.git - fi - echo "Done!" -} - -baseimage_latest_upstream_tag() { - echo -n "$(git ls-remote --tags ${remotebase}/${BASEIMAGE_REPO}.git | - cut -f2 | - grep -oP '(?<=refs/tags/)\w+-\d{8}$' | - sort -t '-' -k2 | - tail -n 1)" -} - -verify_baseimage_tag() { - pushd "${BASEIMAGE_REPO}" - local statuscode - if ! git rev-parse --quiet \ - --verify \ - "refs/tags/${tag}" &> /dev/null; then - logged echo "${tag} is not a valid tag!" - exit 1 - fi - popd -} - -pin_baseimage() { - echo -n "Pinning TFW baseimage version... " - echo -n "which is ${tag}... " - sed -i "1 s/.*/&:${tag}/" "${CHALLENGE}/solvable/Dockerfile" - echo "Done!" -} - -build_baseimage() { - echo -n "Building baseimage at ${tag}... " - pushd "${BASEIMAGE_REPO}" - logged git checkout "${tag}" - spinned logged docker build -t "${BASEIMAGE_NAME}:${tag}" . - popd - echo "Done!" -} - -install_frontend_deps() { - echo -n "Installing frontend dependencies... " - pushd "${FRONTEND_REPO}" - spinned logged yarn install - popd - echo "Done!" -} - -cleanup_repos() { - rm -rf "${BASEIMAGE_REPO}" - rm -rf "${CHALLENGE}/.git" - rm -rf "${FRONTEND_REPO}/.git" -} - -merge_repos() { - echo -n "Merging repositories... " - NESTED_FRONTEND="${CHALLENGE}/solvable/frontend" - rm -rf "${NESTED_FRONTEND}" - mv "${FRONTEND_REPO}" "${NESTED_FRONTEND}" - echo "Done!" -} - -spinned() { - "$@" & - pid=$! - spin=("-" "\\" "|" "/") - - echo -n "${spin[0]}" - while kill -0 $pid &> /dev/null; do - for i in "${spin[@]}"; do - echo -ne "\b$i" - sleep 0.1 - done - done - echo -ne "\b" - wait $pid -} - -pushd() { - command pushd "$@" > /dev/null -} - -popd() { - command popd "$@" > /dev/null -} - -run diff --git a/hack/libhack/challenge.sh b/hack/libhack/challenge.sh index 4d4cd95..f65f7ee 100644 --- a/hack/libhack/challenge.sh +++ b/hack/libhack/challenge.sh @@ -14,11 +14,11 @@ source "${libhack_dir}/common.sh" challenge::build() { pushd "${CHALLENGE_PATH}" - args="--build-arg NOFRONTEND=1" build_challenge_internal + args="" build_challenge_internal popd } -challenge::build_with_frontend() { +challenge::build_no_cache() { pushd "${CHALLENGE_PATH}" args="--no-cache" build_challenge_internal popd diff --git a/hack/libhack/frontend.sh b/hack/libhack/frontend.sh deleted file mode 100644 index 64bfee5..0000000 --- a/hack/libhack/frontend.sh +++ /dev/null @@ -1,14 +0,0 @@ -# Requires context: -# - FRONTEND_PATH: absolute path of frontend repo -# - CHALLENGE_PATH: absolute path of challenge repo - - -frontend::run() { - local frontend_in_challenge="${CHALLENGE_PATH}/solvable/frontend" - if [[ "$(find "${frontend_in_challenge}" | wc -l)" -gt 2 ]];then - cd "${frontend_in_challenge}" - else - cd "${FRONTEND_PATH}" - fi - yarn start -} diff --git a/hack/tfw.sh b/hack/tfw.sh index f05f2b7..4590a64 100755 --- a/hack/tfw.sh +++ b/hack/tfw.sh @@ -18,46 +18,23 @@ FRONTEND_PATH="${TFW_PATH}/${FRONTEND_REPO}" source "${SCRIPT_DIR}/libhack/baseimage.sh" source "${SCRIPT_DIR}/libhack/challenge.sh" -source "${SCRIPT_DIR}/libhack/frontend.sh" -start_challenge_and_frontend() { - trap 'exit' INT TERM - trap 'kill 0' EXIT - [[ "${RUN_FRONTEND:-1}" == "1" ]] && frontend::run & - [[ "${BUILD:-1}" == "1" ]] && challenge::build - challenge::run $@ - wait -} - case ${1:-} in start) baseimage::build_if_exists - BUILD=1 RUN_FRONTEND=1 start_challenge_and_frontend ${@:2} + challenge::build + challenge::run ${@:2} ;; run) - BUILD=0 RUN_FRONTEND=1 start_challenge_and_frontend ${@:2} - ;; - startcontainer) - baseimage::build_if_exists - BUILD=1 RUN_FRONTEND=0 start_challenge_and_frontend ${@:2} - ;; - runcontainer) - BUILD=0 RUN_FRONTEND=0 start_challenge_and_frontend ${@:2} - ;; - runfrontend) - frontend::run + challenge:run ${@:2} ;; buildtfw) baseimage::build_if_exists ;; build) baseimage::build_if_exists - challenge::build - ;; - buildwithfrontend) - baseimage::build_if_exists - challenge::build_with_frontend + challenge::build_no_cache ;; releasetfw) if [[ -d "$BASEIMAGE_PATH" ]]; then @@ -71,13 +48,10 @@ case ${1:-} in ;; *) echo "Usage: tfw.sh [COMMAND]" - echo " |--- start: build & run TFW challenge and Angular frontend" - echo " |--- run: run TFW challenge and Angular frontend" - echo " |--- startcontainer: build & run TFW challenge, container only" - echo " |--- runcontainer: run TFW challenge, container only" + echo " |--- start: build & run TFW challenge" + echo " |--- run: run TFW challenge" echo " |--- buildtfw: build TFW baseimage" echo " |--- build: build TFW baseimage and challenge" - echo " |--- buildwithfrontend: build TFW baseimage and challenge, include frontend in image" echo " |--- releasetfw: tag TFW baseimage and push to upstream" echo " |--- builddocs: build baseimage documentation (in docs/build/html)" ;;