diff --git a/.github/workflows/perlbrew.sha256 b/.github/workflows/perlbrew.sha256 new file mode 100644 index 0000000..d999291 --- /dev/null +++ b/.github/workflows/perlbrew.sha256 @@ -0,0 +1 @@ +c3996e4fae37a0ae01839cdd73752fb7b17e81bac2a8b39712463a7d518c4945 perlbrew.sh diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 0000000..33222be --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,94 @@ +name: "Unit tests" + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + shell: bash -l -e -o pipefail {0} + + env: + PERL_CACHE: ~/perl5 # Perlbrew and CPAN modules installed here, cached + NPG_LIB: ~/perl5npg # NPG modules installed here, not cached + WTSI_NPG_GITHUB_URL: https://github.com/wtsi-npg + WTSI_NPG_BUILD_BRANCH: ${GITHUB_HEAD_REF} + + strategy: + matrix: + perl: ["5.26.3", "5.34.1"] + + steps: + - uses: actions/checkout@v3 + + - name: "Cache Perl" + id: cache-perl + uses: actions/cache@v3 + with: + path: ${{ env.PERL_CACHE }} + key: ${{ runner.os }}-${{ matrix.perl }}-perl + + - name: "Install Perlbrew" + if: steps.cache-perl.outputs.cache-hit != 'true' + run: | + curl -sSL https://install.perlbrew.pl -o perlbrew.sh + sha256sum -c .github/workflows/perlbrew.sha256 + export PERLBREW_ROOT=${{ env.PERL_CACHE }} + sh perlbrew.sh + + source ${{ env.PERL_CACHE }}/etc/bashrc + perlbrew available + perlbrew install --notest perl-${{ matrix.perl }} + perlbrew use perl-${{ matrix.perl }} + perlbrew install-cpanm + + - name: "Initialize Perlbrew" + run: | + echo "source ${{ env.PERL_CACHE }}/etc/bashrc" >> "$HOME/.bash_profile" + + - name: "Install Perl dependencies" + run: | + cpanm --local-lib=${{ env.PERL_CACHE }} local::lib + eval $(perl -I ${{ env.PERL_CACHE }}/lib/perl5/ -Mlocal::lib="$NPG_LIB") + eval $(perl -I ${{ env.PERL_CACHE }}/lib/perl5/ -Mlocal::lib) + + ./scripts/install_wsi_dependencies.sh "$NPG_LIB" perl-dnap-utilities + + cpanm --installdeps --notest . + + - name: "Log install failure" + if: ${{ failure() }} + run: | + find ~/.cpanm/work -cmin -1 -name '*.log' -exec tail -n20 {} \; + + - name: "Archive CPAN logs on failure" + if: ${{ failure() }} + uses: actions/upload-artifact@v2 + with: + name: cpan_log + path: ~/.cpanm/work/*/build.log + retention-days: 5 + + - name: "Run tests" + run: | + eval $(perl -I ${{ env.PERL_CACHE }}/lib/perl5/ -Mlocal::lib) + eval $(perl -I ${{ env.PERL_CACHE }}/lib/perl5/ -Mlocal::lib="$NPG_LIB") + + export TEST_AUTHOR=1 + perl Build.PL + ./Build test --verbose + ./Build install + + - name: "Build distribution" + run: | + eval $(perl -I ${{ env.PERL_CACHE }}/lib/perl5/ -Mlocal::lib) + eval $(perl -I ${{ env.PERL_CACHE }}/lib/perl5/ -Mlocal::lib="$NPG_LIB") + + ./Build dist + export DIST_FILE=ml_warehouse-*.tar.gz + export MD5_FILE=$DIST_FILE.md5 + md5sum $DIST_FILE > $MD5_FILE + export SHA256_FILE=$DIST_FILE.sha256 + shasum -a 256 $DIST_FILE > $SHA256_FILE diff --git a/.github/workflows/testing_and_building_repo.yml b/.github/workflows/testing_and_building_repo.yml deleted file mode 100644 index 0b7745a..0000000 --- a/.github/workflows/testing_and_building_repo.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: testing_and_building_repo -on: [push, pull_request] -jobs: - build: - runs-on: ubuntu-latest - name: Distribution Perl - steps: - - uses: actions/checkout@v3 - - # Caching cpanm external modules - - name: Cache cpanm external modules - id: cpanmCache - uses: actions/cache@v3 - with: - path: ~/perl5ext - key: ${{ runner.os }}-build-cpanm-external - - - name: install cpanm - run: | - wget -qO - https://cpanmin.us | /usr/bin/perl - --sudo App::cpanminus - - # run the perl install script - - name: install NPG Perl dependencies, and their CPAN dependencies - run: | - cpanm --local-lib=~/perl5ext local::lib && eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib) - ${GITHUB_WORKSPACE}/scripts/install_npg_perl_dependencies.sh $WTSI_NPG_GITHUB_URL $WTSI_NPG_BUILD_BRANCH - env: - WTSI_NPG_GITHUB_URL: https://github.com/wtsi-npg - WTSI_NPG_BUILD_BRANCH: ${GITHUB_HEAD_REF} - - - name: install cpanm dependencies - run: | - eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib=~/perl5npg) - eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib=~/perl5ext) - cpanm --installdeps --notest . - - - name: run Build.PL and ./Build - run: | - eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib=~/perl5ext) - eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib=~/perl5npg) - export TEST_AUTHOR=1 - perl Build.PL - ./Build test --verbose - ./Build install - - # running ./Build dist and exporting files - - name: run ./Build dist - run: | - eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib=~/perl5ext) - export TEST_AUTHOR=1 - ./Build dist - export DIST_FILE=ml_warehouse-*.tar.gz - export MD5_FILE=$DIST_FILE.md5 - md5sum $DIST_FILE > $MD5_FILE - export SHA256_FILE=$DIST_FILE.sha256 - shasum -a 256 $DIST_FILE > $SHA256_FILE - - # Archive logs if failure - - name: Archive CPAN logs - if: ${{ failure() }} - uses: actions/upload-artifact@v2 - with: - name: cpan_log - path: /home/runner/.cpanm/work/*/build.log - retention-days: 5 diff --git a/MANIFEST b/MANIFEST index 54c2788..fed10d7 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,4 +1,3 @@ -.github/workflows/testing_and_building_repo.yml Build.PL Changes lib/WTSI/DNAP/Warehouse/Schema.pm @@ -43,7 +42,6 @@ lib/WTSI/DNAP/Warehouse/Schema/Result/SamplesExtractionActivity.pm lib/WTSI/DNAP/Warehouse/Schema/Result/TolSampleBioproject.pm MANIFEST README -scripts/install_npg_perl_dependencies.sh t/00-critic.t t/00-distribution.t t/00-pod.t diff --git a/scripts/install_npg_perl_dependencies.sh b/scripts/install_npg_perl_dependencies.sh deleted file mode 100755 index 617f090..0000000 --- a/scripts/install_npg_perl_dependencies.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -set -e -x - -WTSI_NPG_GITHUB_URL=$1 -WTSI_NPG_BUILD_BRANCH=$2 - -eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib=~/perl5ext) -cpanm --quiet --notest Module::Build - -# WTSI NPG Perl repo dependencies -repos="" -for repo in perl-dnap-utilities; -do - cd /tmp - # Always clone master when using depth 1 to get current tag - git clone --branch master --depth 1 ${WTSI_NPG_GITHUB_URL}/${repo}.git ${repo}.git - cd /tmp/${repo}.git - # Shift off master to appropriate branch (if possible) - git ls-remote --heads --exit-code origin ${WTSI_NPG_BUILD_BRANCH} && git pull origin ${WTSI_NPG_BUILD_BRANCH} && echo "Switched to branch ${WTSI_NPG_BUILD_BRANCH}" - repos=$repos" /tmp/${repo}.git" -done - -# Install CPAN dependencies. The src libs are on PERL5LIB because of -# circular dependencies. The blibs are on PERL5LIB because the package -# version, which cpanm requires, is inserted at build time. They must -# be before the libs for cpanm to pick them up in preference. - -for repo in $repos -do - export PERL5LIB=$repo/blib/lib:$PERL5LIB:$repo/lib -done - -for repo in $repos -do - cd $repo - cpanm --quiet --notest --installdeps . - perl Build.PL - ./Build -done - -# Finally, bring any common dependencies up to the latest version and -# install -eval $(perl -I ~/perl5ext/lib/perl5/ -Mlocal::lib=~/perl5npg) -for repo in $repos -do - cd $repo - cpanm --quiet --notest --installdeps . - ./Build install -done -cd diff --git a/scripts/install_wsi_dependencies.sh b/scripts/install_wsi_dependencies.sh new file mode 100755 index 0000000..9d1e506 --- /dev/null +++ b/scripts/install_wsi_dependencies.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +set -e -u -x + +WSI_NPG_GITHUB_URL=${WSI_NPG_GITHUB_URL:=https://github.com/wtsi-npg} +WSI_NPG_BUILD_BRANCH=${WSI_NPG_BUILD_BRANCH:=devel} + +# The first argument is the install base for NPG modules, enabling them to be +# installed independently of CPAN dependencies. E.g. for cases where we want +# different caching behaviour. +NPG_ROOT="$1" +shift + +repos="" +for repo in "$@" ; do + cd /tmp + + # Clone deeper than depth 1 to get the tag even if something has been already + # committed over the tag + git clone --branch master --depth 3 "$WSI_NPG_GITHUB_URL/${repo}.git" "${repo}.git" + cd "/tmp/${repo}.git" + + # Shift off master to appropriate branch (if possible) + git ls-remote --heads --exit-code origin "$WSI_NPG_BUILD_BRANCH" && \ + git pull origin "$WSI_NPG_BUILD_BRANCH" && \ + echo "Switched to branch $WSI_NPG_BUILD_BRANCH" + repos="$repos /tmp/${repo}.git" +done + +# Install CPAN dependencies. The src libs are on PERL5LIB because of +# circular dependencies. The blibs are on PERL5LIB because the package +# version, which cpanm requires, is inserted at build time. They must +# be before the libs for cpanm to pick them up in preference. +for repo in $repos +do + export PERL5LIB="$PERL5LIB:$repo/blib/lib:$repo/lib" +done + +for repo in $repos +do + cd "$repo" + cpanm --quiet --notest --installdeps . + perl Build.PL + ./Build +done + +# Finally, bring any common dependencies up to the latest version and +# install +for repo in $repos +do + cd "$repo" + cpanm --quiet --notest --installdeps . + ./Build install --install-base "$NPG_ROOT" +done