diff --git a/.github/actions/package/action.yml b/.github/actions/package/action.yml new file mode 100644 index 00000000000..950b9cb8e27 --- /dev/null +++ b/.github/actions/package/action.yml @@ -0,0 +1,119 @@ +name: package +description: Package module using nfpm +inputs: + nfpm_file_pattern: + description: The pattern of the nfpm configuration file(s) + required: true + package_extension: + description: The package extension (deb or rpm) + required: true + distrib: + description: The package distrib + required: true + major_version: + description: The major version + required: false + minor_version: + description: The minor version + required: false + release: + description: The package release number + required: false + arch: + description: The package architecture + required: false + commit_hash: + description: The commit hash + required: true + cache_key: + description: The package files cache key + required: true + rpm_gpg_key: + description: The rpm gpg key + required: true + rpm_gpg_signing_key_id: + description: The rpm gpg signing key identifier + required: true + rpm_gpg_signing_passphrase: + description: The rpm gpg signing passphrase + required: true + stability: + description: "branch stability (stable, testing, unstable, canary)" + required: true + +runs: + using: composite + + steps: + - name: Import gpg key + env: + RPM_GPG_SIGNING_KEY: ${{ inputs.rpm_gpg_key }} + run: echo -n "$RPM_GPG_SIGNING_KEY" > key.gpg + shell: bash + + - name: Build ${{ inputs.package_extension }} files + env: + RPM_GPG_SIGNING_KEY_ID: ${{ inputs.rpm_gpg_signing_key_id }} + RPM_GPG_SIGNING_PASSPHRASE: ${{ inputs.rpm_gpg_signing_passphrase }} + run: | + export MAJOR_VERSION="${{ inputs.major_version }}" + export VERSION="${{ inputs.major_version }}.${{ inputs.minor_version }}" + export RELEASE="${{ inputs.release }}" + export ARCH="${{ inputs.arch }}" + + if [ "${{ inputs.package_extension }}" = "rpm" ]; then + export DIST=".${{ inputs.distrib }}" + else + export DIST="" + if [ "${{ inputs.stability }}" = "unstable" ] || [ "${{ inputs.stability }}" = "canary" ]; then + export RELEASE="$RELEASE~${{ inputs.distrib }}" + else + export RELEASE="1~${{ inputs.distrib }}" + fi + fi + + MAJOR_LEFT=$( echo $MAJOR_VERSION | cut -d "." -f1 ) + MAJOR_RIGHT=$( echo $MAJOR_VERSION | cut -d "-" -f1 | cut -d "." -f2 ) + BUMP_MAJOR_RIGHT=$(( MAJOR_RIGHT_PART + 1 )) + if [ "$MAJOR_RIGHT" = "04" ]; then + BUMP_MAJOR_LEFT="$MAJOR_LEFT" + BUMP_MAJOR_RIGHT="10" + else + BUMP_MAJOR_LEFT=$(( $MAJOR_LEFT + 1 )) + BUMP_MAJOR_RIGHT="04" + fi + + export NEXT_MAJOR_VERSION="$BUMP_MAJOR_LEFT.$BUMP_MAJOR_RIGHT" + + export RPM_SIGNING_KEY_FILE="$(pwd)/key.gpg" + export RPM_SIGNING_KEY_ID="$RPM_GPG_SIGNING_KEY_ID" + export NFPM_RPM_PASSPHRASE="$RPM_GPG_SIGNING_PASSPHRASE" + + for FILE in ${{ inputs.nfpm_file_pattern }}; do + DIRNAME=$(dirname $FILE) + BASENAME=$(basename $FILE) + if [ -f $DIRNAME/env/.env.${{ inputs.distrib }} ]; then + source $DIRNAME/env/.env.${{ inputs.distrib }} + fi + cd $DIRNAME + sed -i "s/@COMMIT_HASH@/${{ inputs.commit_hash }}/g" $BASENAME + nfpm package --config $BASENAME --packager ${{ inputs.package_extension }} + cd - + mv $DIRNAME/*.${{ inputs.package_extension }} ./ + done + shell: bash + + - name: Cache packages + uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 + with: + path: ./*.${{ inputs.package_extension }} + key: ${{ inputs.cache_key }} + + # Update if condition to true to get packages as artifacts + - if: ${{ false }} + name: Upload package artifacts + uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 + with: + name: ${{ inputs.arch != '' && format('packages-{0}-{1}', inputs.distrib, inputs.arch) || format('packages-{0}', inputs.distrib) }} + path: ./*.${{ inputs.package_extension}} + retention-days: 1 diff --git a/.github/actions/promote-to-stable/action.yml b/.github/actions/promote-to-stable/action.yml index df267f5acfc..4432aee5663 100644 --- a/.github/actions/promote-to-stable/action.yml +++ b/.github/actions/promote-to-stable/action.yml @@ -13,9 +13,6 @@ inputs: major_version: description: "Centreon packaged major version" required: true - minor_version: - description: "Centreon package minor version" - required: true stability: description: "The package stability (stable, testing, unstable)" required: true @@ -44,7 +41,6 @@ runs: # DEBUG echo "[DEBUG] - Major version: ${{ inputs.major_version }}" - echo "[DEBUG] - Minor version: ${{ inputs.minor_version }}" echo "[DEBUG] - Distrib: ${{ inputs.distrib }}" echo "[DEBUG] - release_cloud: ${{ inputs.release_cloud }}" echo "[DEBUG] - release_type: ${{ inputs.release_type }}" @@ -113,7 +109,6 @@ runs: set -eux echo "[DEBUG] - Major version: ${{ inputs.major_version }}" - echo "[DEBUG] - Minor version: ${{ inputs.minor_version }}" echo "[DEBUG] - Distrib: ${{ inputs.distrib }}" # Define ROOT_REPO_PATH for debian diff --git a/.github/docker/Dockerfile.centreon-collect-alma8 b/.github/docker/Dockerfile.centreon-collect-alma8 index bec7cbb5b38..739931a2f01 100644 --- a/.github/docker/Dockerfile.centreon-collect-alma8 +++ b/.github/docker/Dockerfile.centreon-collect-alma8 @@ -13,6 +13,12 @@ dnf config-manager --set-enabled powertools dnf --best install -y epel-release +echo '[goreleaser] +name=GoReleaser +baseurl=https://repo.goreleaser.com/yum/ +enabled=1 +gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo + curl -LsS "https://r.mariadb.com/downloads/mariadb_repo_setup" | bash -s -- --os-type=rhel --os-version=8 --mariadb-server-version="mariadb-10.5" dnf install -y cmake \ gcc \ @@ -42,7 +48,8 @@ dnf install -y cmake \ yum-utils \ perl-interpreter \ rpm-build \ - zstd + zstd \ + nfpm dnf update libarchive diff --git a/.github/docker/Dockerfile.centreon-collect-alma9 b/.github/docker/Dockerfile.centreon-collect-alma9 index 154c6b9b2fd..e774c8837ff 100644 --- a/.github/docker/Dockerfile.centreon-collect-alma9 +++ b/.github/docker/Dockerfile.centreon-collect-alma9 @@ -13,6 +13,12 @@ dnf config-manager --set-enabled crb dnf install -y epel-release +echo '[goreleaser] +name=GoReleaser +baseurl=https://repo.goreleaser.com/yum/ +enabled=1 +gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo + dnf --best install -y cmake \ gcc \ gcc-c++ \ @@ -38,6 +44,7 @@ dnf --best install -y cmake \ rpm-build \ procps-ng \ zstd \ + nfpm \ sudo # TEMPORARY PYTHON UPGRADE TO 3.18 TO HELP WITH DATA_FILTER ISSUE diff --git a/.github/docker/Dockerfile.centreon-collect-debian-bullseye b/.github/docker/Dockerfile.centreon-collect-debian-bullseye index ab906c01b24..39517321206 100644 --- a/.github/docker/Dockerfile.centreon-collect-debian-bullseye +++ b/.github/docker/Dockerfile.centreon-collect-debian-bullseye @@ -35,6 +35,10 @@ apt-get -y install cmake \ zstd \ perl-base +echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list +apt-get update +apt-get install -y nfpm + apt-get clean localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 diff --git a/.github/scripts/collect-prepare-test-robot.sh b/.github/scripts/collect-prepare-test-robot.sh index 7cbff251afe..75a5cb0d86b 100755 --- a/.github/scripts/collect-prepare-test-robot.sh +++ b/.github/scripts/collect-prepare-test-robot.sh @@ -63,10 +63,12 @@ cd tests if [ "$distrib" = "ALMALINUX" ]; then dnf groupinstall -y "Development Tools" dnf install -y python3-devel + dnf clean all else apt-get update apt-get install -y build-essential apt-get install -y python3-dev + apt-get clean fi diff --git a/.github/workflows/centreon-collect.yml b/.github/workflows/centreon-collect.yml index 50fab57e492..ddbe5abd1bc 100644 --- a/.github/workflows/centreon-collect.yml +++ b/.github/workflows/centreon-collect.yml @@ -195,7 +195,6 @@ jobs: module_name: collect distrib: ${{ matrix.distrib }} major_version: ${{ needs.get-version.outputs.major_version }} - minor_version: ${{ needs.get-version.outputs.minor_version }} stability: ${{ needs.get-version.outputs.stability }} github_ref_name: ${{ github.ref_name }} release_type: ${{ needs.get-version.outputs.release_type }} diff --git a/.github/workflows/get-version.yml b/.github/workflows/get-version.yml index 743260acfd8..1d82b1deb8e 100644 --- a/.github/workflows/get-version.yml +++ b/.github/workflows/get-version.yml @@ -39,7 +39,7 @@ on: jobs: get-version: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 outputs: major_version: ${{ steps.get_version.outputs.major_version }} minor_version: ${{ steps.get_version.outputs.minor_version }} diff --git a/.github/workflows/gorgone.yml b/.github/workflows/gorgone.yml index b778cd58f52..2e131b2e806 100644 --- a/.github/workflows/gorgone.yml +++ b/.github/workflows/gorgone.yml @@ -177,7 +177,6 @@ jobs: module_name: gorgone distrib: ${{ matrix.distrib }} major_version: ${{ needs.get-version.outputs.major_version }} - minor_version: ${{ needs.get-version.outputs.minor_version }} stability: ${{ needs.get-version.outputs.stability }} github_ref_name: ${{ github.ref_name }} release_type: ${{ needs.get-version.outputs.release_type }} diff --git a/.github/workflows/libzmq.yml b/.github/workflows/libzmq.yml index 496462a1ce2..4729bf0b7e1 100644 --- a/.github/workflows/libzmq.yml +++ b/.github/workflows/libzmq.yml @@ -207,7 +207,6 @@ jobs: module_name: libzmq distrib: ${{ matrix.distrib }} major_version: ${{ needs.get-version.outputs.major_version }} - minor_version: ${{ needs.get-version.outputs.minor_version }} stability: ${{ needs.get-version.outputs.stability }} github_ref_name: ${{ github.ref_name }} release_type: ${{ needs.get-version.outputs.release_type }} diff --git a/.github/workflows/lua-curl.yml b/.github/workflows/lua-curl.yml new file mode 100644 index 00000000000..d0ce33a9a08 --- /dev/null +++ b/.github/workflows/lua-curl.yml @@ -0,0 +1,232 @@ +name: lua-curl + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +on: + workflow_dispatch: + pull_request: + paths: + - lua-curl/** + push: + branches: + - develop + - dev-[2-9][0-9].[0-9][0-9].x + - master + - "[2-9][0-9].[0-9][0-9].x" + paths: + - lua-curl/** + +env: + major_version: 0.3 + minor_version: 13 + release: 10 # 10 for openssl 1.1.1 / 20 for openssl system + +jobs: + get-version: + uses: ./.github/workflows/get-version.yml + + package: + needs: [get-version] + if: ${{ needs.get-version.outputs.stability != 'stable' }} + + strategy: + fail-fast: false + matrix: + include: + - package_extension: rpm + image: centreon-collect-alma8 + distrib: el8 + lua_version: 5.3 + runner: ubuntu-24.04 + arch: amd64 + - package_extension: rpm + image: centreon-collect-alma9 + distrib: el9 + lua_version: 5.4 + runner: ubuntu-24.04 + arch: amd64 + - package_extension: deb + image: centreon-collect-debian-bullseye + distrib: bullseye + lua_version: 5.3 + runner: ubuntu-24.04 + arch: amd64 + + runs-on: ${{ matrix.runner }} + + container: + image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:${{ needs.get-version.outputs.img_version }} + credentials: + username: ${{ secrets.DOCKER_REGISTRY_ID }} + password: ${{ secrets.DOCKER_REGISTRY_PASSWD }} + + name: package ${{ matrix.distrib }} ${{ matrix.arch }} + + steps: + - name: Checkout sources + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + - name: Checkout sources of lua-curl + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + repository: Lua-cURL/Lua-cURLv3 + path: lua-curl-src + ref: v${{ env.major_version }}.${{ env.minor_version }} + + - name: Compile lua-curl and prepare packaging + run: | + if [ "${{ matrix.package_extension }}" == "rpm" ]; then + dnf install -y dnf-plugins-core + if [ "${{ matrix.distrib }}" == "el8" ]; then + dnf config-manager --set-enabled powertools + else + dnf config-manager --set-enabled crb + fi + dnf install -y make cmake gcc openssl openssl-devel libcurl-devel lua lua-devel python3-pip cpanminus + else + apt-get update + apt-get install -y make cmake gcc openssl libssl-dev libcurl4-openssl-dev lua${{ matrix.lua_version }} liblua${{ matrix.lua_version }} liblua${{ matrix.lua_version }}-dev python3-pip cpanminus + fi + + cpanm -v \ + IPC::Cmd \ + Digest::SHA \ + Thread::Queue \ + IO::Socket::SSL \ + File::Copy \ + File::Compare + + cd lua-curl-src + + pip3 install conan==2.5.0 + + conan profile detect + + cat <<'EOF' >> conanfile.txt + [requires] + libcurl/8.0.1 + openssl/1.1.1t + zlib/1.2.13 + + [generators] + CMakeToolchain + + [options] + libcurl/*:with_ca_bundle=/etc/ssl/certs/ca-bundle.crt + libcurl/*:with_ca_fallback=False + libcurl/*:with_ca_path=/etc/ssl/certs/ + EOF + + conan install . --build=missing --deployer=full_deploy + + if [ "${{ matrix.package_extension }}" == "rpm" ]; then + sed -i "s#^CURL_LIBS.*#CURL_LIBS=-Lfull_deploy/host/libcurl/8.0.1/Release/x86_64/lib -l:libcurl.a -Lfull_deploy/host/openssl/1.1.1t/Release/x86_64/lib -l:libssl.a -l:libcrypto.a -Lfull_deploy/host/zlib/1.2.13/Release/x86_64/lib -l:libz.a -lpthread#" Makefile + else + sed -i "s#^CURL_LIBS.*#CURL_LIBS=-Lfull_deploy/host/libcurl/8.0.1/Release/x86_64/lib -l:libcurl.a -Lfull_deploy/host/openssl/1.1.1t/Release/x86_64/lib -l:libssl.a -l:libcrypto.a -Lfull_deploy/host/zlib/1.2.13/Release/x86_64/lib -l:libz.a -lpthread -I/usr/include/lua5.3#" Makefile + fi + + make + + cd .. + + sed -i "s/@luaver@/${{ matrix.lua_version }}/g" lua-curl/packaging/lua-curl.yaml + shell: bash + + - name: Package + uses: ./.github/actions/package + with: + nfpm_file_pattern: "lua-curl/packaging/lua-curl.yaml" + distrib: ${{ matrix.distrib }} + package_extension: ${{ matrix.package_extension }} + major_version: ${{ env.major_version }} + minor_version: ${{ env.minor_version }} + release: ${{ env.release }} + arch: ${{ matrix.arch }} + commit_hash: ${{ github.sha }} + cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-lua-curl-${{ matrix.distrib }}-${{ matrix.arch }} + 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-version.outputs.stability }} + + deliver-rpm: + if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-version.outputs.stability) }} + needs: [get-version, package] + runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - distrib: el8 + arch: amd64 + - distrib: el9 + arch: amd64 + name: deliver ${{ matrix.distrib }} ${{ matrix.arch }} + + steps: + - name: Checkout sources + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + - name: Publish RPM packages + uses: ./.github/actions/rpm-delivery + with: + module_name: lua-curl + distrib: ${{ matrix.distrib }} + version: ${{ needs.get-version.outputs.major_version }} + artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + cache_key: ${{ github.sha }}-${{ github.run_id }}-rpm-lua-curl-${{ matrix.distrib }}-${{ matrix.arch }} + stability: ${{ needs.get-version.outputs.stability }} + release_type: ${{ needs.get-version.outputs.release_type }} + release_cloud: ${{ needs.get-version.outputs.release_cloud }} + + deliver-deb: + if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-version.outputs.stability) }} + needs: [get-version, package] + runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - distrib: bullseye + arch: amd64 + name: deliver ${{ matrix.distrib }} ${{ matrix.arch }} + + steps: + - name: Checkout sources + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + - name: Publish DEB packages + uses: ./.github/actions/deb-delivery + with: + module_name: lua-curl + distrib: ${{ matrix.distrib }} + version: ${{ needs.get-version.outputs.major_version }} + artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} + cache_key: ${{ github.sha }}-${{ github.run_id }}-deb-lua-curl-${{ matrix.distrib }}-${{ matrix.arch }} + stability: ${{ needs.get-version.outputs.stability }} + release_type: ${{ needs.get-version.outputs.release_type }} + release_cloud: ${{ needs.get-version.outputs.release_cloud }} + + promote: + needs: [get-version] + if: ${{ contains(fromJson('["stable"]'), needs.get-version.outputs.stability) && github.event_name != 'workflow_dispatch' }} + runs-on: [self-hosted, common] + strategy: + matrix: + distrib: [el8, el9, bullseye] + + 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_name: lua-curl + distrib: ${{ matrix.distrib }} + major_version: ${{ needs.get-version.outputs.major_version }} + stability: ${{ needs.get-version.outputs.stability }} + github_ref_name: ${{ github.ref_name }} + release_type: ${{ needs.get-version.outputs.release_type }} + release_cloud: ${{ needs.get-version.outputs.release_cloud }} diff --git a/.github/workflows/robot-test.yml b/.github/workflows/robot-test.yml index d37c88ab2c0..07f4f821c6f 100644 --- a/.github/workflows/robot-test.yml +++ b/.github/workflows/robot-test.yml @@ -94,7 +94,7 @@ jobs: uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Install RPM packages - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 + uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 with: path: ./*.rpm key: ${{ github.run_id }}-${{ github.sha }}-rpm-centreon-collect-${{ inputs.distrib }}-amd64-${{ github.head_ref || github.ref_name }} diff --git a/lua-curl/packaging/lua-curl.yaml b/lua-curl/packaging/lua-curl.yaml new file mode 100644 index 00000000000..6f3916f8479 --- /dev/null +++ b/lua-curl/packaging/lua-curl.yaml @@ -0,0 +1,53 @@ +name: "lua-curl" +arch: "${ARCH}" +platform: "linux" +version_schema: "none" +version: "${VERSION}" +release: "${RELEASE}${DIST}" +section: "default" +priority: "optional" +maintainer: "Centreon " +description: | + lua curl library + Commit: @COMMIT_HASH@ +vendor: "Centreon" +homepage: "https://www.centreon.com" +license: "Apache-2.0" + +contents: + - src: "../../lua-curl-src/lcurl.so" + dst: "/usr/lib64/lua/@luaver@/lcurl.so" + file_info: + mode: 0644 + packager: rpm + - src: "../../lua-curl-src/lcurl.so" + dst: "/usr/lib/x86_64-linux-gnu/lua/@luaver@/lcurl.so" + file_info: + mode: 0644 + packager: deb + + - src: "../../lua-curl-src/src/lua/cURL.lua" + dst: "/usr/share/lua/@luaver@/cURL.lua" + + - src: "../../lua-curl-src/src/lua/cURL" + dst: "/usr/share/lua/@luaver@/cURL" + +overrides: + rpm: + depends: + - lua + deb: + depends: + - lua@luaver@ + provides: + - lua@luaver@-curl + conflicts: + - lua@luaver@-curl + replaces: + - lua@luaver@-curl + +rpm: + summary: lua curl + signature: + key_file: ${RPM_SIGNING_KEY_FILE} + key_id: ${RPM_SIGNING_KEY_ID}