enh(ci): promote testing packages #2374
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: plugins | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths: | |
- '.github/workflows/plugins.yml' | |
- '.github/scripts/plugins-source.container.pl' | |
- '.github/packaging/centreon-plugin.yaml.template' | |
- 'src/**' | |
- 'packaging/**' | |
push: | |
branches: | |
- develop | |
- master | |
paths: | |
- '.github/workflows/plugins.yml' | |
- '.github/scripts/plugins-source.container.pl' | |
- '.github/packaging/centreon-plugin.yaml.template' | |
- 'src/**' | |
- 'packaging/**' | |
jobs: | |
get-environment: | |
uses: ./.github/workflows/get-environment.yml | |
get-plugins: | |
runs-on: ubuntu-22.04 | |
outputs: | |
plugins: ${{ steps.get_plugins.outputs.plugins }} | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 | |
with: | |
python-version: '3.9' | |
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
id: filter | |
with: | |
base: ${{ github.ref }} | |
list-files: shell | |
filters: | | |
common: | |
- added|deleted|modified: src/centreon/** | |
- modified: .github/packaging/centreon-plugin.yaml.template | |
packages: | |
- added|modified: packaging/** | |
plugins: | |
- added|modified: src/** | |
- name: transform to directories | |
run: | | |
folders=() | |
for f in ${{ steps.filter.outputs.packages_files }}; do | |
echo "Adding $(dirname $f) to folders" | |
folders+=($(dirname $f)) | |
done | |
unique_folders=($(printf "%s\n" "${folders[@]}" | sort -u | tr '\n' ' ')) | |
jq --compact-output --null-input '$ARGS.positional' --args -- ${unique_folders[@]} > package_directories.txt | |
files=() | |
for f in ${{ steps.filter.outputs.plugins_files }}; do | |
echo "Adding $f to files" | |
files+=($f) | |
done | |
unique_files=($(printf "%s\n" "${files[@]}" | sort -u | tr '\n' ' ')) | |
jq --compact-output --null-input '$ARGS.positional' --args -- ${unique_files[@]} > plugins.txt | |
shell: bash | |
- name: Get plugins for build | |
id: get_plugins | |
if: ${{ steps.filter.outputs.common == 'true' || steps.filter.outputs.packages == 'true' || steps.filter.outputs.plugins == 'true' }} | |
run: | | |
PLUGINS="$(python3 .github/scripts/process-plugins.py '${{ steps.filter.outputs.common == 'true' }}')" | |
echo "plugins=$(echo $PLUGINS)" >> $GITHUB_OUTPUT | |
if [ "$PLUGINS" == '' ]; then | |
echo "::notice::There are no modifications to the plugins packages" | |
fi | |
shell: bash | |
unit-tests: | |
needs: [get-environment, get-plugins] | |
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] | |
include: | |
- runner_name: ubuntu-22.04 | |
- package_extension: rpm | |
image: unit-tests-alma8 | |
distrib: el8 | |
- package_extension: rpm | |
image: unit-tests-alma9 | |
distrib: el9 | |
- package_extension: deb | |
image: unit-tests-bullseye | |
distrib: bullseye | |
- package_extension: deb | |
image: unit-tests-bullseye-arm64 | |
runner_name: ["self-hosted", "collect-arm64"] | |
distrib: bullseye | |
- package_extension: deb | |
image: unit-tests-bookworm | |
distrib: bookworm | |
- package_extension: deb | |
image: unit-tests-jammy | |
distrib: jammy | |
runs-on: ${{ matrix.runner_name }} | |
container: | |
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }} | |
credentials: | |
username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }} | |
password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- 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 | |
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 | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
fetch-depth: 1 | |
- name: Prepare FatPacker | |
uses: shogo82148/actions-setup-perl@9c1eca9952ccc07f9ca4a2097b63df93d9d138e9 # v1.31.3 | |
with: | |
perl-version: '5.34' | |
install-modules-with: cpm | |
install-modules: App::FatPacker File::Copy::Recursive JSON | |
- name: Run FatPacker | |
run: | | |
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 | |
with: | |
path: ./build/ | |
key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }} | |
package: | |
runs-on: ubuntu-24.04 | |
needs: [get-environment, get-plugins, fatpacker] | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- package_extension: rpm | |
image: packaging-plugins-alma8 | |
distrib: el7 | |
- package_extension: rpm | |
image: packaging-plugins-alma8 | |
distrib: el8 | |
- package_extension: rpm | |
image: packaging-plugins-alma9 | |
distrib: el9 | |
- package_extension: deb | |
image: packaging-plugins-bullseye | |
distrib: bullseye | |
- package_extension: deb | |
image: packaging-plugins-bookworm | |
distrib: bookworm | |
- package_extension: deb | |
image: packaging-plugins-jammy | |
distrib: jammy | |
container: | |
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }} | |
credentials: | |
username: ${{ secrets.HARBOR_CENTREON_PULL_USERNAME }} | |
password: ${{ secrets.HARBOR_CENTREON_PULL_TOKEN }} | |
name: "package ${{ matrix.distrib }}" | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 | |
with: | |
path: ./build/ | |
key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }} | |
fail-on-cache-miss: true | |
- run: | | |
PLUGINS="${{ needs.get-plugins.outputs.plugins }}" | |
for PLUGIN in $PLUGINS; do | |
PACKAGE_PATH=$PLUGIN | |
if [[ "$PLUGIN" =~ (.+)"=>"(.+) ]]; then | |
PACKAGE_PATH=$(echo ${BASH_REMATCH[1]}) | |
PLUGIN=$(echo ${BASH_REMATCH[2]}) | |
fi | |
PLUGIN_NAME_LOWER=$(echo "$PLUGIN" | tr '[:upper:]' '[:lower:]') | |
echo "::group::Preparing $PLUGIN_NAME_LOWER" | |
# Process package files | |
pkg_values=($(cat "packaging/$PACKAGE_PATH/pkg.json" | jq -r '.pkg_name,.plugin_name')) | |
pkg_summary=$(echo "${pkg_values[0]}") | |
plugin_name=$(echo "${pkg_values[1]}") | |
conflicts=$(cat "packaging/$PACKAGE_PATH/pkg.json" | jq -r '.conflicts // [] | join(",")') | |
replaces=$(cat "packaging/$PACKAGE_PATH/pkg.json" | jq -r '.replaces // [] | join(",")') | |
provides=$(cat "packaging/$PACKAGE_PATH/pkg.json" | jq -r '.provides // [] | join(",")') | |
deb_dependencies=$(cat "packaging/$PACKAGE_PATH/deb.json" | jq -r '.dependencies // [] | join(",")') | |
deb_conflicts=$(cat "packaging/$PACKAGE_PATH/deb.json" | jq -r '.conflicts // [] | join(",")') | |
deb_replaces=$(cat "packaging/$PACKAGE_PATH/deb.json" | jq -r '.replaces // [] | join(",")') | |
deb_provides=$(cat "packaging/$PACKAGE_PATH/deb.json" | jq -r '.provides // [] | join(",")') | |
rpm_dependencies=$(cat "packaging/$PACKAGE_PATH/rpm.json" | jq -r '.dependencies // [] | join(",")') | |
rpm_conflicts=$(cat "packaging/$PACKAGE_PATH/rpm.json" | jq -r '.conflicts // [] | join(",")') | |
rpm_replaces=$(cat "packaging/$PACKAGE_PATH/rpm.json" | jq -r '.replaces // [] | join(",")') | |
rpm_provides=$(cat "packaging/$PACKAGE_PATH/rpm.json" | jq -r '.provides // [] | join(",")') | |
sed -e "s/@PLUGIN_NAME@/$PLUGIN/g;" \ | |
-e "s/@SUMMARY@/$pkg_summary/g" \ | |
-e "s/@CONFLICTS@/$conflicts/g" \ | |
-e "s/@REPLACES@/$replaces/g" \ | |
-e "s/@PROVIDES@/$provides/g" \ | |
-e "s/@DEB_DEPENDENCIES@/$deb_dependencies/g" \ | |
-e "s/@DEB_CONFLICTS@/$deb_conflicts/g" \ | |
-e "s/@DEB_REPLACES@/$deb_replaces/g" \ | |
-e "s/@DEB_PROVIDES@/$deb_provides/g" \ | |
-e "s/@RPM_DEPENDENCIES@/$rpm_dependencies/g" \ | |
-e "s/@RPM_CONFLICTS@/$rpm_conflicts/g" \ | |
-e "s/@RPM_REPLACES@/$rpm_replaces/g" \ | |
-e "s/@RPM_PROVIDES@/$rpm_provides/g" \ | |
< .github/packaging/centreon-plugin.yaml.template \ | |
>> .github/packaging/$PLUGIN.yaml | |
if [ "${{ matrix.package_extension }}" = "rpm" ]; then | |
sed -i "s/@PACKAGE_NAME@/$PLUGIN/g" \ | |
.github/packaging/$PLUGIN.yaml | |
else | |
sed -i "s/@PACKAGE_NAME@/$PLUGIN_NAME_LOWER/g" \ | |
.github/packaging/$PLUGIN.yaml | |
fi | |
cat .github/packaging/$PLUGIN.yaml | |
echo "::endgroup::" | |
done | |
shell: bash | |
- uses: ./.github/actions/package-nfpm | |
with: | |
nfpm_file_pattern: ".github/packaging/*.yaml" | |
distrib: ${{ matrix.distrib }} | |
package_extension: ${{ matrix.package_extension }} | |
version: ${{ needs.get-environment.outputs.version }} | |
release: ${{ needs.get-environment.outputs.release }} | |
commit_hash: ${{ github.sha }} | |
cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} | |
rpm_gpg_key: ${{ secrets.RPM_GPG_SIGNING_KEY }} | |
rpm_gpg_signing_key_id: ${{ secrets.RPM_GPG_SIGNING_KEY_ID }} | |
rpm_gpg_signing_passphrase: ${{ secrets.RPM_GPG_SIGNING_PASSPHRASE }} | |
stability: ${{ needs.get-environment.outputs.stability }} | |
test-plugins: | |
needs: [get-environment, get-plugins, package] | |
strategy: | |
fail-fast: false | |
matrix: | |
image: [testing-plugins-alma8, testing-plugins-alma9, testing-plugins-jammy, testing-plugins-bullseye, testing-plugins-bookworm] | |
include: | |
- runner_name: ubuntu-24.04 | |
- package_extension: rpm | |
image: testing-plugins-alma8 | |
distrib: el8 | |
- package_extension: rpm | |
image: testing-plugins-alma9 | |
distrib: el9 | |
- package_extension: deb | |
image: testing-plugins-bullseye | |
distrib: bullseye | |
- package_extension: deb | |
image: testing-plugins-bookworm | |
distrib: bookworm | |
- package_extension: deb | |
image: testing-plugins-jammy | |
distrib: jammy | |
- package_extension: deb | |
image: testing-plugins-bullseye-arm64 | |
distrib: bullseye | |
arch: arm64 | |
runner_name: ["self-hosted", "collect-arm64"] | |
runs-on: ${{ matrix.runner_name }} | |
container: | |
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }} | |
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: ./.github/actions/test-plugins | |
with: | |
cache-key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} | |
package-extension: ${{ matrix.package_extension }} | |
plugin-list: ${{ needs.get-plugins.outputs.plugins }} | |
- name: Upload apt/dnf logs as artifacts if tests failed | |
if: failure() | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: plugin-installation-${{ matrix.distrib }} | |
path: /var/log/robot-plugins-installation-tests.log | |
retention-days: 1 | |
deliver-packages: | |
needs: [get-environment, get-plugins, test-plugins] | |
if: | | |
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')) && | |
! cancelled() && | |
! contains(needs.*.result, 'failure') && | |
! contains(needs.*.result, 'cancelled') | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- distrib: el7 | |
package_extension: rpm | |
- 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: plugins | |
distrib: ${{ matrix.distrib }} | |
cache_key: ${{ github.sha }}-${{ github.run_id }}-${{ matrix.package_extension }}-${{ matrix.distrib }} | |
stability: ${{ needs.get-environment.outputs.stability }} | |
release_type: ${{ needs.get-environment.outputs.release_type }} | |
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }} | |
deliver-sources: | |
needs: [get-environment] | |
if: ${{ needs.get-environment.outputs.stability == 'stable' && github.event_name == 'push' }} | |
runs-on: [self-hosted, common] | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | |
- uses: actions/cache/restore@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 | |
with: | |
path: ./build/ | |
key: fatpacked-plugins-${{ github.sha }}-${{ github.run_id }} | |
fail-on-cache-miss: true | |
- name: Deliver sources | |
uses: ./.github/actions/release-sources | |
with: | |
bucket_directory: centreon-plugins | |
module_directory: build | |
module_name: centreon-plugins | |
version: ${{ needs.get-environment.outputs.version }} | |
release: ${{ needs.get-environment.outputs.release }} | |
token_download_centreon_com: ${{ secrets.TOKEN_DOWNLOAD_CENTREON_COM }} | |
release-tag: | |
needs: [get-environment] | |
if: ${{ needs.get-environment.outputs.stability == 'stable' && github.event_name == 'push' }} | |
runs-on: ubuntu-24.04 | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | |
- name: Push git release tag | |
run: | | |
RELEASE=plugins-$(date '+%Y%m%d') | |
EXISTING_TAG=$(git tag --list "$RELEASE" | head -n 1) | |
git config --global user.email "[email protected]" | |
git config --global user.name "Centreon" | |
if [ -z "$EXISTING_TAG" ]; then | |
git tag -a "$RELEASE" -m "release $RELEASE" | |
git push --follow-tags | |
else | |
echo "::warning::Release tag $RELEASE already exists" | |
fi | |
shell: bash |