# SUCCESS # *INFO* Generating Bash script for testing for GHC versions: 7.8.1 7.8.2 7.8.3 7.8.4 7.10.1 7.10.2 7.10.3 8.0.1 8.0.2 8.2.1 8.2.2 8.4.1 8.4.2 8.4.3 8.4.4 8.6.1 8.6.2 8.6.3 8.6.4 8.6.5 8.8.1 8.8.2 8.8.3 8.8.4 8.10.1 8.10.2 8.10.3 8.10.4 8.10.5 8.10.6 8.10.7 #!/bin/bash # shellcheck disable=SC2086,SC2016,SC2046 # REGENDATA ["--copy-fields=none","bash","copy-fields-none.project"] set -o pipefail # Mode ############################################################################## if [ "$1" = "indocker" ]; then INDOCKER=true shift else INDOCKER=false fi # Run configuration ############################################################################## CFG_CABAL_STORE_CACHE="" CFG_CABAL_REPO_CACHE="" CFG_JOBS="8.10.7 8.10.6 8.10.5 8.10.4 8.10.3 8.10.2 8.10.1 8.8.4 8.8.3 8.8.2 8.8.1 8.6.5 8.6.4 8.6.3 8.6.2 8.6.1 8.4.4 8.4.3 8.4.2 8.4.1 8.2.2 8.2.1 8.0.2 8.0.1 7.10.3 7.10.2 7.10.1 7.8.4 7.8.3 7.8.2 7.8.1" CFG_CABAL_UPDATE=false SCRIPT_NAME=$(basename "$0") START_TIME="$(date +'%s')" XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config} # Job configuration ############################################################################## GHC_VERSION="non-existing" CABAL_VERSION=3.2 HEADHACKAGE=false # Locale ############################################################################## export LC_ALL=C.UTF-8 # Utilities ############################################################################## SGR_RED='\033[1;31m' SGR_GREEN='\033[1;32m' SGR_BLUE='\033[1;34m' SGR_CYAN='\033[1;96m' SGR_RESET='\033[0m' # No Color put_info() { printf "$SGR_CYAN%s$SGR_RESET\n" "### $*" } put_error() { printf "$SGR_RED%s$SGR_RESET\n" "!!! $*" } run_cmd() { local PRETTYCMD="$*" local PROMPT if $INDOCKER; then PROMPT="$(pwd) >>>" else PROMPT=">>>" fi printf "$SGR_BLUE%s %s$SGR_RESET\n" "$PROMPT" "$PRETTYCMD" local start_time end_time cmd_duration total_duration start_time=$(date +'%s') "$@" local RET=$? end_time=$(date +'%s') cmd_duration=$((end_time - start_time)) total_duration=$((end_time - START_TIME)) cmd_min=$((cmd_duration / 60)) cmd_sec=$((cmd_duration % 60)) total_min=$((total_duration / 60)) total_sec=$((total_duration % 60)) if [ $RET -eq 0 ]; then printf "$SGR_GREEN%s$SGR_RESET (%dm%02ds; %dm%02ds)\n" "<<< $PRETTYCMD" "$cmd_min" "$cmd_sec" "$total_min" "$total_sec" else printf "$SGR_RED%s$SGR_RESET\n" "!!! $PRETTYCMD" exit 1 fi } run_cmd_if() { local COND=$1 shift if [ $COND -eq 1 ]; then run_cmd "$@" else local PRETTYCMD="$*" local PROMPT PROMPT="$(pwd) (skipping) >>>" printf "$SGR_BLUE%s %s$SGR_RESET\n" "$PROMPT" "$PRETTYCMD" fi } run_cmd_unchecked() { local PRETTYCMD="$*" local PROMPT if $INDOCKER; then PROMPT="$(pwd) >>>" else PROMPT=">>>" fi printf "$SGR_BLUE%s %s$SGR_RESET\n" "$PROMPT" "$PRETTYCMD" local start_time end_time cmd_duration total_duration cmd_min cmd_sec total_min total_sec start_time=$(date +'%s') "$@" end_time=$(date +'%s') cmd_duration=$((end_time - start_time)) total_duration=$((end_time - START_TIME)) cmd_min=$((cmd_duration / 60)) cmd_sec=$((cmd_duration % 60)) total_min=$((total_duration / 60)) total_sec=$((total_duration % 60)) printf "$SGR_GREEN%s$SGR_RESET (%dm%02ds; %dm%02ds)\n" "<<< $PRETTYCMD" "$cmd_min" "$cmd_sec" "$total_min" "$total_sec" } change_dir() { local DIR=$1 if [ -d "$DIR" ]; then printf "$SGR_BLUE%s$SGR_RESET\n" "change directory to $DIR" cd "$DIR" || exit 1 else printf "$SGR_RED%s$SGR_RESET\n" "!!! cd $DIR" exit 1 fi } change_dir_if() { local COND=$1 local DIR=$2 if [ $COND -ne 0 ]; then change_dir "$DIR" fi } echo_to() { local DEST=$1 local CONTENTS=$2 echo "$CONTENTS" >> "$DEST" } echo_if_to() { local COND=$1 local DEST=$2 local CONTENTS=$3 if [ $COND -ne 0 ]; then echo_to "$DEST" "$CONTENTS" fi } install_cabalplan() { put_info "installing cabal-plan" if [ ! -e $CABAL_REPOCACHE/downloads/cabal-plan ]; then curl -L https://github.com/haskell-hvr/cabal-plan/releases/download/v0.6.2.0/cabal-plan-0.6.2.0-x86_64-linux.xz > /tmp/cabal-plan.xz || exit 1 (cd /tmp && echo "de73600b1836d3f55e32d80385acc055fd97f60eaa0ab68a755302685f5d81bc cabal-plan.xz" | sha256sum -c -)|| exit 1 mkdir -p $CABAL_REPOCACHE/downloads xz -d < /tmp/cabal-plan.xz > $CABAL_REPOCACHE/downloads/cabal-plan || exit 1 chmod a+x $CABAL_REPOCACHE/downloads/cabal-plan || exit 1 fi mkdir -p $CABAL_DIR/bin || exit 1 ln -s $CABAL_REPOCACHE/downloads/cabal-plan $CABAL_DIR/bin/cabal-plan || exit 1 } # Help ############################################################################## show_usage() { cat < $BUILDDIR/cabal/config <= 80200)) cabal.project "package servant" echo_if_to $((HCNUMVER >= 80200)) cabal.project " ghc-options: -Werror=missing-methods" echo_if_to $((HCNUMVER >= 80200)) cabal.project "package servant-client" echo_if_to $((HCNUMVER >= 80200)) cabal.project " ghc-options: -Werror=missing-methods" echo_if_to $((HCNUMVER >= 80200)) cabal.project "package servant-docs" echo_if_to $((HCNUMVER >= 80200)) cabal.project " ghc-options: -Werror=missing-methods" echo_if_to $((HCNUMVER >= 80200)) cabal.project "package servant-server" echo_if_to $((HCNUMVER >= 80200)) cabal.project " ghc-options: -Werror=missing-methods" cat >> cabal.project <> cabal.project.local run_cmd cat cabal.project run_cmd cat cabal.project.local # dump install plan put_info "dump install plan" run_cmd $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all run_cmd cabal-plan # install dependencies put_info "install dependencies" run_cmd $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j all run_cmd $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dependencies-only -j all # build w/o tests put_info "build w/o tests" run_cmd $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all # build put_info "build" run_cmd $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all # tests put_info "tests" run_cmd $CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct # cabal check put_info "cabal check" change_dir "${PKGDIR_servant}" run_cmd ${CABAL} -vnormal check change_dir "${PKGDIR_servant_client}" run_cmd ${CABAL} -vnormal check change_dir "${PKGDIR_servant_docs}" run_cmd ${CABAL} -vnormal check change_dir "${PKGDIR_servant_server}" run_cmd ${CABAL} -vnormal check change_dir "$BUILDDIR" # haddock put_info "haddock" run_cmd $CABAL v2-haddock --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all # unconstrained build put_info "unconstrained build" run_cmd rm -f cabal.project.local run_cmd $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all # Done run_cmd echo OK