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", "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", "Net::SMTP_auth", "Net::Subnet", "Net::TFTP", "Paws", "PBKDF2::Tiny", "Statistics::Descriptive", "Statistics::Regression", "Term::Clui", "Unicode::Stringprep", "URI::Template", "URL::Encode", "URL::Encode::XS", "UUID", "UUID::URandom", "WWW::Selenium", "XML::LibXML::Simple", "ZMQ::Constants", "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: "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: "Net::SMTPS" build_distribs: el9 - name: "Statistics::Descriptive" build_distribs: el9 - 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 }}