name: libzmq

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

on:
  workflow_dispatch:
  pull_request:
    paths:
      - ".version"
      - '.github/workflows/libzmq.yml'
  push:
    branches:
      - develop
      - dev-[2-9][0-9].[0-9][0-9].x
      - master
      - "[2-9][0-9].[0-9][0-9].x"
      - 'release-[2-9][0-9].[0-9][0-9]-next'
      - 'hotfix-[2-9][0-9].[0-9][0-9]-next'
    paths:
      - ".version"
      - '.github/workflows/libzmq.yml'
    tags:
      - "release-*"

jobs:
  dependency-scan:
    uses: centreon/security-tools/.github/workflows/dependency-analysis.yml@main

  get-environment:
    needs: [dependency-scan]
    uses: ./.github/workflows/get-environment.yml

  package-rpm:
    needs: [get-environment]
    if: |
      needs.get-environment.outputs.skip_workflow == 'false' &&
      needs.get-environment.outputs.stability != 'stable'

    strategy:
      fail-fast: false
      matrix:
        include:
          - image: packaging-centreon-collect-alma8
            distrib: el8
            arch: amd64
          - image: packaging-centreon-collect-alma9
            distrib: el9
            arch: amd64

    runs-on: ubuntu-24.04

    container:
      image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:${{ needs.get-environment.outputs.packaging_img_version }}
      credentials:
        username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }}
        password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }}

    name: package ${{ matrix.distrib }}

    steps:
      - name: package rpm
        run: |
          dnf install -y wget rpmdevtools rpmlint epel-release
          dnf config-manager --set-enabled crb || true # alma 9
          dnf config-manager --set-enabled powertools || true # alma 8
          dnf install -y asciidoc autoconf automake gcc gcc-c++ glib2-devel libbsd-devel libtool make rpm-build xmlto

          cd /github/home
          wget -O - https://github.com/zeromq/libzmq/archive/refs/tags/v4.3.5.tar.gz | tar zxvf -
          mkdir -p /github/home/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
          cp libzmq-4.3.5/packaging/redhat/zeromq.spec /github/home/rpmbuild/SPECS/
          wget https://github.com/zeromq/libzmq/releases/download/v4.3.5/zeromq-4.3.5.tar.gz -O  /github/home/rpmbuild/SOURCES/zeromq-4.3.5.tar.gz
          rpmbuild -bb --nocheck /github/home/rpmbuild/SPECS/zeromq.spec
          cd -

          mv /github/home/rpmbuild/RPMS/x86_64/*.rpm ./
          rm -f zeromq-debugsource-*.rpm libzmq5-debuginfo-*.rpm
        shell: bash

      - name: cache rpm
        uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
        with:
          path: ./*.rpm
          key: unsigned-${{ github.run_id }}-${{ github.sha }}-rpm-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}

  sign-rpm:
    needs: [get-environment, package-rpm]
    if: |
      needs.get-environment.outputs.skip_workflow == 'false' &&
      needs.get-environment.outputs.stability != 'stable'
    runs-on: centreon-common
    strategy:
      matrix:
        include:
          - image: packaging-alma8
            distrib: el8
            arch: amd64
          - image: packaging-alma9
            distrib: el9
            arch: amd64
    name: sign rpm ${{ matrix.distrib }}
    container:
      image: docker.centreon.com/centreon-private/rpm-signing:latest
      options: -t
      credentials:
        username: ${{ secrets.HARBOR_CENTREON_PRIVATE_USERNAME }}
        password: ${{ secrets.HARBOR_CENTREON_PRIVATE_TOKEN }}

    steps:
      - run: apt-get install -y zstd
        shell: bash

      - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      - uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
        with:
          path: ./*.rpm
          key: unsigned-${{ github.run_id }}-${{ github.sha }}-rpm-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}

      - run: echo "HOME=/root" >> $GITHUB_ENV
        shell: bash

      - run: rpmsign --addsign ./*.rpm
        shell: bash

      - uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
        with:
          path: ./*.rpm
          key: ${{ github.run_id }}-${{ github.sha }}-rpm-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}

      - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
        with:
          name: packages-${{ matrix.distrib }}
          path: ./*.rpm
          retention-days: 1

  package-deb:
    needs: [get-environment]
    if: |
      needs.get-environment.outputs.skip_workflow == 'false' &&
      needs.get-environment.outputs.stability != 'stable'

    strategy:
      fail-fast: false
      matrix:
        include:
          - image: packaging-centreon-collect-bookworm
            distrib: bookworm
            runner: ubuntu-24.04
            arch: amd64
          # - image: packaging-nfpm-jammy
          #   distrib: jammy
          #   runner: ubuntu-24.04
          #   arch: amd64

    runs-on: ${{ matrix.runner }}

    container:
      image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:${{ needs.get-environment.outputs.packaging_img_version }}
      credentials:
        username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }}
        password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }}

    name: package ${{ matrix.distrib }} ${{ matrix.arch }}

    steps:
      - name: Checkout sources
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      - name: Parse distrib name
        id: parse-distrib
        uses: ./.github/actions/parse-distrib
        with:
          distrib: ${{ matrix.distrib }}

      - name: package deb
        run: |
          apt-get update
          apt-get install -y build-essential gcc g++ debhelper dh-autoreconf dpkg-dev libkrb5-dev libnorm-dev libpgm-dev libsodium-dev libunwind8-dev libnss3-dev libgnutls28-dev libbsd-dev pkg-config asciidoc wget xmlto
          wget -O - https://github.com/zeromq/libzmq/releases/download/v4.3.5/zeromq-4.3.5.tar.gz | tar zxvf -

          cd zeromq-4.3.5
          ./configure
          make
          make install
          cd ..

          wget -O - https://github.com/zeromq/libzmq/archive/refs/tags/v4.3.5.tar.gz | tar zxvf -
          cd libzmq-4.3.5
          ln -s packaging/debian
          sed -Ei 's/([0-9]+.[0-9]+.[0-9]+-[0-9]+.[0-9]+)/\1${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }}/' debian/changelog
          sed -Ei 's/UNRELEASED/${{ matrix.distrib }}/' debian/changelog
          DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -us -uc -nc
          cd ..

          rm -f libzmq5-dbg_*.deb
        shell: bash

      - name: cache deb
        uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
        with:
          path: ./*.deb
          key: ${{ github.run_id }}-${{ github.sha }}-deb-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}

  deliver-rpm:
    needs: [get-environment, sign-rpm]
    if: |
      needs.get-environment.outputs.skip_workflow == 'false' &&
      ((needs.get-environment.outputs.delivery_type == 'feature' && contains(github.event.pull_request.labels.*.name, 'delivery-feature')) ||
      contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability)) &&
      ! cancelled() &&
      ! contains(needs.*.result, 'failure') &&
      ! contains(needs.*.result, 'cancelled')
    runs-on: centreon-common
    strategy:
      matrix:
        include:
          - distrib: el8
            arch: amd64
          - distrib: el9
            arch: amd64

    name: deliver ${{ matrix.distrib }}

    steps:
      - name: Checkout sources
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      - name: Publish RPM packages
        uses: ./.github/actions/rpm-delivery
        with:
          module_name: libzmq
          distrib: ${{ matrix.distrib }}
          version: ${{ needs.get-environment.outputs.major_version }}
          artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
          cache_key: ${{ github.run_id }}-${{ github.sha }}-rpm-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}
          stability: ${{ needs.get-environment.outputs.stability }}
          release_type: ${{ needs.get-environment.outputs.release_type }}
          is_cloud: ${{ needs.get-environment.outputs.is_cloud }}
          delivery_type: ${{ needs.get-environment.outputs.delivery_type }}
          centreon_technique_pat: ${{ secrets.CENTREON_TECHNIQUE_PAT }}

  deliver-deb:
    needs: [get-environment, package-deb]
    if: |
      needs.get-environment.outputs.skip_workflow == 'false' &&
      contains(fromJson('["unstable", "testing"]'), needs.get-environment.outputs.stability) &&
      ! cancelled() &&
      ! contains(needs.*.result, 'failure') &&
      ! contains(needs.*.result, 'cancelled') &&
      (needs.get-environment.outputs.is_cloud == 'false' || needs.get-environment.outputs.stability == 'unstable')
    runs-on: centreon-common
    strategy:
      matrix:
        include:
          - distrib: bookworm
            arch: amd64

    name: deliver ${{ matrix.distrib }} ${{ matrix.arch }}

    steps:
      - name: Checkout sources
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      - name: Publish DEB packages
        uses: ./.github/actions/deb-delivery
        with:
          module_name: libzmq
          distrib: ${{ matrix.distrib }}
          version: ${{ needs.get-environment.outputs.major_version }}
          artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
          cache_key: ${{ github.run_id }}-${{ github.sha }}-deb-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}
          stability: ${{ needs.get-environment.outputs.stability }}
          release_type: ${{ needs.get-environment.outputs.release_type }}
          is_cloud: ${{ needs.get-environment.outputs.is_cloud }}

  promote:
    needs: [get-environment, deliver-rpm, deliver-deb]
    if: |
      needs.get-environment.outputs.skip_workflow == 'false' &&
      (contains(fromJson('["stable", "testing"]'), needs.get-environment.outputs.stability) && github.event_name != 'workflow_dispatch') &&
      ! cancelled() &&
      ! contains(needs.*.result, 'failure') &&
      ! contains(needs.*.result, 'cancelled') &&
      github.repository == 'centreon/centreon-collect'
    runs-on: centreon-common
    strategy:
      matrix:
        distrib: [el8, el9, bookworm]

    steps:
      - name: Checkout sources
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      - name: Promote ${{ matrix.distrib }} to stable
        uses: ./.github/actions/promote-to-stable
        with:
          artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
          module_name: libzmq
          distrib: ${{ matrix.distrib }}
          major_version: ${{ needs.get-environment.outputs.major_version }}
          minor_version: ${{ needs.get-environment.outputs.minor_version }}
          stability: ${{ needs.get-environment.outputs.stability }}
          github_ref_name: ${{ github.ref_name }}
          release_type: ${{ needs.get-environment.outputs.release_type }}
          is_cloud: ${{ needs.get-environment.outputs.is_cloud }}

  set-skip-label:
    needs: [get-environment, deliver-rpm, deliver-deb, promote]
    if: |
      needs.get-environment.outputs.skip_workflow == 'false' &&
      ! cancelled() &&
      ! contains(needs.*.result, 'failure') &&
      ! contains(needs.*.result, 'cancelled')
    uses: ./.github/workflows/set-pull-request-skip-label.yml
