name: perl-json-path

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

on:
  workflow_dispatch:
  pull_request:
    paths:
      - "dependencies/perl-json-path/**"
  push:
    branches:
      - develop
      - dev-[2-9][0-9].[0-9][0-9].x
      - master
      - "[2-9][0-9].[0-9][0-9].x"
    paths:
      - "dependencies/perl-json-path/**"

jobs:
  get-environment:
    uses: ./.github/workflows/get-environment.yml

  package:
    needs: [get-environment]
    if: ${{ needs.get-environment.outputs.stability != 'stable' }}

    strategy:
      fail-fast: false
      matrix:
        include:
          - image: packaging-plugins-alma8
            distrib: el8
            package_extension: rpm
          - image: packaging-plugins-alma9
            distrib: el9
            package_extension: rpm
          - image: packaging-plugins-bullseye
            distrib: bullseye
            package_extension: deb
          - image: packaging-plugins-bookworm
            distrib: bookworm
            package_extension: deb
          - image: packaging-plugins-jammy
            distrib: jammy
            package_extension: deb

    runs-on: ubuntu-22.04

    container:
      image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
      credentials:
        username: ${{ secrets.DOCKER_REGISTRY_ID }}
        password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}

    name: package ${{ matrix.distrib }}

    steps:
      - name: Checkout sources
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Install locally JSON::Path
        run: |
          if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
            apt-get update
            apt-get install -y cpanminus gcc
          else
            dnf install -y cpanminus gcc
          fi

          if [ "${{ matrix.distrib }}" = "el8" ]; then
            cpanm -v -l /tmp JSON::Path@0.5
          else
            cpanm -v -l /tmp JSON::Path@1.0.4
          fi
        shell: bash

      - name: Set package name and paths according to distrib
        run: |
          VERSION="1.0.4"

          PERL_VERSION=$(perl -E "say $^V" | sed -E "s/v([0-9]+\.[0-9]+).+/\1/g")

          echo "Perl version is $PERL_VERSION"

          if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
            NAME="libjson-path-perl"
            PERL_VENDORLIB="/usr/share/perl5"
          else
            NAME="perl-JSON-Path"
            if [ "${{ matrix.distrib }}" = "el8" ]; then
              VERSION="0.5" # https://github.com/centreon/centreon-plugins/issues/4540
              PERL_VENDORLIB="/usr/local/share/perl5"
            else
              PERL_VENDORLIB="/usr/local/share/perl5/$PERL_VERSION"
            fi
          fi

          sed -i "s/@NAME@/$NAME/g" dependencies/perl-json-path/perl-json-path.yaml
          sed -i "s/@VERSION@/$VERSION/g" dependencies/perl-json-path/perl-json-path.yaml
          sed -i "s#@PERL_VENDORLIB@#$PERL_VENDORLIB#g" dependencies/perl-json-path/perl-json-path.yaml

          cat dependencies/perl-json-path/perl-json-path.yaml
        shell: bash

      - name: Package
        uses: ./.github/actions/package-nfpm
        with:
          nfpm_file_pattern: "dependencies/perl-json-path/perl-json-path.yaml"
          distrib: ${{ matrix.distrib }}
          package_extension: ${{ matrix.package_extension }}
          release: 3
          arch: all
          commit_hash: ${{ github.sha }}
          cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-json-path-${{ matrix.distrib }}-${{ github.head_ref || github.ref_name }}
          rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }}
          rpm_gpg_signing_key_id: ${{ secrets.RPM_GPG_SIGNING_KEY_ID }}
          rpm_gpg_signing_passphrase: ${{ secrets.RPM_GPG_SIGNING_PASSPHRASE }}
          stability: ${{ needs.get-environment.outputs.stability }}

      # set condition to true if artifacts are needed
      - if: ${{ false }}
        name: Upload package artifacts
        uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
        with:
          name: packages-${{ matrix.distrib }}
          path: ./*.${{ matrix.package_extension}}
          retention-days: 1

  deliver-rpm:
    needs: [get-environment, package]
    if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
    runs-on: [self-hosted, common]

    strategy:
      matrix:
        distrib: [el8, el9]

    name: Deliver ${{ matrix.distrib }}

    steps:
      - name: Checkout sources
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Delivery
        uses: ./.github/actions/rpm-delivery
        with:
          module_name: perl-json-path
          distrib: ${{ matrix.distrib }}
          artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
          cache_key: cache-${{ github.sha }}-rpm-perl-json-path-${{ matrix.distrib }}-${{ github.head_ref || github.ref_name }}
          stability: ${{ needs.get-environment.outputs.stability }}

  deliver-deb:
    needs: [get-environment, package]
    if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) }}
    runs-on: [self-hosted, common]

    strategy:
      matrix:
        distrib: [bullseye, bookworm, jammy]

    name: Deliver ${{ matrix.distrib }}

    steps:
      - name: Checkout sources
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Delivery
        uses: ./.github/actions/deb-delivery
        with:
          module_name: perl-json-path
          distrib: ${{ matrix.distrib }}
          artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
          cache_key: cache-${{ github.sha }}-deb-perl-json-path-${{ matrix.distrib }}-${{ github.head_ref || github.ref_name }}
          stability: ${{ needs.get-environment.outputs.stability }}

  promote:
    needs: [get-environment]
    if: ${{ contains(fromJson('["stable"]'), needs.get-environment.outputs.stability) }}
    runs-on: [self-hosted, common]
    strategy:
      matrix:
        distrib: [el8, el9, bullseye, bookworm]

    steps:
      - name: Checkout sources
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Promote ${{ matrix.distrib }} to stable
        uses: ./.github/actions/promote-to-stable
        with:
          artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
          module: perl-json-path
          distrib: ${{ matrix.distrib }}
          stability: ${{ needs.get-environment.outputs.stability }}