Skip to content

build

build #227

Workflow file for this run

---
name: build
on:
pull_request:
push:
branches:
- master
schedule:
- cron: "0 0 * * 0"
jobs:
linux-build:
name: Build on ${{ matrix.name }}
runs-on: ubuntu-latest
env:
RPM_PKG_MGR: dnf
DEBIAN_FRONTEND: noninteractive
TZ: Etc/UTC
strategy:
matrix:
include:
- container: ubuntu:16.04
name: Ubuntu 16.04 LTS (Xenial Xerus)
- container: ubuntu:18.04
name: Ubuntu 18.04 LTS (Bionic Beaver)
- container: ubuntu:20.04
name: Ubuntu 20.04 LTS (Focal Fossa)
- container: ubuntu:22.04
name: Ubuntu 22.04 LTS (Jammy Jellyfish)
- container: ubuntu:23.04
name: Ubuntu 23.04 (Lunar Lobster)
- container: ubuntu:23.10
name: Ubuntu 23.10 (Mantic Minotaur)
- container: ubuntu:24.04
name: Ubuntu 24.04 LTS (Noble Numbat)
- container: debian:buster
name: Debian 10 (Buster)
- container: debian:bullseye
name: Debian 11 (Bullseye)
- container: debian:bookworm
name: Debian 12 (Bookworm)
- container: fedora:34
name: Fedora 34
- container: fedora:35
name: Fedora 35
- container: fedora:36
name: Fedora 36
- container: fedora:37
name: Fedora 37
- container: fedora:38
name: Fedora 38
- container: fedora:39
name: Fedora 39
- container: quay.io/centos/centos:centos7
name: CentOS 7
- container: quay.io/centos/centos:stream8
name: CentOS Stream 8
- container: quay.io/centos/centos:stream9
name: CentOS Stream 9
- container: alpine:3.17
name: Alpine Linux 3.17
fail-fast: false
container:
image: ${{ matrix.container }}
steps:
- name: Detect OS release
run: |
. /etc/os-release && echo "OS_RELEASE_ID=$ID" >> $GITHUB_ENV
. /etc/os-release && echo "OS_RELEASE_VERSION=$VERSION_ID" >> $GITHUB_ENV
. /etc/os-release && echo "OS_RELEASE_VERSION_MAJOR=${VERSION_ID%%.*}" >> $GITHUB_ENV
- name: Use archived repositories on EL 8
run: |
# CentOS 8 reached EOL 31 December 2021.
# The repositories configured in the container are not working any more.
# Use vault.centos.org package archive instead.
find /etc/yum.repos.d/ -type f -exec sed -i 's/mirrorlist=/#mirrorlist=/g' {} +
find /etc/yum.repos.d/ -type f -exec sed -i 's/#baseurl=/baseurl=/g' {} +
find /etc/yum.repos.d/ -type f -exec sed -i 's/mirror.centos.org/vault.centos.org/g' {} +
if: |
env.OS_RELEASE_ID == 'centos' && env.OS_RELEASE_VERSION == '8'
- name: Adjust package manager for EL 7
run: echo "RPM_PKG_MGR=yum" >> $GITHUB_ENV
if: |
env.OS_RELEASE_ID == 'centos' && env.OS_RELEASE_VERSION == '7'
- name: Add dnf plugins for recent EL
run: ${{env.RPM_PKG_MGR}} install -y dnf-plugins-core
if: |
env.OS_RELEASE_ID == 'centos' && env.RPM_PKG_MGR == 'dnf'
- name: Add powertools repo for EL 8
run: ${{env.RPM_PKG_MGR}} config-manager --set-enabled powertools
if: |
env.OS_RELEASE_ID == 'centos' && env.OS_RELEASE_VERSION == '8'
- name: Add CRB repo for EL 9
run: ${{env.RPM_PKG_MGR}} config-manager --set-enabled crb
if: |
env.OS_RELEASE_ID == 'centos' && env.OS_RELEASE_VERSION == '9'
- name: Add EPEL repo for EL linux
run: ${{env.RPM_PKG_MGR}} -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-${{env.OS_RELEASE_VERSION_MAJOR}}.noarch.rpm
if: |
env.OS_RELEASE_ID == 'centos'
- name: Update Debian OS
run: |
apt-get update -q -y
apt-get upgrade -q -y
if: |
env.OS_RELEASE_ID == 'debian' || env.OS_RELEASE_ID == 'ubuntu'
- name: Update Redhat OS
run: ${{env.RPM_PKG_MGR}} upgrade -y
if: |
env.OS_RELEASE_ID == 'centos' || env.OS_RELEASE_ID == 'fedora'
- name: Update Alpine Linux
run: |
apk update
apk upgrade
if: |
env.OS_RELEASE_ID == 'alpine'
- name: Install perl requirements for Debian systems
run: >
apt-get install -q -y
libarchive-zip-perl
libcgi-pm-perl
libdata-dump-perl
libdate-calc-perl
libdate-manip-perl
libdatetime-format-iso8601-perl
libdatetime-format-sqlite-perl
libdatetime-format-strptime-perl
libdatetime-perl
libdatetime-timezone-perl
libdbd-sqlite3-perl
libdbi-perl
libfile-chdir-perl
libfile-homedir-perl
libfile-slurp-perl
libfile-which-perl
libhtml-parser-perl
libhtml-tree-perl
libhttp-cache-transparent-perl
libhttp-cookies-perl
libhttp-message-perl
libio-stringy-perl
libjson-perl
libjson-xs-perl
liblingua-preferred-perl
liblinux-dvb-perl
liblist-moreutils-perl
liblog-tracemessages-perl
liblwp-protocol-https-perl
liblwp-useragent-determined-perl
libperlio-gzip-perl
libsoap-lite-perl
libterm-progressbar-perl
libterm-readkey-perl
libtimedate-perl
libtk-tablematrix-perl
libtry-tiny-perl
libunicode-string-perl
liburi-encode-perl
liburi-perl
libwww-perl
libxml-dom-perl
libxml-libxml-perl
libxml-libxslt-perl
libxml-parser-perl
libxml-simple-perl
libxml-treepp-perl
libxml-twig-perl
libxml-writer-perl
make
perl
perl-tk
if: |
env.OS_RELEASE_ID == 'debian' || env.OS_RELEASE_ID == 'ubuntu'
- name: Install perl requirements for Redhat systems
run: >
${{env.RPM_PKG_MGR}} install -y
make
perl
perl-Archive-Zip
perl-CGI
perl-Data-Dumper
perl-Date-Calc
perl-Date-Manip
perl-DateTime
perl-DateTime-Format-ISO8601
perl-DateTime-Format-SQLite
perl-DateTime-Format-Strptime
perl-DBD-SQLite
perl-DBI
perl-Digest-SHA
perl-ExtUtils-MakeMaker
perl-File-chdir
perl-File-HomeDir
perl-File-Slurp
perl-File-Temp
perl-File-Which
perl-Getopt-Long
perl-HTML-Parser
perl-HTML-Tree
perl-HTTP-Cache-Transparent
perl-HTTP-Cookies
perl-HTTP-Message
perl-IO-stringy
perl-JSON
perl-JSON-XS
perl-libwww-perl
perl-Lingua-Preferred
perl-List-MoreUtils
perl-LWP-Protocol-https
perl-LWP-UserAgent-Determined
perl-Memoize
perl-PerlIO-gzip
perl-SOAP-Lite
perl-Term-ProgressBar
perl-TermReadKey
perl-Time-HiRes
perl-Time-Local
perl-Time-Piece
perl-TimeDate
perl-Tk
perl-Tk-TableMatrix
perl-Try-Tiny
perl-Unicode-String
perl-URI
perl-URI-Encode
perl-XML-DOM
perl-XML-LibXML
perl-XML-LibXSLT
perl-XML-Parser
perl-XML-Simple
perl-XML-TreePP
perl-XML-Twig
perl-XML-Writer
if: |
env.OS_RELEASE_ID == 'centos' || env.OS_RELEASE_ID == 'fedora'
- name: Install perl requirements for Alpine Linux
run: >
apk add
perl-archive-zip
perl-compress-raw-zlib
perl-date-manip
perl-datetime-format-iso8601
perl-datetime-format-strptime
perl-dbd-sqlite
perl-dbi
perl-file-which
perl-file-slurp
perl-html-parser
perl-io-gzip
perl-io-stringy
perl-json
perl-json-xs
perl-libwww
perl-lingua-en-numbers-ordinate
perl-lingua-preferred
perl-list-moreutils
perl-lwp-protocol-https
perl-lwp-useragent-determined
perl-term-progressbar
perl-term-readkey
perl-timedate
perl-xml-dom
perl-xml-libxml
perl-xml-libxslt
perl-xml-parser
perl-xml-treepp
perl-xml-twig
perl-xml-writer
perl-unicode-string
perl-uri-encode
perl-dev
make
perl-app-cpanminus
perl-module-build
perl-test-fatal
perl-test-requiresinternet
if: |
env.OS_RELEASE_ID == 'alpine'
- name: Build missing perl requirements from CPAN for Alpine Linux
run: >
cpanm
DateTime::Format::SQLite
File::HomeDir
HTML::Tree
HTTP::Cache::Transparent
if: |
env.OS_RELEASE_ID == 'alpine'
- name: Checkout using legacy node version for legacy distros
uses: actions/checkout@v3
if: |
( ( ( env.OS_RELEASE_ID == 'centos' && env.OS_RELEASE_VERSION_MAJOR < 8 ) ||
( env.OS_RELEASE_ID == 'ubuntu' && env.OS_RELEASE_VERSION_MAJOR < 20 ) ) )
- name: Checkout
uses: actions/checkout@v4
if: |
( ! ( ( env.OS_RELEASE_ID == 'centos' && env.OS_RELEASE_VERSION_MAJOR < 8 ) ||
( env.OS_RELEASE_ID == 'ubuntu' && env.OS_RELEASE_VERSION_MAJOR < 20 ) ) )
- name: perl Makefile.PL
run: perl Makefile.PL -default NO_PACKLIST=1 NO_PERLLOCAL=1
- name: make
run: make
- name: make test
run: make test
windows-build:
name: Build on Windows
# Build Windows self-extracting executables.
# Build 32-bit and 64-bit versions.
# Strictly speaking we only need the 32-bit version (since that will also run
# on 64-bit) but there may be some benefit in the 64-bit Perl for machine-
# intensive operations, such as tv_imdb.
strategy:
matrix:
target: [win64, win32]
uses: ./.github/workflows/winbuild.yml
with:
arch: ${{ matrix.target }}
secrets: inherit
macos-build:
name: Build on macOS
runs-on: macos-latest
strategy:
fail-fast: false
steps:
- name: Install dependencies
run: brew install perl cpanminus openssl sqlite tcl-tk
- name: Install perl requirements
run: >
perl /opt/homebrew/bin/cpanm --notest --no-interactive
Archive::Zip
CGI
CGI::Carp
Date::Manip
DateTime
DateTime::Format::ISO8601
DateTime::Format::SQLite
DBD::SQLite
DBI
File::HomeDir
File::Slurp
HTML::FormatText
HTTP::Cache::Transparent
IO::Scalar
JSON
Lingua::EN::Numbers::Ordinate
Lingua::Preferred
List::MoreUtils
LWP::Protocol::https
LWP::UserAgent::Determined
Memoize
SOAP::Lite
Term::ProgressBar
Tk
Tk::TableMatrix
Unicode::String
Unicode::UTF8simple
URI::Encode
XML::DOM
XML::LibXML
XML::LibXSLT
XML::TreePP
XML::Twig
XML::Writer
- name: Show content of log files on failure
if: ${{ failure() }}
run: cat /Users/runner/.cpanm/work/*/build.log
- name: Checkout
uses: actions/checkout@v4
- name: perl Makefile.PL
run: perl Makefile.PL -default NO_PACKLIST=1 NO_PERLLOCAL=1
- name: make
run: make
- name: make test
run: make test