diff --git a/.github/actions/parse-distrib/action.yml b/.github/actions/parse-distrib/action.yml index 68fb98e315..d13bf8de57 100644 --- a/.github/actions/parse-distrib/action.yml +++ b/.github/actions/parse-distrib/action.yml @@ -24,12 +24,7 @@ runs: - name: Parse distrib id: parse-distrib run: | - if [[ "${{ inputs.distrib }}" == "centos7" || "${{ inputs.distrib }}" == "el7" ]]; then - PACKAGE_DISTRIB_SEPARATOR="." - PACKAGE_DISTRIB_NAME="el7" - PACKAGE_EXTENSION="rpm" - DISTRIB_FAMILY="el" - elif [[ "${{ inputs.distrib }}" == "alma8" || "${{ inputs.distrib }}" == "el8" ]]; then + if [[ "${{ inputs.distrib }}" == "alma8" || "${{ inputs.distrib }}" == "el8" ]]; then PACKAGE_DISTRIB_SEPARATOR="." PACKAGE_DISTRIB_NAME="el8" PACKAGE_EXTENSION="rpm" diff --git a/.github/actions/promote-to-stable/action.yml b/.github/actions/promote-to-stable/action.yml index 661121ec8e..67a52f616d 100644 --- a/.github/actions/promote-to-stable/action.yml +++ b/.github/actions/promote-to-stable/action.yml @@ -66,7 +66,7 @@ runs: shell: bash - name: Promote DEB package to stable - if: ${{ contains(fromJSON('["bullseye", "bookworm", "jammy", "noble"]'), inputs.distrib) }} + if: ${{ contains(fromJSON('["bullseye", "bookworm", "trixie", "jammy", "noble"]'), inputs.distrib) }} run: | set -eux diff --git a/.github/docker/unit-tests/Dockerfile.unit-tests-alma10 b/.github/docker/unit-tests/Dockerfile.unit-tests-alma10 index d6b131ae16..ad1c30dd4a 100644 --- a/.github/docker/unit-tests/Dockerfile.unit-tests-alma10 +++ b/.github/docker/unit-tests/Dockerfile.unit-tests-alma10 @@ -53,6 +53,8 @@ dnf install -y make cpan perl-Test2-Suite.noarch 'perl(Authen::Radius)' 'perl(Co dnf -y install 'perl(Crypt::OpenSSL::AES)' 'perl-Net-Curl' 'perl(YAML::XS)' 'perl(Hash::Merge)' 'perl(Clone)' 'perl(CryptX)' 'perl(JSON::XS)' 'perl(JSON::PP)' 'perl(Digest::MD5::File)' dnf -y install 'perl(ZMQ::FFI)' 'perl(EV)' 'perl(RRDs)' 'perl(DBI)' 'perl(DBD::SQLite)' 'perl(HTTP::Daemon)' 'perl(HTTP::Daemon::SSL)' 'perl(NetAddr::IP)' 'perl(Mojolicious)' 'perl(Mojo::IOLoop::Signal)' 'perl(Net::Curl)' dnf -y install git mariadb +# Replace libcurl-minimal with the full libcurl to enable NTLM support (removed from minimal build in RHEL 10) +dnf -y install --allowerasing libcurl dnf clean all mkdir -p /var/lib/centreon/centplugins/ diff --git a/.github/scripts/list-plugins-to-build-and-test.py b/.github/scripts/list-plugins-to-build-and-test.py index e98d34a04a..ef4086233a 100644 --- a/.github/scripts/list-plugins-to-build-and-test.py +++ b/.github/scripts/list-plugins-to-build-and-test.py @@ -43,6 +43,13 @@ def add_package_info(packaging_file, build=True, test=True): if line.startswith("package "): plugin_package_name = line.split()[1].replace(";", "") break + packaging_dir = Path(packaging_file).parent + test_dependencies = [] + rpm_file = packaging_dir / 'rpm.json' + if rpm_file.exists(): + with open(rpm_file) as rf: + rpm_data = json.load(rf) + test_dependencies = [dependency for dependency in rpm_data.get('dependencies', []) if dependency.lower().startswith('centreon-plugin-')] if packaging['pkg_name'] not in list_plugins: list_plugins[packaging['pkg_name']] = { "perl_package": plugin_package_name, @@ -50,7 +57,8 @@ def add_package_info(packaging_file, build=True, test=True): "paths": plugin_paths, "build": build, "test": test, - "runner_id": runner_id + "runner_id": runner_id, + "test_dependencies": test_dependencies } if runner_id == max_runners: runner_id = 1 diff --git a/.github/scripts/test-plugins.py b/.github/scripts/test-plugins.py index e3c0b42d00..029fcab563 100644 --- a/.github/scripts/test-plugins.py +++ b/.github/scripts/test-plugins.py @@ -47,7 +47,18 @@ def refresh_packet_manager(archi, logs_dir): # Install plugin, from local file if build is true, from repository if false. -def install_plugin(plugin, archi, build, logs_dir): +def install_plugin(plugin, archi, build, logs_dir, dependencies=None): + if dependencies: + for dep in dependencies: + if archi == "deb": + local_exists = len(glob.glob(f"./{dep.lower()}*.deb")) > 0 + else: + local_exists = len(glob.glob(f"./{dep}*.rpm")) > 0 + if local_exists: + print(f"Installing test dependency {dep} for {plugin}") + dep_status = install_plugin(dep, archi, True, logs_dir) + if dep_status != 0: + print(f"Warning: failed to install test dependency {dep} for {plugin}") with open(f'{logs_dir}/test-plugins-installation.log', "a") as outfile: if archi == "deb": if build: @@ -99,12 +110,12 @@ def get_plugin_modes(plugin_command): break return modes -def test_plugin(plugin_name, plugin_command, plugin_perl_package, plugin_paths, logs_dir, reports_dir): +def test_plugin(plugin_name, plugin_command, plugin_perl_package, plugin_paths, logs_dir, reports_dir, skip_robot_tests): tests_path = [] for path in plugin_paths: if os.path.exists(f"tests/{path}"): tests_path.append(f"tests/{path}") - if len(tests_path) == 0: + if len(tests_path) == 0 or skip_robot_tests: output_status = 3 with open(f'{logs_dir}/test-plugins-help.log', "a") as outfile: print( @@ -177,11 +188,13 @@ def remove_plugin(plugin, archi, logs_dir): parser.add_argument('--runner-id', type=int, help='ID du runner pour le test des plugins') parser.add_argument('--logs-dir', type=str, help='Répertoire des logs', default='/var/log') parser.add_argument('--reports-dir', type=str, help='Répertoire des rapports', default='reports') + parser.add_argument('--skip-robot-tests', type=str, help='True to skip robot tests, default value: False', default='false') args = parser.parse_args() launch_snmp_sim() archi = args.extension # expected either deb or rpm. logs_dir = args.logs_dir + skip_robot_tests = args.skip_robot_tests.lower() == 'true' if args.runner_id: logs_dir = os.path.join(logs_dir, f"runner-{args.runner_id}") os.makedirs(logs_dir, exist_ok=True) @@ -211,13 +224,15 @@ def remove_plugin(plugin, archi, logs_dir): print("Testing plugin : ", plugin) nb_plugins += 1 - tmp = install_plugin(plugin, archi, plugins[plugin]["build"], logs_dir) + + test_deps = plugins[plugin].get("test_dependencies", []) + tmp = install_plugin(plugin, archi, plugins[plugin]["build"], logs_dir, test_deps) if tmp > 0: error_install += 1 list_plugin_error.add(plugin) else: if plugins[plugin]["test"]: - tmp = test_plugin(plugin, plugins[plugin]["command"], plugins[plugin]["perl_package"], plugins[plugin]["paths"], logs_dir, reports_dir) + tmp = test_plugin(plugin, plugins[plugin]["command"], plugins[plugin]["perl_package"], plugins[plugin]["paths"], logs_dir, reports_dir, skip_robot_tests) if tmp > 0: error_tests += 1 list_plugin_error.add(plugin) diff --git a/.github/workflows/plugins-robot-tests.yml b/.github/workflows/plugins-robot-tests.yml index 82aa4eb17b..90d3ca065a 100644 --- a/.github/workflows/plugins-robot-tests.yml +++ b/.github/workflows/plugins-robot-tests.yml @@ -33,6 +33,10 @@ on: description: "The cache key for plugin's json" required: true type: string + skip-robot-tests: + description: "Whether to run robot tests or not" + type: boolean + default: false secrets: registry_username: required: true @@ -128,7 +132,7 @@ jobs: --workdir /test_plugins \ ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ inputs.image }} \ bash -c "if [ -f /.venv/bin/activate ]; then source /.venv/bin/activate; fi; \ - python3 .github/scripts/test-plugins.py --extension=${{ inputs.package-extension }} --runner-id=${{ matrix.index }} --logs-dir=./logs --reports-dir=./reports" + python3 .github/scripts/test-plugins.py --extension=${{ inputs.package-extension }} --runner-id=${{ matrix.index }} --logs-dir=./logs --reports-dir=./reports --skip-robot-tests=${{ inputs.skip-robot-tests }}" - name: Upload logs as artifacts if tests failed if: failure() diff --git a/.github/workflows/plugins.yml b/.github/workflows/plugins.yml index d962f8f28c..dec25d9ce5 100644 --- a/.github/workflows/plugins.yml +++ b/.github/workflows/plugins.yml @@ -174,7 +174,7 @@ jobs: fail-fast: false max-parallel: 3 matrix: - image: [unit-tests-alma8, unit-tests-alma9, unit-tests-bullseye, unit-tests-bullseye-arm64, unit-tests-bookworm, unit-tests-jammy, unit-tests-noble] + image: [unit-tests-alma8, unit-tests-alma9, unit-tests-alma10, unit-tests-bullseye, unit-tests-bullseye-arm64, unit-tests-bookworm, unit-tests-trixie, unit-tests-jammy, unit-tests-noble] include: - runner_name: ubuntu-24.04 - package_extension: rpm @@ -183,6 +183,9 @@ jobs: - package_extension: rpm image: unit-tests-alma9 distrib: el9 + - package_extension: rpm + image: unit-tests-alma10 + distrib: el10 - package_extension: deb image: unit-tests-bullseye distrib: bullseye @@ -193,6 +196,9 @@ jobs: - package_extension: deb image: unit-tests-bookworm distrib: bookworm + - package_extension: deb + image: unit-tests-trixie + distrib: trixie - package_extension: deb image: unit-tests-jammy distrib: jammy @@ -277,21 +283,24 @@ jobs: max-parallel: 5 matrix: include: - - package_extension: rpm - image: packaging-plugins-alma8 - distrib: el7 - package_extension: rpm image: packaging-plugins-alma8 distrib: el8 - package_extension: rpm image: packaging-plugins-alma9 distrib: el9 + - package_extension: rpm + image: packaging-plugins-alma10 + distrib: el10 - package_extension: deb image: packaging-plugins-bullseye distrib: bullseye - package_extension: deb image: packaging-plugins-bookworm distrib: bookworm + - package_extension: deb + image: packaging-plugins-trixie + distrib: trixie - package_extension: deb image: packaging-plugins-jammy distrib: jammy @@ -355,8 +364,9 @@ jobs: strategy: fail-fast: false matrix: - image: [testing-plugins-alma8, testing-plugins-alma9, testing-plugins-jammy, testing-plugins-bullseye, testing-plugins-bookworm, testing-plugins-noble, testing-plugins-bullseye-arm64] + image: [testing-plugins-alma8, testing-plugins-alma9, testing-plugins-alma10, testing-plugins-jammy, testing-plugins-bullseye, testing-plugins-bookworm, testing-plugins-trixie, testing-plugins-noble, testing-plugins-bullseye-arm64] include: + - skip_robot_tests: false - package_extension: rpm image: testing-plugins-alma8 distrib: el8 @@ -365,6 +375,11 @@ jobs: image: testing-plugins-alma9 distrib: el9 arch: amd64 + - package_extension: rpm + image: testing-plugins-alma10 + distrib: el10 + arch: amd64 + skip_robot_tests: true - package_extension: deb image: testing-plugins-bullseye distrib: bullseye @@ -373,6 +388,11 @@ jobs: image: testing-plugins-bookworm distrib: bookworm arch: amd64 + - package_extension: deb + image: testing-plugins-trixie + distrib: trixie + arch: amd64 + skip_robot_tests: true - package_extension: deb image: testing-plugins-jammy distrib: jammy @@ -398,6 +418,7 @@ jobs: package-extension: ${{ matrix.package_extension }} packages-cache-key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} plugins-json-cache-key: plugins-${{ github.sha }}-${{ github.run_id }} + skip-robot-tests: ${{ matrix.skip_robot_tests }} secrets: registry_username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }} registry_password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} @@ -416,16 +437,18 @@ jobs: fail-fast: false matrix: include: - - distrib: el7 - package_extension: rpm - distrib: el8 package_extension: rpm - distrib: el9 package_extension: rpm + - distrib: el10 + package_extension: rpm - distrib: bullseye package_extension: deb - distrib: bookworm package_extension: deb + - distrib: trixie + package_extension: deb - distrib: jammy package_extension: deb - distrib: noble diff --git a/as400/packaging/centreon-as400-daemon.yaml b/as400/packaging/centreon-as400-daemon.yaml index 37c1791dd3..be0a805c84 100644 --- a/as400/packaging/centreon-as400-daemon.yaml +++ b/as400/packaging/centreon-as400-daemon.yaml @@ -60,10 +60,10 @@ scripts: overrides: rpm: depends: - - "java-17-openjdk" + - "java-17-openjdk-headless" deb: depends: - - "openjdk-17-jre" + - "openjdk-17-jre-headless" rpm: summary: Centreon AS 400 Plugin daemon