Compare commits

...

150 Commits

Author SHA1 Message Date
pkippes
5822de6cc1
Sync release 20250400 (#5544) 2025-04-07 18:47:06 +02:00
pkippes
d894389296
Release 20250400 (#5542) 2025-04-07 16:55:42 +02:00
pkippes
23526ce247 Empty-Commit 2025-04-07 11:27:59 +02:00
Lucie Dubrunfaut
59d5ef16d2
fix(network/aruba/aoscx/snmp): fixed hardware help section (#5448)
Co-authored-by: sdepassio <114986849+sdepassio@users.noreply.github.com>
2025-04-04 10:12:00 +02:00
Lucie Dubrunfaut
eab7a046d2
fix(apps::backup::veeam::local): update jobstatus help section (#5492) 2025-04-04 10:01:23 +02:00
sdepassio
781dac79b4
fix(apps::eclipse::mosquitto::mqtt): fixed metrics labels in numeric-value mode (#5534, #5462)
Co-authored-by: rmorandell-pgum@users.noreply.github.com

Refs: CTOR-1447
2025-04-03 15:16:20 +02:00
Lucie Dubrunfaut
d117f13521
enh(centreon-plugin-notification-*) : added missing packages on plugin repository (#5528)
Co-authored-by: Lucie Dubrunfaut <ldubrunfaut@CNTR-PORT-A198>
Co-authored-by: EvanAdam <eadam@centreon.com>
Refs: CTOR-1215
2025-04-02 16:40:34 +02:00
Evan-Adam
5889295b77
enh(mysql) add uptime in plugin output (#5535)
Refs:CTOR-1217

Co-authored-by: SavCent <134679564+SavCent@users.noreply.github.com>
2025-04-02 14:00:09 +02:00
qgarnier
edd04d213c
enh(f5-bigip-snmp): switch to metric v2 + add tests (#4656)
Co-authored-by: sfarouq-ext <116093375+sfarouq-ext@users.noreply.github.com>

Refs: MON-20991
Refs: CTOR-427
2025-04-01 18:06:41 +02:00
sfarouq-ext
5d10adc39b
Ctor 716 plugin network cisco standar (#5455)
Co-authored-by: garnier-quentin <garnier.quentin@gmail.com>
Co-authored-by: omercier <32134301+omercier@users.noreply.github.com>
2025-04-01 17:23:09 +02:00
Lucie Dubrunfaut
f2142d2485
fix options (#5527)
Co-authored-by: Lucie Dubrunfaut <ldubrunfaut@CNTR-PORT-A198>
2025-04-01 16:38:50 +02:00
Stéphane Chapron
035e018397
enh(secu): add gitleaks configuration (#5520)
Co-authored-by: sc <sc@centreon>
2025-04-01 12:04:25 +02:00
technique-ci
f7b45b2193
chore(deps): absorb 2025-03 dependabot GitHub Actions updates (#5485)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paul Oureib <poureib@centreon.com>
2025-04-01 11:15:20 +02:00
sdepassio
b5c5fb4b61
enh(ups-apc-snmp): improve last time in battery status + fix dereference in script.pm (#5524 + #5412)
- Update the output for the "replace last time" for the battery status mode : it was displayed in seconds, it is now converted to a human readable format.

Refs: CTOR-1077

- $rebuild_args needs to be dereferenced when used in a join because it is a reference to an array. This is done when the script is executed with a non-root user (line 359) but not when called with root.

Authored by eseyman@users.noreply.github.com #5412
2025-03-31 14:28:23 +02:00
Jochen Platzgummer
75873668bf fix(network::sonus::sbc::snmp): fixed unknown call method map instance in dsp-stats mode (#5483)
Refs: CTOR-1460
2025-03-28 15:47:23 +01:00
sfarouq-ext
82074e5f9e feat(f5-bigip-snmp): add cpuusage mode + tests (#5471)
Refs: CTOR-427
2025-03-28 15:43:29 +01:00
sfarouq-ext
7baab38df6 feat(fortinet-fortigate-restapi): add certificates mode + tests (#5515)
Refs: CTOR-1451
2025-03-28 15:43:02 +01:00
sfarouq-ext
08e0e04099 feat(exense-step-restapi): new plugin to monitor plans executions + tests (#5518)
Refs: CTOR-854
2025-03-28 15:43:02 +01:00
Evan-Adam
92a92c0436 fix(veeam): remove unused sub
Refs:CTOR-1321
2025-03-28 15:43:02 +01:00
sfarouq-ext
63fa39cde5 spellcheck 2025-03-28 15:43:02 +01:00
sfarouq-ext
65569fe9e0 NEW TEST mode (jobs & list-jobs) 2025-03-28 15:43:02 +01:00
sfarouq-ext
6de4e7a770 WIP 2025-03-28 15:43:02 +01:00
Lucie Dubrunfaut
391f77555b Fix after user feedback 2025-03-28 15:43:02 +01:00
Lucie Dubrunfaut
480b0b05f8 First test to add replication jobs 2025-03-28 15:43:02 +01:00
omercier
4a50605c36 enh(vmware8-esx): add swap, diskio and network + tests (#5510) 2025-03-28 15:43:02 +01:00
sfarouq-ext
4e0df4ca4a Ctor 1452 plugin network fortinet fortigate snmp new modes switch usage and switches discovery (#5514)
Co-authored-by: Roman Morandell <46994680+rmorandell-pgum@users.noreply.github.com>
Co-authored-by: Lucie Dubrunfaut <ldubrunfaut@CNTR-PORT-A198>
2025-03-28 15:43:02 +01:00
omercier
6f94314a60 fix(ci): add missing image + fix path for tests on noble 2025-03-28 15:43:02 +01:00
omercier
6027943d65
enh(counters/iplabe-ekara): allow to sort instances on attribute instead of instance key (#5501)
Refs: CTOR-1388
2025-03-21 08:56:35 +01:00
tuntoja
eeac58c17f
fix(release): fix plugins version detection on stable branch runs (#5439) 2025-03-20 10:21:58 +01:00
tuntoja
9a67330f43
feat: add noble to ci packaging and delivery (#5497) 2025-03-20 09:48:37 +01:00
technique-ci
7bcde8e753
chore(ci): update tj-actions/changed-files to 46.0.1 for branch develop (#5511) 2025-03-18 11:28:50 +01:00
Lucie Dubrunfaut
35ea6cf02f
fix(storage::ibm::fs900::snmp): remove wrong default value all CTOR-544 (#5495)
Co-authored-by: Lucie Dubrunfaut <ldubrunfaut@CNTR-PORT-A198>
Co-authored-by: omercier <32134301+omercier@users.noreply.github.com>
2025-03-14 09:57:12 +01:00
pkippes
ab9af303e1
Sync release 20250303 (#5507) 2025-03-13 17:30:36 +01:00
pkippes
5726ad44b3
Release 20250303 (#5506) 2025-03-13 17:03:50 +01:00
tuntoja
5da5683f94
fix(packaging): handle specific case of libssh-session packaging name (#5505) 2025-03-13 15:07:22 +01:00
sdepassio
c69ef4f5c5
fix(cpan-libraries): Add revision to update libraries (#5503) 2025-03-13 14:15:07 +01:00
pkippes
33bf4482a5
Release 20250302 (#5499) 2025-03-10 17:24:57 +01:00
sdepassio
800edc6a24
fix(cpan-libraries): Missing provides for some libraries (#5498) 2025-03-10 16:01:25 +01:00
pkippes
a7b7ac2c53
Sync release 20250300 (#5494) 2025-03-07 10:36:51 +01:00
pkippes
0634714531
Release 20250300 (#5491) 2025-03-06 16:20:20 +01:00
pkippes
946af281c8
Merge branch 'master' into release-20250300 2025-03-06 15:04:46 +01:00
omercier
c254a23f77
enh(aruba-aoscx): add spanning tree (mon+disco) and uptime modes (#5454)
Refs: CTOR-1397
2025-03-06 10:07:10 +01:00
sdepassio
baf703598e
enh(as400): add ssl connection option (#5476)
Co-authored-by: garnier-quentin <garnier.quentin@gmail.com>
2025-03-05 17:25:13 +01:00
sfarouq-ext
aaf4bb47d6 removing £ 2025-03-05 12:56:25 +01:00
sdepassio
5a23b681ec
Ctor 1018 perl json path dependencies issue (#5469)
Refs: CTOR-1018
2025-03-05 09:20:04 +01:00
omercier
1571d4ba18
test(cisco-ucs): add tests (#5411)
Refs: CTOR-1323
2025-03-04 17:11:40 +01:00
sfarouq-ext
225180dbe6 spellcheck 2025-03-04 16:55:36 +01:00
sfarouq-ext
1bec397161 WIP 2025-03-04 16:17:00 +01:00
sfarouq-ext
8a41d6eb85 rebased 2025-03-04 16:10:58 +01:00
sfarouq-ext
653e58f7d0 spellcheck 2025-03-04 16:07:49 +01:00
sfarouq-ext
bfc0eb2541 resolving reviews 2025-03-04 16:07:35 +01:00
sfarouq-ext
94d60537a6 Modification 2025-03-04 16:07:34 +01:00
sfarouq-ext
5dab3fe02e spell-check 2025-03-04 16:07:19 +01:00
sfarouq-ext
0d5355cd7d ENH(new mode): test-Plugin(hardware::server::cisco::ucs::snmp)- Mode(equipment) 2025-03-04 16:06:02 +01:00
sfarouq-ext
8e66284819 ENH(new mode): test-Plugin(hardware::server::cisco::ucs::snmp)- Mode(equipment) 2025-03-04 16:06:02 +01:00
Lucie Dubrunfaut
4d055649a3
fix(storage::emc::datadomain::snmp): fixed cleaning mode by adding timezone option CTOR-1415 (#5453)
Co-authored-by: omercier <omercier@centreon.com>
2025-03-04 14:24:30 +01:00
itoussies
129256e737
enh(network::chapsvision::crossing::snmp): Update antivirus OIDs (#5413) 2025-03-04 14:12:23 +01:00
omercier
9b5cc956f0
fix(iplabel-ekara): handle step metrics when scenario failed (#5461)
Refs: CTOR-1394
2025-03-04 12:24:02 +01:00
omercier
a7d4d51198
feat(vmware8-esx): add MVP modes (#5482)
Refs:CTOR-430

Co-authored-by: Evan-Adam <152897682+Evan-Adam@users.noreply.github.com>
2025-03-04 11:56:38 +01:00
Evan-Adam
148030bf66
Update src/apps/monitoring/iplabel/ekara/restapi/mode/scenarios.pm
Co-authored-by: omercier <32134301+omercier@users.noreply.github.com>
2025-03-04 11:52:09 +01:00
omercier
4669ded30a
fix(cisco-ucs): fix wrong count when using threshold overload option (#5467)
Refs: CTOR-1294
2025-03-03 17:37:45 +01:00
sfarouq-ext
ca9e07e13f
enh(fortinet): vpn snmp mode add counter for ip sec tunnels (#5449)
Refs:CTOR-1237

Co-authored-by: Patrick <jummo4@yahoo.de>
Co-authored-by: Lucie Dubrunfaut <ldubrunfaut@CNTR-PORT-A198>
2025-03-03 16:19:31 +01:00
omercier
635401745c
fix(purestorage-flasharray-v2-restapi): fixed wrong option filter-resolution in arrays and volumes mode (#5472)
Refs: CTOR-1218
2025-03-03 15:23:13 +01:00
sdepassio
9978f5cfcb
fix(as400): fix previous pending request (#5475)
Refs:CTOR-1263

Co-authored-by: garnier-quentin <garnier.quentin@gmail.com>
2025-03-03 11:49:11 +01:00
Kevin Duret
3fa339ca75
enh(ci): migrate runners to arc v2 (#5470) 2025-02-28 13:41:53 +01:00
Lucie Dubrunfaut
81bcdc4a7e fix spellcheck 2025-02-27 15:50:03 +01:00
Lucie Dubrunfaut
12785e80da fix(storage::purestorage::flasharray::v2::restapi): fixed wrong option filter-resolution in arrays and volumes mode 2025-02-27 15:44:28 +01:00
Lucie Dubrunfaut
e2c193f941
Update src/hardware/server/cisco/ucs/snmp/mode/equipment.pm
Co-authored-by: sdepassio <114986849+sdepassio@users.noreply.github.com>
2025-02-27 15:17:19 +01:00
EvanAdam
f4d4ccbca5 fix(cisco): fix spellcheck
Refs:CTOR-1294
2025-02-25 14:48:22 +01:00
Lucie Dubrunfaut
2aecd211bf Fixed wrong count when using threshold-overload option and memories are not equipped 2025-02-25 14:15:44 +01:00
EvanAdam
1b7b8d7468 fix(iplabel): don't show perfdata when the last execution don't have perfdata
Refs:CTOR-1394
2025-02-25 11:37:07 +01:00
May
295cb0d494
enh(deps): increase dependabot allowed pull request openings for github actions (#5460) 2025-02-25 10:12:34 +01:00
itoussies
843694df86
Plugin(hardware::pdu::raritan::snmp): fix sensors state for PDU > 4.x when an outlet sensor is off (#5397)
Co-authored-by: Lucie Dubrunfaut <123162035+lucie-dubrunfaut@users.noreply.github.com>
Co-authored-by: omercier <omercier@centreon.com>
Refs: CTOR-1082
2025-02-20 16:56:57 +01:00
itoussies
48f85e3ba7
Plugin(cloud::azure::network::vpngateway::plugin) - Mode(vpn-gateway-status) : Wrong variable assignment (#5342)
Co-authored-by: sdepassio <114986849+sdepassio@users.noreply.github.com>
Co-authored-by: omercier <32134301+omercier@users.noreply.github.com>
Refs: CTOR-1073
2025-02-20 16:30:34 +01:00
itoussies
0d10876061
fix(netapp-ontap-restapi-plugin): fix hardware API requests for bays and tests (#5395)
Co-authored-by: Lucie Dubrunfaut <123162035+lucie-dubrunfaut@users.noreply.github.com>

Refs: CTOR-783
2025-02-20 16:10:37 +01:00
sfarouq-ext
d40ae9bb6d
enh(purestorage-flasharray): add handling of 'flagged' information + tests to alerts mode (#5403)
Co-authored-by: Fabien-Bernard <78682398+Fabien-Bernard@users.noreply.github.com>
Refs: CTOR-1218
2025-02-20 10:10:29 +01:00
sfarouq-ext
cc89be8b3a Modifications 2025-02-19 09:11:51 +01:00
sfarouq-ext
1e033613f5 ENH add new tests network/aruba/aoscx/snmp 2025-02-17 16:29:58 +01:00
Lucie Dubrunfaut
8486e3592a enh(iplabel::ekara::restapi::scenarios): reworked defaults status 2025-02-13 14:23:17 +01:00
Lucie Dubrunfaut
471a591596
Update pkg.json 2025-02-11 14:45:57 +01:00
Lucie Dubrunfaut
19ec3f4605 nh(network:🇦🇼:aoscx::snmp): added uptime, spanning tree and its discovery modes 2025-02-11 14:44:13 +01:00
pkippes
349d5217d6
Release 20250202 (#5445) 2025-02-11 14:36:45 +01:00
tuntoja
de31640388
fix(packaging): fix dependecy listing for perl-cpan-libraries (#5442) (#5444) 2025-02-11 10:41:51 +01:00
May
2c868ab9dd
chore(deps): absorb 2025-02 dependabot GitHub Actions updates (#5428)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-11 10:34:51 +01:00
tuntoja
4cbb03561f
fix(packaging): fix dependecy listing for perl-cpan-libraries (#5442) 2025-02-11 10:10:23 +01:00
pkippes
85a30e0394
Sync release 20250201 (#5440) 2025-02-07 15:36:45 +01:00
pkippes
44f4bd2e14 Merge branch 'master' into sync-release-20250201 2025-02-07 15:09:00 +01:00
pkippes
4ff49c891b
Release 20250201 (#5438) 2025-02-07 12:33:03 +01:00
sdepassio
869243d19d
fix(podman): pod-status mode (#5437) 2025-02-07 12:06:15 +01:00
sdepassio
a4383ffd9e
fix(podman): pod-status mode (#5434)
Refs: CTOR-1389
2025-02-07 11:45:17 +01:00
tuntoja
eeb5ee888c
fix(release): use new version scheme for plugin release tags (#5435) 2025-02-07 11:44:09 +01:00
tuntoja
f354080ba9
fix(release): use new version scheme for plugin release tags (#5436) 2025-02-07 11:42:20 +01:00
pkippes
cfc4b4059f
Release 20250200 (#5433) 2025-02-07 10:06:50 +01:00
psame
e82bdef5a5
fix(collections): added missing 'safe' in reval() calls for unknown status check (#5151)
Refs: CTOR-1219
2025-02-07 10:00:55 +01:00
pkippes
18f119bf27
Merge branch 'master' into release-20250200 2025-02-06 17:08:26 +01:00
tuntoja
83c6d49206 fix(ci): use head_ref or ref_name for branchName in get environment 2025-02-06 16:21:37 +01:00
sdepassio
b9986d6478
feat(podman-restapi): new plugin for Podman (#5427)
Co-authored-by: omercier <32134301+omercier@users.noreply.github.com>
Refs: CTOR-187
2025-02-06 14:16:07 +01:00
Lucie Dubrunfaut
3469fc328d
help(iplabel::ekara): improve help on scenario mode (#5430)
Refs: CTOR-1387
2025-02-06 10:46:08 +01:00
Lucie Dubrunfaut
5751ee1bfd
enh(iplabel-ekara): change status match and timeframe option default value (#5429)
Refs: CTOR-1387
2025-02-06 09:53:49 +01:00
sfarouq-ext
ee48767a11
enh(add new test mode): network::fortinet::fortigate::snmp, Mode(sdwan) (#5421)
Co-authored-by: Patrick <jummo4@yahoo.de>

Refs:CTOR-1322
2025-02-05 11:43:25 +01:00
Lucie Dubrunfaut
4e10376ec7
enh(network::fortinet::fortigate::restapi): rebuild to add option and counter last-update CTOR-1126 (#5426)
Co-authored-by: Lucie Dubrunfaut <ldubrunfaut@CNTR-PORT-A198>
2025-02-05 10:23:39 +01:00
omercier
c6b31bce7d
help(cyberoam-snmp): remove uppercase chars in options (#5425)
Refs: CTOR-102
2025-02-04 17:19:18 +01:00
Evan-Adam
0dae1d9460
CTOR-644-plugin-network-moxa-switch-snmp-mode-interfaces-option-add-duplex-status-duplex-unknown (#5420)
Refs: CTOR-644
2025-02-04 17:17:55 +01:00
Thibault S
9115be2fb1
feat(haproxy-web): new plugin for HAProxy Web Stats (#5385)
Co-authored-by: omercier <32134301+omercier@users.noreply.github.com>

Refs: CTOR-680
2025-02-04 10:02:03 +01:00
Roman Morandell
bae0b56ea9
help(cisco-umbrella): fixed connections threshold names in POD (#5405) 2025-02-03 10:12:43 +01:00
May
08e12b1a77
fix(packaging): update packaging naming scheme for plugins in unstable deliveries (#5415) 2025-01-28 15:28:03 +01:00
omercier
62ca8641f3
fix(mongodb): added missing dependencies for Debian (#5410)
Refs:CTOR-1245
2025-01-27 16:08:15 +01:00
sfarouq-ext
26c4b67d28
enh(fortinet): add option last-update (licenses) (#5399)
Refs: CTOR-1126

Co-authored-by: chris.mvila <chris.mvila@cheops.fr>
2025-01-27 16:05:40 +01:00
sfarouq-ext
900717092f
feat(cyberoam): Add modes ha-status, license, list-vpns & vpn-status (#5335)
Add new mode for cyberoam equipment

Refs: CTOR-102

Co-authored-by: Roman Morandell <46994680+rmorandell-pgum@users.noreply.github.com>
Co-authored-by: omercier <omercier@centreon.com>
2025-01-27 15:50:19 +01:00
sdepassio
9ae01fc81d
ci(cpan-libs): Add cpan libs tests (#5324)
Co-authored-by: Kevin Duret <kduret@centreon.com>
Refs: CTOR-726
2025-01-23 18:36:02 +01:00
ponchoh
8ee6889662
help(http-jsoncontent): fixed the pod in jsoncontent.pm (#5389)
No associated ticket
2025-01-23 11:55:43 +01:00
May
3164c6b12c
chore(deps): absorb 25.01 dependabot GitHub Actions updates (#5380)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:06:48 +01:00
May
dfda070220
refactor(release): align plugins release number to branch name in testing context (#5392)
Co-authored-by: Kevin Duret <kduret@centreon.com>
2025-01-16 16:28:43 +01:00
Kevin Duret
8ad485f423
fix(ci): fix stable rpm promote path (#5393) 2025-01-14 16:21:16 +01:00
pkippes
e34d52c440
Release 20250114 (#5391) 2025-01-14 14:28:49 +01:00
Kevin Duret
f7da012581
enh(ci): check if pull request on testing is a cherry-pick (#5390) 2025-01-14 12:13:33 +01:00
Evan-Adam
47cf7c9e8b
enh(iplabel): Add new filters to scenarios selection and fix identifiers management
Refs:CTOR-1107
2025-01-13 10:41:58 +01:00
itoussies
942c0b7940
enh(netapp-ontap-restapi): add metrics to volumes mode + optimizations + tests (#5368)
Refs: CTOR-1039
2025-01-13 10:30:53 +01:00
omercier
56e8d8c586
feat(option): added --change-output-adv option to alter output and exit code (#5155, #5379)
Co-authored-by: garnier-quentin <garnier.quentin@gmail.com>
Refs: CTOR-820
2025-01-13 10:24:42 +01:00
omercier
accf292b62
fix(meraki-restapi): fix cisco meraki vpn-tunnels mode (#5384, #5283)
Co-authored-by: garnier-quentin <garnier.quentin@gmail.com>

Refs: CTOR-1086
2025-01-13 10:17:32 +01:00
Lucie Dubrunfaut
7149c95144
fix(server-lenovo-xcc-snmp): fixed hardware verbose output (#5386) 2025-01-10 15:29:49 +01:00
Evan-Adam
137e43eacd
enh(lenovo-snmp): added system-health, memory and cpu components to hardware mode (#5359)
🤘🏻😈🤘🏻

Refs: CTOR-666
2025-01-10 15:06:39 +01:00
itoussies
0ddcaf9d77
feat(freebsd-snmp): add storage mode with default ZFS support (#5296)
Refs: CTOR-1176
2025-01-10 14:50:56 +01:00
sfarouq-ext
54c92eecca
fix(informix-snmp): consider log files in backedUpButNeeded state as free space in log-file-usage mode (#5352) (#4943)
Co-authored-by: gmolina <gmolina@base.cat>

Refs: CTOR-1220
2025-01-10 14:42:05 +01:00
qgarnier
f5f2103295
fix(stormshield-api): fix wrong values mapping in interfaces mode (#5091)
Co-authored-by: garnier-quentin <qgarnier@ose-consulting.com>
Refs: CTOR-743
2025-01-10 14:38:32 +01:00
sfarouq-ext
aa46a1c3c0
feat(aruba-snmp): add new stack mode (#5351)
Co-authored-by: Lucie Dubrunfaut <ldubrunfaut@CNTR-PORT-A198>
Refs: CTOR-1235
2025-01-10 14:25:19 +01:00
sdepassio
046a383192
enh(backbox): add service discovery list-devices + new device-backup mode (#5381)
REFS: CTOR-870
2025-01-10 13:24:57 +01:00
omercier
4dfdfb8158
fix(colubris-snmp): fix labels to manage 15 minutes average thresholds (#5378)
Refs: CTOR-1197
2025-01-06 17:49:18 +01:00
omercier
92473a4b02
fix(protocol-smtp): fixed chomp on undefined variable (#5377)
Refs: CTOR-1197
2025-01-06 17:24:05 +01:00
sfarouq-ext
bba20e5f12
enh(hp::procurve): Added modes spanning-tree, list-spanning-trees and uptime (CTOR-1233) 2025-01-06 10:01:00 +01:00
sdepassio
bedb2be16f
fix(ci): missing jammy in the promote action (#5348) 2024-12-30 20:07:24 +01:00
omercier
b8927e66db
fix(sun-mgmt+salesforce): two coding issues that caused perl warnings (#5369)
Refs: CTOR-1197
2024-12-27 16:53:32 +01:00
Lucie Dubrunfaut
f1ab4d9ab1
fix(emc::datadomain) : mode cleaning - wrong output when cleaning is running CTOR-1241(#5346)
CTOR-1241
2024-12-23 11:36:06 +01:00
omercier
884c6c22c1
enh(meraki-cloudcontroller-restapi): add --filter-model to discovery mode (#5357)
Co-authored-by: tsqp0878 <lebret.thibaud@orange.com>

Refs: CTOR-1010
2024-12-20 17:32:57 +01:00
Lucie Dubrunfaut
947c1ed11f
fix(Plugin(video::axis): wrong psu status oid CTOR-1252 (#5366)
CTOR-1252
2024-12-20 15:45:51 +01:00
Roman Morandell
dedecee5a7
fix(axis-snmp): fix false positive on fan status (#5356)
Refs: CTOR-1252
2024-12-20 11:43:53 +01:00
omercier
37b8c1ce6f
fix(huawei-standard): bad path to huawei common code (#5363)
Refs: CTOR-13
2024-12-19 17:34:53 +01:00
omercier
bb1080eb95
fix(huawei-standard): bad path to huawei standard plugin code (#5362) 2024-12-19 15:36:59 +01:00
itoussies
8999707edd
doc(output): fix the output.pm help section (#5361) 2024-12-19 15:33:23 +01:00
Lucie Dubrunfaut
9e8334caba
doc(helps sections): Correct helps sections CTOR-962 (#5358)
CTOR-962
2024-12-18 09:05:50 +01:00
omercier
3953f8dbb5
feat(huawei-wlc): new snmp plugin (#5301, #5146)
Co-authored-by: Roman Morandell <46994680+rmorandell-pgum@users.noreply.github.com>
Co-authored-by: sfarouq-ext <116093375+sfarouq-ext@users.noreply.github.com>
2024-12-17 12:10:55 +01:00
psame
62f3860136
fix(netapp-ontap): update pkg.json (#5319)
Add missing uptime in the pkg.json
2024-12-16 17:30:49 +01:00
Kevin Duret
66bebf3aa6
enh(ci): workflow to add external label to forked pull requests (#5353) 2024-12-16 13:18:00 +01:00
Lucie Dubrunfaut
77ad3ff41a
CTOR-985-anonymize-user-data-for-automated-tests-purpose (#5323)
Co-authored-by: May <110405507+mushroomempires@users.noreply.github.com>
2024-12-13 10:50:33 +01:00
Lucie Dubrunfaut
8fe93f0498
CTOR-540 : Remove links to old documentation (#5297) 2024-12-13 10:41:47 +01:00
Kevin Duret
eb7ae7fb57
enh(ci): skip workflow when no change on PR (#5334) 2024-12-10 16:37:46 +01:00
sdepassio
3609bca54b
fix(library-and-packaging): adding missing libraries for bookworm (#5337) 2024-12-09 17:48:18 +01:00
Kevin Duret
bf2609c709
fix(ci): fix release/hotfix pr detection (#5325) 2024-12-09 14:33:28 +01:00
Kevin Duret
14b098cb43
enh(ci): keep packages cache during plugins testing (#5321) 2024-12-09 10:43:54 +01:00
pkippes
0135299c15
Sync release 20241206 (#5322) 2024-12-09 09:46:54 +01:00
444 changed files with 142444 additions and 2515 deletions

3
.github/CODEOWNERS vendored
View File

@ -21,3 +21,6 @@ tests/** @centreon/owners-robot-e2e
packaging/** @centreon/owners-perl
selinux/** @centreon/owners-pipelines
.github/scripts/pod_spell_check.t @centreon/owners-perl
.gitleaks.toml @centreon/owners-security
.gitleaksignore @centreon/owners-security

View File

@ -41,7 +41,7 @@ publicly and we'll get in touch with you by private message if this information
- [ ] I have provide data or shown output displaying the result of this code in the plugin area concerned.
------------------------------------------------------------------------------------------------------
# Centreon team
# Centreon team (internal PR)
## Description
@ -75,8 +75,9 @@ Mention the automated tests included in this FOR (what they test like mode/optio
- [ ] I have **rebased** my development branch on the base branch (develop).
- [ ] In case of a new plugin, I have created the new packaging directory accordingly.
- [ ] I have implemented automated tests related to my commits.
- [ ] Data used for automated tests are anonymized.
- [ ] I have reviewed all the help messages in all the .pm files I have modified.
- [ ] All sentences begin with a capital letter.
- [ ] All sentences are terminated by a period.
- [ ] All sentences end with a period.
- [ ] I am able to understand all the help messages, if not, exchange with the PO or TW to rewrite them.
- [ ] After having created the PR, I will make sure that all the tests provided in this PR have run and passed.

View File

@ -18,14 +18,14 @@ runs:
using: 'composite'
steps:
- name: Download Artifacts
uses: actions/download-artifact@f44cd7b40bfd40b6aa1cc1b9b5b7bf03d3c67110 # v4.1.0
uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9
with:
pattern: ${{ inputs.source_name_pattern }}*
path: ${{ inputs.target_name }}
merge-multiple: true
- name: Upload the Regrouped Artifact
uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: ${{ inputs.target_name }}
path: |

View File

@ -77,7 +77,7 @@ runs:
- if: ${{ inputs.stability != 'stable' }}
name: Restore packages from cache
uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.${{ steps.parse-distrib.outputs.package_extension }}
key: ${{ inputs.cache_key }}
@ -107,11 +107,10 @@ runs:
}
- name: Download packages from testing
if: ${{ inputs.stability == 'stable' && github.event_name == 'push' && inputs.distrib != 'jammy' }}
if: ${{ inputs.stability == 'stable' && github.event_name == 'push' && (inputs.distrib != 'jammy' || inputs.distrib != 'noble') }}
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const warningNoPromote = 'No packages are promoted because push is not related to a hotfix/release pull request.';
const commitSha = context.sha;
const pulls = await github.rest.pulls.list({
@ -123,25 +122,31 @@ runs:
per_page: 100
});
const pr = pulls.data.find(p => p.merge_commit_sha === commitSha);
core.startGroup(`Checking pull request linked to commit ${commitSha}`);
const pr = pulls.data.find(p => {
console.log(`Checking pull request ${p.number}("${p.title}") with merge commit ${p.merge_commit_sha}`);
return p.merge_commit_sha === commitSha;
});
core.endGroup();
if (!pr) {
core.warning(warningNoPromote);
core.error(`No pull request found for merge commit ${commitSha}`);
return;
}
const prBaseRef = pr?.base?.ref || 'unknown';
const prHeadRef = pr?.head?.ref || 'unknown';
let releaseType = '';
switch (true) {
case /^release.+/.test(prBaseRef):
case /^release.+/.test(prHeadRef):
releaseType = 'release';
break;
case /^hotfix.+/.test(prBaseRef):
case /^hotfix.+/.test(prHeadRef):
releaseType = 'hotfix';
break;
default:
core.warning(warningNoPromote);
core.error(`No packages are promoted because push of branch ${prHeadRef} is not related to a hotfix/release pull request.`);
return;
}
console.log(`Release type: ${releaseType}`);
let fromStabilitySubdirectory = 'testing';
if (releaseType === 'hotfix' ) {
@ -154,24 +159,29 @@ runs:
);
} else if ('${{ steps.parse-distrib.outputs.distrib_family }}' === 'ubuntu') {
await exec.exec(
`jf rt download "ubuntu-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${{ inputs.release_type }}" --flat`
`jf rt download "ubuntu-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${releaseType}" --flat`
);
} else if ('${{ steps.parse-distrib.outputs.distrib_family }}' === 'debian') {
await exec.exec(
`jf rt download "apt-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${{ inputs.release_type }}" --flat`
`jf rt download "apt-plugins-testing/pool/${{ inputs.module_name }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb" --props "release_type=${releaseType}" --flat`
);
}
- name: Publish packages to ${{ inputs.stability }}
if: |
contains(fromJson('["testing", "unstable"]'), inputs.stability) ||
(inputs.stability == 'stable' && github.event_name == 'push' && inputs.distrib != 'jammy')
(inputs.stability == 'stable' && github.event_name == 'push' && (inputs.distrib != 'jammy' || inputs.distrib != 'noble'))
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const path = require('path');
const globber = await glob.create('*.${{ steps.parse-distrib.outputs.package_extension }}');
let stableRpmSubdirectory = '';
if ('${{ inputs.stability }}' === 'stable') {
stableRpmSubdirectory = 'RPMS/';
}
const debTargetProps = '${{ inputs.stability }}' == 'testing' ? '--target-props "release_type=${{ inputs.release_type }}"' : '';
for await (const file of globber.globGenerator()) {
@ -183,7 +193,7 @@ runs:
arch = 'x86_64';
}
await exec.exec(
`jf rt upload "${fileName}" "${{ steps.get_repository_stability_path.outputs.repository_stability_path }}/${arch}/${{ inputs.module_name }}/" --flat`
`jf rt upload "${fileName}" "${{ steps.get_repository_stability_path.outputs.repository_stability_path }}/${arch}/${stableRpmSubdirectory}${{ inputs.module_name }}/" --flat`
);
} else if ('${{ steps.parse-distrib.outputs.package_extension }}' === 'deb') {
let arch = 'all';

View File

@ -122,7 +122,7 @@ runs:
done
shell: bash
- uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.${{ inputs.package_extension }}
key: ${{ inputs.cache_key }}
@ -130,7 +130,7 @@ runs:
# Add to your PR the label upload-artifacts to get packages as artifacts
- if: ${{ contains(github.event.pull_request.labels.*.name, 'upload-artifacts') }}
name: Upload package artifacts
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: packages-${{ inputs.distrib }}
path: ./*.${{ inputs.package_extension}}

View File

@ -54,6 +54,11 @@ runs:
PACKAGE_DISTRIB_NAME="0ubuntu.22.04"
PACKAGE_EXTENSION="deb"
DISTRIB_FAMILY="ubuntu"
elif [[ "${{ inputs.distrib }}" == "noble" ]]; then
PACKAGE_DISTRIB_SEPARATOR="-"
PACKAGE_DISTRIB_NAME="0ubuntu.24.04"
PACKAGE_EXTENSION="deb"
DISTRIB_FAMILY="ubuntu"
else
echo "::error::Distrib ${{ inputs.distrib }} cannot be parsed"
exit 1

View File

@ -66,15 +66,21 @@ runs:
shell: bash
- name: Promote DEB package to stable
if: ${{ contains(fromJSON('["bullseye", "bookworm"]'), inputs.distrib) }}
if: ${{ contains(fromJSON('["bullseye", "bookworm", "jammy", "noble"]'), inputs.distrib) }}
run: |
set -eux
echo "[DEBUG] - Distrib: ${{ inputs.distrib }}"
echo "[DEBUG] - Distrib: ${{ inputs.module }}"
if [[ "${{ inputs.distrib }}" == "jammy" || "${{ inputs.distrib }}" == "noble" ]]; then
repo="ubuntu-plugins"
else
repo="apt-plugins"
fi
echo "[DEBUG] - Get path of testing DEB packages to promote to stable."
SRC_PATHS=$(jf rt search --include-dirs apt-plugins-testing/pool/${{ inputs.module }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb | jq -r '.[].path')
SRC_PATHS=$(jf rt search --include-dirs $repo-testing/pool/${{ inputs.module }}/*${{ steps.parse-distrib.outputs.package_distrib_name }}*.deb | jq -r '.[].path')
if [[ ${SRC_PATHS[@]} ]]; then
for SRC_PATH in ${SRC_PATHS[@]}; do
@ -86,7 +92,7 @@ runs:
fi
echo "[DEBUG] - Build target path."
TARGET_PATH="apt-plugins-${{ inputs.stability }}/pool/${{ inputs.module }}/"
TARGET_PATH="$repo-${{ inputs.stability }}/pool/${{ inputs.module }}/"
echo "[DEBUG] - Target path: $TARGET_PATH"
echo "[DEBUG] - Promoting DEB testing artifacts to stable."

View File

@ -0,0 +1,141 @@
name: "test-cpan-libs"
description: "Test packaged CPAN libraries"
inputs:
package_extension:
description: "The package extension (deb or rpm)"
required: true
distrib:
description: "The distribution name"
required: true
arch:
description: "The architecture (amd64 or arm64)"
required: true
runs:
using: "composite"
steps:
- if: ${{ inputs.package_extension == 'rpm' }}
name: Install zstd, perl and Centreon repositories
run: |
dnf install -y zstd perl epel-release 'dnf-command(config-manager)' perl-App-cpanminus
dnf config-manager --set-enabled powertools || true # alma 8
dnf config-manager --set-enabled crb || true # alma 9
# Import Centreon GPG key
GPG_KEY_URL="https://yum-gpg.centreon.com/RPM-GPG-KEY-CES"
curl -sSL $GPG_KEY_URL -o RPM-GPG-KEY-CES
rpm --import RPM-GPG-KEY-CES
shell: bash
- if: ${{ inputs.package_extension == 'deb' }}
name: Install zstd, perl and Centreon repositories
run: |
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y zstd perl wget gpg apt-utils procps build-essential cpanminus
wget -O- https://apt-key.centreon.com | gpg --dearmor | tee /etc/apt/trusted.gpg.d/centreon.gpg > /dev/null 2>&1
# Avoid apt to clean packages cache directory
rm -f /etc/apt/apt.conf.d/docker-clean
apt-get update
shell: bash
- name: Restore packages from cache
uses: actions/cache/restore@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
with:
path: ./*.${{ inputs.package_extension }}
key: ${{ github.sha }}-${{ github.run_id }}-${{ inputs.package_extension }}-${{ inputs.distrib }}
fail-on-cache-miss: true
- if: ${{ inputs.package_extension == 'rpm' }}
name: Check packages installation / uninstallation
run: |
error_log="install_error_${{ inputs.distrib }}_${{ inputs.arch }}.log"
for package in ./*.rpm; do
echo "Installing package: $package"
# List dependencies, and remove version and comparison operators
dependencies=$(rpm -qpR $package | sed 's/ [0-9.-]*\(\s\|$\)/ /g' | sed 's/ [<>!=]*\(\s\|$\)/ /g')
for dependency in $dependencies; do
# Skip non-perl dependencies
if [[ $dependency != perl* ]]; then
continue
else
echo "Check dependency: $dependency"
# Update the dependency name to match the package name
dependency=$(echo $dependency | sed 's/(/-/g' | sed 's/)//g' | sed 's/::/-/g')
fi
# If the dependency has been built in the same workflow, install it
if [[ -n $(find . -maxdepth 1 -regex "\.\/$dependency-[0-9v].*\.rpm") ]]; then
echo "Installing dependency: $dependency"
error_output=$(dnf install -y ./$dependency*.rpm 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the dependency $dependency" >> $error_log; true; }
fi
done
# Install package, then uninstall it with all his dependencies
echo "Package installation..."
error_output=$(dnf install -y $package 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the package $package" >> $error_log; true; }
echo "Package installation done."
script_name=$(echo $package | tr '[:upper:]' '[:lower:]' | sed 's/\.\/perl-//' | sed 's/-[0-9\.-]*.el[0-9]..*.rpm//')
if [[ -f ./tests/cpan-libraries/$script_name.pl ]]; then
echo "Testing package..."
error_output=$(perl tests/cpan-libraries/$script_name.pl 2>&1) || { echo "$error_output" >> $error_log; echo "Error during the usage test of the package $package" >> $error_log; true; }
echo "Testing done."
else
echo "No test script found for the package $package"
fi
echo "Package uninstallation..."
error_output=$(dnf autoremove --setopt=keepcache=True -y $(echo $package | sed 's/_[0-9].*\.rpm//' | sed 's/.\///') 2>&1) || { echo "$error_output" >> $error_log; echo "Error during autoremove of the package $package" >> $error_log; true; }
echo "Package uninstallation done."
done
# If the file error_log exists and is not empty, the workflow is in error
if [[ -s $error_log ]]; then
cat $error_log
exit 1
fi
shell: bash
- if: ${{ inputs.package_extension == 'deb' }}
name: Check packages installation / uninstallation
run: |
error_log="install_error_${{ inputs.distrib }}_${{ inputs.arch }}.log"
for package in ./*.deb; do
# If the debian package name ends with amd64 or arm64, we only install it if the tested architecture is the same, otherwise we skip it
if [[ $package == *amd64.deb && ${{ inputs.arch }} != "amd64" || $package == *arm64.deb && ${{ inputs.arch }} != "arm64" ]]; then
continue
fi
echo "Installing package: $package"
# List dependencies
dependencies=$(dpkg-deb -I $package | grep Depends | sed 's/Depends: //' | sed 's/,//g' | sed 's/(\(.*\)//g') || { echo "$error_output" >> $error_log; echo "Error while listing dependencies of the package $package" >> $error_log; true; }
for dependency in $dependencies; do
# If the dependency exists in the Debian repository, don't check the local dependencies
dependency_info=$(apt-cache policy $dependency)
if [[ -n $dependency_info ]]; then
echo "Dependency $dependency exists in debian repository."
else
# If the dependency has been built in the same workflow, install it
for dependency_package in $(find . -maxdepth 1 -regex "\.\/${dependency}_[0-9].*all\.deb" -o -regex "\.\/${dependency}_[0-9].*${{ inputs.arch }}\.deb"); do
echo "Installing dependency: $dependency_package"
error_output=$(apt-get install -y ./$dependency_package 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the dependency $dependency" >> $error_log; true; }
done
fi
done
# Install package, then uninstall it with all his dependencies
echo "Package installation..."
error_output=$(apt-get install -y $package 2>&1) || { echo "$error_output" >> $error_log; echo "Error during installation of the package $package" >> $error_log; true; }
echo "Package installation done."
script_name=$(echo $package | sed 's/.\/lib//' | sed 's/-perl_[0-9\.-]*-deb.*\.deb//')
if [[ -f ./tests/cpan-libraries/$script_name.pl ]]; then
echo "Testing package..."
error_output=$(perl tests/cpan-libraries/$script_name.pl 2>&1) || { echo "$error_output" >> $error_log; echo "Error during the usage test of the package $package" >> $error_log; true; }
echo "Testing done."
else
echo "No test script found for the package $package"
fi
echo "Package uninstallation..."
error_output=$(apt-get autoremove -y --purge $(echo $package | sed 's/_[0-9].*\.deb//' | sed 's/.\///') 2>&1) || { echo "$error_output" >> $error_log; echo "Error during autoremove of the package $package" >> $error_log; true; }
echo "Package uninstallation done."
done
# If the file error_log exists and is not empty, the workflow is in error
if [[ -s $error_log ]]; then
cat $error_log
exit 1
fi
shell: bash

View File

@ -16,7 +16,7 @@ runs:
steps:
- name: get the cached plugin
uses: actions/cache/restore@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.${{ inputs.package-extension }}
key: ${{ inputs.cache-key }}
@ -24,4 +24,6 @@ runs:
- name: Install, test and remove plugin
shell: bash
run: python3 .github/scripts/test-all-plugins.py ${{ inputs.package-extension }} ${{ inputs.plugin-list }}
run: |
[[ -f /.venv/bin/activate ]] && source /.venv/bin/activate
python3 .github/scripts/test-all-plugins.py ${{ inputs.package-extension }} ${{ inputs.plugin-list }}

View File

@ -4,7 +4,7 @@ updates:
directory: '/'
schedule:
interval: monthly
open-pull-requests-limit: 10
open-pull-requests-limit: 50
labels:
- 'dependencies'
- 'gha'

View File

@ -10,10 +10,22 @@ baseurl=https://repo.goreleaser.com/yum/
enabled=1
gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo
dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel
dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel yum-utils
dnf config-manager --set-enabled powertools
dnf -y install perl-App-cpanminus perl-JSON
cpanm App::FatPacker
cpanm File::Copy::Recursive
# For cpan libs
dnf install -y cpio libcurl-devel libssh-devel expat-devel libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel perl-Module-Build-Tiny
cpanm Module::Build::Tiny
cpanm Module::Install
# Install fpm (ruby 3 is required)
dnf module reset -y ruby
dnf module enable -y ruby:3.1
dnf install -y ruby ruby-devel
gem install fpm
dnf clean all
EOF

View File

@ -10,10 +10,22 @@ baseurl=https://repo.goreleaser.com/yum/
enabled=1
gpgcheck=0' | tee /etc/yum.repos.d/goreleaser.repo
dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel
dnf -y install gcc git gettext rpm-build dos2unix python3 epel-release nfpm-2.41.0 openssl-devel jq zstd selinux-policy-devel yum-utils
dnf config-manager --set-enabled crb
dnf -y install perl-App-cpanminus perl-JSON
cpanm App::FatPacker
cpanm File::Copy::Recursive
# For cpan libs
dnf install -y cpio libcurl-devel libssh-devel expat-devel libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel perl-Module-Build-Tiny
cpanm Module::Build::Tiny
cpanm Module::Install
# Install fpm (ruby 3 is required)
dnf module reset -y ruby
dnf module enable -y ruby:3.1
dnf install -y ruby ruby-devel
gem install fpm
dnf clean all
EOF

View File

@ -55,6 +55,8 @@ apt-get install -y \
cpanm Module::Build::Tiny
cpanm Module::Install
cpanm Crypt::OpenSSL::Guess
gem install fpm
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list
@ -64,3 +66,7 @@ apt-get install -y nfpm=2.41.0
apt-get clean
EOF
COPY .github/patch/fpm-deb.rb.diff /tmp/fpm-deb.rb.diff
# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released (https://github.com/jordansissel/fpm/pull/1947).
RUN patch -i /tmp/fpm-deb.rb.diff $(find / -type f -name "deb.rb") && /bin/rm -rf /tmp/fpm-deb.rb.diff

View File

@ -38,7 +38,6 @@ apt-get install -y \
libapp-fatpacker-perl \
libcurl4-openssl-dev \
libczmq-dev \
libczmq-dev\
libfile-copy-recursive-perl \
libjson-perl \
libmodule-build-tiny-perl \
@ -58,7 +57,6 @@ cpanm Crypt::OpenSSL::Guess
gem install fpm
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=2.41.0
@ -66,3 +64,7 @@ apt-get install -y nfpm=2.41.0
apt-get clean
EOF
COPY .github/patch/fpm-deb.rb.diff /tmp/fpm-deb.rb.diff
# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released (https://github.com/jordansissel/fpm/pull/1947).
RUN patch -i /tmp/fpm-deb.rb.diff $(find / -type f -name "deb.rb") && /bin/rm -rf /tmp/fpm-deb.rb.diff

View File

@ -66,3 +66,7 @@ apt-get install -y nfpm=2.41.0
apt-get clean
EOF
COPY .github/patch/fpm-deb.rb.diff /tmp/fpm-deb.rb.diff
# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released (https://github.com/jordansissel/fpm/pull/1947).
RUN patch -i /tmp/fpm-deb.rb.diff $(find / -type f -name "deb.rb") && /bin/rm -rf /tmp/fpm-deb.rb.diff

View File

@ -6,9 +6,9 @@ RUN bash -e <<EOF
dnf install -y \
git \
java-17-openjdk-devel \
wget \
zstd \
java-17-openjdk-devel
zstd
cd /usr/local/src
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

View File

@ -6,9 +6,9 @@ RUN bash -e <<EOF
dnf install -y \
git \
java-17-openjdk-devel \
wget \
zstd \
java-17-openjdk-devel
zstd
cd /usr/local/src
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

View File

@ -8,9 +8,9 @@ apt-get update
apt-get install -y \
ca-certificates \
git \
zstd \
maven=3.8.7-1 \
openjdk-17-jdk
openjdk-17-jdk \
zstd
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list

View File

@ -8,9 +8,9 @@ apt-get update
apt-get install -y \
ca-certificates \
git \
zstd \
maven=3.6.3-5 \
openjdk-17-jdk
openjdk-17-jdk \
zstd
echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list

View File

@ -8,9 +8,9 @@ apt-get update
apt-get install -y \
ca-certificates \
git \
openjdk-17-jdk \
wget \
zstd \
openjdk-17-jdk
zstd
cd /usr/local/src
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

View File

@ -0,0 +1,30 @@
ARG REGISTRY_URL
FROM ${REGISTRY_URL}/ubuntu:noble
RUN bash -e <<EOF
apt-get update
apt-get install -y \
ca-certificates \
git \
openjdk-17-jdk \
wget \
zstd
cd /usr/local/src
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar zxf apache-maven-3.8.8-bin.tar.gz
ln -s /usr/local/src/apache-maven-3.8.8/bin/mvn /usr/bin/mvn
rm -f apache-maven-3.8.8-bin.tar.gz
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=2.41.0
apt-get clean all
EOF
WORKDIR /src

View File

@ -0,0 +1,72 @@
ARG REGISTRY_URL=docker.io
FROM ${REGISTRY_URL}/ubuntu:noble
ENV DEBIAN_FRONTEND=noninteractive
# fix locale
RUN bash -e <<EOF
apt-get update
apt-get install -y locales
rm -rf /var/lib/apt/lists/*
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
apt-get clean
EOF
ENV LANG=en_US.utf8
RUN bash -e <<EOF
apt-get update
echo 'http://deb.debian.org/debian' | apt-get install -y pbuilder
apt-get install -y \
aptitude \
ca-certificates \
cpanminus \
curl \
debmake \
devscripts \
dh-make \
dh-make-perl \
fakeroot \
gcc \
git \
git-buildpackage \
jq \
libapp-fatpacker-perl \
libcurl4-openssl-dev \
libczmq-dev \
libczmq-dev\
libfile-copy-recursive-perl \
libjson-perl \
libmodule-build-tiny-perl \
libmodule-install-perl \
libssh-dev \
lintian \
python3 \
quilt \
ruby \
uuid-dev \
zstd
cpanm Module::Build::Tiny
cpanm Module::Install
cpanm Crypt::OpenSSL::Guess
gem install fpm
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=2.41.0
apt-get clean
EOF
COPY .github/patch/fpm-deb.rb.diff /tmp/fpm-deb.rb.diff
# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released (https://github.com/jordansissel/fpm/pull/1947).
RUN patch -i /tmp/fpm-deb.rb.diff $(find / -type f -name "deb.rb") && /bin/rm -rf /tmp/fpm-deb.rb.diff

View File

@ -12,7 +12,7 @@ dnf clean all
dnf install -y python3.11 python3.11-pip
pip3.11 install robotframework robotframework-examples
# Install snmpsim
pip3.11 install snmpsim-lextudio
pip3.11 install snmpsim
# Install node
curl -fsSL https://rpm.nodesource.com/setup_21.x | bash -

View File

@ -12,7 +12,7 @@ dnf clean all
dnf install -y python3.11 python3.11-pip
pip3.11 install robotframework robotframework-examples
# Install snmpsim
pip3.11 install snmpsim-lextudio
pip3.11 install snmpsim
# Install node
curl -fsSL https://rpm.nodesource.com/setup_21.x | bash -

View File

@ -2,7 +2,7 @@ ARG REGISTRY_URL=docker.io
FROM ${REGISTRY_URL}/debian:bookworm
ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# fix locale
RUN bash -e <<EOF
@ -15,16 +15,20 @@ apt-get clean
EOF
ENV LANG en_US.utf8
ENV LANG=en_US.utf8
RUN bash -e <<EOF
# Avoid apt to clean packages cache directory
rm -f /etc/apt/apt.conf.d/docker-clean
apt-get update
# Install Robotframework
apt-get install -y python3-dev python3-pip
rm -rf /usr/lib/python3.11/EXTERNALLY-MANAGED
pip3 install robotframework robotframework-examples
# Install snmpsim
pip3 install snmpsim-lextudio
pip3 install snmpsim
# Install nodejs
curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\

View File

@ -2,7 +2,7 @@ ARG REGISTRY_URL=docker.io
FROM ${REGISTRY_URL}/debian:bullseye
ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# fix locale
RUN bash -e <<EOF
@ -15,15 +15,19 @@ apt-get clean
EOF
ENV LANG en_US.utf8
ENV LANG=en_US.utf8
RUN bash -e <<EOF
# Avoid apt to clean packages cache directory
rm -f /etc/apt/apt.conf.d/docker-clean
apt-get update
# Install Robotframework
apt-get install -y python3 python3-dev python3-pip
pip3 install robotframework robotframework-examples
# Install snmpsim
pip3 install snmpsim-lextudio
pip3 install snmpsim
# Install nodejs
curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\

View File

@ -2,7 +2,7 @@ ARG REGISTRY_URL=docker.io
FROM ${REGISTRY_URL}/ubuntu:jammy
ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# fix locale
RUN bash -e <<EOF
@ -15,15 +15,19 @@ apt-get clean
EOF
ENV LANG en_US.utf8
ENV LANG=en_US.utf8
RUN bash -e <<EOF
# Avoid apt to clean packages cache directory
rm -f /etc/apt/apt.conf.d/docker-clean
apt-get update
# Install Robotframework
apt-get install -y python3 python3-dev python3-pip
pip3 install robotframework robotframework-examples
# Install snmpsim
pip3 install snmpsim-lextudio
pip3 install snmpsim
# Install nodejs
curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\

View File

@ -0,0 +1,53 @@
ARG REGISTRY_URL=docker.io
FROM ${REGISTRY_URL}/ubuntu:noble
ENV DEBIAN_FRONTEND=noninteractive
# fix locale
RUN bash -e <<EOF
apt-get update
apt-get install -y locales libcurl4-openssl-dev curl wget zstd jq
rm -rf /var/lib/apt/lists/*
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
apt-get clean
EOF
ENV LANG=en_US.utf8
RUN bash -e <<EOF
# Avoid apt to clean packages cache directory
rm -f /etc/apt/apt.conf.d/docker-clean
apt-get update
# Install requirements for python virtual envs
apt-get install -y python3-venv
python3 -m venv .venv
source .venv/bin/activate
# Install Robotframework
apt-get install -y python3 python3-dev python3-pip
pip3 install robotframework robotframework-examples
# Install snmpsim
pip3 install snmpsim
# Install nodejs
curl -fsSL https://deb.nodesource.com/setup_21.x | bash - &&\
apt-get install -y nodejs
# Install mockoon (needs nodejs)
npm install -g -D @mockoon/cli
# Add Centreon plugins repositories
echo "deb https://packages.centreon.com/ubuntu-plugins-testing/ noble main" | tee -a /etc/apt/sources.list.d/centreon-plugins.list
echo "deb https://packages.centreon.com/ubuntu-plugins-unstable/ noble main" | tee -a /etc/apt/sources.list.d/centreon-plugins.list
wget -O- https://apt-key.centreon.com | gpg --dearmor | tee /etc/apt/trusted.gpg.d/centreon.gpg > /dev/null 2>&1
apt-get update
mkdir -p /var/lib/centreon/centplugins/
chmod 777 /var/lib/centreon/centplugins/
apt-get clean
EOF

View File

@ -0,0 +1,37 @@
ARG REGISTRY_URL=docker.io
FROM ${REGISTRY_URL}/ubuntu:noble
ENV DEBIAN_FRONTEND=noninteractive
# fix locale
RUN bash -e <<EOF
apt-get update
apt-get install -y locales libcurl4-openssl-dev curl wget zstd jq gpg
rm -rf /var/lib/apt/lists/*
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
apt-get clean
EOF
ENV LANG=en_US.utf8
RUN bash -e <<EOF
# Add Centreon plugins repositories
echo "deb https://packages.centreon.com/ubuntu-plugins-stable/ noble main" | tee -a /etc/apt/sources.list.d/centreon-plugins.list
echo "deb https://packages.centreon.com/ubuntu-plugins-testing/ noble main" | tee -a /etc/apt/sources.list.d/centreon-plugins.list
echo "deb https://packages.centreon.com/ubuntu-plugins-unstable/ noble main" | tee -a /etc/apt/sources.list.d/centreon-plugins.list
wget -O- https://apt-key.centreon.com | gpg --dearmor | tee /etc/apt/trusted.gpg.d/centreon.gpg > /dev/null 2>&1
apt-get update
apt-get -y install gcc make libtest2-plugin-nowarnings-perl libauthen-radius-perl libconvert-binary-c-perl libcrypt-openssl-rsa-perl libdata-dump-perl libdatetime-format-dateparse-perl libdatetime-format-strptime-perl libdatetime-perl libdbd-mysql-perl libdbd-odbc-perl libdbd-pg-perl libdbd-sybase-perl libdbi-perl libdigest-crc-perl libdigest-md5-perl libdigest-sha-perl libemail-mime-perl libemail-sender-perl libemail-send-smtp-gmail-perl libfilesys-smbclient-perl libhtml-template-perl libio-socket-inet6-perl libio-socket-ip-perl libjmx4perl-perl libjson-maybexs-perl libjson-perl libjson-webtoken-perl libmail-imapclient-perl libmime-base64-perl libmongodb-perl libnet-dhcp-perl libnet-dns-perl libnet-ldap-perl libnet-mqtt-simple-perl libnet-ntp-perl libnet-ssleay-perl libnet-subnet-perl libnet-telnet-perl libnet-tftp-perl libopenwsman-perl libredis-perl librrds-perl libsnmp-perl libsocket-perl libssh-session-perl libtest-www-selenium-perl libtext-csv-perl libtime-hires-perl libtime-parsedate-perl libuuid-perl libxml-libxml-perl libxml-libxml-simple-perl libxml-simple-perl libxml-xpath-perl libzmq-libzmq4-perl perl perl-modules
# this image is used by centreon-perl-libs unit test and centreon-gorgone unit tests.
apt-get -y install libcrypt-openssl-aes-perl libnet-curl-perl libyaml-libyaml-perl libhash-merge-perl libclone-choose-perl libcryptx-perl libjson-xs-perl libjson-pp-perl
apt-get clean
NONINTERACTIVE_TESTING=1 PERL_MM_USE_DEFAULT=1 cpan Test2::Harness UUID
mkdir -p /var/lib/centreon/centplugins/
chmod 777 /var/lib/centreon/centplugins/
EOF

View File

@ -1,23 +1,62 @@
use strict;
use warnings;
use Test::More;
use Test::Spelling;
use List::MoreUtils qw(uniq);
# the command must have at least one argument
if (!@ARGV) {
die "Usage: perl pod_spell_check.t module.pm stopwords.t";
}
# the first argument is the module to check
my $module_to_check = $ARGV[0];
# the second (optional) argument is the additional dictionary
my $stopword_filename='tests/resources/spellcheck/stopwords.txt';
if(defined($ARGV[1])){
$stopword_filename=$ARGV[1];
}
open(FILE, "<", $stopword_filename)
or die "Could not open $stopword_filename";
printf("Using dictionary: ".$stopword_filename." \n");
add_stopwords(<FILE>);
close(FILE);
set_spell_cmd('hunspell -l');
all_pod_files_spelling_ok($ARGV[0]);
# get_stopwords(): reads the text file and returns its content as an array or strings
sub get_stopwords {
my ($file) = @_;
open(FILE, "<", $stopword_filename)
or die "Could not open $stopword_filename";
printf("Using dictionary: ".$stopword_filename." \n");
my @stop_words;
for my $line (<FILE>) {
chomp $line;
push @stop_words, $line;
}
close(FILE);
return @stop_words;
}
# get_module_options(): reads the Perl module file's POD and returns all the encountered --options
sub get_module_options {
my ($module) = @_;
my @cmd_result = `perldoc -T $module_to_check`;
my @new_words;
for my $pod_line (@cmd_result) {
chomp $pod_line;
my @parsed_options = $pod_line =~ /(--[\w-]+){1,}\s?/mg or next;
push @new_words, @parsed_options;
}
return uniq(sort(@new_words));
}
my @known_words = get_stopwords($stopword_filename);
my @module_options = get_module_options($module_to_check);
# take all words from the text file and the module's options as valid words
add_stopwords(@known_words, @module_options);
# prepare the spelling check command
set_spell_cmd('hunspell -d en_US -l');
# check that all is correct in the Perl module file given as an argument
all_pod_files_spelling_ok($module_to_check);

View File

@ -74,8 +74,8 @@ def install_plugin(plugin, archi):
"apt-get install -o 'Binary::apt::APT::Keep-Downloaded-Packages=1;' -y ./" + plugin.lower() + "*.deb",
shell=True, check=False, stderr=subprocess.STDOUT, stdout=outfile)).returncode
elif archi == "rpm":
outfile.write("dnf install -y ./" + plugin + "*.rpm\n")
output_status = (subprocess.run("dnf install -y ./" + plugin + "*.rpm", shell=True, check=False,
outfile.write("dnf install --setopt=keepcache=True -y ./" + plugin + "*.rpm\n")
output_status = (subprocess.run("dnf install --setopt=keepcache=True -y ./" + plugin + "*.rpm", shell=True, check=False,
stderr=subprocess.STDOUT, stdout=outfile)).returncode
else:
print(f"Unknown architecture, expected deb or rpm, got {archi}. Exiting.")
@ -95,8 +95,8 @@ def remove_plugin(plugin, archi):
# 'autoremove', contrary to 'remove' all dependancy while removing the original package.
elif archi == "rpm":
outfile.write("dnf remove -y " + plugin + "\n")
output_status = (subprocess.run("dnf remove -y " + plugin, shell=True, check=False,
outfile.write("dnf remove --setopt=keepcache=True -y " + plugin + "\n")
output_status = (subprocess.run("dnf remove --setopt=keepcache=True -y " + plugin, shell=True, check=False,
stderr=subprocess.STDOUT, stdout=outfile)).returncode
else:
print(f"Unknown architecture, expected deb or rpm, got {archi}. Exiting.")

View File

@ -29,8 +29,8 @@ jobs:
- name: Check workflow files
run: |
${{ steps.get_actionlint.outputs.executable }} \
-ignore 'label "common" is unknown' \
-ignore 'label "veracode" is unknown' \
-ignore 'label "centreon-common" is unknown' \
-ignore 'label "centreon-collect-arm64" is unknown' \
-ignore '"github.head_ref" is potentially untrusted' \
-shellcheck= \
-pyflakes= \

View File

@ -20,10 +20,13 @@ jobs:
get-environment:
uses: ./.github/workflows/get-environment.yml
with:
version_file: as400/packaging/centreon-as400-daemon.yaml
version_file: as400/connector.as400/pom.xml
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
@ -44,7 +47,9 @@ jobs:
- package_extension: deb
image: packaging-plugins-java-jammy
distrib: jammy
- package_extension: deb
image: packaging-plugins-java-noble
distrib: noble
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}
@ -99,7 +104,7 @@ jobs:
stability: ${{ needs.get-environment.outputs.stability }}
- name: Save to cache
uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.${{ matrix.package_extension }}
key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }}
@ -107,6 +112,7 @@ jobs:
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') &&
@ -126,6 +132,8 @@ jobs:
package_extension: deb
- distrib: jammy
package_extension: deb
- distrib: noble
package_extension: deb
name: deliver ${{ matrix.distrib }}
steps:
@ -141,3 +149,12 @@ jobs:
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

180
.github/workflows/check-status.yml vendored Normal file
View File

@ -0,0 +1,180 @@
name: check-status
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
on:
pull_request:
branches:
- develop
- master
- hotfix-*
- release-*
jobs:
check-status:
runs-on: ubuntu-24.04
steps:
- name: Check workflow statuses and display token usage
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "current rest api rate usage:"
curl -s -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/rate_limit | jq .rate
echo ""
echo ""
echo "current graphql rate usage:"
curl -s -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" https://api.github.com/rate_limit | jq .resources.graphql
echo ""
echo ""
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.number }}
with:
script: |
await exec.exec("sleep 20s");
for (let i = 0; i < 120; i++) {
const failure = [];
const cancelled = [];
const pending = [];
const result = await github.rest.checks.listSuitesForRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: "${{ github.head_ref }}"
});
result.data.check_suites.forEach(({ app: { slug }, conclusion, id}) => {
if (slug === 'github-actions') {
if (conclusion === 'failure' || conclusion === 'cancelled') {
failure.push(id);
} else if (conclusion === null) {
pending.push(id);
}
console.log(`check suite ${id} => ${conclusion === null ? 'pending' : conclusion}`);
}
});
if (pending.length === 0) {
core.setFailed("Cannot get pull request check status");
return;
}
if (failure.length > 0) {
let failureMessage = '';
const failedCheckRuns = [];
for await (const suite_id of failure) {
const resultCheckRuns = await github.rest.checks.listForSuite({
owner: context.repo.owner,
repo: context.repo.repo,
check_suite_id: suite_id
});
resultCheckRuns.data.check_runs.forEach(({ conclusion, name, html_url }) => {
if (conclusion === 'failure' || conclusion === 'cancelled') {
failedCheckRuns.push(`<a href="${html_url}">${name} (${conclusion})</a>`);
}
});
}
core.summary.addRaw(`${failedCheckRuns.length} job(s) failed:`, true)
core.summary.addList(failedCheckRuns);
core.summary.write()
if (failedCheckRuns.length > 0) {
core.setFailed(`${failedCheckRuns.length} job(s) failed`);
return;
}
}
if (pending.length === 1) {
core.info("All workflows are ok");
return;
}
core.info(`${pending.length} workflows in progress`);
await exec.exec("sleep 30s");
}
core.setFailed("Timeout: some jobs are still in progress");
get-environment:
if: |
contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) &&
(startsWith(github.base_ref, 'release-') || startsWith(github.base_ref, 'hotfix-'))
uses: ./.github/workflows/get-environment.yml
check-cherry-pick:
needs: [get-environment, check-status]
runs-on: ubuntu-24.04
if: |
contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) &&
needs.get-environment.outputs.target_stability == 'testing' &&
! contains(needs.get-environment.outputs.labels, 'skip-cherry-pick')
steps:
- name: Check if the PR is a cherry-pick from dev branch
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
LINKED_DEV_BRANCH: develop
with:
script: |
let linkedPrs = [];
let errorMessage = `This pull request is not a cherry-pick from ${process.env.LINKED_DEV_BRANCH} or has no reference to a pull request which has been merged on ${process.env.LINKED_DEV_BRANCH}\n`;
try {
const pull = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number
});
const { title, body } = pull.data;
[title, body].forEach((text) => {
const linkedPrMatches = text.matchAll(/(?:#|\/pull\/)(\d+)/g);
if (linkedPrMatches) {
[...linkedPrMatches].forEach((match) => {
linkedPrs.push(Number(match[1]));
});
}
});
// remove duplicates
linkedPrs = [...new Set(linkedPrs)];
console.log(`Linked pull requests found in PR title and body: ${linkedPrs.join(', ')}`);
} catch (e) {
throw new Error(`Failed to get information of pull request #${context.issue.number}: ${e}`);
}
for await (const prNumber of linkedPrs) {
try {
const pull = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber
});
if (pull.data.base.ref === process.env.LINKED_DEV_BRANCH) {
if (pull.data.state === 'closed' && pull.data.merged === true) {
console.log(`This pull request is a cherry-pick from pull request #${prNumber} on ${process.env.LINKED_DEV_BRANCH}`);
return;
} else {
errorMessage += `This pull request seems to be a cherry-pick from pull request #${prNumber} on ${process.env.LINKED_DEV_BRANCH} but it is not merged yet\n`;
}
} else {
errorMessage += `Pull request #${prNumber} is linked to ${pull.data.base.ref} instead of ${process.env.LINKED_DEV_BRANCH}\n`;
}
} catch (e) {
errorMessage += `Failed to get information on pull request #${prNumber}: ${e}\n`;
}
}
errorMessage += `\nIf you are sure this PR does not need to be a cherry-pick from ${process.env.LINKED_DEV_BRANCH} or must be merged urgently, `;
errorMessage += `open the pull request on ${process.env.LINKED_DEV_BRANCH} and add label "skip-cherry-pick" to the PR and re-run all jobs of workflow check-status\n`;
throw new Error(errorMessage);

View File

@ -26,7 +26,9 @@ jobs:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
strategy:
matrix:
@ -46,6 +48,9 @@ jobs:
- package_extension: deb
image: packaging-plugins-jammy
distrib: jammy
- package_extension: deb
image: packaging-plugins-noble
distrib: noble
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}
@ -75,7 +80,7 @@ jobs:
stability: ${{ needs.get-environment.outputs.stability }}
- name: Upload apt/dnf packages as artifacts if asked
if: ${{ contains(github.event.pull_request.labels.*.name, 'upload-artifacts') }}
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: vmware-connector-daemon-${{ matrix.distrib }}
path: centreon-plugin*
@ -84,6 +89,7 @@ jobs:
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') &&
@ -103,6 +109,8 @@ jobs:
package_extension: deb
- distrib: jammy
package_extension: deb
- distrib: noble
package_extension: deb
name: deliver ${{ matrix.distrib }}
steps:
@ -118,3 +126,12 @@ jobs:
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

View File

@ -18,7 +18,14 @@ on:
- ".github/docker/packaging/*"
jobs:
create-and-push-docker:
get-environment:
uses: ./.github/workflows/get-environment.yml
dockerize:
needs: [get-environment]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
strategy:
fail-fast: false
matrix:
@ -38,7 +45,7 @@ jobs:
- runner: ubuntu-22.04
dockerfile: packaging-plugins-bullseye
image: packaging-plugins-bullseye
- runner: ["self-hosted", "collect-arm64"]
- runner: centreon-collect-arm64
dockerfile: packaging-plugins-bullseye
image: packaging-plugins-bullseye-arm64
- runner: ubuntu-22.04
@ -56,6 +63,12 @@ jobs:
- runner: ubuntu-22.04
dockerfile: packaging-plugins-java-jammy
image: packaging-plugins-java-jammy
- runner: ubuntu-22.04
dockerfile: packaging-plugins-noble
image: packaging-plugins-noble
- runner: ubuntu-22.04
dockerfile: packaging-plugins-java-noble
image: packaging-plugins-java-noble
runs-on: ${{ matrix.runner }}
@ -77,9 +90,9 @@ jobs:
username: ${{ secrets.HARBOR_CENTREON_PUSH_USERNAME }}
password: ${{ secrets.HARBOR_CENTREON_PUSH_TOKEN }}
- uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1
- uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
- uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
file: .github/docker/packaging/Dockerfile.${{ matrix.dockerfile }}
context: .
@ -87,3 +100,12 @@ jobs:
pull: true
push: true
tags: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
set-skip-label:
needs: [get-environment, dockerize]
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

View File

@ -18,29 +18,40 @@ on:
- ".github/docker/testing/*"
jobs:
create-and-push-docker:
get-environment:
uses: ./.github/workflows/get-environment.yml
dockerize:
needs: [get-environment]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
strategy:
fail-fast: false
matrix:
include:
- runner: ubuntu-22.04
- runner: ubuntu-24.04
dockerfile: alma8
image: alma8
- runner: ubuntu-22.04
- runner: ubuntu-24.04
dockerfile: alma9
image: alma9
- runner: ubuntu-22.04
- runner: ubuntu-24.04
dockerfile: bullseye
image: bullseye
- runner: ["self-hosted", "collect-arm64"]
- runner: centreon-collect-arm64
dockerfile: bullseye
image: bullseye-arm64
- runner: ubuntu-22.04
- runner: ubuntu-24.04
dockerfile: bookworm
image: bookworm
- runner: ubuntu-22.04
- runner: ubuntu-24.04
dockerfile: jammy
image: jammy
- runner: ubuntu-24.04
dockerfile: noble
image: noble
runs-on: ${{ matrix.runner }}
@ -62,9 +73,9 @@ jobs:
username: ${{ secrets.HARBOR_CENTREON_PUSH_USERNAME }}
password: ${{ secrets.HARBOR_CENTREON_PUSH_TOKEN }}
- uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1
- uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
- uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
file: .github/docker/testing/Dockerfile.testing-plugins-${{ matrix.dockerfile }}
context: .
@ -72,3 +83,12 @@ jobs:
pull: true
push: true
tags: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/testing-plugins-${{ matrix.image }}:latest
set-skip-label:
needs: [get-environment, dockerize]
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

View File

@ -18,7 +18,14 @@ on:
- ".github/docker/unit-tests/*"
jobs:
create-and-push-docker:
get-environment:
uses: ./.github/workflows/get-environment.yml
dockerize:
needs: [get-environment]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
strategy:
fail-fast: false
matrix:
@ -32,7 +39,7 @@ jobs:
- runner: ubuntu-22.04
dockerfile: bullseye
image: bullseye
- runner: ["self-hosted", "collect-arm64"]
- runner: centreon-collect-arm64
dockerfile: bullseye
image: bullseye-arm64
- runner: ubuntu-22.04
@ -41,6 +48,9 @@ jobs:
- runner: ubuntu-22.04
dockerfile: jammy
image: jammy
- runner: ubuntu-22.04
dockerfile: noble
image: noble
runs-on: ${{ matrix.runner }}
@ -62,9 +72,9 @@ jobs:
username: ${{ secrets.HARBOR_CENTREON_PUSH_USERNAME }}
password: ${{ secrets.HARBOR_CENTREON_PUSH_TOKEN }}
- uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1
- uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0
- uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0
- uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
file: .github/docker/unit-tests/Dockerfile.unit-tests-${{ matrix.dockerfile }}
context: .
@ -72,3 +82,12 @@ jobs:
pull: true
push: true
tags: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/unit-tests-${{ matrix.image }}:latest
set-skip-label:
needs: [get-environment, dockerize]
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

View File

@ -23,6 +23,12 @@ on:
is_targeting_feature_branch:
description: "if it is a PR, check if targeting a feature branch"
value: ${{ jobs.get-environment.outputs.is_targeting_feature_branch }}
skip_workflow:
description: "if the current workflow should be skipped"
value: ${{ jobs.get-environment.outputs.skip_workflow }}
labels:
description: "list of labels on the PR"
value: ${{ jobs.get-environment.outputs.labels }}
jobs:
get-environment:
@ -34,10 +40,135 @@ jobs:
target_stability: ${{ steps.get_stability.outputs.target_stability }}
release_type: ${{ steps.get_release_type.outputs.release_type }}
is_targeting_feature_branch: ${{ steps.get_stability.outputs.is_targeting_feature_branch }}
skip_workflow: ${{ steps.skip_workflow.outputs.result }}
labels: ${{ steps.has_skip_label.outputs.labels }}
steps:
- name: Check if PR has skip label
id: has_skip_label
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
let hasSkipLabel = false;
let labels = [];
if (${{ contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) }} === true) {
try {
const fetchedLabels = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number
});
fetchedLabels.data.forEach(({ name }) => {
labels.push(name);
if (name === '${{ format('skip-workflow-{0}', github.workflow) }}') {
hasSkipLabel = true;
}
});
} catch (e) {
core.warning(`failed to list labels: ${e}`);
}
}
core.setOutput('labels', labels);
return hasSkipLabel;
- name: Checkout sources (current branch)
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
with:
fetch-depth: ${{ steps.has_skip_label.outputs.result == 'true' && 100 || 1 }}
- if: ${{ steps.has_skip_label.outputs.result == 'true' }}
name: Get workflow triggered paths
id: get_workflow_triggered_paths
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const fs = require('fs');
let paths = [];
const workflowFilePath = '${{ github.workflow_ref }}'.replace('${{ github.repository }}/', '').split('@').shift();
if (fs.existsSync(workflowFilePath)) {
const workflowFileContent = fs.readFileSync(workflowFilePath, 'utf8');
const workflowFileContentLines = workflowFileContent.split('\n');
let hasReadOn = false;
let hasReadPullRequest = false;
let hasReadPaths = false;
for (const line of workflowFileContentLines) {
if (line.match(/^on:\s*$/)) {
hasReadOn = true;
continue;
}
if (line.match(/^\s{2}pull_request(_target)?:\s*$/)) {
hasReadPullRequest = true;
continue;
}
if (line.match(/^\s{4}paths:\s*$/)) {
hasReadPaths = true;
continue;
}
if (hasReadOn && hasReadPullRequest && hasReadPaths) {
const matches = line.match(/^\s{6}-\s['"](.+)['"]\s*$/);
if (matches) {
paths.push(matches[1].trim());
} else {
break;
}
}
}
}
if (paths.length === 0) {
paths = ['**'];
}
console.log(paths);
return paths;
- if: ${{ steps.has_skip_label.outputs.result == 'true' }}
name: Get push changes
id: get_push_changes
uses: tj-actions/changed-files@2f7c5bfce28377bc069a65ba478de0a74aa0ca32 # v46.0.1
with:
since_last_remote_commit: true
json: true
escape_json: false
files: ${{ join(fromJSON(steps.get_workflow_triggered_paths.outputs.result), ';') }}
files_separator: ';'
- name: Check if current workflow should be skipped
id: skip_workflow
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
if (${{ steps.has_skip_label.outputs.result }} === false) {
return false;
}
const label = '${{ format('skip-workflow-{0}', github.workflow) }}';
if ('${{ steps.get_push_changes.outputs.any_changed }}' === 'true') {
try {
await github.rest.issues.removeLabel({
name: label,
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number
});
core.notice(`label ${label} removed because changes were detected on last push.`);
} catch (e) {
core.warning(`failed to remove label ${label}: ${e}`);
}
return false;
}
return true;
- if: ${{ github.event_name == 'pull_request' }}
name: Get nested pull request path
@ -74,7 +205,7 @@ jobs:
script: |
const getStability = (branchName) => {
switch (true) {
case /(^develop$)|(^dev-\d{2}\.\d{2}\.x$)|(^prepare-release-cloud.*)/.test(branchName):
case /(^develop$)|(^dev-\d{2}\.\d{2}\.x$)/.test(branchName):
return 'unstable';
case /(^release.+)|(^hotfix.+)/.test(branchName):
return 'testing';
@ -115,24 +246,80 @@ jobs:
- name: Get version
id: get_version
run: |
if [[ "${{ inputs.version_file }}" == "" ]]; then
VERSION=$(date '+%Y%m%d')
elif [[ "${{ inputs.version_file }}" == */*.yaml ]]; then
VERSION=$(grep 'version: ' ${{ inputs.version_file }} | cut -d' ' -f2 | tr -d '"')
else
VERSION=$(grep VERSION ${{ inputs.version_file }} | cut -d "'" -f 2)
fi
echo "version=$(echo $VERSION)" >> $GITHUB_OUTPUT
shell: bash
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const { execSync } = require('child_process');
const fs = require('fs');
let version = '';
if ('${{ inputs.version_file }}'.match(/pom\.xml$/)) {
version = execSync(`grep -m 1 "<version>.*</version>" ${{ inputs.version_file }} | sed 's/.*<version>\\(.*\\)<\\/version>.*/\\1/'`).toString().trim();
- name: "Get release: 1 for testing / stable, <date>.<commit_sha> for others"
} else if ('${{ steps.get_stability.outputs.stability }}' === 'stable') {
const { owner, repo } = context.repo;
// Fetch the most recent tag for plugins
const { data: tags } = await github.rest.repos.listTags({
owner,
repo,
per_page: 10
});
let latestTag = null;
let latestDate = 0;
// Filter tags matching format plugins-YYYYMMDD
for (const tag of tags) {
const match = tag.name.match(/^plugins-(\d{8})$/);
const tagDate = parseInt(match[1], 10);
// ensure we get the true latest tag and not the most recent created
if (tagDate > latestDate) {
latestTag = tag.name;
latestDate = tagDate;
}
}
console.log(`Most recent tag found: ${latestTag}`)
// Get current release tag from .version file
version = fs.readFileSync('.version.plugins', 'utf8').trim();
console.log(`Stable version based on .version.plugins file will be: ${version}`)
} else if ('${{ steps.get_stability.outputs.stability }}' === 'testing') {
const branchName = "${{ github.head_ref || github.ref_name }}";
const matches = branchName.match(/^(?:release|hotfix)-(\d{8})$/);
if (matches) {
version = matches[1];
} else {
throw new Error('invalid version');
}
} else if ('${{ steps.get_stability.outputs.stability }}' === 'unstable') {
const currentDate = new Date();
version = `${currentDate.getFullYear()}${("0" + (currentDate.getMonth() + 1)).slice(-2)}${String(currentDate.getDate()).padStart(2, '0')}`;
} else {
const currentDate = new Date();
version = `${currentDate.getFullYear()}${("0" + (currentDate.getMonth() + 1)).slice(-2)}00`;
}
core.setOutput('version', version);
- name: "Get release: 1 for testing / stable, <date> for others"
id: get_release
run: |
RELEASE=$(date '+%H%M%S')
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
let release = '';
echo "release=$RELEASE" >> $GITHUB_OUTPUT
shell: bash
if (${{ contains(fromJSON('["testing", "unstable"]') , steps.get_stability.outputs.stability) }} === true) {
release = "1"
} else {
release = Date.now()
}
core.setOutput('release', release);
- name: "Get release type: hotfix, release or not defined if not a release"
id: get_release_type
@ -155,6 +342,8 @@ jobs:
['release_type', '${{ steps.get_release_type.outputs.release_type || '<em>not defined because this is not a release</em>' }}'],
['is_targeting_feature_branch', '${{ steps.get_stability.outputs.is_targeting_feature_branch }}'],
['target_stability', '${{ steps.get_stability.outputs.target_stability || '<em>not defined because current run is not triggered by pull request event</em>' }}'],
['skip_workflow', '${{ steps.skip_workflow.outputs.result }}'],
['labels', '${{ steps.has_skip_label.outputs.labels }}'],
];
core.summary
.addHeading(`${context.workflow} environment outputs`)

View File

@ -24,6 +24,9 @@ jobs:
package:
needs: [get-environment]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-24.04
strategy:
fail-fast: false
@ -44,6 +47,9 @@ jobs:
- package_extension: deb
image: packaging-plugins-jammy
distrib: jammy
- package_extension: deb
image: packaging-plugins-noble
distrib: noble
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}
@ -117,6 +123,7 @@ jobs:
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') &&
@ -136,6 +143,9 @@ jobs:
package_extension: deb
- distrib: jammy
package_extension: deb
- distrib: noble
package_extension: deb
name: deliver ${{ matrix.distrib }}
steps:
@ -151,3 +161,12 @@ jobs:
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

View File

@ -24,7 +24,9 @@ jobs:
package-rpm:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-24.04
strategy:
@ -41,6 +43,7 @@ jobs:
"Config::AWS",
"Convert::Binary::C",
"Convert::EBCDIC",
"Crypt::Argon2",
"Crypt::Blowfish_PP",
"Crypt::OpenSSL::AES",
"DataStruct::Flat",
@ -50,15 +53,20 @@ jobs:
"Device::Modbus::RTU::Client",
"Device::Modbus::TCP::Client",
"Email::Send::SMTP::Gmail",
"Exporter::Tiny", # Required by JSON::Path: the version available in the official repositories doesn't work with the last version of JSON::Path
"FFI::CheckLib",
"FFI::Platypus",
"File::SearchPath",
"HTTP::ProxyPAC",
"JMX::Jmx4Perl",
"JSON::Path",
"Libssh::Session",
"LV",
"Mojo::IOLoop::Signal",
"MongoDB",
"MooseX::ClassAttribute",
"Net::Amazon::Signature::V4",
"Net::Curl",
"Net::DHCP",
"Net::FTPSSL",
"Net::HTTPTunnel",
@ -90,6 +98,9 @@ jobs:
- rpm_provides: ""
- version: ""
- spec_file: ""
- no-auto-depends: "false"
- preinstall_cpanlibs: ""
- revision: "1"
- distrib: el8
package_extension: rpm
image: packaging-plugins-alma8
@ -98,6 +109,10 @@ jobs:
image: packaging-plugins-alma9
- name: "BSON"
rpm_provides: "perl(BSON::Bytes) perl(BSON::Code) perl(BSON::DBRef) perl(BSON::OID) perl(BSON::Raw) perl(BSON::Regex) perl(BSON::Time) perl(BSON::Timestamp) perl(BSON::Types) perl(BSON)"
- name: "Crypt::Argon2"
preinstall_cpanlibs: "Dist::Build"
rpm_provides: "perl-Crypt-Argon2-debuginfo perl(Crypt::Argon2)"
revision: "2"
- name: "DateTime::Format::Duration::ISO8601"
rpm_provides: "perl(DateTime-Format-Duration-ISO8601)"
- name: "Device::Modbus::RTU::Client"
@ -109,7 +124,19 @@ jobs:
- name: "FFI::Platypus"
rpm_provides: "perl(FFI::Platypus::Buffer) perl(FFI::Platypus::Memory)"
rpm_dependencies: "perl(Capture::Tiny) perl(FFI::CheckLib) perl(File::Spec::Functions) perl(IPC::Cmd) perl(JSON::PP) perl(List::Util) perl(autodie) perl(constant) perl(parent)"
no-auto-depends: true
no-auto-depends: "true"
- name: "Libssh::Session"
rpm_dependencies: "libssh"
rpm_provides: "perl-Libssh-Session-debuginfo perl(Libssh::Session) perl(Libssh::Sftp)"
revision: "2"
- name: "Mojo::IOLoop::Signal"
rpm_dependencies: "perl-Mojolicious"
rpm_provides: "perl(Mojo::IOLoop::Signal)"
no-auto-depends: "true"
- name: "Net::Curl"
rpm_dependencies: "libcurl"
rpm_provides: "perl-Net-Curl-debuginfo perl(Net::Curl) perl(Net::Curl::Compat) perl(Net::Curl::Easy) perl(Net::Curl::Form) perl(Net::Curl::Multi) perl(Net::Curl::Share)"
revision: "2"
- name: "Net::DHCP"
rpm_provides: "perl(Net::DHCP::Constants) perl(Net::DHCP::Packet)"
- name: "Net::SMTPS"
@ -129,11 +156,6 @@ jobs:
- name: "ZMQ::LibZMQ4"
version: "0.01"
rpm_dependencies: "zeromq"
- name: "Mojo::IOLoop::Signal"
rpm_dependencies: "perl-Mojolicious"
rpm_provides: "perl(Mojo::IOLoop::Signal)"
no-auto-depends: true
name: package ${{ matrix.distrib }} ${{ matrix.name }}
container:
@ -144,44 +166,51 @@ jobs:
steps:
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
name: Get package infos
id: package-infos
run: |
yum install -y yum-utils epel-release git
yum config-manager --set-enabled crb || true # alma 9
yum config-manager --set-enabled powertools || true # alma 8
yum install -y cpanminus rpm-build libcurl-devel libssh-devel expat-devel gcc libuuid-devel zeromq-devel libxml2-devel libffi-devel perl-DBI perl-Net-Pcap freetds freetds-devel perl-Module-Build-Tiny
dnf module reset -y ruby
dnf module enable -y ruby:3.1
dnf install -y ruby ruby-devel
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
repository: kduret/fpm
ref: fix-rpm-perl-dependency-name-unchanged
path: fpm
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
name: Build and install fpm # waiting https://github.com/jordansissel/fpm/pull/2066
run: |
dnf install -y bsdtar
cd fpm
gem install bundler
bundle install
make install
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file == '' }}
run: |
cpan_info=$(cpanm --info ${{ matrix.name }})
if [ -z "${{ matrix.version }}" ]; then
PACKAGE_VERSION=""
CPAN_PACKAGE_VERSION=$(echo $cpan_info | sed 's/\.tar\.gz$//' | sed 's/.*\-//')
if [[ ! $CPAN_PACKAGE_VERSION =~ ^[v0-9]+\.[0-9]+ ]]; then
echo "::error::Invalid version number: ${CPAN_PACKAGE_VERSION}"
exit 1
fi
PACKAGE_VERSION="${CPAN_PACKAGE_VERSION}"
else
PACKAGE_VERSION=" -v ${{ matrix.version }}"
PACKAGE_VERSION="${{ matrix.version }}"
fi
echo "package_version=$(echo $PACKAGE_VERSION)" >> $GITHUB_OUTPUT
CPAN_PACKAGE_NAME=$(echo $cpan_info | sed 's/.*\///g' | sed 's/-[0-9\.]*\.tar\.gz//g')
PACKAGE_NAME="perl-$CPAN_PACKAGE_NAME"
echo "package_name=$(echo $PACKAGE_NAME)" >> $GITHUB_OUTPUT
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
name: Check if package already exists
id: check-package-existence
run: |
package_info=$(dnf provides 'perl(${{ matrix.name }})' 2>&1 | tr '[:upper:]' '[:lower:]' || true)
do_not_build="false"
if [[ ! $package_info =~ "no matches found" ]]; then
package_version=$(echo $package_info | grep -oP "perl\($(echo ${{ matrix.name }} | tr '[:upper:]' '[:lower:]')\) = \K[0-9]+\.[0-9]+")
if [[ "$package_version" == "${{ steps.package-infos.outputs.package_version }}" || "v$package_version" == "${{ steps.package-infos.outputs.package_version }}" ]]; then
echo "::warning::Package ${{ matrix.name }} already exists in the official ${{ matrix.distrib }} repository with the same version."
do_not_build="true"
else
echo "::warning::Package ${{ matrix.name }} exists in the official ${{ matrix.distrib }} repository with a different version."
do_not_build="false"
fi
fi
echo "do_not_build=$do_not_build" >> $GITHUB_OUTPUT
shell: bash
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file == '' }}
run: |
PACKAGE_VERSION=" -v ${{ steps.package-infos.outputs.package_version }}"
if [ -z "${{ matrix.rpm_dependencies }}" ]; then
PACKAGE_DEPENDENCIES=""
@ -191,7 +220,7 @@ jobs:
done
fi
if [ ! -z "${{ matrix.no-auto-depends }}" ]; then
if [ "${{ matrix.no-auto-depends }}" == "true" ]; then
PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --no-auto-depends"
fi
@ -203,15 +232,25 @@ jobs:
done
fi
cpanm Module::Build::Tiny
cpanm Module::Install
for CPANLIB_PREINSTALL in `echo "${{ matrix.preinstall_cpanlibs }}"`; do
cpanm $CPANLIB_PREINSTALL
done
export SYBASE="/usr"
fpm -s cpan -t ${{ matrix.package_extension }} --rpm-dist ${{ matrix.distrib }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES$PACKAGE_PROVIDES$PACKAGE_VERSION ${{ matrix.name }}
temp_file=$(mktemp)
echo "default.local" | tee /etc/mailname
created_package=$(fpm -s cpan -t ${{ matrix.package_extension }} --rpm-dist ${{ matrix.distrib }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES$PACKAGE_PROVIDES$PACKAGE_VERSION --iteration ${{ matrix.revision }} ${{ matrix.name }} | tee "$temp_file" | grep "Created package" | grep -oP '(?<=:path=>").*?(?=")')
# Check package name
if [ -z "$created_package" ]; then
echo "Error: fpm command failed"
exit 1
fi
# Check rpm
rpm2cpio $created_package | cpio -t
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file != '' }}
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) && matrix.spec_file != '' }}
run: |
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
@ -220,7 +259,7 @@ jobs:
cp -r ~/rpmbuild/RPMS/noarch/*.rpm .
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) }}
name: Replace '::' with - in the feature path
id: package-name
run: |
@ -230,15 +269,18 @@ jobs:
echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ steps.package-name.outputs.name_with_dash }}
path: ./*.${{ matrix.package_extension }}
retention-days: 1
merge-package-rpm-artifacts:
needs: [package-rpm]
needs: [get-environment, package-rpm]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-24.04
strategy:
matrix:
@ -246,7 +288,7 @@ jobs:
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
uses: actions/upload-artifact/merge@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: packages-rpm-${{ matrix.distrib }}
pattern: packages-rpm-${{ matrix.distrib }}-*
@ -260,7 +302,10 @@ jobs:
failOnError: false
sign-rpm:
needs: [merge-package-rpm-artifacts]
needs: [get-environment, merge-package-rpm-artifacts]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-24.04
strategy:
@ -278,9 +323,9 @@ jobs:
- run: apt-get install -y zstd
shell: bash
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9
with:
name: packages-rpm-${{ matrix.distrib }}
path: ./
@ -291,86 +336,135 @@ jobs:
- run: rpmsign --addsign ./*.rpm
shell: bash
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.rpm
key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
package-deb:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ${{ matrix.runner_name }}
strategy:
fail-fast: false
matrix:
image: [packaging-plugins-bullseye, packaging-plugins-bookworm, packaging-plugins-jammy, packaging-plugins-bullseye-arm64]
image: [packaging-plugins-bullseye, packaging-plugins-bookworm, packaging-plugins-jammy, packaging-plugins-noble, packaging-plugins-bullseye-arm64]
name:
[
"ARGV::Struct",
"Authen::SCRAM::Client",
"Config::AWS",
"Convert::EBCDIC",
"Crypt::Argon2",
"Crypt::Blowfish_PP",
"Crypt::OpenSSL::AES",
"DataStruct::Flat",
"DateTime::Format::Duration::ISO8601",
"Device::Modbus",
"Device::Modbus::RTU::Client",
"Device::Modbus::TCP::Client",
"Digest::SHA1",
"Email::Send::SMTP::Gmail",
"Hash::Ordered",
"HTTP::ProxyPAC",
"JMX::Jmx4Perl",
"Libssh::Session",
"Mojo::IOLoop::Signal",
"Net::Amazon::Signature::V4",
"Net::Curl",
"Net::FTPSSL",
"Net::HTTPTunnel",
"Net::MQTT::Simple",
"Net::SMTP_auth",
"Paws",
"Statistics::Regression",
"WWW::Selenium",
"XS::Loader",
"ZMQ::Constants",
"ZMQ::LibZMQ4"
]
include:
- runner_name: ubuntu-24.04
- arch: amd64
- build_distribs: "bullseye,bookworm,jammy"
- build_names: "bullseye-amd64,bookworm,jammy,noble"
- deb_dependencies: ""
- rpm_provides: ""
- deb_provides: ""
- version: ""
- use_dh_make_perl: "true"
- spec_file: ""
- distrib: bullseye
- no-auto-depends: "false"
- preinstall_cpanlibs: ""
- revision: "1"
- build_name: bullseye-amd64
distrib: bullseye
package_extension: deb
image: packaging-plugins-bullseye
- distrib: bookworm
- build_name: bookworm
distrib: bookworm
package_extension: deb
image: packaging-plugins-bookworm
- distrib: jammy
- build_name: jammy
distrib: jammy
package_extension: deb
image: packaging-plugins-jammy
- distrib: bullseye
- build_name: noble
distrib: noble
package_extension: deb
image: packaging-plugins-noble
- build_name: bullseye-arm64
distrib: bullseye
package_extension: deb
image: packaging-plugins-bullseye-arm64
arch: arm64
runner_name: ["self-hosted", "collect-arm64"]
runner_name: centreon-collect-arm64
- name: "Crypt::Argon2"
build_names: "bullseye-amd64,jammy,noble,bullseye-arm64"
preinstall_cpanlibs: "Dist::Build"
use_dh_make_perl: "false"
no-auto-depends: "true"
deb_dependencies: "libexporter-tiny-perl libtime-hires-perl libxsloader-perl"
deb_provides: "libcrypt-argon2-perl-dbgsym"
revision: "2"
- name: "Crypt::OpenSSL::AES"
use_dh_make_perl: "false"
deb_dependencies: "libexporter-tiny-perl libxs-install-perl"
no-auto-depends: "true"
build_names: "bullseye-amd64,bookworm,jammy,noble,bullseye-arm64"
- name: "Device::Modbus::RTU::Client"
build_names: "bookworm"
- name: "Device::Modbus::TCP::Client"
build_names: "bookworm"
- name: "Digest::SHA1"
build_names: "jammy,noble"
- name: "Libssh::Session"
use_dh_make_perl: "false"
build_names: "bullseye-amd64,bookworm,jammy,noble,bullseye-arm64"
no-auto-depends: "true"
deb_dependencies: "libcarp-assert-perl libdynaloader-functions-perl libexporter-tiny-perl libdevel-overloadinfo-perl libssh-4 libc6"
deb_provides: "libssh-session-perl-dbgsym libssh-session-sftp"
revision: "2"
- name: "Net::Amazon::Signature::V4"
build_distribs: ["bullseye", "jammy"]
build_names: ["bullseye-amd64", "jammy", "noble"]
- name: "Net::Curl"
use_dh_make_perl: "false"
build_names: "bullseye-amd64,bookworm,jammy,noble,bullseye-arm64"
no-auto-depends: "true"
deb_dependencies: "libcarp-assert-perl libdynaloader-functions-perl libexporter-tiny-perl libdevel-overloadinfo-perl libcurl4"
deb_provides: "libnet-curl-perl-dbgsym libnet-curl-compat-perl libnet-curl-easy-perl libnet-curl-form-perl libnet-curl-share-perl libnet-curl-multi-perl"
revision: "2"
- name: "Net::MQTT::Simple"
version: "1.29"
- name: "Paws"
use_dh_make_perl: "false"
deb_dependencies: "libmoose-perl libmoosex-classattribute-perl libjson-maybexs-perl liburl-encode-perl libargv-struct-perl libmoo-perl libtype-tiny-perl libdatastruct-flat-perl libmodule-find-perl libthrowable-perl liburi-template-perl libnet-amazon-signature-v4-perl"
no-auto-depends: true
no-auto-depends: "true"
- name: "Statistics::Regression"
build_distribs: "bullseye"
build_names: "bullseye-amd64"
version: "0.53"
- name: "ZMQ::LibZMQ4"
use_dh_make_perl: "false"
version: "0.01"
deb_dependencies: "libzmq5"
build_names: "bullseye-amd64,bookworm,jammy,noble,bullseye-arm64"
name: package ${{ matrix.distrib }} ${{ matrix.arch }} ${{ matrix.name }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
@ -379,43 +473,73 @@ jobs:
password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }}
steps:
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- if: ${{ contains(matrix.build_names, matrix.build_name) }}
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
- if: ${{ contains(matrix.build_names, matrix.build_name) }}
name: Parse distrib name
id: parse-distrib
uses: ./.github/actions/parse-distrib
with:
distrib: ${{ matrix.distrib }}
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
name: Get package version
id: package-version
- if: ${{ contains(matrix.build_names, matrix.build_name) }}
name: Get package infos
id: package-infos
run: |
apt-get update
apt-get install -y cpanminus
cpan_info=$(cpanm --info ${{ matrix.name }})
if [ -z "${{ matrix.version }}" ]; then
CPAN_PACKAGE_VERSION=$(cpanm --info ${{ matrix.name }} | sed 's/\.tar\.gz$//' | sed 's/.*\-//' | sed 's/v//')
if [[ ! $CPAN_PACKAGE_VERSION =~ ^[0-9]+\.[0-9]+ ]]; then
CPAN_PACKAGE_VERSION=$(echo $cpan_info | sed 's/\.tar\.gz$//' | sed 's/.*\-//')
if [[ ! $CPAN_PACKAGE_VERSION =~ ^[v0-9]+\.[0-9]+ ]]; then
echo "::error::Invalid version number: ${CPAN_PACKAGE_VERSION}"
exit 1
fi
PACKAGE_VERSION="${CPAN_PACKAGE_VERSION}"
else
PACKAGE_VERSION="${{ matrix.version }}"
fi
echo "package_version=$(echo $PACKAGE_VERSION)" >> $GITHUB_OUTPUT
CPAN_PACKAGE_NAME=$(echo $cpan_info | sed 's/.*\///g' | sed 's/-[0-9\.]*\.tar\.gz//g' | tr '[:upper:]' '[:lower:]')
# Handle specific cases of libssh-session
if [[ "$CPAN_PACKAGE_NAME" == "lib"* ]];then
PACKAGE_NAME="$CPAN_PACKAGE_NAME-perl"
else
PACKAGE_NAME="lib$CPAN_PACKAGE_NAME-perl"
fi
echo "package_name=$(echo $PACKAGE_NAME)" >> $GITHUB_OUTPUT
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.use_dh_make_perl == 'false' }}
- if: ${{ contains(matrix.build_names, matrix.build_name) }}
name: Check if package already exists
id: check-package-existence
run: |
apt-get install -y ruby libcurl4-openssl-dev libssh-dev uuid-dev libczmq-dev
package_info=$(apt-cache policy ${{ steps.package-infos.outputs.package_name }})
if [[ -n $package_info && "${{ steps.package-infos.outputs.package_name }}" =~ "_" ]]; then
package_info=$(apt-cache policy $(echo ${{ steps.package-infos.outputs.package_name }} | sed 's/_//g'))
fi
do_not_build="false"
if [[ -n $package_info ]]; then
candidate_version=$(echo "$package_info" | grep 'Candidate:' | awk '{print $2}')
if [[ "$candidate_version" == "${{ steps.package-infos.outputs.package_version }}"* || "v$candidate_version" == "${{ steps.package-infos.outputs.package_version }}"* ]]; then
echo "::warning::Package ${{ steps.package-infos.outputs.package_name }} already exists in the official ${{ matrix.distrib }} repository with the same version."
do_not_build="true"
else
echo "::warning::Package ${{ steps.package-infos.outputs.package_name }} exists in the official ${{ matrix.distrib }} repository with a different version."
do_not_build="false"
fi
fi
echo "do_not_build=$do_not_build" >> $GITHUB_OUTPUT
shell: bash
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) && matrix.use_dh_make_perl == 'false' }}
run: |
# Install needed cpan libs
for CPANLIB_PREINSTALL in `echo "${{ matrix.preinstall_cpanlibs }}"`; do
cpanm $CPANLIB_PREINSTALL
done
if [ -z "${{ matrix.deb_dependencies }}" ]; then
PACKAGE_DEPENDENCIES=""
else
@ -423,30 +547,57 @@ jobs:
PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --depends $PACKAGE_DEPENDENCY"
done
fi
if [ ! -z "${{ matrix.no-auto-depends }}" ]; then
if [ "${{ matrix.no-auto-depends }}" == "true" ]; then
PACKAGE_DEPENDENCIES="$PACKAGE_DEPENDENCIES --no-auto-depends"
fi
cpanm Module::Build::Tiny
cpanm Module::Install
if [ -z "${{ matrix.deb_provides }}" ]; then
PACKAGE_PROVIDES=""
else
for PACKAGE_PROVIDE in `echo "${{ matrix.deb_provides }}"`; do
PACKAGE_PROVIDES="$PACKAGE_PROVIDES --provides $PACKAGE_PROVIDE"
done
fi
gem install fpm
# Patch to apply fpm fix for debian package generation while waiting for the official fix to be released.
patch -i .github/patch/fpm-deb.rb.diff $(find / -type f -name "deb.rb")
temp_file=$(mktemp)
echo "default.local" | tee /etc/mailname
# Handle specific case for libssh-session
if [[ "${{ matrix.name }}" == "Libssh::Session" ]]; then
created_package=$(fpm -s cpan -t ${{ matrix.package_extension }} --deb-dist ${{ matrix.distrib }} --iteration ${{ matrix.revision }}${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES$PACKAGE_PROVIDES -v ${{ steps.package-infos.outputs.package_version }} --name ssh-session ${{ matrix.name }} | tee "$temp_file" | grep "Created package" | grep -oP '(?<=:path=>").*?(?=")') || { echo "Error: fpm command failed"; exit 1; }
else
created_package=$(fpm -s cpan -t ${{ matrix.package_extension }} --deb-dist ${{ matrix.distrib }} --iteration ${{ matrix.revision }}${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES$PACKAGE_PROVIDES -v ${{ steps.package-infos.outputs.package_version }} ${{ matrix.name }} | tee "$temp_file" | grep "Created package" | grep -oP '(?<=:path=>").*?(?=")') || { echo "Error: fpm command failed"; exit 1; }
fi
# Check package name
if [ -z "$created_package" ]; then
echo "Error: fpm command failed"
exit 1
fi
# Check deb
dpkg-deb --verbose --contents $created_package || { echo "Error: dpkg-deb failed for package $created_package"; exit 1; }
fpm -a native -s cpan -t ${{ matrix.package_extension }} --deb-dist ${{ matrix.distrib }} --iteration ${{ steps.parse-distrib.outputs.package_distrib_name }} --verbose --cpan-verbose --no-cpan-test$PACKAGE_DEPENDENCIES -v ${{ steps.package-version.outputs.package_version }} ${{ matrix.name }}
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) && matrix.use_dh_make_perl == 'true' }}
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) && matrix.use_dh_make_perl == 'true' }}
run: |
apt-get install -y libcurl4-openssl-dev dh-make-perl libssh-dev uuid-dev libczmq-dev libmodule-install-perl libmodule-build-tiny-perl
# module-build-tiny is required for Mojo::IOLoop::Signal build.
DEB_BUILD_OPTIONS="nocheck nodocs notest" dh-make-perl make --dist ${{ matrix.distrib }} --build --version ${{ steps.package-version.outputs.package_version }}${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} --cpan ${{ matrix.name }}
# Install needed cpan libs
for CPANLIB_PREINSTALL in `echo "${{ matrix.preinstall_cpanlibs }}"`; do
cpanm $CPANLIB_PREINSTALL
done
temp_file=$(mktemp)
created_package=$(DEB_BUILD_OPTIONS="nocheck nodocs notest" dh-make-perl make --dist ${{ matrix.distrib }} --build --version ${{ steps.package-infos.outputs.package_version }} --revision ${{ matrix.revision }}${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} --cpan ${{ matrix.name }} | tee "$temp_file" | grep "building package" | grep -oP "(?<=in '..\/).*.deb(?=')") || { echo "Error: dh-make-perl command failed"; exit 1; }
# Check package name
if [ -z "$created_package" ]; then
echo "Error: dh-make-perl command failed"
exit 1
fi
# Check deb
dpkg-deb --contents $created_package || { echo "Error: dpkg-deb failed for package $created_package"; exit 1; }
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) }}
name: Replace '::' with - in the feature path
id: package-name
run: |
@ -456,23 +607,26 @@ jobs:
echo "name_with_dash=$name_with_dash" >> $GITHUB_OUTPUT
shell: bash
- if: ${{ contains(matrix.build_distribs, matrix.distrib) }}
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
- if: ${{ steps.check-package-existence.outputs.do_not_build == 'false' && contains(matrix.build_names, matrix.build_name) }}
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: packages-${{ matrix.package_extension }}-${{ matrix.distrib }}-${{ matrix.arch }}-${{ steps.package-name.outputs.name_with_dash}}
path: ./*.${{ matrix.package_extension }}
retention-days: 1
merge-package-deb-artifacts:
needs: [package-deb]
needs: [get-environment, package-deb]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-24.04
strategy:
matrix:
distrib: [bullseye, bookworm, jammy]
distrib: [bullseye, bookworm, jammy, noble]
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
uses: actions/upload-artifact/merge@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: packages-deb-${{ matrix.distrib }}
pattern: packages-deb-${{ matrix.distrib }}-*
@ -486,25 +640,93 @@ jobs:
failOnError: false
download-and-cache-deb:
needs: [merge-package-deb-artifacts]
needs: [get-environment, merge-package-deb-artifacts]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-24.04
strategy:
matrix:
distrib: [bullseye, bookworm, jammy]
distrib: [bullseye, bookworm, jammy, noble]
steps:
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
- uses: actions/download-artifact@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9
with:
name: packages-deb-${{ matrix.distrib }}
path: ./
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.deb
key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}
deliver-packages:
test-packages:
needs: [get-environment, sign-rpm, download-and-cache-deb]
strategy:
fail-fast: false
matrix:
include:
- package_extension: rpm
image: almalinux:8
distrib: el8
arch: amd64
runner_name: ubuntu-24.04
- package_extension: rpm
image: almalinux:9
distrib: el9
arch: amd64
runner_name: ubuntu-24.04
- package_extension: deb
image: debian:bullseye
distrib: bullseye
arch: amd64
runner_name: ubuntu-24.04
- package_extension: deb
image: debian:bookworm
distrib: bookworm
arch: amd64
runner_name: ubuntu-24.04
- package_extension: deb
image: ubuntu:jammy
distrib: jammy
arch: amd64
runner_name: ubuntu-24.04
- package_extension: deb
image: ubuntu:noble
arch: amd64
runner_name: ubuntu-24.04
- package_extension: deb
image: debian:bullseye
distrib: bullseye
arch: arm64
runner_name: centreon-collect-arm64
runs-on: ${{ matrix.runner_name }}
container:
image: ${{ matrix.image }}
name: Test perl CPAN libs packages on ${{ matrix.package_extension }} ${{ matrix.distrib }} ${{ matrix.arch }}
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Test packaged libs
uses: ./.github/actions/test-cpan-libs
with:
package_extension: ${{ matrix.package_extension }}
distrib: ${{ matrix.distrib }}
arch: ${{ matrix.arch }}
- name: Upload error log
if: failure()
uses: actions/upload-artifact@v4
with:
name: install_error_log_${{ matrix.distrib }}-${{ matrix.arch }}
path: install_error_${{ matrix.distrib }}_${{ matrix.arch }}.log
deliver-packages:
needs: [get-environment, sign-rpm, download-and-cache-deb, test-packages]
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') &&
@ -524,6 +746,8 @@ jobs:
package_extension: deb
- distrib: jammy
package_extension: deb
- distrib: noble
package_extension: deb
name: deliver ${{ matrix.distrib }}
steps:
@ -539,3 +763,12 @@ jobs:
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

View File

@ -1,189 +0,0 @@
name: perl-crypt-argon2
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
on:
workflow_dispatch:
pull_request:
paths:
- "dependencies/perl-crypt-argon2/**"
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-crypt-argon2/**"
tags:
- perl-crypt-argon2-*
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
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-alma9
distrib: el9
package_extension: rpm
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bullseye
distrib: bullseye
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bookworm
distrib: bookworm
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-jammy
distrib: jammy
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bullseye-arm64
distrib: bullseye
package_extension: deb
runner: ["self-hosted", "collect-arm64"]
arch: arm64
runs-on: ${{ matrix.runner }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Install locally Crypt::Argon2
run: |
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
apt-get update
apt-get install -y cpanminus gcc
else
dnf install -y cpanminus gcc
fi
cpanm -v -l /tmp Crypt::Argon2@0.020
shell: bash
- name: Set package name and paths according to distrib
run: |
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="libcrypt-argon2-perl"
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
NAME="perl-Crypt-Argon2"
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
sed -i "s/@NAME@/$NAME/g" dependencies/perl-crypt-argon2/perl-crypt-argon2.yaml
sed -i "s#@PERL_VENDORARCH@#$PERL_VENDORARCH#g" dependencies/perl-crypt-argon2/perl-crypt-argon2.yaml
cat dependencies/perl-crypt-argon2/perl-crypt-argon2.yaml
shell: bash
- name: Package
uses: ./.github/actions/package-nfpm
with:
nfpm_file_pattern: "dependencies/perl-crypt-argon2/perl-crypt-argon2.yaml"
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
release: 1
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-crypt-argon2-${{ matrix.distrib }}-${{ matrix.arch }}-${{ 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@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: packages-${{ matrix.distrib }}-${{ matrix.arch }}
path: ./*.${{ matrix.package_extension}}
retention-days: 1
deliver-packages:
needs: [get-environment, package]
if: |
(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
arch: amd64
- distrib: el9
package_extension: rpm
arch: amd64
- distrib: bullseye
package_extension: deb
arch: amd64
- distrib: bullseye
package_extension: deb
arch: arm64
- distrib: bookworm
package_extension: deb
arch: amd64
- distrib: jammy
package_extension: deb
arch: amd64
name: deliver ${{ matrix.distrib }} ${{ matrix.arch }}
steps:
- name: Checkout sources
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Delivery
uses: ./.github/actions/package-delivery
with:
module_name: perl-crypt-argon2-${{ matrix.arch }}
distrib: ${{ matrix.distrib }}
arch: ${{ matrix.arch }}
cache_key: cache-${{ github.sha }}-rpm-perl-crypt-argon2-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
stability: ${{ needs.get-environment.outputs.stability }}
release_type: ${{ needs.get-environment.outputs.release_type }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}

View File

@ -24,7 +24,9 @@ jobs:
package-rpm:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
strategy:
@ -61,13 +63,16 @@ jobs:
cp -r ~/rpmbuild/RPMS/x86_64/*.rpm .
shell: bash
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.rpm
key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
sign-rpm:
needs: [package-rpm]
needs: [get-environment, package-rpm]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
strategy:
matrix:
@ -92,7 +97,7 @@ jobs:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.rpm
key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
@ -103,14 +108,16 @@ jobs:
- run: rpmsign --addsign ./*.rpm
shell: bash
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.rpm
key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
package-deb:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
strategy:
@ -122,6 +129,9 @@ jobs:
distrib: bookworm
- image: packaging-plugins-jammy
distrib: jammy
- image: packaging-plugins-noble
distrib: noble
name: package ${{ matrix.distrib }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
@ -148,7 +158,7 @@ jobs:
DEB_BUILD_OPTIONS="nocheck nodocs notest noautodbgsym" dh-make-perl make --dist ${{ matrix.distrib }} --verbose --build --version 4.0${{ steps.parse-distrib.outputs.package_distrib_separator }}${{ steps.parse-distrib.outputs.package_distrib_name }} perl-filesys-smbclient/
shell: bash
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.deb
key: ${{ github.sha }}-${{ github.run_id }}-deb-${{ matrix.distrib }}
@ -156,6 +166,7 @@ jobs:
deliver-packages:
needs: [get-environment, sign-rpm, package-deb]
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') &&
@ -175,6 +186,8 @@ jobs:
package_extension: deb
- distrib: jammy
package_extension: deb
- distrib: noble
package_extension: deb
name: deliver ${{ matrix.distrib }}
steps:
@ -190,3 +203,12 @@ jobs:
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

View File

@ -1,165 +0,0 @@
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/**"
- ".github/workflows/perl-json-path.yml"
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/**"
- ".github/workflows/perl-json-path.yml"
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.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: 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
cpanm -v -l /tmp JSON::Path@1.0.4
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
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@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: packages-${{ matrix.distrib }}
path: ./*.${{ matrix.package_extension}}
retention-days: 1
deliver-packages:
needs: [get-environment, package]
if: |
(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
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: perl-json-path
distrib: ${{ matrix.distrib }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-json-path-${{ matrix.distrib }}-${{ github.head_ref || github.ref_name }}
stability: ${{ needs.get-environment.outputs.stability }}
release_type: ${{ needs.get-environment.outputs.release_type }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}

View File

@ -27,6 +27,9 @@ jobs:
package:
needs: [get-environment]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
strategy:
fail-fast: false
@ -47,6 +50,9 @@ jobs:
- image: packaging-plugins-jammy
distrib: jammy
package_extension: deb
- image: packaging-plugins-noble
distrib: noble
package_extension: deb
runs-on: ubuntu-22.04
@ -139,6 +145,8 @@ jobs:
package_extension: deb
- distrib: jammy
package_extension: deb
- distrib: noble
package_extension: deb
name: deliver ${{ matrix.distrib }}
steps:
@ -154,3 +162,12 @@ jobs:
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

View File

@ -1,187 +0,0 @@
name: perl-libssh-session
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
on:
workflow_dispatch:
pull_request:
paths:
- "dependencies/perl-libssh-session/**"
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-libssh-session/**"
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
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-alma9
distrib: el9
package_extension: rpm
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bullseye
distrib: bullseye
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bookworm
distrib: bookworm
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-jammy
distrib: jammy
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bullseye-arm64
distrib: bullseye
package_extension: deb
runner: ["self-hosted", "collect-arm64"]
arch: arm64
runs-on: ${{ matrix.runner }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Install locally Libssh::Session
run: |
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
apt-get update
apt-get install -y cpanminus gcc libssh-dev
else
dnf install -y cpanminus gcc libssh-devel
fi
cpanm -v -l /tmp Libssh::Session@0.8
shell: bash
- name: Set package name and paths according to distrib
run: |
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="libssh-session-perl"
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
NAME="perl-Libssh-Session"
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
sed -i "s/@NAME@/$NAME/g" dependencies/perl-libssh-session/perl-libssh-session.yaml
sed -i "s#@PERL_VENDORARCH@#$PERL_VENDORARCH#g" dependencies/perl-libssh-session/perl-libssh-session.yaml
cat dependencies/perl-libssh-session/perl-libssh-session.yaml
shell: bash
- name: Package
uses: ./.github/actions/package-nfpm
with:
nfpm_file_pattern: "dependencies/perl-libssh-session/perl-libssh-session.yaml"
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
release: 5
commit_hash: ${{ github.sha }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-libssh-session-${{ matrix.distrib }}-${{ matrix.arch }}-${{ 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@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: packages-${{ matrix.distrib }}-${{ matrix.arch }}
path: ./*.${{ matrix.package_extension}}
retention-days: 1
deliver-packages:
needs: [get-environment, package]
if: |
(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
arch: amd64
- distrib: el9
package_extension: rpm
arch: amd64
- distrib: bullseye
package_extension: deb
arch: amd64
- distrib: bullseye
package_extension: deb
arch: arm64
- distrib: bookworm
package_extension: deb
arch: amd64
- distrib: jammy
package_extension: deb
arch: amd64
name: deliver ${{ matrix.distrib }} ${{ matrix.arch }}
steps:
- name: Checkout sources
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Delivery
uses: ./.github/actions/package-delivery
with:
module_name: perl-libssh-session-${{ matrix.arch }}
distrib: ${{ matrix.distrib }}
arch: ${{ matrix.arch }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-libssh-session-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
stability: ${{ needs.get-environment.outputs.stability }}
release_type: ${{ needs.get-environment.outputs.release_type }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}

View File

@ -1,187 +0,0 @@
name: perl-net-curl
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
on:
workflow_dispatch:
pull_request:
paths:
- "dependencies/perl-net-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:
- "dependencies/perl-net-curl/**"
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
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-alma9
distrib: el9
package_extension: rpm
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bullseye
distrib: bullseye
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bookworm
distrib: bookworm
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-jammy
distrib: jammy
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bullseye-arm64
distrib: bullseye
package_extension: deb
runner: ["self-hosted", "collect-arm64"]
arch: arm64
runs-on: ${{ matrix.runner }}
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:latest
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Install locally Net::Curl
run: |
if [[ "${{ matrix.package_extension }}" == "deb" ]]; then
apt-get update
apt-get install -y libcurl4-openssl-dev cpanminus gcc
else
dnf install -y libcurl-devel cpanminus gcc
fi
cpanm -v -l /tmp Net::Curl@0.55
shell: bash
- name: Set package name and paths according to distrib
run: |
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="libnet-curl-perl"
if [ "${{ matrix.arch }}" = "amd64" ]; then
PERL_VENDORARCH="/usr/lib/x86_64-linux-gnu/perl/$PERL_VERSION"
else
PERL_VENDORARCH="/usr/lib/aarch64-linux-gnu/perl/$PERL_VERSION"
fi
else
NAME="perl-Net-Curl"
if [ "${{ matrix.distrib }}" = "el8" ]; then
PERL_VENDORARCH="/usr/local/lib64/perl5"
else
PERL_VENDORARCH="/usr/local/lib64/perl5/$PERL_VERSION"
fi
fi
sed -i "s/@NAME@/$NAME/g" dependencies/perl-net-curl/perl-net-curl.yaml
sed -i "s#@PERL_VENDORARCH@#$PERL_VENDORARCH#g" dependencies/perl-net-curl/perl-net-curl.yaml
cat dependencies/perl-net-curl/perl-net-curl.yaml
shell: bash
- name: Package
uses: ./.github/actions/package-nfpm
with:
nfpm_file_pattern: "dependencies/perl-net-curl/perl-net-curl.yaml"
distrib: ${{ matrix.distrib }}
package_extension: ${{ matrix.package_extension }}
arch: ${{ matrix.arch }}
commit_hash: ${{ github.sha }}
release: 1
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-net-curl-${{ matrix.distrib }}-${{ matrix.arch }}-${{ 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@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: packages-${{ matrix.distrib }}-${{ matrix.arch }}
path: ./*.${{ matrix.package_extension }}
retention-days: 1
deliver-packages:
needs: [get-environment, package]
if: |
(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
arch: amd64
- distrib: el9
package_extension: rpm
arch: amd64
- distrib: bullseye
package_extension: deb
arch: amd64
- distrib: bullseye
package_extension: deb
arch: arm64
- distrib: bookworm
package_extension: deb
arch: amd64
- distrib: jammy
package_extension: deb
arch: amd64
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: perl-net-curl-${{ matrix.arch }}
distrib: ${{ matrix.distrib }}
arch: ${{ matrix.arch }}
cache_key: cache-${{ github.sha }}-${{ matrix.package_extension }}-perl-net-curl-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
stability: ${{ needs.get-environment.outputs.stability }}
release_type: ${{ needs.get-environment.outputs.release_type }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}

View File

@ -22,7 +22,9 @@ jobs:
package:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
strategy:
fail-fast: false
@ -53,10 +55,15 @@ jobs:
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-noble
distrib: noble
package_extension: deb
runner: ubuntu-22.04
arch: amd64
- image: packaging-plugins-bullseye-arm64
distrib: bullseye
package_extension: deb
runner: ["self-hosted", "collect-arm64"]
runner: centreon-collect-arm64
arch: arm64
runs-on: ${{ matrix.runner }}
@ -206,7 +213,7 @@ jobs:
rpm_gpg_signing_passphrase: ${{ secrets.RPM_GPG_SIGNING_PASSPHRASE }}
stability: ${{ needs.get-environment.outputs.stability }}
- uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.${{ matrix.package_extension }}
key: cache-${{ github.sha }}-${{ matrix.package_extension }}-wsman-${{ matrix.distrib }}-${{ matrix.arch }}-${{ github.head_ref || github.ref_name }}
@ -214,6 +221,7 @@ jobs:
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') &&
@ -241,6 +249,10 @@ jobs:
- distrib: jammy
package_extension: deb
arch: amd64
- distrib: noble
package_extension: deb
arch: amd64
name: deliver ${{ matrix.distrib }} ${{ matrix.arch }}
steps:
@ -257,3 +269,12 @@ jobs:
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

View File

@ -24,7 +24,9 @@ jobs:
get-sources:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
steps:
- name: Download vsphere cli sources
@ -41,13 +43,16 @@ jobs:
shell: bash
- name: Cache vsphere cli sources
uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: vmware-vsphere-cli-distrib
key: ${{ github.sha }}-${{ github.run_id }}-sources-perl-vmware-vsphere
package:
needs: [get-environment, get-sources]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
strategy:
matrix:
@ -77,10 +82,15 @@ jobs:
distrib: jammy
runner: ubuntu-22.04
arch: amd64
- package_extension: deb
image: packaging-plugins-noble
distrib: noble
runner: ubuntu-22.04
arch: amd64
- package_extension: deb
image: packaging-plugins-bullseye-arm64
distrib: bullseye
runner: ["self-hosted", "collect-arm64"]
runner: centreon-collect-arm64
arch: arm64
runs-on: ${{ matrix.runner }}
@ -98,7 +108,7 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Import source files
uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: vmware-vsphere-cli-distrib
key: ${{ github.sha }}-${{ github.run_id }}-sources-perl-vmware-vsphere
@ -148,6 +158,7 @@ jobs:
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') &&
@ -191,3 +202,12 @@ jobs:
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

View File

@ -24,7 +24,9 @@ jobs:
package-rpm:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability != 'stable' }}
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
strategy:
matrix:
@ -55,13 +57,16 @@ jobs:
cp -r ~/rpmbuild/RPMS/x86_64/*.rpm .
shell: bash
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.rpm
key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
sign-rpm:
needs: [package-rpm]
needs: [get-environment, package-rpm]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
strategy:
matrix:
@ -86,7 +91,7 @@ jobs:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.rpm
key: unsigned-${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
@ -97,12 +102,12 @@ jobs:
- run: rpmsign --addsign ./*.rpm
shell: bash
- uses: actions/cache/save@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./*.rpm
key: ${{ github.sha }}-${{ github.run_id }}-rpm-${{ matrix.distrib }}
- uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
- uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: packages-${{ matrix.distrib }}
path: ./*.rpm
@ -111,6 +116,7 @@ jobs:
deliver-packages:
needs: [get-environment, sign-rpm]
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') &&
@ -139,3 +145,12 @@ jobs:
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

View File

@ -24,6 +24,9 @@ jobs:
package:
needs: [get-environment]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable'
runs-on: ubuntu-22.04
strategy:
matrix:
@ -72,6 +75,7 @@ jobs:
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') &&
@ -100,3 +104,12 @@ jobs:
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

View File

@ -29,15 +29,15 @@ jobs:
uses: ./.github/workflows/get-environment.yml
get-plugins:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
outputs:
plugins: ${{ steps.get_plugins.outputs.plugins }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0
with:
python-version: '3.9'
@ -89,12 +89,18 @@ jobs:
unit-tests:
needs: [get-environment, get-plugins]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-environment.outputs.stability != 'stable' &&
! cancelled() &&
! contains(needs.*.result, 'failure') &&
! contains(needs.*.result, 'cancelled')
strategy:
fail-fast: false
matrix:
image: [unit-tests-alma8, unit-tests-alma9, unit-tests-bullseye, unit-tests-bullseye-arm64, unit-tests-bookworm, unit-tests-jammy]
image: [unit-tests-alma8, unit-tests-alma9, unit-tests-bullseye, unit-tests-bullseye-arm64, unit-tests-bookworm, unit-tests-jammy, unit-tests-noble]
include:
- runner_name: ubuntu-22.04
- runner_name: ubuntu-24.04
- package_extension: rpm
image: unit-tests-alma8
distrib: el8
@ -106,7 +112,7 @@ jobs:
distrib: bullseye
- package_extension: deb
image: unit-tests-bullseye-arm64
runner_name: ["self-hosted", "collect-arm64"]
runner_name: centreon-collect-arm64
distrib: bullseye
- package_extension: deb
image: unit-tests-bookworm
@ -114,6 +120,9 @@ jobs:
- package_extension: deb
image: unit-tests-jammy
distrib: jammy
- package_extension: deb
image: unit-tests-noble
distrib: noble
runs-on: ${{ matrix.runner_name }}
container:
@ -121,33 +130,37 @@ jobs:
credentials:
username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }}
password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }}
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run unit tests
uses: ./.github/actions/unit-tests
- name: Upload logs as artifacts if tests failed
if: failure()
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: plugin-installation-${{ matrix.distrib }}
path: ./lastlog.jsonl
retention-days: 1
fatpacker:
if: ${{ needs.get-plugins.outputs.plugins != '' }}
needs: [get-environment, get-plugins, unit-tests]
runs-on: ubuntu-22.04
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-plugins.outputs.plugins != '' &&
! cancelled() &&
! contains(needs.*.result, 'failure') &&
! contains(needs.*.result, 'cancelled')
runs-on: ubuntu-24.04
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
fetch-depth: 1
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Prepare FatPacker
uses: shogo82148/actions-setup-perl@9c1eca9952ccc07f9ca4a2097b63df93d9d138e9 # v1.31.3
uses: shogo82148/actions-setup-perl@49c14f24551d2de3bf56fb107a869c3760b1875e # v1.33.0
with:
perl-version: '5.34'
install-modules-with: cpm
@ -158,7 +171,7 @@ jobs:
COMMIT=$(git log -1 HEAD --pretty=format:%h)
perl .github/scripts/plugins-source.container.pl "${{ needs.get-plugins.outputs.plugins }}" "${{ needs.get-environment.outputs.version }} ($COMMIT)"
- uses: actions/cache/save@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
- uses: actions/cache/save@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./build/
key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }}
@ -166,6 +179,13 @@ jobs:
package:
runs-on: ubuntu-24.04
needs: [get-environment, get-plugins, fatpacker]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-plugins.outputs.plugins != '' &&
needs.get-environment.outputs.stability != 'stable' &&
! cancelled() &&
! contains(needs.*.result, 'failure') &&
! contains(needs.*.result, 'cancelled')
strategy:
fail-fast: false
@ -189,6 +209,9 @@ jobs:
- package_extension: deb
image: packaging-plugins-jammy
distrib: jammy
- package_extension: deb
image: packaging-plugins-noble
distrib: noble
container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}
@ -200,9 +223,9 @@ jobs:
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
- uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./build/
key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }}
@ -284,10 +307,17 @@ jobs:
test-plugins:
needs: [get-environment, get-plugins, package]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-plugins.outputs.plugins != '' &&
needs.get-environment.outputs.stability != 'stable' &&
! cancelled() &&
! contains(needs.*.result, 'failure') &&
! contains(needs.*.result, 'cancelled')
strategy:
fail-fast: false
matrix:
image: [testing-plugins-alma8, testing-plugins-alma9, testing-plugins-jammy, testing-plugins-bullseye, testing-plugins-bookworm]
image: [testing-plugins-alma8, testing-plugins-alma9, testing-plugins-jammy, testing-plugins-bullseye, testing-plugins-bookworm, testing-plugins-noble, testing-plugins-bullseye-arm64]
include:
- runner_name: ubuntu-24.04
- package_extension: rpm
@ -305,11 +335,14 @@ jobs:
- package_extension: deb
image: testing-plugins-jammy
distrib: jammy
- package_extension: deb
image: testing-plugins-noble
distrib: noble
- package_extension: deb
image: testing-plugins-bullseye-arm64
distrib: bullseye
arch: arm64
runner_name: ["self-hosted", "collect-arm64"]
runner_name: centreon-collect-arm64
runs-on: ${{ matrix.runner_name }}
container:
@ -319,7 +352,7 @@ jobs:
password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }}
steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: ./.github/actions/test-plugins
with:
@ -329,7 +362,7 @@ jobs:
- name: Upload apt/dnf logs as artifacts if tests failed
if: failure()
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0
with:
name: plugin-installation-${{ matrix.distrib }}
path: /var/log/robot-plugins-installation-tests.log
@ -338,8 +371,9 @@ jobs:
deliver-packages:
needs: [get-environment, get-plugins, test-plugins]
if: |
needs.get-environment.outputs.skip_workflow == 'false' &&
needs.get-plugins.outputs.plugins != '' &&
(contains(fromJson('["testing", "unstable"]'), needs.get-environment.outputs.stability) || ( needs.get-environment.outputs.stability == 'stable' && github.event_name != 'workflow_dispatch')) &&
(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')
@ -360,11 +394,13 @@ jobs:
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
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Delivery
uses: ./.github/actions/package-delivery
@ -377,15 +413,17 @@ jobs:
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
deliver-sources:
needs: [get-environment]
if: ${{ needs.get-environment.outputs.stability == 'stable' && github.event_name == 'push' }}
runs-on: [self-hosted, common]
needs: [get-environment, fatpacker]
if: |
needs.get-environment.outputs.stability == 'stable' &&
github.event_name == 'push'
runs-on: centreon-common
steps:
- name: Checkout sources
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
- uses: actions/cache/restore@d4323d4df104b026a6aa633fdb11d772146be0bf # v4.2.2
with:
path: ./build/
key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }}
@ -408,11 +446,11 @@ jobs:
steps:
- name: Checkout sources
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Push git release tag
run: |
RELEASE=plugins-$(date '+%Y%m%d')
RELEASE=plugins-${{ needs.get-environment.outputs.version }}
EXISTING_TAG=$(git tag --list "$RELEASE" | head -n 1)
@ -426,3 +464,12 @@ jobs:
echo "::warning::Release tag $RELEASE already exists"
fi
shell: bash
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

View File

@ -0,0 +1,32 @@
name: set-pull-request-external-label
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
on:
pull_request_target:
jobs:
set-pull-request-external-label:
if: |
github.event.pull_request.head.repo.fork &&
! contains(github.event.pull_request.labels.*.name, 'external')
runs-on: ubuntu-24.04
steps:
- name: Set PR external label
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const label = 'external';
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels: [label]
});
} catch (e) {
core.warning(`failed to add label ${label}: ${e}`);
}

View File

@ -0,0 +1,26 @@
name: set-pull-request-skip-label
on:
workflow_call:
jobs:
set-pull-request-skip-label:
if: ${{ success() && contains(fromJSON('["pull_request", "pull_request_target"]') , github.event_name) }}
runs-on: ubuntu-24.04
steps:
- name: Set PR skip label
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const label = '${{ format('skip-workflow-{0}', github.workflow) }}';
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels: [label]
});
} catch (e) {
core.warning(`failed to add label ${label}: ${e}`);
}

View File

@ -15,7 +15,7 @@ on:
jobs:
pod-spell-check:
if: ${{ !contains(github.event.pull_request.labels.*.name, 'do-not-spellcheck') }}
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@ -30,11 +30,11 @@ jobs:
- added|modified: 'src/**/*.pm'
- name: Install CPAN Libraries
uses: shogo82148/actions-setup-perl@9c1eca9952ccc07f9ca4a2097b63df93d9d138e9 # v1.31.3
uses: shogo82148/actions-setup-perl@49c14f24551d2de3bf56fb107a869c3760b1875e # v1.33.0
with:
perl-version: '5.34'
install-modules-with: cpm
install-modules: Test::More Test::Spelling
install-modules: Test::More Test::Spelling List::MoreUtils
- name: Install librairies
continue-on-error: true

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
log.html
output.xml
report.html
.editorconfig
.idea

19
.gitleaks.toml Normal file
View File

@ -0,0 +1,19 @@
title = "Gitleaks custom rules"
[extend]
useDefault = true
[allowlist]
paths = [
'''vendor\/''',
'''(.*?)\.rptlibrary''',
'''pnpm-lock\.yaml''',
'''\.gitleaks\.toml$''',
'''(.*?)(jpg|gif|doc|pdf|bin)$'''
]
regexTarget = "match"
regexes = [
'''ABCDEFG1234567890''',
'''s\.aBCD123DEF456GHI789JKL012'''
]

1
.version.plugins Normal file
View File

@ -0,0 +1 @@
20250303

View File

@ -26,6 +26,7 @@ import java.text.NumberFormat;
import java.util.Locale;
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.SecureAS400;
import com.ibm.as400.access.AS400SecurityException;
import com.ibm.as400.access.ConnectionEvent;
import com.ibm.as400.access.ConnectionListener;
@ -44,11 +45,13 @@ public abstract class AbstractHandler {
protected String host = null;
protected String login = null;
protected String password = null;
protected Integer ssl = 0;
public AbstractHandler(final String host, final String login, final String password) {
public AbstractHandler(final String host, final String login, final String password, final Integer ssl) {
this.host = host;
this.login = login;
this.password = password;
this.ssl = ssl;
}
static {
@ -77,7 +80,28 @@ public abstract class AbstractHandler {
properties.setLoginTimeout(Conf.as400LoginTimeout);
properties.setSoTimeout(Conf.as400ReadTimeout);
final AS400 system = new AS400(this.host, this.login, this.password);
if (this.ssl == 1) {
SecureAS400 system = new SecureAS400(this.host, this.login, this.password);
system.setSocketProperties(properties);
system.addConnectionListener(new ConnectionListener() {
@Override
public void connected(final ConnectionEvent event) {
ConnectorLogger.getInstance().getLogger().debug("Connect event service : " + event.getService());
}
@Override
public void disconnected(final ConnectionEvent event) {
ConnectorLogger.getInstance().getLogger().debug("Disconnect event service : " + event.getService());
}
});
system.validateSignon();
return (AS400)system;
}
AS400 system = new AS400(this.host, this.login, this.password);
system.setSocketProperties(properties);
system.addConnectionListener(new ConnectionListener() {
@Override

View File

@ -34,8 +34,8 @@ import com.centreon.connector.as400.dispatcher.check.ResponseData;
*/
public class CommandHandler extends AbstractHandler implements ICommandHandler {
public CommandHandler(final String host, final String login, final String password) {
super(host, login, password);
public CommandHandler(final String host, final String login, final String password, final Integer ssl) {
super(host, login, password, ssl);
}
@Override

View File

@ -38,10 +38,10 @@ public class DiskHandler extends AbstractHandler implements IDiskHandler {
private QyaspolYasp0300PcmlHandler qyaspolPcmlHandler = null;
public DiskHandler(final String host, final String login, final String password)
public DiskHandler(final String host, final String login, final String password, final Integer ssl)
throws AS400SecurityException, IOException {
super(host, login, password);
this.qyaspolPcmlHandler = new QyaspolYasp0300PcmlHandler(host, login, password);
super(host, login, password, ssl);
this.qyaspolPcmlHandler = new QyaspolYasp0300PcmlHandler(host, login, password, ssl);
}
@Override

View File

@ -37,8 +37,8 @@ import com.centreon.connector.as400.dispatcher.check.ResponseData;
public class JobHandler extends AbstractHandler implements IJobHandler {
private final JobCache jobCache;
public JobHandler(final String host, final String login, final String password) {
super(host, login, password);
public JobHandler(final String host, final String login, final String password, final Integer ssl) {
super(host, login, password, ssl);
this.jobCache = new JobCache(this);
}

View File

@ -37,8 +37,8 @@ import com.centreon.connector.as400.dispatcher.check.ResponseData;
*/
public class JobQueueHandler extends AbstractHandler implements IJobQueueHandler {
public JobQueueHandler(final String host, final String login, final String password) {
super(host, login, password);
public JobQueueHandler(final String host, final String login, final String password, final Integer ssl) {
super(host, login, password, ssl);
}
@Override

View File

@ -42,9 +42,9 @@ import com.centreon.connector.as400.dispatcher.check.ResponseData;
*/
public class SubSystemHandler extends AbstractHandler implements ISubSystemHandler {
public SubSystemHandler(final String host, final String login, final String password)
public SubSystemHandler(final String host, final String login, final String password, final Integer ssl)
throws AS400SecurityException, IOException {
super(host, login, password);
super(host, login, password, ssl);
}
@Override

View File

@ -45,14 +45,14 @@ import com.centreon.connector.as400.dispatcher.check.ResponseData;
public class SystemHandler extends AbstractHandler implements ISystemHandler {
private SystemStatus status = null;
public SystemHandler(final String host, final String login, final String password)
public SystemHandler(final String host, final String login, final String password, final Integer ssl)
throws AS400SecurityException, IOException {
this(host, login, password, null);
this(host, login, password, null, ssl);
}
public SystemHandler(final String host, final String login, final String password, SystemStatus as400Status)
public SystemHandler(final String host, final String login, final String password, SystemStatus as400Status, final Integer ssl)
throws AS400SecurityException, IOException {
super(host, login, password);
super(host, login, password, ssl);
this.status = as400Status == null ? new SystemStatus(getNewAs400()) : as400Status;
}

View File

@ -26,6 +26,7 @@ import java.util.LinkedList;
import java.util.List;
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.SecureAS400;
import com.ibm.as400.access.AS400Message;
import com.ibm.as400.access.AS400SecurityException;
import com.ibm.as400.access.ConnectionEvent;
@ -61,11 +62,13 @@ public class QyaspolYasp0300PcmlHandler {
String host = null;
String login = null;
String password = null;
Integer ssl = 0;
public QyaspolYasp0300PcmlHandler(final String host, final String login, final String password) {
public QyaspolYasp0300PcmlHandler(final String host, final String login, final String password, final Integer ssl) {
this.host = host;
this.login = login;
this.password = password;
this.ssl = ssl;
}
public void addYasp0300Data(final Yasp0300Data data) {
@ -238,7 +241,27 @@ public class QyaspolYasp0300PcmlHandler {
properties.setLoginTimeout(Conf.as400LoginTimeout);
properties.setSoTimeout(Conf.as400ReadTimeout);
final AS400 system = new AS400(this.host, this.login, this.password);
if (this.ssl == 1) {
SecureAS400 system = new SecureAS400(this.host, this.login, this.password);
system.setSocketProperties(properties);
system.addConnectionListener(new ConnectionListener() {
@Override
public void connected(final ConnectionEvent event) {
ConnectorLogger.getInstance().getLogger().debug("Connect event service : " + event.getService());
}
@Override
public void disconnected(final ConnectionEvent event) {
ConnectorLogger.getInstance().getLogger().debug("Disconnect event service : " + event.getService());
}
});
system.validateSignon();
return (AS400)system;
}
AS400 system = new AS400(this.host, this.login, this.password);
system.setSocketProperties(properties);
system.addConnectionListener(new ConnectionListener() {
@Override

View File

@ -102,8 +102,8 @@ public class CachedMessageQueueHandler extends AbstractHandler implements ICache
return sb.toString();
}
public CachedMessageQueueHandler(final String host, final String login, final String password) {
super(host, login, password);
public CachedMessageQueueHandler(final String host, final String login, final String password, final Integer ssl) {
super(host, login, password, ssl);
}
@Override

View File

@ -42,8 +42,8 @@ import com.centreon.connector.as400.dispatcher.check.ResponseData;
*/
public class MessageQueueHandler extends AbstractHandler implements IMessageQueueHandler {
public MessageQueueHandler(final String host, final String login, final String password) {
super(host, login, password);
public MessageQueueHandler(final String host, final String login, final String password, final Integer ssl) {
super(host, login, password, ssl);
}
@Override

View File

@ -69,8 +69,8 @@ public class WorkWithProblemHandler extends AbstractHandler {
private final boolean SSL = false;
private final String logPrefix;
public WorkWithProblemHandler(final String host, final String login, final String password) {
super(host, login, password);
public WorkWithProblemHandler(final String host, final String login, final String password, final Integer ssl) {
super(host, login, password, ssl);
this.logPrefix = "[" + WorkWithProblemHandler.INSTANCE_ID++ + "]";
}

View File

@ -40,5 +40,7 @@ public interface IClient {
String getAs400CheckType();
Integer getAs400Ssl();
Object getAs400Arg(String key);
}

View File

@ -42,6 +42,7 @@ abstract class AbstractClient implements IClient {
private String as400Password = null;
private String as400CheckType = null;
private String as400Args = null;
private Integer as400Ssl = 0;
private List<Map<String, String>> argList = new ArrayList<Map<String, String>>();
@Override
@ -77,6 +78,11 @@ abstract class AbstractClient implements IClient {
return this.input.getArg(key);
}
@Override
public Integer getAs400Ssl() {
return this.input.getSsl();
}
public List<Map<String , String>> getAs400ArgList(String key) {
Object arg = this.input.getArg(key);
if (arg == null) {

View File

@ -87,6 +87,7 @@ public class CheckDispatcher {
private String host = null;
private String login = null;
private String password = null;
private Integer ssl = 0;
private volatile ConcurrentHashMap<String, Long> filter = new ConcurrentHashMap<String, Long>();
@ -135,10 +136,11 @@ public class CheckDispatcher {
}
}
public CheckDispatcher(final String host, final String login, final String password) {
public CheckDispatcher(final String host, final String login, final String password, final Integer ssl) {
this.host = host;
this.login = login;
this.password = password;
this.ssl = ssl;
this.executorGlobal = new ThreadPoolExecutorPostFilter(5, 10, Conf.workerQueueTimeout, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
@ -165,6 +167,10 @@ public class CheckDispatcher {
return this.password;
}
public Integer getSsl() {
return this.ssl;
}
public synchronized void dispatch(final NetworkClient client) {
if (this.filter.containsKey(client.getRawRequest())) {
@ -190,52 +196,52 @@ public class CheckDispatcher {
public ICommandHandler getCommandHandler() throws AS400SecurityException, IOException {
if (this.commandHandler == null) {
this.commandHandler = new CommandHandler(this.host, this.login, this.password);
this.commandHandler = new CommandHandler(this.host, this.login, this.password, this.ssl);
}
return this.commandHandler;
}
public IDiskHandler getDiskHandler() throws AS400SecurityException, IOException {
if (this.diskHandler == null) {
this.diskHandler = new DiskHandler(this.host, this.login, this.password);
this.diskHandler = new DiskHandler(this.host, this.login, this.password, this.ssl);
}
return this.diskHandler;
}
public IJobHandler getJobHandler() throws AS400SecurityException, IOException {
if (this.jobHandler == null) {
this.jobHandler = new JobHandler(this.host, this.login, this.password);
this.jobHandler = new JobHandler(this.host, this.login, this.password, this.ssl);
}
return this.jobHandler;
}
public ISubSystemHandler getSubSystemHandler() throws AS400SecurityException, IOException {
if (this.subSystemHandler == null) {
this.subSystemHandler = new SubSystemHandler(this.host, this.login, this.password);
this.subSystemHandler = new SubSystemHandler(this.host, this.login, this.password, this.ssl);
}
return this.subSystemHandler;
}
public ISystemHandler getSystemHandler() throws AS400SecurityException, IOException {
if (this.systemHandler == null) {
this.systemHandler = new SystemHandler(this.host, this.login, this.password);
this.systemHandler = new SystemHandler(this.host, this.login, this.password, this.ssl);
}
return this.systemHandler;
}
public ICachedMessageQueueHandler getCachedMessageQueueHandler() throws AS400SecurityException, IOException {
return new CachedMessageQueueHandler(this.host, this.login, this.password);
return new CachedMessageQueueHandler(this.host, this.login, this.password, this.ssl);
}
public IMessageQueueHandler getMessageQueueHandler() throws AS400SecurityException, IOException {
return new MessageQueueHandler(this.host, this.login, this.password);
return new MessageQueueHandler(this.host, this.login, this.password, this.ssl);
}
public IJobQueueHandler getJobQueueHandler() throws AS400SecurityException, IOException {
return new JobQueueHandler(this.host, this.login, this.password);
return new JobQueueHandler(this.host, this.login, this.password, this.ssl);
}
public WorkWithProblemHandler getWrkPrbHandler() throws AS400SecurityException, IOException {
return new WorkWithProblemHandler(this.host, this.login, this.password);
return new WorkWithProblemHandler(this.host, this.login, this.password, this.ssl);
}
}

View File

@ -31,6 +31,7 @@ public class InputData {
private String password = null;
private String host = null;
private String command = null;
private Integer ssl = null;
Map<String, Object> args = null;
public InputData() {
@ -44,6 +45,13 @@ public class InputData {
return this.password;
}
public Integer getSsl() {
if (this.ssl == null || this.ssl == 0) {
return 0;
}
return 1;
}
public String getHost() {
return this.host;
}

View File

@ -52,37 +52,37 @@ public class ClientDispatcherImpl implements ClientDispatcher {
}
private synchronized CheckDispatcher createNewCheckDispatcher(final String host, final String login,
final String password) throws AS400SecurityException, IOException, DelayedConnectionException, Exception {
final String password, final Integer ssl) throws AS400SecurityException, IOException, DelayedConnectionException, Exception {
ConnectorLogger.getInstance().info("create new As400 : " + host);
CheckDispatcher resource = null;
resource = new CheckDispatcher(host, login, password);
resource = new CheckDispatcher(host, login, password, ssl);
this.pool.put(resource, System.currentTimeMillis());
return resource;
}
private CheckDispatcher getAs400(final String host, final String login, final String password)
private CheckDispatcher getAs400(final String host, final String login, final String password, final Integer ssl)
throws AS400SecurityException, IOException, DelayedConnectionException, Exception {
for (final CheckDispatcher resource : this.pool.keySet()) {
if (resource.getHost().equalsIgnoreCase(host) && resource.getLogin().equalsIgnoreCase(login)
&& resource.getPassword().equalsIgnoreCase(password)) {
&& resource.getPassword().equalsIgnoreCase(password) && resource.getSsl() == ssl) {
this.pool.put(resource, System.currentTimeMillis());
return resource;
}
}
return this.createNewCheckDispatcher(host, login, password);
return this.createNewCheckDispatcher(host, login, password, ssl);
}
@Override
public synchronized void dispatch(final NetworkClient client)
throws AS400SecurityException, IOException, DelayedConnectionException, Exception {
final CheckDispatcher checkDispatcher = this.getAs400(client.getAs400Host(), client.getAs400Login(),
client.getAs400Password());
client.getAs400Password(), client.getAs400Ssl());
checkDispatcher.dispatch(client);
}
}

View File

@ -35,7 +35,7 @@ public class SystemHandlerTest {
try {
SystemStatus as400 = mock(SystemStatus.class);
when(as400.getSystemPools()).thenReturn(new Vector<Object>().elements());
SystemHandler sh = new SystemHandler(null, null, null, as400);
SystemHandler sh = new SystemHandler(null, null, null, as400, null);
sh.dumpSystem();
} finally {
System.setOut(originalOut);

View File

@ -1,77 +0,0 @@
name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "0.020"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
maintainer: "Centreon <contact@centreon.com>"
description: |
This module implements the Argon2 key derivation function, which is suitable to convert any password into a cryptographic key.
This is most often used to for secure storage of passwords but can also be used to derive a encryption key from a password.
It offers variable time and memory costs as well as output size.
Commit: @COMMIT_HASH@
vendor: "Centreon"
homepage: "https://www.centreon.com"
license: "Apache-2.0"
contents:
- src: "/tmp/bin/argon2-calibrate"
dst: "/usr/local/bin/"
file_info:
mode: 0755
packager: rpm
- src: "/tmp/bin/argon2-calibrate"
dst: "/usr/bin/"
file_info:
mode: 0755
packager: deb
- src: "/tmp/lib/perl5/*/auto/Crypt/Argon2/"
dst: "@PERL_VENDORARCH@/auto/Crypt/Argon2/"
file_info:
mode: 0644
- src: "/tmp/lib/perl5/*/Crypt/Argon2.pm"
dst: "@PERL_VENDORARCH@/Crypt/"
file_info:
mode: 0644
- src: "/tmp/man/man3/Crypt::Argon2*"
dst: "/usr/share/man/man3/"
file_info:
mode: 0644
overrides:
rpm:
depends:
- perl(Exporter)
- perl(Time::HiRes)
- perl(XSLoader)
- perl(strict)
- perl(warnings)
conflicts:
- perl-Crypt-Argon2-debuginfo
replaces:
- perl-Crypt-Argon2-debuginfo
provides:
- perl-Crypt-Argon2-debuginfo
- perl(Crypt::Argon2)
deb:
depends:
- perl
- libc6
conflicts:
- libcrypt-argon2-perl-dbgsym
replaces:
- libcrypt-argon2-perl-dbgsym
provides:
- libcrypt-argon2-perl-dbgsym
rpm:
summary: Perl interface to the Argon2 key derivation functions
compression: zstd
signature:
key_file: ${RPM_SIGNING_KEY_FILE}
key_id: ${RPM_SIGNING_KEY_ID}

View File

@ -1,63 +0,0 @@
name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "@VERSION@"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
maintainer: "Centreon <contact@centreon.com>"
description: |
This module implements JSONPath, an XPath-like language for searching JSON-like structures.
JSONPath is described at http://goessner.net/articles/JsonPath/.
Commit: @COMMIT_HASH@
vendor: "Centreon"
homepage: "https://www.centreon.com"
license: "Apache-2.0"
contents:
- src: "/tmp/lib/perl5/JSON/Path.pm"
dst: "@PERL_VENDORLIB@/JSON/"
file_info:
mode: 0644
- src: "/tmp/lib/perl5/JSON/Path/"
dst: "@PERL_VENDORLIB@/JSON/Path/"
file_info:
mode: 0644
- src: "/tmp/man/man3/JSON::Path*"
dst: "/usr/share/man/man3/"
file_info:
mode: 0644
overrides:
rpm:
depends:
- perl(Carp::Assert)
- perl(Exporter::Tiny)
- perl(JSON::MaybeXS)
- perl(JSON::Parse)
- perl(LV)
- perl(List::Util)
- perl(Readonly)
- perl(Tie::IxHash)
- perl(Try::Tiny)
provides:
- perl(JSON::Path)
deb:
depends:
- libcarp-assert-perl
- libexporter-tiny-perl
- libjson-parse-perl
- liblv-perl
- libreadonly-perl
- libtie-ixhash-perl
- libtry-tiny-perl
rpm:
summary: This module implements JSONPath, an XPath-like language for searching JSON-like structures
compression: zstd
signature:
key_file: ${RPM_SIGNING_KEY_FILE}
key_id: ${RPM_SIGNING_KEY_ID}

View File

@ -1,64 +0,0 @@
name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "0.8"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
maintainer: "Centreon <contact@centreon.com>"
description: |
Perl interface to the libssh library
Commit: @COMMIT_HASH@
vendor: "Centreon"
homepage: "https://www.centreon.com"
license: "Apache-2.0"
contents:
- src: "/tmp/lib/perl5/*/auto/Libssh/Session/Session.so"
dst: "@PERL_VENDORARCH@/auto/Libssh/Session/"
file_info:
mode: 0644
- src: "/tmp/lib/perl5/*/Libssh/"
dst: "@PERL_VENDORARCH@/Libssh/"
file_info:
mode: 0644
- src: "/tmp/man/man3/Libssh::*"
dst: "/usr/share/man/man3/"
file_info:
mode: 0644
overrides:
rpm:
depends:
- perl-interpreter
- libssh
conflicts:
- perl-Libssh-Session-debuginfo
replaces:
- perl-Libssh-Session-debuginfo
provides:
- perl-Libssh-Session-debuginfo
- perl(Libssh::Session)
- perl(Libssh::Sftp)
deb:
depends:
- perl
- libc6
- libssh-4
conflicts:
- libssh-session-perl-dbgsym
replaces:
- libssh-session-perl-dbgsym
provides:
- libssh-session-perl-dbgsym
- libssh-session-sftp
rpm:
summary: Perl interface to the libssh library
compression: zstd
signature:
key_file: ${RPM_SIGNING_KEY_FILE}
key_id: ${RPM_SIGNING_KEY_ID}

View File

@ -1,78 +0,0 @@
name: "@NAME@"
arch: "${ARCH}"
platform: "linux"
version_schema: "none"
version: "0.55"
release: "${RELEASE}${DIST}"
section: "default"
priority: "optional"
maintainer: "Centreon <contact@centreon.com>"
description: |
Net::Curl provides a Perl interface to libcurl created with object-oriented implementations in mind.
This documentation contains Perl-specific details and quirks.
For more information consult libcurl man pages and documentation at http://curl.haxx.se.
Commit: @COMMIT_HASH@
vendor: "Centreon"
homepage: "https://www.centreon.com"
license: "Apache-2.0"
contents:
- src: "/tmp/lib/perl5/*/auto/Net/Curl/Curl.so"
dst: "@PERL_VENDORARCH@/auto/Net/Curl/"
file_info:
mode: 0644
- src: "/tmp/lib/perl5/*/Net/Curl.pm"
dst: "@PERL_VENDORARCH@/Net/"
file_info:
mode: 0644
- src: "/tmp/lib/perl5/*/Net/Curl/"
dst: "@PERL_VENDORARCH@/Net/Curl/"
file_info:
mode: 0644
- src: "/tmp/man/man3/Net::Curl*"
dst: "/usr/share/man/man3/"
file_info:
mode: 0644
overrides:
rpm:
depends:
- perl-interpreter
- libcurl
conflicts:
- perl-Net-Curl-debuginfo
replaces:
- perl-Net-Curl-debuginfo
provides:
- perl-Net-Curl-debuginfo
- perl(Net::Curl)
- perl(Net::Curl::Compat)
- perl(Net::Curl::Easy)
- perl(Net::Curl::Form)
- perl(Net::Curl::Share)
- perl(Net::Curl::Multi)
deb:
depends:
- perl
- libcurl4
conflicts:
- libnet-curl-perl-dbgsym
replaces:
- libnet-curl-perl-dbgsym
provides:
- libnet-curl-perl-dbgsym
- libnet-curl-compat-perl
- libnet-curl-easy-perl
- libnet-curl-form-perl
- libnet-curl-share-perl
- libnet-curl-multi-perl
rpm:
summary: Perl interface for libcurl
compression: zstd
signature:
key_file: ${RPM_SIGNING_KEY_FILE}
key_id: ${RPM_SIGNING_KEY_ID}

View File

@ -30,10 +30,7 @@ on_centreon_rtd = os.environ.get('CENTREON_RTD', None) == 'True'
extensions = ['sphinx.ext.todo', 'sphinx.ext.intersphinx']
intersphinx_mapping = {
'centreon-engine': ('http://documentation.centreon.com/docs/centreon-engine/en/latest', None),
'centreon-broker': ('http://documentation.centreon.com/docs/centreon-broker/en/latest', None),
'centreon-clib': ('http://documentation.centreon.com/docs/centreon-clib/en/latest', None),
'ces': ('http://documentation.centreon.com/docs/centreon-enterprise-server/en/latest', None),
'centreon-documentation': ('https://docs.centreon.com/', None),
}
# Add any paths that contain templates here, relative to this directory.

View File

@ -1,6 +1,13 @@
{
"dependencies": [
"libboolean-perl",
"libbson-perl",
"libdatetime-perl",
"libmongodb-perl"
"libhash-ordered-perl",
"libmongodb-perl",
"libsafe-isa-perl",
"libtype-tiny-perl",
"libuuid-perl",
"libuuid-urandom-perl"
]
}

View File

@ -1,9 +1,9 @@
{
"dependencies": [
"perl(Time::HiRes)",
"perl(DateTime)",
"perl(MongoDB)",
"perl(Hash::Ordered)",
"perl(URI::Encode)"
"perl(MongoDB)",
"perl(Time::HiRes)",
"perl(URI::Encode)"
]
}

View File

@ -0,0 +1,4 @@
{
"dependencies": [
]
}

View File

@ -0,0 +1,9 @@
{
"pkg_name": "centreon-plugin-Applications-Exense-Step-Restapi",
"pkg_summary": "Centreon Plugin",
"plugin_name": "centreon_exense_step_restapi.pl",
"files": [
"centreon/plugins/script_custom.pm",
"apps/exense/step/restapi/"
]
}

View File

@ -0,0 +1,5 @@
{
"dependencies": [
"perl(DateTime)"
]
}

View File

@ -0,0 +1,5 @@
{
"dependencies": [
"libjson-perl"
]
}

View File

@ -0,0 +1,9 @@
{
"pkg_name": "centreon-plugin-Applications-Haproxy-Web",
"pkg_summary": "Centreon Plugin to monitor HAProxy through JSON web stats page",
"plugin_name": "centreon_haproxy_web.pl",
"files": [
"centreon/plugins/script_custom.pm",
"apps/haproxy/web/"
]
}

View File

@ -0,0 +1,5 @@
{
"dependencies": [
"perl(JSON::XS)"
]
}

View File

@ -0,0 +1,4 @@
{
"dependencies": [
]
}

View File

@ -0,0 +1,9 @@
{
"pkg_name": "centreon-plugin-Applications-Podman-Restapi",
"pkg_summary": "Centreon Plugin",
"plugin_name": "centreon_podman_restapi.pl",
"files": [
"centreon/plugins/script_custom.pm",
"apps/podman/restapi/"
]
}

View File

@ -0,0 +1,4 @@
{
"dependencies": [
]
}

View File

@ -5,6 +5,7 @@
"files": [
"centreon/plugins/script_snmp.pm",
"centreon/plugins/snmp.pm",
"snmp_standard/mode/uptime.pm",
"storage/netapp/ontap/snmp/"
]
}

View File

@ -5,9 +5,12 @@
"files": [
"centreon/plugins/script_snmp.pm",
"centreon/plugins/snmp.pm",
"snmp_standard/mode/interfaces.pm",
"snmp_standard/mode/listinterfaces.pm",
"snmp_standard/mode/listspanningtrees.pm",
"snmp_standard/mode/resources/",
"snmp_standard/mode/interfaces.pm",
"snmp_standard/mode/spanningtree.pm",
"snmp_standard/mode/uptime.pm",
"network/aruba/aoscx/snmp/"
]
}

View File

@ -1,5 +1,6 @@
{
"dependencies": [
"libsnmp-perl"
"libsnmp-perl",
"libdatetime-format-strptime-perl"
]
}
}

View File

@ -1,5 +1,6 @@
{
"dependencies": [
"perl(SNMP)"
"perl(SNMP)",
"perl(DateTime::Format::Strptime)"
]
}
}

View File

@ -3,12 +3,13 @@
"pkg_summary": "Centreon Plugin",
"plugin_name": "centreon_huawei_snmp.pl",
"files": [
"centreon/common/huawei/standard/snmp",
"centreon/plugins/script_snmp.pm",
"centreon/plugins/snmp.pm",
"snmp_standard/mode/interfaces.pm",
"snmp_standard/mode/listinterfaces.pm",
"snmp_standard/mode/resources/",
"snmp_standard/mode/resources/",
"snmp_standard/mode/uptime.pm",
"network/huawei/snmp/"
"network/huawei/standard/snmp/"
]
}

View File

@ -0,0 +1,5 @@
{
"dependencies": [
"libsnmp-perl"
]
}

View File

@ -0,0 +1,15 @@
{
"pkg_name": "centreon-plugin-Network-Huawei-Wlc-Snmp",
"pkg_summary": "Centreon Plugin for Huawei WLC using SNMP protocol",
"plugin_name": "centreon_huawei_wlc_snmp.pl",
"files": [
"centreon/common/huawei/standard/snmp/",
"centreon/plugins/script_snmp.pm",
"centreon/plugins/snmp.pm",
"snmp_standard/mode/interfaces.pm",
"snmp_standard/mode/listinterfaces.pm",
"snmp_standard/mode/resources/",
"snmp_standard/mode/uptime.pm",
"network/huawei/wlc/snmp/"
]
}

View File

@ -0,0 +1,5 @@
{
"dependencies": [
"perl(SNMP)"
]
}

View File

@ -7,7 +7,10 @@
"centreon/plugins/snmp.pm",
"snmp_standard/mode/interfaces.pm",
"snmp_standard/mode/listinterfaces.pm",
"snmp_standard/mode/resources/",
"snmp_standard/mode/listspanningtrees.pm",
"snmp_standard/mode/resources/",
"snmp_standard/mode/spanningtree.pm",
"snmp_standard/mode/uptime.pm",
"network/hp/procurve/"
]
}

Some files were not shown because too many files have changed in this diff Show More