# SUCCESS # *INFO* Generating Bash script for testing for GHC versions: ghc-head 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 ["--ghc-head","bash","empty-line.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 <= 0.14 allow-newer: servant-js:servant allow-newer: servant-js:servant-foreign EOF $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(servant|servant-client|servant-docs|servant-server)$/; }' >> 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