From: Peter Rabbitson Date: Thu, 23 Oct 2014 10:02:47 +0000 (+0200) Subject: (travis) Reshuffle CI workflow, prepare for better instrumentation of failures X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=afeb40d23677e897d27b843b8d976d7c8945e6ce;p=dbsrgits%2FDBIx-Class.git (travis) Reshuffle CI workflow, prepare for better instrumentation of failures No functional changes at this point, the goal was to have no exports in 30_before_script.bash and 40_script.bash, allowing me to run everything after 20_install.bash in a subshell --- diff --git a/.travis.yml b/.travis.yml index 047a582..cc065f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,6 +28,8 @@ # functionality is moved to scripts. More about the problem (and the # WONTFIX "explanation") here: https://github.com/travis-ci/travis-ci/issues/497 # +# the entire run times out after 50 minutes, or after 5 minutes without +# console output # # Smoke all branches except for blocked* and wip/* @@ -216,52 +218,60 @@ matrix: - perl: devcpan_bleadperl_thr_mb -# sourcing the files is *EXTREMELY* important - otherwise -# no envvars will survive - -# the entire run times out after 50 minutes, or after 5 minutes without -# console output +### +### For the following two phases -e is *set* +### before_install: # common functions for all run phases below + # + # this is an exporter - sourcing it is crucial + # among other things it also sets -e + # - source maint/travis-ci_scripts/common.bash # Sets global envvars, downloads/configures debs based on CLEANTEST # Sets extra DBICTEST_* envvars # + # this is an exporter - sourcing it is crucial + # - source maint/travis-ci_scripts/10_before_install.bash install: # Build and switch to a custom perl if requested # Configure the perl env, preinstall some generic toolchain parts + # Possibly poison the environment + # + # this is an exporter - sourcing it is crucial # - source maint/travis-ci_scripts/20_install.bash +### +### From this point on -e is *unset*, rely on travis' error handling +### + - set +e + before_script: # Preinstall/install deps based on envvars/CLEANTEST # - - source maint/travis-ci_scripts/30_before_script.bash + - maint/travis-ci_scripts/30_before_script.bash script: # Run actual tests # - - source maint/travis-ci_scripts/40_script.bash + - maint/travis-ci_scripts/40_script.bash after_success: # Check if we can assemble a dist properly if not in CLEANTEST # - - source maint/travis-ci_scripts/50_after_success.bash + - maint/travis-ci_scripts/50_after_success.bash after_failure: # No tasks yet # - #- source maint/travis-ci_scripts/50_after_failure.bash + #- maint/travis-ci_scripts/50_after_failure.bash after_script: # No tasks yet # - #- source maint/travis-ci_scripts/60_after_script.bash - - # if we do not unset this before we terminate the travis teardown will - # mark the entire job as failed - - set +e + #- maint/travis-ci_scripts/60_after_script.bash diff --git a/maint/travis-ci_scripts/20_install.bash b/maint/travis-ci_scripts/20_install.bash index 23ac294..3551e16 100755 --- a/maint/travis-ci_scripts/20_install.bash +++ b/maint/travis-ci_scripts/20_install.bash @@ -84,3 +84,45 @@ CPAN_CFG_SCRIPT=" CPAN::Config->commit; " run_or_err "Configuring CPAN.pm" "perl -e '$CPAN_CFG_SCRIPT'" + +# poison the environment +if [[ "$POISON_ENV" = "true" ]] ; then + + # in addition to making sure tests do not rely on implicid order of + # returned results, look through lib, find all mentioned ENVvars and + # set them to true and see if anything explodes + for var in \ + DBICTEST_SQLITE_REVERSE_DEFAULT_ORDER \ + $(grep -P '\$ENV\{' -r lib/ --exclude-dir Optional | grep -oP '\bDBIC\w+' | sort -u | grep -v DBIC_TRACE) + do + if [[ -z "${!var}" ]] ; then + export $var=1 + echo "POISON_ENV: setting $var to 1" + fi + done + + # bogus nonexisting DBI_* + export DBI_DSN="dbi:ODBC:server=NonexistentServerAddress" + export DBI_DRIVER="ADO" + + # some people do in fact set this - boggle!!! + export PERL_STRICTURES_EXTRA=1 + + # emulate a local::lib-like env + # trick cpanm into executing true as shell - we just need the find+unpack + run_or_err "Downloading latest stable DBIC from CPAN" \ + "SHELL=/bin/true cpanm --look DBIx::Class" + + export PERL5LIB="$( ls -d ~/.cpanm/latest-build/DBIx-Class-*/lib | tail -n1 ):$PERL5LIB" + + # perldoc -l searches $(pwd)/lib in addition to PERL5LIB etc, hence the cd / + echo_err "Latest stable DBIC (without deps) locatable via \$PERL5LIB at $(cd / && perldoc -l DBIx::Class)" + +fi + +if [[ "$CLEANTEST" != "true" ]] ; then + # using SQLT if will be available + # not doing later because we will be running in a subshell + export DBICTEST_SQLT_DEPLOY=1 + +fi diff --git a/maint/travis-ci_scripts/30_before_script.bash b/maint/travis-ci_scripts/30_before_script.bash index 5c0cb00..b6b7587 100755 --- a/maint/travis-ci_scripts/30_before_script.bash +++ b/maint/travis-ci_scripts/30_before_script.bash @@ -1,44 +1,15 @@ #!/bin/bash -if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then return ; fi +# this file is executed in a subshell - set up the common stuff +source maint/travis-ci_scripts/common.bash -# poison the environment -if [[ "$POISON_ENV" = "true" ]] ; then - - # in addition to making sure tests do not rely on implicid order of - # returned results, look through lib, find all mentioned ENVvars and - # set them to true and see if anything explodes - for var in \ - DBICTEST_SQLITE_REVERSE_DEFAULT_ORDER \ - $(grep -P '\$ENV\{' -r lib/ --exclude-dir Optional | grep -oP '\bDBIC\w+' | sort -u | grep -v DBIC_TRACE) - do - if [[ -z "${!var}" ]] ; then - export $var=1 - echo "POISON_ENV: setting $var to 1" - fi - done +if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then exit 0 ; fi - # bogus nonexisting DBI_* - export DBI_DSN="dbi:ODBC:server=NonexistentServerAddress" - export DBI_DRIVER="ADO" - - # some people do in fact set this - boggle!!! - export PERL_STRICTURES_EXTRA=1 - - # emulate a local::lib-like env - # trick cpanm into executing true as shell - we just need the find+unpack - run_or_err "Downloading latest stable DBIC from CPAN" \ - "SHELL=/bin/true cpanm --look DBIx::Class" - - export PERL5LIB="$( ls -d ~/.cpanm/latest-build/DBIx-Class-*/lib | tail -n1 ):$PERL5LIB" - - # perldoc -l searches $(pwd)/lib in addition to PERL5LIB etc, hence the cd / - echo_err "Latest stable DBIC (without deps) locatable via \$PERL5LIB at $(cd / && perldoc -l DBIx::Class)" +# FIXME - this is a kludge in place of proper MDV testing. For the time +# being simply use the minimum versions of our DBI/DBDstack, to avoid +# fuckups like 0.08260 (went unnoticed for 5 months) +if [[ "$POISON_ENV" = "true" ]] ; then - # FIXME - this is a kludge in place of proper MDV testing. For the time - # being simply use the minimum versions of our DBI/DBDstack, to avoid - # fuckups like 0.08260 (went unnoticed for 5 months) - # # use url-spec for DBI due to https://github.com/miyagawa/cpanminus/issues/328 if perl -M5.013003 -e1 &>/dev/null ; then # earlier DBI will not compile without PERL_POLLUTE which was gone in 5.14 @@ -100,8 +71,6 @@ if [[ "$CLEANTEST" = "true" ]]; then else # we will be running all dbic tests - preinstall lots of stuff, run basic tests - # using SQLT and set up whatever databases necessary - export DBICTEST_SQLT_DEPLOY=1 # do the preinstall in several passes to minimize amount of cross-deps installing # multiple times, and to avoid module re-architecture breaking another install diff --git a/maint/travis-ci_scripts/40_script.bash b/maint/travis-ci_scripts/40_script.bash index cda7779..2edcafd 100755 --- a/maint/travis-ci_scripts/40_script.bash +++ b/maint/travis-ci_scripts/40_script.bash @@ -1,6 +1,9 @@ #!/bin/bash -if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then return ; fi +# this file is executed in a subshell - set up the common stuff +source maint/travis-ci_scripts/common.bash + +if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then exit 0 ; fi run_harness_tests() { local -x HARNESS_OPTIONS=c:j$NUMTHREADS diff --git a/maint/travis-ci_scripts/50_after_failure.bash b/maint/travis-ci_scripts/50_after_failure.bash index abfd2b9..fb5b5fb 100755 --- a/maint/travis-ci_scripts/50_after_failure.bash +++ b/maint/travis-ci_scripts/50_after_failure.bash @@ -3,8 +3,9 @@ # !!! Nothing here will be executed !!! # The source-line calling this script is commented out in .travis.yml -if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then return ; fi +# this file is executed in a subshell - set up the common stuff +source maint/travis-ci_scripts/common.bash -echo_err "Nothing to do" +if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then exit 0 ; fi -return 0 +echo_err "Nothing to do" diff --git a/maint/travis-ci_scripts/50_after_success.bash b/maint/travis-ci_scripts/50_after_success.bash index fc94fce..5571e2b 100755 --- a/maint/travis-ci_scripts/50_after_success.bash +++ b/maint/travis-ci_scripts/50_after_success.bash @@ -1,6 +1,9 @@ #!/bin/bash -if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then return ; fi +# this file is executed in a subshell - set up the common stuff +source maint/travis-ci_scripts/common.bash + +if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then exit 0 ; fi if [[ "$CLEANTEST" != "true" ]] ; then parallel_installdeps_notest $(perl -Ilib -MDBIx::Class -e 'print join " ", keys %{DBIx::Class::Optional::Dependencies->req_list_for("dist_dir")}') diff --git a/maint/travis-ci_scripts/60_after_script.bash b/maint/travis-ci_scripts/60_after_script.bash index abfd2b9..fb5b5fb 100755 --- a/maint/travis-ci_scripts/60_after_script.bash +++ b/maint/travis-ci_scripts/60_after_script.bash @@ -3,8 +3,9 @@ # !!! Nothing here will be executed !!! # The source-line calling this script is commented out in .travis.yml -if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then return ; fi +# this file is executed in a subshell - set up the common stuff +source maint/travis-ci_scripts/common.bash -echo_err "Nothing to do" +if [[ -n "$SHORT_CIRCUIT_SMOKE" ]] ; then exit 0 ; fi -return 0 +echo_err "Nothing to do" diff --git a/maint/travis-ci_scripts/common.bash b/maint/travis-ci_scripts/common.bash index 7e3a781..ee447e3 100755 --- a/maint/travis-ci_scripts/common.bash +++ b/maint/travis-ci_scripts/common.bash @@ -1,5 +1,6 @@ #!/bin/bash +# "autodie" set -e TEST_STDERR_LOG=/tmp/dbictest.stderr