From f36fc3be0286ecfe9b7d3068da780336d5ee1736 Mon Sep 17 00:00:00 2001 From: David Boucher Date: Fri, 13 Jun 2025 15:17:05 +0200 Subject: [PATCH] enh(ci): new build of generic-snmp --- .github/workflows/generic-plugins.yml | 126 ++++++++++++++++++ experimental/benches/bench.rs | 50 +++++++ .../packaging/centreon-generic-plugins.yaml | 29 ++++ 3 files changed, 205 insertions(+) create mode 100644 experimental/benches/bench.rs create mode 100644 experimental/packaging/centreon-generic-plugins.yaml diff --git a/.github/workflows/generic-plugins.yml b/.github/workflows/generic-plugins.yml index ae7b6f90e..d0b650fb2 100644 --- a/.github/workflows/generic-plugins.yml +++ b/.github/workflows/generic-plugins.yml @@ -21,3 +21,129 @@ jobs: uses: ./.github/workflows/get-environment.yml with: version_file: experimental/Cargo.toml + + package: + needs: [get-environment] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + needs.get-environment.outputs.stability != 'stable' + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + include: + - package_extension: rpm + image: packaging-plugins-alma8 + distrib: el8 + arch: x86_64 + - package_extension: rpm + image: packaging-plugins-alma9 + distrib: el9 + arch: x86_64 + - package_extension: deb + image: packaging-plugins-bullseye + distrib: bullseye + arch: amd64 + - package_extension: deb + image: packaging-plugins-bookworm + distrib: bookworm + arch: amd64 + - package_extension: deb + image: packaging-plugins-jammy + distrib: jammy + arch: amd64 + - package_extension: deb + image: packaging-plugins-noble + distrib: noble + arch: amd64 + + container: + image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }} + credentials: + username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }} + password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} + + name: package ${{ matrix.distrib }} + + steps: + - name: Checkout sources + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Prepare files for packaging + run: source .cargo/env.sh + shell: bash + + - name: Build using Cargo + run: cargo build --release + + - name: Package + uses: ./.github/actions/package-nfpm + with: + nfpm_file_pattern: "experimental/packaging/generic-plugins.yaml" + distrib: ${{ matrix.distrib }} + package_extension: ${{ matrix.package_extension }} + version: ${{ needs.get-environment.outputs.version }} + release: 1 + arch: ${{ matrix.arch }} + commit_hash: ${{ github.sha }} + cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-generic-plugins-${{ matrix.distrib }} + 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 }} + + - name: Save to cache + uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + with: + path: ./*.${{ matrix.package_extension }} + key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} + + deliver-packages: + needs: [get-environment, package] + if: | + needs.get-environment.outputs.skip_workflow == 'false' && + (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 + - distrib: noble + 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: generic-plugins + 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 }} + + set-skip-label: + needs: [get-environment, deliver-packages] + 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 diff --git a/experimental/benches/bench.rs b/experimental/benches/bench.rs new file mode 100644 index 000000000..22d15bd90 --- /dev/null +++ b/experimental/benches/bench.rs @@ -0,0 +1,50 @@ +extern crate criterion; + +use criterion::{criterion_group, criterion_main, Criterion}; +use std::hint::black_box; + +fn average_for(v: &Vec) -> f64 { + let mut sum = 0.0; + let mut count = 0; + + for &x in v.iter() { + if !x.is_nan() { + sum += x; + count += 1; + } + } + + if count == 0 { + 0.0 + } else { + sum / count as f64 + } +} + +fn average_fold(v: &Vec) -> f64 { + let (sum, count) = v + .iter() + .filter(|x| !x.is_nan()) + .fold((0.0, 0), |(s, c), &x| (s + x, c + 1)); + + if count == 0 { + 0.0 + } else { + sum / count as f64 + } +} + +fn benchmark_averages(c: &mut Criterion) { + let data: Vec = (0..100_000) + .map(|i| if i % 1000 == 0 { f64::NAN } else { i as f64 }) + .collect(); + + c.bench_function("average_for", |b| b.iter(|| average_for(black_box(&data)))); + + c.bench_function("average_fold", |b| { + b.iter(|| average_fold(black_box(&data))) + }); +} + +criterion_group!(benches, benchmark_averages); +criterion_main!(benches); diff --git a/experimental/packaging/centreon-generic-plugins.yaml b/experimental/packaging/centreon-generic-plugins.yaml new file mode 100644 index 000000000..43bcdbf03 --- /dev/null +++ b/experimental/packaging/centreon-generic-plugins.yaml @@ -0,0 +1,29 @@ +name: "centreon-generic-plugins" +arch: "${ARCH}" +platform: "linux" +version_schema: "none" +version: "2.0.6" +release: "${RELEASE}${DIST}" +section: "default" +priority: "optional" +maintainer: "Centreon " +description: | + Centreon Generic Plugins is a collection of plugins for Centreon that allows monitoring of various systems and applications. +vendor: "Centreon" +homepage: "https://www.centreon.com" +license: "Apache-2.0" + +contents: + - src: "target/release/generic-snmp" # VARIABLE VERSION REQUIRED HERE + dst: "/usr/bin" # VARIABLE VERSION REQUIRED HERE + expand: true + file_info: + mode: 0755 + owner: "root" + group: "root" + +rpm: + summary: Centreon Generic Plugins + signature: + key_file: ${RPM_SIGNING_KEY_FILE} + key_id: ${RPM_SIGNING_KEY_ID}