File: 30_before_script.bash

package info (click to toggle)
libdbix-class-schema-loader-perl 0.07051-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,464 kB
  • sloc: perl: 11,521; sh: 544; makefile: 4
file content (247 lines) | stat: -rwxr-xr-x 9,866 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#!/bin/bash

# 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

# 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"


  # 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::Schema::Loader"

  export PERL5LIB="$( ls -d ~/.cpanm/latest-build/DBIx-Class-Schema-Loader-*/lib | tail -n1 ):$PERL5LIB"

  # perldoc -l <mod> 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::Schema::Loader)"

  # 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
    parallel_installdeps_notest T/TI/TIMB/DBI-1.614.tar.gz
  else
    parallel_installdeps_notest T/TI/TIMB/DBI-1.57.tar.gz
  fi

  # Test both minimum DBD::SQLite and minimum BigInt SQLite
  if [[ "$CLEANTEST" = "true" ]]; then
    parallel_installdeps_notest DBD::SQLite@1.37
  else
    parallel_installdeps_notest DBD::SQLite@1.29
  fi

fi

if [[ "$CLEANTEST" = "true" ]]; then
  # The first CPAN which is somewhat sane is around 1.94_56 (perl 5.12)
  # The problem is that the first sane version also brings a *lot* of
  # deps with it, notably things like YAML and HTTP::Tiny
  # The goal of CLEANTEST is to have as little extra stuff installed as
  # possible, mainly to catch "but X is perl core" mistakes
  # So instead we still use our stock (possibly old) CPAN, and add some
  # handholding

  if ! CPAN_is_sane ; then
    # no configure_requires - we will need the usual suspects anyway
    # without pre-installing these in one pass things like extract_prereqs won't work
    installdeps ExtUtils::MakeMaker ExtUtils::CBuilder Module::Build

  fi

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

  # Include Moose-using tests
  export SCHEMA_LOADER_TESTS_USE_MOOSE=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
  # (e.g. once Carp is upgraded there's no more Carp::Heavy,
  # while a File::Path upgrade may cause a parallel EUMM run to fail)
  #
  parallel_installdeps_notest ExtUtils::MakeMaker
  parallel_installdeps_notest File::Path
  parallel_installdeps_notest Carp
  parallel_installdeps_notest Module::Build
  parallel_installdeps_notest File::Spec Data::Dumper Module::Runtime
  parallel_installdeps_notest Test::Exception Encode::Locale Test::Fatal
  parallel_installdeps_notest Test::Warn B::Hooks::EndOfScope Test::Differences HTTP::Status
  parallel_installdeps_notest Test::Pod::Coverage Test::EOL Test::NoTabs Test::Strict Devel::GlobalDestruction Sub::Util MRO::Compat Class::XSAccessor URI::Escape HTML::Entities
  parallel_installdeps_notest YAML LWP Class::Trigger JSON::XS DateTime::Format::Builder Class::Accessor::Grouped Package::Variant
  parallel_installdeps_notest SQL::Abstract Moose Module::Install JSON SQL::Translator File::Which
  parallel_installdeps_notest Module::Install::ReadmeFromPod Module::Install::AuthorTests
  parallel_installdeps_notest Math::Base36 DBD::mysql DBD::Pg Math::BigInt String::CamelCase
  parallel_installdeps_notest MooseX::NonMoose MooseX::MarkAsMethods namespace::autoclean curry

  if env | grep -q '^DBICTEST_.*_ODBC_DSN'; then
    parallel_installdeps_notest DBD::ODBC
  fi
  if [[ -n "$DBICTEST_ORA_DSN" ]]; then
    parallel_installdeps_notest DBD::Oracle
  fi
  if [[ -n "$DBICTEST_DB2_DSN" ]]; then
    parallel_installdeps_notest DBD::DB2
  fi
  if [[ -n "$DBICTEST_FIREBIRD_DSN" ]]; then
    parallel_installdeps_notest DBD::Firebird
  fi

  if [[ -n "$DBICTEST_FIREBIRD_INTERBASE_DSN" ]] ; then
    # the official version is very much outdated and does not compile on 5.14+
    # use this rather updated source tree (needs to go to PAUSE):
    # https://github.com/pilcrow/perl-dbd-interbase
    parallel_installdeps_notest git://github.com/dbsrgits/perl-dbd-interbase.git
  fi

fi

# generate the MYMETA which will have different deps depending on
# the runmode and envvars set above
run_or_err "Configure on current branch" "perl Makefile.PL"

# install (remaining) dependencies, sometimes with a gentle push
if [[ "$CLEANTEST" = "true" ]]; then
  # we may need to prepend some stuff to that list
  HARD_DEPS="$(extract_prereqs .)"

##### TEMPORARY WORKAROUNDS needed in case we will be using CPAN.pm
  if [[ "$DEVREL_DEPS" != "true" ]] && ! CPAN_is_sane ; then
    # combat dzillirium on harness-wide level, otherwise breakage happens weekly
    echo_err "$(tstamp) Ancient CPAN.pm: engaging TAP::Harness::IgnoreNonessentialDzilAutogeneratedTests during dep install"
    perl -MTAP::Harness\ 3.18 -e1 &>/dev/null || run_or_err "Upgrading TAP::Harness for HARNESS_SUBCLASS support" "cpan TAP::Harness"
    export PERL5LIB="$(pwd)/maint/travis-ci_scripts/lib:$PERL5LIB"
    export HARNESS_SUBCLASS="TAP::Harness::IgnoreNonessentialDzilAutogeneratedTests"
    # sanity check, T::H does not report sensible errors when the subclass fails to load
    perl -MTAP::Harness::IgnoreNonessentialDzilAutogeneratedTests -e1

    # DBD::SQLite reasonably wants DBI at config time
    perl -MDBI -e1 &>/dev/null || HARD_DEPS="DBI $HARD_DEPS"

    # this is a fucked CPAN - won't understand configure_requires of
    # various pieces we may run into
    # FIXME - need to get these off metacpan or something instead
    HARD_DEPS="ExtUtils::Depends B::Hooks::OP::Check $HARD_DEPS"

    if CPAN_supports_BUILDPL ; then
      # We will invoke a posibly MBT based BUILD-file, but we do not support
      # configure requires. So we not only need to install MBT but its prereqs
      # FIXME This is madness
      HARD_DEPS="$(extract_prereqs Module::Build::Tiny) Module::Build::Tiny $HARD_DEPS"
    else
      # FIXME
      # work around Params::Validate not having a Makefile.PL so really old
      # toolchains can not figure out what the prereqs are ;(
      # Need to do more research before filing a bug requesting Makefile inclusion
      HARD_DEPS="$(extract_prereqs Params::Validate) $HARD_DEPS"
    fi
  fi
##### END TEMPORARY WORKAROUNDS

  installdeps $HARD_DEPS

### FIXME in case we set it earlier in a workaround
  if [[ -n "$HARNESS_SUBCLASS" ]] ; then

    INSTALLDEPS_SKIPPED_TESTLIST=$(perl -0777 -e '
my $curmod_re = qr{
^
  (?:
    \QBuilding and testing\E
      |
    [\x20\t]* CPAN\.pm: [^\n]*? (?i:build)\S*
  )

  [\x20\t]+ (\S+)
$}mx;

my $curskip_re = qr{^ === \x20 \QSkipping nonessential autogenerated tests: \E([^\n]+) }mx;

my (undef, @chunks) = (split qr/$curmod_re/, <>);
while (@chunks) {
  my ($mod, $log) = splice @chunks, 0, 2;
  print "!!! Skipped nonessential tests while installing $mod:\n\t$1\n"
    if $log =~ $curskip_re;
}
' <<< "$LASTOUT")

    if [[ -n "$INSTALLDEPS_SKIPPED_TESTLIST" ]] ; then
      POSTMORTEM="$POSTMORTEM$(
        echo
        echo "The following non-essential tests were skipped during deps installation"
        echo "============================================================="
        echo "$INSTALLDEPS_SKIPPED_TESTLIST"
        echo "============================================================="
        echo
      )"
    fi

    unset HARNESS_SUBCLASS
  fi

else

  # listalldeps is deliberate - will upgrade everything it can find
  deplist="$(listalldeps)"

  # assume MDV on POISON_ENV, do not touch DBI/SQLite
  if [[ "$POISON_ENV" = "true" ]] ; then
    deplist="$(grep -vP '^(DBI|DBD::SQLite)$' <<< "$deplist")"
  fi

  parallel_installdeps_notest "$deplist"
fi

echo_err "$(tstamp) Dependency installation finished"
# this will display list of available versions
perl Makefile.PL

# make sure we got everything we need
if [[ -n "$(extract_prereqs .)" ]] ; then
  echo_err "$(tstamp) Not all deps installed - something went wrong :("
  sleep 1 # without this the echo below confuses the console listener >.<
  CPAN_is_sane || echo_err -e "Outdated CPAN.pm used - full installdep log follows\n$INSTALLDEPS_OUT\n\nSearch for 'NOT OK' in the text above\n\nDeps still missing:"
  sleep 3 # without this the above echo confuses the console listener >.<
  extract_prereqs .
  exit 1
fi

# check that our MDV somewhat works
if [[ "$POISON_ENV" = "true" ]] && ( perl -MDBD::SQLite\ 1.38 -e1 || perl -MDBI\ 1.615 -e1 ) &>/dev/null ; then
  echo_err "Something went wrong - higher versions of DBI and/or DBD::SQLite than we expected"
  exit 1
fi


# announce what are we running
echo_err "
===================== DEPENDENCY CONFIGURATION COMPLETE =====================
$(tstamp) Configuration phase seems to have taken $(date -ud "@$SECONDS" '+%H:%M:%S') (@$SECONDS)

$(ci_vm_state_text)"