From 3e405fd08d2dbe81980663ca60e26f4a4ceeaf8f Mon Sep 17 00:00:00 2001 From: Rafael Guterres Jeffman Date: Thu, 31 Oct 2024 09:23:30 -0300 Subject: [PATCH] upstream CI: Use Azure 'loops' to create stages This patch modify the pipelines to create stages using the 'each' expression on Azure pipelines, so that the configuration and the list of distributions can be set using variables. Testing CentOS 8 Stream and Galaxy collections still need to be handled in a separate group, although, the pipeline configuration becomes easily changed, specially when updating Ansible versions. --- infra/azure/azure-pipelines.yml | 60 ++++---- infra/azure/build-containers.yml | 45 ++---- infra/azure/nightly.yml | 173 ++++++++-------------- infra/azure/pr-pipeline.yml | 66 +++------ infra/azure/templates/build_container.yml | 4 +- 5 files changed, 119 insertions(+), 229 deletions(-) diff --git a/infra/azure/azure-pipelines.yml b/infra/azure/azure-pipelines.yml index 7456b62eb4..8b915b4cef 100644 --- a/infra/azure/azure-pipelines.yml +++ b/infra/azure/azure-pipelines.yml @@ -5,72 +5,64 @@ trigger: pool: vmImage: 'ubuntu-20.04' -stages: +variables: + ansible_version: "-core >=2.16,<2.17" + ansible_latest: "-core" + ansible_minimum: "-core <2.16" + distros: "fedora-latest,c9s,fedora-rawhide" -# Fedora +stages: -- stage: Fedora_Ansible_Latest +- stage: fedora_latest_ansible_latest dependsOn: [] jobs: - template: templates/group_tests.yml parameters: build_number: $(Build.BuildNumber) distro: fedora-latest - ansible_version: "-core" + ansible_version: ${{ variables.ansible_latest }} skip_git_test: true -# Fedora - -- stage: Fedora_Ansible_min_supported +- stage: fedora_latest_ansible_2_15 dependsOn: [] jobs: - template: templates/group_tests.yml parameters: build_number: $(Build.BuildNumber) distro: fedora-latest - ansible_version: "-core <2.16" + ansible_version: ${{ variables.ansbile_minimum }} skip_git_test: true -# Fedora +# Supported distros -- stage: Fedora_Latest - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-latest - skip_git_test: true - ansible_version: "-core >=2.16,<2.17" +- ${{ each distro in split(variables.distros, ',') }}: + - stage: ${{ replace(distro, '-', '_') }}_ansible_2_16 + dependsOn: [] + jobs: + - template: templates/group_tests.yml + parameters: + build_number: $(Build.BuildNumber) + distro: ${{ distro }} + ansible_version: ${{ variables.ansible_version }} + skip_git_test: true + test_galaxy: false # Galaxy on Fedora -- stage: Galaxy_Fedora_Latest +- stage: galaxy_fedora_latest_ansible_2_16 dependsOn: [] jobs: - template: templates/group_tests.yml parameters: build_number: $(Build.BuildNumber) distro: fedora-latest - ansible_version: "-core >=2.16,<2.17" + ansible_version: ${{ variables.ansible_version }} skip_git_test: true test_galaxy: true -# CentOS 9 Stream - -- stage: CentOS_9_Stream - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c9s - ansible_version: "-core >=2.16,<2.17" - skip_git_test: true - -# CentOS 8 Stream +# CentOS 8 Stream, latest supported Ansible version. -- stage: CentOS_8_Stream +- stage: c8s_ansible_2_16 dependsOn: [] jobs: - template: templates/group_tests.yml diff --git a/infra/azure/build-containers.yml b/infra/azure/build-containers.yml index a98b2e1100..8f6b57d8ef 100644 --- a/infra/azure/build-containers.yml +++ b/infra/azure/build-containers.yml @@ -1,5 +1,4 @@ --- - schedules: - cron: "0 0 * * 0" displayName: Weekly Sunday midnight build @@ -13,46 +12,24 @@ trigger: none pool: vmImage: 'ubuntu-24.04' +variables: { distros: "fedora-latest,fedora-rawhide,c9s" } + stages: +- ${{ each distro in split(variables.distros, ',') }}: + - stage: build_${{ join('_', split(distro, '-')) }} + dependsOn: [] + jobs: + - template: templates/build_container.yml + parameters: + distro: ${{ distro }} + +# Special case for CentOS 8 Stream - stage: CentOS_8_Stream dependsOn: [] jobs: - template: templates/build_container.yml parameters: - job_name_suffix: C8S distro: c8s # ansible-core 2.17+ cannot be used to deploy on CentOS 8 Stream. ansible_core_version: "<2.17" - -- stage: CentOS_9_Stream - dependsOn: [] - jobs: - - template: templates/build_container.yml - parameters: - job_name_suffix: C9S - distro: c9s - -- stage: CentOS_10_Stream - dependsOn: [] - jobs: - - template: templates/build_container.yml - parameters: - job_name_suffix: C10S - distro: c10s - -- stage: Fedora_Latest - dependsOn: [] - jobs: - - template: templates/build_container.yml - parameters: - job_name_suffix: FedoraLatest - distro: fedora-latest - -- stage: Fedora_Rawhide - dependsOn: [] - jobs: - - template: templates/build_container.yml - parameters: - job_name_suffix: FedoraRawhide - distro: fedora-rawhide diff --git a/infra/azure/nightly.yml b/infra/azure/nightly.yml index 671571a04a..ded5877851 100644 --- a/infra/azure/nightly.yml +++ b/infra/azure/nightly.yml @@ -12,115 +12,68 @@ trigger: none pool: vmImage: 'ubuntu-20.04' -stages: - -# Fedora - -- stage: fedora_latest_Ansible_Core_2_15 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-latest - ansible_version: "-core >=2.15,<2.16" - skip_git_test: true - -- stage: fedora_latest_Ansible_Core_2_16 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-latest - ansible_version: "" - skip_git_test: true - -- stage: fedora_latest_Ansible_Core_2_17 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-latest - ansible_version: "-core >=2.17" - skip_git_test: true - -# Galaxy on Fedora - -- stage: Galaxy_fedora_latest_Ansible_Core_2_17 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-latest - ansible_version: "-core >=2.17,<2.18" - skip_git_test: true - test_galaxy: true - -# Fedora Rawhide +variables: + # We need to have two sets, as c8s is not supported by all ansible versions + recent_distros: "fedora-latest,fedora-rawhide,c9s" + distros: "fedora-latest,fedora-rawhide,c9s,c8s" + ansible_latest: "-core" + ansible_minimum: "-core <2.16" + ansible_version: "-core >=2.16,<2.17" -- stage: fedora_rawhide_Ansible_Core_2_17 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-rawhide - ansible_version: "-core >=2.17,<2.18" - skip_git_test: true - -# CentoOS 9 Stream - -- stage: c9s_Ansible_Core_2_15 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c9s - ansible_version: "-core >=2.15,<2.16" - skip_git_test: true - -- stage: c9s_Ansible_Core_2_16 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c9s - ansible_version: "-core >=2.16,<2.17" - skip_git_test: true - -- stage: c9s_Ansible_Core_2_17 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c9s - ansible_version: "-core >=2.17,<2.18" - skip_git_test: true - -# CentOS 8 Stream only works up to ansible-core 2.16.z - -- stage: c8s_Ansible_Core_2_15 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c8s - ansible_version: "-core >=2.15,<2.16" - skip_git_test: true +stages: -- stage: c8s_Ansible_Core_2_16 - dependsOn: [] - jobs: - - template: templates/group_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c8s - ansible_version: "-core >=2.16,<2.17" - skip_git_test: true +# Minimum ansible + +- ${{ each distro in split(variables.distros, ',') }}: + - stage: ${{ replace(distro, '-', '_') }}_ansible_2_15 + dependsOn: [] + jobs: + - template: templates/group_tests.yml + parameters: + build_number: $(Build.BuildNumber) + distro: fedora-latest + ansible_version: ${{ variables.ansible_minimum }} + skip_git_test: true + test_galaxy: false + +# Latest ansible + +- ${{ each distro in split(variables.recent_distros, ',') }}: + - stage: ${{ replace(distro, '-', '_') }}_ansible_latest + dependsOn: [] + jobs: + - template: templates/group_tests.yml + parameters: + build_number: $(Build.BuildNumber) + distro: ${{ distro }} + ansible_version: ${{ variables.ansible_latest }} + skip_git_test: true + test_galaxy: false + +# Selected ansible-core version + +- ${{ each distro in split(variables.distros, ',') }}: + - stage: ${{ replace(distro, '-', '_') }}_ansible_2_16 + dependsOn: [] + jobs: + - template: templates/group_tests.yml + parameters: + build_number: $(Build.BuildNumber) + distro: ${{ distro }} + ansible_version: ${{ variables.ansible_version }} + skip_git_test: true + test_galaxy: false + +# Galaxy collection with selected ansible-core version + +- ${{ each distro in split(variables.distros, ',') }}: + - stage: galaxy_${{ replace(distro, '-', '_') }}_asible_2_16 + dependsOn: [] + jobs: + - template: templates/group_tests.yml + parameters: + build_number: $(Build.BuildNumber) + distro: ${{ distro }} + ansible_version: ${{ variables.ansible_version }} + skip_git_test: true + test_galaxy: true diff --git a/infra/azure/pr-pipeline.yml b/infra/azure/pr-pipeline.yml index bc6e0830b8..ea89f321cf 100644 --- a/infra/azure/pr-pipeline.yml +++ b/infra/azure/pr-pipeline.yml @@ -5,65 +5,35 @@ trigger: pool: vmImage: 'ubuntu-20.04' +variables: + distros: "fedora-latest,c9s,c8s,fedora-rawhide" + ansible_version: "-core >=2.15,<2.16" + stages: -# Fedora +# Test with repository in all distros -- stage: Fedora_Latest - dependsOn: [] - jobs: - - template: templates/run_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-latest - ansible_version: "-core >=2.15,<2.16" - skip_git_test: false +- ${{ each distro in split(variables.distros, ',') }}: + - stage: ${{ replace(distro, '-', '_') }}_ansible_2_16 + dependsOn: [] + jobs: + - template: templates/run_tests.yml + parameters: + build_number: $(Build.BuildNumber) + distro: ${{ distro }} + ansible_version: ${{ variables.ansible_version }} + skip_git_test: false + test_galaxy: false # Galaxy on Fedora -- stage: Galaxy_Fedora_Latest +- stage: galaxy_fedora_latest_ansible_2_16 dependsOn: [] jobs: - template: templates/run_tests.yml parameters: build_number: $(Build.BuildNumber) distro: fedora-latest - ansible_version: "-core >=2.15,<2.16" + ansible_version: ${{ variables.ansible_version }} skip_git_test: false test_galaxy: true - -# CentOS 9 Stream - -- stage: CentOS_9_Stream - dependsOn: [] - jobs: - - template: templates/run_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c9s - ansible_version: "-core >=2.15,<2.16" - skip_git_test: false - -# CentOS 8 Stream - -- stage: CentOS_8_Stream - dependsOn: [] - jobs: - - template: templates/run_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: c8s - ansible_version: "-core >=2.15,<2.16" - skip_git_test: false - -# Rawhide - -- stage: Fedora_Rawhide - dependsOn: [] - jobs: - - template: templates/run_tests.yml - parameters: - build_number: $(Build.BuildNumber) - distro: fedora-rawhide - ansible_version: "-core >=2.15,<2.16" - skip_git_test: false diff --git a/infra/azure/templates/build_container.yml b/infra/azure/templates/build_container.yml index 4fa0b469fe..e3c2bdea57 100644 --- a/infra/azure/templates/build_container.yml +++ b/infra/azure/templates/build_container.yml @@ -1,7 +1,5 @@ --- parameters: - - name: job_name_suffix - type: string - name: distro type: string - name: python_version @@ -11,7 +9,7 @@ parameters: default: "" jobs: -- job: BuildTestImage${{ parameters.job_name_suffix }} +- job: BuildTestImage_${{ join('_', split(parameters.distro, '-')) }} displayName: Build ${{ parameters.distro }} test container steps: - task: UsePythonVersion@0