maint: remove Travis stuff which has been replaced with Github actions (#325)
[bioperl-live.git] / .github / workflows / ci.yml
blob0e2be14416099658e886e96a8e6a91805cfe5eb4
1 name: Run Tests
3 on:
4   push:
5     branches:
6       - '*'
7   pull_request:
9 env:
10   PKG_DEPS_UBUNTU: >-
11     libdb-dev
12   PKG_DEPS_DEBIAN: >-
13     libdb-dev
14   PERL_MIN_VERSION: '5.12'
16 jobs:
17   dist:
18     name: Make distribution using Dist::Zilla
19     runs-on: ubuntu-latest
20     steps:
21       # Build the dist using Dist::Zilla.
22       - name: Checkout code
23         uses: actions/checkout@v3
24       - name: Cache ~/perl5
25         uses: actions/cache@v3
26         with:
27           key: ${{ runner.os }}-dist-locallib
28           path: ~/perl5
29       - name: Perl version
30         run: |
31           perl -v
32       - name: Install cpanm
33         run: |
34           curl -L https://cpanmin.us | perl - --sudo App::cpanminus
35       - name: Install local::lib
36         run: |
37           cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
38       - name: Install Dist::Zilla
39         shell: bash
40         run: |
41           eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
42           cpanm -n Dist::Zilla
43           dzil authordeps --missing | cpanm -n
44       - name: Make distribution
45         shell: bash
46         run: |
47           eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
48           dzil build --in build-dir
49       - name: Upload artifact
50         uses: actions/upload-artifact@v3
51         with:
52           name: dist
53           path: ./build-dir
54       # Get Perl versions to test.
55       - uses: shogo82148/actions-setup-perl@v1
56       - id: set-perl-versions
57         name: Get Perl versions to test (minimum and median)
58         shell: perl {0}
59         run: |
60           use Actions::Core;
61           use List::Util qw(uniqstr first);
63           die 'Minimum version not specified as major version 5.xyz' unless $ENV{PERL_MIN_VERSION} =~ /^5\.[0-9]+$/;
64           my $min_perl = $ENV{PERL_MIN_VERSION};
65           info("Minimum Perl version is $min_perl");
66           set_output(min => $min_perl);
68           my @non_patch_versions = uniqstr map { /^(\d+\.\d+)/ } perl_versions( platform => 'linux' );
69           my $min_idx = first { $non_patch_versions[$_] eq $min_perl } 0..$#non_patch_versions;
70           my $median_perl = $non_patch_versions[int($min_idx/2)];
71           info("Median Perl version is $median_perl");
72           set_output(med => $median_perl );
73     outputs:
74       min-perl-version: ${{ steps.set-perl-versions.outputs.min }}
75       med-perl-version: ${{ steps.set-perl-versions.outputs.med }}
77   test:
78     needs: dist
79     runs-on: ${{ matrix.os }}
80     strategy:
81       matrix:
82         os: [macos-latest, windows-latest, ubuntu-latest]
83         perl: ['5']
84         author-testing: [false]
85         include:
86           - { os: 'ubuntu-latest', perl: "5"    , author-testing: true  , coverage: true }
87           - { os: 'ubuntu-latest', perl: "${{ needs.dist.outputs.med-perl-version }}" }
88           - { os: 'ubuntu-latest', perl: "${{ needs.dist.outputs.min-perl-version }}" }
89     name: Perl ${{ matrix.perl }} on ${{ matrix.os }}, author (${{ matrix.author-testing || 'false' }}), coverage (${{ matrix.coverage }})
91     steps:
92       - name: Get dist artifact
93         uses: actions/download-artifact@v3
94         with:
95           name: dist
97       # Setup system deps
98       - name: Setup system deps (apt)
99         if: runner.os == 'Linux' && env.PKG_DEPS_UBUNTU
100         run: |
101           sudo apt-get -y update && sudo apt-get install -y --no-install-recommends ${{ env.PKG_DEPS_UBUNTU }}
103       - name: Set up perl
104         uses: shogo82148/actions-setup-perl@v1
105         if: matrix.os != 'windows-latest'
106         with:
107           perl-version: ${{ matrix.perl }}
108       - name: Set up perl (Strawberry)
109         uses: shogo82148/actions-setup-perl@v1
110         if: matrix.os == 'windows-latest'
111         with:
112           distribution: 'strawberry'
114       - run: perl -V
116       - name: Install Perl deps
117         run: |
118           cpanm --notest --installdeps .
120       - name: Install Perl develop deps
121         if: matrix.author-testing
122         run: |
123           cpanm --notest --installdeps --with-develop .
125       - name: Install Perl coverage deps
126         if: matrix.coverage
127         run: |
128           cpanm --notest Devel::Cover::Report::Coveralls
130       - name: Set AUTHOR_TESTING
131         if: matrix.author-testing
132         shell: bash
133         run: |
134           echo "AUTHOR_TESTING=1" >> $GITHUB_ENV
136       - name: Run tests (no coverage)
137         if: ${{ ! matrix.coverage }}
138         run: |
139           cpanm --verbose --test-only .
141       - name: Run tests (with coverage)
142         if: matrix.coverage
143         env:
144           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
145           HARNESS_PERL_SWITCHES: -MDevel::Cover
146         run: |
147           cpanm --verbose --test-only .
148           cover -report Coveralls
150   containers:
151     needs: dist
152     runs-on: ubuntu-latest
153     container: ${{ matrix.container }}
154     strategy:
155       fail-fast: false
156       matrix:
157         container: ['debian:bullseye', 'debian:bookworm']
158     steps:
159       - name: Get dist artifact
160         uses: actions/download-artifact@v3
161         with:
162           name: dist
163       - name: Setup system deps (apt)
164         if: ${{ startsWith(matrix.container, 'debian:') }}
165         run: |
166           apt-get -y update && apt-get install -y --no-install-recommends perl cpanminus make apt-file
167           apt-file update
168           apt-get install -y --no-install-recommends \
169             ${{ env.PKG_DEPS_DEBIAN }} \
170             $( cpanm -q --showdeps .  | perl -MConfig -MCwd=abs_path '-M5;@prefixes = map abs_path($_), @Config{qw(vendorlibexp vendorarchexp)}' -lpe 's,~.*$,,; s,::,/,g; $mod = $_; $_ = join qq{\n}, map { qq{$_/${mod}.pm} } @prefixes' | apt-file search -lFf - )
172       - name: Run tests
173         run: |
174           cpanm --verbose --test-only .