fix(packaging): do not package cpan libraries already available #357
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: perl-cpan-libraries | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths: | |
- ".github/workflows/perl-cpan-libraries.yml" | |
push: | |
branches: | |
- develop | |
- dev-[2-9][0-9].[0-9][0-9].x | |
- master | |
- "[2-9][0-9].[0-9][0-9].x" | |
paths: | |
- ".github/workflows/perl-cpan-libraries.yml" | |
jobs: | |
get-environment: | |
uses: ./.github/workflows/get-environment.yml | |
package-rpm: | |
needs: [get-environment] | |
if: ${{ needs.get-environment.outputs.stability != 'stable' }} | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
distrib: [el8, el9] | |
name: | |
[ | |
"ARGV::Struct", | |
"Authen::SASL::SASLprep", # perl-Authen-SASL exists on el8 and el9 but does not provide Authen::SASL::SASLprep. Which plugin use it ? | |
"Authen::SCRAM::Client", | |
"BSON", | |
"BSON::XS", | |
"Config::AWS", | |
"Convert::Binary::C", | |
"Convert::EBCDIC", | |
"Crypt::Blowfish_PP", | |
"Crypt::OpenSSL::AES", | |
"DataStruct::Flat", | |
"DateTime::Format::Duration::ISO8601", | |
"DBD::Sybase", | |
"Device::Modbus", | |
"Device::Modbus::RTU::Client", | |
"Device::Modbus::TCP::Client", | |
"Email::Send::SMTP::Gmail", | |
"FFI::CheckLib", | |
"FFI::Platypus", | |
"File::SearchPath", | |
"HTTP::ProxyPAC", | |
"JMX::Jmx4Perl", | |
"Mojo::IOLoop::Signal", | |
"MongoDB", | |
"MooseX::ClassAttribute", | |
"Net::Amazon::Signature::V4", | |
"Net::DHCP", | |
"Net::FTPSSL", | |
"Net::HTTPTunnel", | |
"Net::NTP", | |
"Net::SMTPS", # exist on el8, does not exist on el9 | |
"Net::SMTP_auth", | |
"Net::Subnet", | |
"Net::TFTP", | |
"Paws", | |
"PBKDF2::Tiny", | |
"Statistics::Descriptive", # exist on el8, does not exist on el9 | |
"Statistics::Regression", | |
"Term::Clui", | |
"Unicode::Stringprep", | |
"URI::Template", | |
"URL::Encode", | |
"URL::Encode::XS", # exist on el8, does not exist on el9 | |
"UUID", | |
"UUID::URandom", | |
"WWW::Selenium", | |
"XML::LibXML::Simple", | |
"ZMQ::Constants", # exist on el8, does not exist on el9 | |
"ZMQ::FFI", | |
"ZMQ::LibZMQ4" | |
] | |
include: | |
- build_distribs: "el8,el9" | |
- rpm_dependencies: "" | |
- rpm_provides: "" | |
- version: "" | |
- spec_file: "" | |
- distrib: el8 | |
package_extension: rpm | |
image: packaging-plugins-alma8 | |
- distrib: el9 | |
package_extension: rpm | |
image: packaging-plugins-alma9 | |
- name: "BSON" | |
rpm_provides: "perl(BSON::Bytes) perl(BSON::Code) perl(BSON::DBRef) perl(BSON::OID) perl(BSON::Raw) perl(BSON::Regex) perl(BSON::Time) perl(BSON::Timestamp) perl(BSON::Types) perl(BSON)" | |
- name: "DateTime::Format::Duration::ISO8601" | |
rpm_provides: "perl(DateTime-Format-Duration-ISO8601)" | |
- name: "Device::Modbus::RTU::Client" | |
version: "0.022" | |
- name: "Device::Modbus::TCP::Client" | |
version: "0.026" | |
- name: "Exporter::Shiny" | |
build_distribs: el8 | |
rpm_provides: "perl(Exporter::Shiny) perl(Exporter::Tiny)" | |
- name: "FFI::CheckLib" | |
rpm_dependencies: "perl(Env)" | |
- name: "FFI::Platypus" | |
rpm_provides: "perl(FFI::Platypus::Buffer) perl(FFI::Platypus::Memory)" | |
rpm_dependencies: "perl(Capture::Tiny) perl(FFI::CheckLib) perl(File::Spec::Functions) perl(IPC::Cmd) perl(JSON::PP) perl(List::Util) perl(autodie) perl(constant) perl(parent)" | |
no-auto-depends: true | |
- name: "Net::DHCP" | |
rpm_provides: "perl(Net::DHCP::Constants) perl(Net::DHCP::Packet)" | |
- name: "Statistics::Regression" | |
version: "0.53" | |
- name: "URL::Encode::XS" | |
build_distribs: el9 | |
- name: "UUID" | |
version: "0.31" | |
- name: "ZMQ::Constants" | |
build_distribs: "el9" | |
- name: "ZMQ::FFI" | |
rpm_dependencies: "zeromq" | |
- name: "ZMQ::LibZMQ4" | |
version: "0.01" | |
rpm_dependencies: "zeromq" | |
- name: "Mojo::IOLoop::Signal" | |
rpm_dependencies: "perl-Mojolicious" | |
rpm_provides: "perl(Mojo::IOLoop::Signal)" | |
no-auto-depends: true | |
name: package ${{ matrix.distrib }} ${{ matrix.name }} | |
container: | |
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest | |
credentials: | |
username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }} | |
password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} | |
steps: | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
run: | | |
yum install -y yum-utils epel-release git | |
yum config-manager --set-enabled crb || true # alma 9 | |
yum config-manager --set-enabled powertools || true # alma 8 | |
yum install -y cpanminus rpm-build libcurl-devel libssh-devel expat-devel gcc libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel perl-Module-Build-Tiny | |
dnf module reset -y ruby | |
dnf module enable -y ruby:3.1 | |
dnf install -y ruby ruby-devel | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
repository: kduret/fpm | |
ref: fix-rpm-perl-dependency-name-unchanged | |
path: fpm | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
name: Build and install fpm # waiting https://github.com/jordansissel/fpm/pull/2066 | |
run: | | |
dnf install -y bsdtar | |
cd fpm | |
gem install bundler | |
bundle install | |
make install | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file == '' }} | |
run: | | |
if [ -z "${{ matrix.version }}" ]; then | |
PACKAGE_VERSION="" | |
else | |
PACKAGE_VERSION=" -v ${{ matrix.version }}" | |
fi | |
if [ -z "${{ matrix.rpm_dependencies }}" ]; then | |
PACKAGE_DEPENDENCIES="" | |
else | |
for PACKAGE_DEPENDENCY in `echo "${{ matrix.rpm_dependencies }}"`; do | |
PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --depends "$PACKAGE_DEPENDENCY"" | |
done | |
fi | |
if [ ! -z "${{ matrix.no-auto-depends }}" ]; then | |
PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --no-auto-depends" | |
fi | |
if [ -z "${{ matrix.rpm_provides }}" ]; then | |
PACKAGE_PROVIDES="" | |
else | |
for PACKAGE_PROVIDE in `echo "${{ matrix.rpm_provides }}"`; do | |
PACKAGE_PROVIDES="$PACKAGE_PROVIDES --provides $PACKAGE_PROVIDE" | |
done | |
fi | |
cpanm Module::Build::Tiny | |
cpanm Module::Install | |
export SYBASE="/usr" | |
fpm -s cpan -t ${{ matrix.package_extension }} --rpm-dist ${{ matrix.distrib }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES$PACKAGE_PROVIDES$PACKAGE_VERSION ${{ matrix.name }} | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file != '' }} | |
run: | | |
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} | |
rpmbuild --undefine=_disable_source_fetch -ba ${{ matrix.spec_file }} | |
cp -r ~/rpmbuild/RPMS/noarch/*.rpm . | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
name: Replace '::' with - in the feature path | |
id: package-name | |
run: | | |
name="${{ matrix.name }}" | |
name_with_dash="${name//::/-}" | |
echo "Modified Name: $name_with_dash" | |
echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ steps.package-name.outputs.name_with_dash }} | |
path: ./*.${{ matrix.package_extension }} | |
retention-days: 1 | |
merge-package-rpm-artifacts: | |
needs: [package-rpm] | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
distrib: [el8, el9] | |
steps: | |
- name: Merge Artifacts | |
uses: actions/upload-artifact/merge@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: packages-rpm-${{ matrix.distrib }} | |
pattern: packages-rpm-${{ matrix.distrib }}-* | |
delete-merged: false # cannot be set to true due to random fails: Failed to DeleteArtifact: Unable to make request: ECONNRESET | |
retention-days: 1 | |
- name: Delete merged artifacts | |
uses: geekyeggo/delete-artifact@f275313e70c08f6120db482d7a6b98377786765b # v5.1.0 | |
with: | |
name: packages-rpm-${{ matrix.distrib }}-* | |
failOnError: false | |
sign-rpm: | |
needs: [merge-package-rpm-artifacts] | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
distrib: [el8, el9] | |
name: sign rpm ${{ matrix.distrib }} | |
container: | |
image: docker.centreon.com/centreon-private/rpm-signing:latest | |
options: -t | |
credentials: | |
username: ${{ secrets.HARBOR_RPM_GPG_SIGNING_REPO_USERNAME }} | |
password: ${{ secrets.HARBOR_RPM_GPG_SIGNING_REPO_TOKEN }} | |
steps: | |
- run: apt-get install -y zstd | |
shell: bash | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: packages-rpm-${{ matrix.distrib }} | |
path: ./ | |
- run: echo "HOME=/root" >> $GITHUB_ENV | |
shell: bash | |
- run: rpmsign --addsign ./*.rpm | |
shell: bash | |
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ./*.rpm | |
key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }} | |
package-deb: | |
needs: [get-environment] | |
if: ${{ needs.get-environment.outputs.stability != 'stable' }} | |
runs-on: ${{ matrix.runner_name }} | |
strategy: | |
fail-fast: false | |
matrix: | |
image: [packaging-plugins-bullseye, packaging-plugins-bookworm, packaging-plugins-jammy, packaging-plugins-bullseye-arm64] | |
name: | |
[ | |
"ARGV::Struct", | |
"Authen::SCRAM::Client", | |
"Config::AWS", | |
"Convert::EBCDIC", | |
"Crypt::Blowfish_PP", | |
"Crypt::OpenSSL::AES", | |
"DataStruct::Flat", | |
"DateTime::Format::Duration::ISO8601", | |
"Device::Modbus", | |
"Digest::SHA1", | |
"Email::Send::SMTP::Gmail", | |
"Hash::Ordered", | |
"HTTP::ProxyPAC", | |
"JMX::Jmx4Perl", | |
"Mojo::IOLoop::Signal", | |
"Net::Amazon::Signature::V4", | |
"Net::FTPSSL", | |
"Net::HTTPTunnel", | |
"Net::MQTT::Simple", | |
"Net::SMTP_auth", | |
"Paws", | |
"Statistics::Regression", | |
"WWW::Selenium", | |
"ZMQ::Constants", | |
"ZMQ::LibZMQ4" | |
] | |
include: | |
- runner_name: ubuntu-24.04 | |
- arch: amd64 | |
- build_distribs: "bullseye,bookworm,jammy" | |
- deb_dependencies: "" | |
- rpm_provides: "" | |
- version: "" | |
- use_dh_make_perl: "true" | |
- spec_file: "" | |
- distrib: bullseye | |
package_extension: deb | |
image: packaging-plugins-bullseye | |
- distrib: bookworm | |
package_extension: deb | |
image: packaging-plugins-bookworm | |
- distrib: jammy | |
package_extension: deb | |
image: packaging-plugins-jammy | |
- distrib: bullseye | |
package_extension: deb | |
image: packaging-plugins-bullseye-arm64 | |
arch: arm64 | |
runner_name: ["self-hosted", "collect-arm64"] | |
- name: "Net::Amazon::Signature::V4" | |
build_distribs: ["bullseye", "jammy"] | |
- name: "Paws" | |
use_dh_make_perl: "false" | |
deb_dependencies: "libmoose-perl libmoosex-classattribute-perl libjson-maybexs-perl liburl-encode-perl libargv-struct-perl libmoo-perl libtype-tiny-perl libdatastruct-flat-perl libmodule-find-perl libthrowable-perl liburi-template-perl libnet-amazon-signature-v4-perl" | |
no-auto-depends: true | |
- name: "Statistics::Regression" | |
build_distribs: "bullseye" | |
version: "0.53" | |
- name: "ZMQ::LibZMQ4" | |
use_dh_make_perl: "false" | |
version: "0.01" | |
deb_dependencies: "libzmq5" | |
name: package ${{ matrix.distrib }} ${{ matrix.arch }} ${{ matrix.name }} | |
container: | |
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest | |
credentials: | |
username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }} | |
password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} | |
steps: | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
name: Parse distrib name | |
id: parse-distrib | |
uses: ./.github/actions/parse-distrib | |
with: | |
distrib: ${{ matrix.distrib }} | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
name: Get package version | |
id: package-version | |
run: | | |
apt-get update | |
apt-get install -y cpanminus | |
if [ -z "${{ matrix.version }}" ]; then | |
CPAN_PACKAGE_VERSION=$(cpanm --info ${{ matrix.name }} | sed 's/\.tar\.gz$//' | sed 's/.*\-//' | sed 's/v//') | |
if [[ ! $CPAN_PACKAGE_VERSION =~ ^[0-9]+\.[0-9]+ ]]; then | |
echo "::error::Invalid version number: ${CPAN_PACKAGE_VERSION}" | |
exit 1 | |
fi | |
PACKAGE_VERSION="${CPAN_PACKAGE_VERSION}" | |
else | |
PACKAGE_VERSION="${{ matrix.version }}" | |
fi | |
echo "package_version=$(echo $PACKAGE_VERSION)" >> $GITHUB_OUTPUT | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.use_dh_make_perl == 'false' }} | |
run: | | |
apt-get install -y ruby libcurl4-openssl-dev libssh-dev uuid-dev libczmq-dev | |
if [ -z "${{ matrix.deb_dependencies }}" ]; then | |
PACKAGE_DEPENDENCIES="" | |
else | |
for PACKAGE_DEPENDENCY in `echo ${{ matrix.deb_dependencies }}`; do | |
PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --depends $PACKAGE_DEPENDENCY" | |
done | |
fi | |
if [ ! -z "${{ matrix.no-auto-depends }}" ]; then | |
PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --no-auto-depends" | |
fi | |
cpanm Module::Build::Tiny | |
cpanm Module::Install | |
gem install fpm | |
# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released. | |
patch -i .github/patch/fpm-deb.rb.diff $(find / -type f -name "deb.rb") | |
fpm -a native -s cpan -t ${{ matrix.package_extension }} --deb-dist ${{ matrix.distrib }} --iteration ${{ steps.parse-distrib.outputs.package_distrib_name }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES -v ${{ steps.package-version.outputs.package_version }} ${{ matrix.name }} | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.use_dh_make_perl == 'true' }} | |
run: | | |
apt-get install -y libcurl4-openssl-dev dh-make-perl libssh-dev uuid-dev libczmq-dev libmodule-install-perl libmodule-build-tiny-perl | |
# module-build-tiny is required for Mojo::IOLoop::Signal build. | |
DEB_BUILD_OPTIONS="nocheck nodocs notest" dh-make-perl make --dist ${{ matrix.distrib }} --build --version ${{ steps.package-version.outputs.package_version }}${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} --cpan ${{ matrix.name }} | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
name: Replace '::' with - in the feature path | |
id: package-name | |
run: | | |
name="${{ matrix.name }}" | |
name_with_dash="${name//::/-}" | |
echo "Modified Name: $name_with_dash" | |
echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT | |
shell: bash | |
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }} | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ matrix.arch }}-${{ steps.package-name.outputs.name_with_dash}} | |
path: ./*.${{ matrix.package_extension }} | |
retention-days: 1 | |
merge-package-deb-artifacts: | |
needs: [package-deb] | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
distrib: [bullseye, bookworm, jammy] | |
steps: | |
- name: Merge Artifacts | |
uses: actions/upload-artifact/merge@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: packages-deb-${{ matrix.distrib }} | |
pattern: packages-deb-${{ matrix.distrib }}-* | |
delete-merged: false # cannot be set to true due to random fails: Failed to DeleteArtifact: Unable to make request: ECONNRESET | |
retention-days: 1 | |
- name: Delete merged artifacts | |
uses: geekyeggo/delete-artifact@f275313e70c08f6120db482d7a6b98377786765b # v5.1.0 | |
with: | |
name: packages-deb-${{ matrix.distrib }}-* | |
failOnError: false | |
download-and-cache-deb: | |
needs: [merge-package-deb-artifacts] | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
distrib: [bullseye, bookworm, jammy] | |
steps: | |
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: packages-deb-${{ matrix.distrib }} | |
path: ./ | |
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ./*.deb | |
key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }} | |
deliver-packages: | |
needs: [get-environment, sign-rpm, download-and-cache-deb] | |
if: | | |
(contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) && | |
! cancelled() && | |
! contains(needs.*.result, 'failure') && | |
! contains(needs.*.result, 'cancelled') | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- distrib: el8 | |
package_extension: rpm | |
- distrib: el9 | |
package_extension: rpm | |
- distrib: bullseye | |
package_extension: deb | |
- distrib: bookworm | |
package_extension: deb | |
- distrib: jammy | |
package_extension: deb | |
name: deliver ${{ matrix.distrib }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | |
- name: Delivery | |
uses: ./.github/actions/package-delivery | |
with: | |
module_name: perl-cpan-libraries | |
distrib: ${{ matrix.distrib }} | |
cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} | |
stability: ${{ needs.get-environment.outputs.stability }} | |
release_type: ${{ needs.get-environment.outputs.release_type }} | |
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} |