mirror of
https://github.com/ansible-collections/community.docker.git
synced 2026-06-24 15:01:09 +00:00
Use nox in AZP CI. (#1267)
This commit is contained in:
parent
4e4f65abdc
commit
c5831a79f7
@ -49,105 +49,123 @@ resources:
|
|||||||
pool: Standard
|
pool: Standard
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
- stage: remote_2_18
|
||||||
|
displayName: Remote ansible-core 2.18
|
||||||
|
dependsOn: []
|
||||||
|
variables:
|
||||||
|
entryPoint: tests/utils/shippable/nox.sh
|
||||||
|
jobs:
|
||||||
|
- template: templates/matrix.yml
|
||||||
|
parameters:
|
||||||
|
targets:
|
||||||
|
- name: rhel/9.7 + azp/1/
|
||||||
|
test: ansible-test-integration-2.18-rhel-9.7-azp-1
|
||||||
|
- name: rhel/9.7 + azp/2/
|
||||||
|
test: ansible-test-integration-2.18-rhel-9.7-azp-2
|
||||||
|
- name: rhel/9.7 + azp/3/
|
||||||
|
test: ansible-test-integration-2.18-rhel-9.7-azp-3
|
||||||
|
- name: rhel/9.7 + azp/4/
|
||||||
|
test: ansible-test-integration-2.18-rhel-9.7-azp-4
|
||||||
|
- name: rhel/9.7 + azp/5/
|
||||||
|
test: ansible-test-integration-2.18-rhel-9.7-azp-5
|
||||||
|
|
||||||
### Remote
|
- stage: remote_2_19
|
||||||
- stage: Remote_devel
|
displayName: Remote ansible-core 2.19
|
||||||
displayName: Remote devel
|
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
|
variables:
|
||||||
|
entryPoint: tests/utils/shippable/nox.sh
|
||||||
jobs:
|
jobs:
|
||||||
- template: templates/matrix.yml
|
- template: templates/matrix.yml
|
||||||
parameters:
|
parameters:
|
||||||
testFormat: devel/{0}
|
|
||||||
targets:
|
targets:
|
||||||
- name: RHEL 10.1 with Docker SDK, urllib3, requests from sources
|
- name: ubuntu/22.04 + azp/1/
|
||||||
test: rhel/10.1-dev-latest
|
test: ansible-test-integration-2.19-ubuntu-22.04-azp-1
|
||||||
- name: RHEL 9.7
|
- name: ubuntu/22.04 + azp/2/
|
||||||
test: rhel/9.7
|
test: ansible-test-integration-2.19-ubuntu-22.04-azp-2
|
||||||
# For some reason, Ubuntu 24.04 is *extremely* slower than RHEL 9.6
|
- name: ubuntu/22.04 + azp/3/
|
||||||
# - name: Ubuntu 24.04
|
test: ansible-test-integration-2.19-ubuntu-22.04-azp-3
|
||||||
# test: ubuntu/24.04
|
- name: ubuntu/22.04 + azp/4/
|
||||||
groups:
|
test: ansible-test-integration-2.19-ubuntu-22.04-azp-4
|
||||||
- 1
|
- name: ubuntu/22.04 + azp/5/
|
||||||
- 2
|
test: ansible-test-integration-2.19-ubuntu-22.04-azp-5
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
- 5
|
|
||||||
- stage: Remote_2_21
|
|
||||||
displayName: Remote 2.21
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.21/{0}
|
|
||||||
targets:
|
|
||||||
- name: RHEL 10.1
|
|
||||||
test: rhel/10.1
|
|
||||||
# - name: RHEL 9.7
|
|
||||||
# test: rhel/9.7
|
|
||||||
groups:
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
- 5
|
|
||||||
- stage: Remote_2_20
|
|
||||||
displayName: Remote 2.20
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.20/{0}
|
|
||||||
targets:
|
|
||||||
- name: RHEL 9.7
|
|
||||||
test: rhel/9.7
|
|
||||||
groups:
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
- 5
|
|
||||||
- stage: Remote_2_19
|
|
||||||
displayName: Remote 2.19
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.19/{0}
|
|
||||||
targets:
|
|
||||||
- name: Ubuntu 22.04
|
|
||||||
test: ubuntu/22.04
|
|
||||||
groups:
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
- 5
|
|
||||||
- stage: Remote_2_18
|
|
||||||
displayName: Remote 2.18
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.18/{0}
|
|
||||||
targets:
|
|
||||||
- name: RHEL 9.7
|
|
||||||
test: rhel/9.7
|
|
||||||
groups:
|
|
||||||
- 1
|
|
||||||
- 2
|
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
- 5
|
|
||||||
|
|
||||||
## Finally
|
- stage: remote_2_20
|
||||||
|
displayName: Remote ansible-core 2.20
|
||||||
|
dependsOn: []
|
||||||
|
variables:
|
||||||
|
entryPoint: tests/utils/shippable/nox.sh
|
||||||
|
jobs:
|
||||||
|
- template: templates/matrix.yml
|
||||||
|
parameters:
|
||||||
|
targets:
|
||||||
|
- name: rhel/9.7 + azp/1/
|
||||||
|
test: ansible-test-integration-2.20-rhel-9.7-azp-1
|
||||||
|
- name: rhel/9.7 + azp/2/
|
||||||
|
test: ansible-test-integration-2.20-rhel-9.7-azp-2
|
||||||
|
- name: rhel/9.7 + azp/3/
|
||||||
|
test: ansible-test-integration-2.20-rhel-9.7-azp-3
|
||||||
|
- name: rhel/9.7 + azp/4/
|
||||||
|
test: ansible-test-integration-2.20-rhel-9.7-azp-4
|
||||||
|
- name: rhel/9.7 + azp/5/
|
||||||
|
test: ansible-test-integration-2.20-rhel-9.7-azp-5
|
||||||
|
|
||||||
|
- stage: remote_2_21
|
||||||
|
displayName: Remote ansible-core 2.21
|
||||||
|
dependsOn: []
|
||||||
|
variables:
|
||||||
|
entryPoint: tests/utils/shippable/nox.sh
|
||||||
|
jobs:
|
||||||
|
- template: templates/matrix.yml
|
||||||
|
parameters:
|
||||||
|
targets:
|
||||||
|
- name: rhel/10.1 + azp/1/
|
||||||
|
test: ansible-test-integration-2.21-rhel-10.1-azp-1
|
||||||
|
- name: rhel/10.1 + azp/2/
|
||||||
|
test: ansible-test-integration-2.21-rhel-10.1-azp-2
|
||||||
|
- name: rhel/10.1 + azp/3/
|
||||||
|
test: ansible-test-integration-2.21-rhel-10.1-azp-3
|
||||||
|
- name: rhel/10.1 + azp/4/
|
||||||
|
test: ansible-test-integration-2.21-rhel-10.1-azp-4
|
||||||
|
- name: rhel/10.1 + azp/5/
|
||||||
|
test: ansible-test-integration-2.21-rhel-10.1-azp-5
|
||||||
|
|
||||||
|
- stage: remote_devel
|
||||||
|
displayName: Remote ansible-core devel
|
||||||
|
dependsOn: []
|
||||||
|
variables:
|
||||||
|
entryPoint: tests/utils/shippable/nox.sh
|
||||||
|
jobs:
|
||||||
|
- template: templates/matrix.yml
|
||||||
|
parameters:
|
||||||
|
targets:
|
||||||
|
- name: rhel/10.1 + azp/1/ + sdk-dev-latest
|
||||||
|
test: ansible-test-integration-devel-rhel-10.1-azp-1
|
||||||
|
- name: rhel/10.1 + azp/2/ + sdk-dev-latest
|
||||||
|
test: ansible-test-integration-devel-rhel-10.1-azp-2
|
||||||
|
- name: rhel/10.1 + azp/3/ + sdk-dev-latest
|
||||||
|
test: ansible-test-integration-devel-rhel-10.1-azp-3
|
||||||
|
- name: rhel/10.1 + azp/4/ + sdk-dev-latest
|
||||||
|
test: ansible-test-integration-devel-rhel-10.1-azp-4
|
||||||
|
- name: rhel/10.1 + azp/5/ + sdk-dev-latest
|
||||||
|
test: ansible-test-integration-devel-rhel-10.1-azp-5
|
||||||
|
- name: rhel/9.7 + azp/1/
|
||||||
|
test: ansible-test-integration-devel-rhel-9.7-azp-1
|
||||||
|
- name: rhel/9.7 + azp/2/
|
||||||
|
test: ansible-test-integration-devel-rhel-9.7-azp-2
|
||||||
|
- name: rhel/9.7 + azp/3/
|
||||||
|
test: ansible-test-integration-devel-rhel-9.7-azp-3
|
||||||
|
- name: rhel/9.7 + azp/4/
|
||||||
|
test: ansible-test-integration-devel-rhel-9.7-azp-4
|
||||||
|
- name: rhel/9.7 + azp/5/
|
||||||
|
test: ansible-test-integration-devel-rhel-9.7-azp-5
|
||||||
|
|
||||||
- stage: Summary
|
- stage: Summary
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- Remote_devel
|
- remote_2_18
|
||||||
- Remote_2_21
|
- remote_2_19
|
||||||
- Remote_2_20
|
- remote_2_20
|
||||||
- Remote_2_19
|
- remote_2_21
|
||||||
- Remote_2_18
|
- remote_devel
|
||||||
jobs:
|
jobs:
|
||||||
- template: templates/coverage.yml
|
- template: templates/coverage.yml
|
||||||
|
|||||||
@ -105,6 +105,7 @@ include_devel = true
|
|||||||
session_name_template = "ansible-test-integration-{ansible_core}{dash_docker_short}{dash_remote}{dash_python_version}{dash_target_dashized}"
|
session_name_template = "ansible-test-integration-{ansible_core}{dash_docker_short}{dash_remote}{dash_python_version}{dash_target_dashized}"
|
||||||
display_name_template = "Ⓐ{ansible_core}{plus_docker_short}{plus_remote}{plus_py_python_version}{plus_target}{plus_force_docker_sdk_for_python_dev}{plus_force_docker_sdk_for_python_pypi}"
|
display_name_template = "Ⓐ{ansible_core}{plus_docker_short}{plus_remote}{plus_py_python_version}{plus_target}{plus_force_docker_sdk_for_python_dev}{plus_force_docker_sdk_for_python_pypi}"
|
||||||
description_template = "Run integration tests with ansible-core {ansible_core}{comma_docker_short}{comma_remote}{comma_py_python_version}{comma_target}{comma_force_docker_sdk_for_python_dev}{comma_force_docker_sdk_for_python_pypi}"
|
description_template = "Run integration tests with ansible-core {ansible_core}{comma_docker_short}{comma_remote}{comma_py_python_version}{comma_target}{comma_force_docker_sdk_for_python_dev}{comma_force_docker_sdk_for_python_pypi}"
|
||||||
|
retry_on_error = "in-ci"
|
||||||
|
|
||||||
[sessions.ansible_test_integration.ansible_vars]
|
[sessions.ansible_test_integration.ansible_vars]
|
||||||
force_docker_sdk_for_python_dev = { type = "value", value = false, template_value = "" }
|
force_docker_sdk_for_python_dev = { type = "value", value = false, template_value = "" }
|
||||||
|
|||||||
19
noxfile.py
19
noxfile.py
@ -12,6 +12,7 @@ import nox
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
import antsibull_nox
|
import antsibull_nox
|
||||||
|
from antsibull_nox.cli import run as run_antsibull_nox
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print("You need to install antsibull-nox in the same Python environment as nox.")
|
print("You need to install antsibull-nox in the same Python environment as nox.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
@ -20,6 +21,24 @@ except ImportError:
|
|||||||
antsibull_nox.load_antsibull_nox_toml()
|
antsibull_nox.load_antsibull_nox_toml()
|
||||||
|
|
||||||
|
|
||||||
|
@nox.session(name="update-azp-config", python=False)
|
||||||
|
def update_azp_config(session: nox.Session) -> None:
|
||||||
|
command = [
|
||||||
|
"antsibull-nox",
|
||||||
|
"update-azp-config",
|
||||||
|
"--exclude-tags",
|
||||||
|
"docker",
|
||||||
|
"--min-ansible-core",
|
||||||
|
"2.18",
|
||||||
|
]
|
||||||
|
if antsibull_nox.IN_CI:
|
||||||
|
command.append("--fail-on-change")
|
||||||
|
session.debug(" ".join(command))
|
||||||
|
result = run_antsibull_nox(command)
|
||||||
|
if result != 0:
|
||||||
|
session.fail(f"Execution failed with status code {result}")
|
||||||
|
|
||||||
|
|
||||||
# Allow to run the noxfile with `python noxfile.py`, `pipx run noxfile.py`, or similar.
|
# Allow to run the noxfile with `python noxfile.py`, `pipx run noxfile.py`, or similar.
|
||||||
# Requires nox >= 2025.02.09
|
# Requires nox >= 2025.02.09
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
85
tests/utils/shippable/nox.sh
Executable file
85
tests/utils/shippable/nox.sh
Executable file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
set -o pipefail -eux
|
||||||
|
|
||||||
|
nox_session="$1"
|
||||||
|
|
||||||
|
docker images ansible/ansible
|
||||||
|
docker images quay.io/ansible/*
|
||||||
|
docker ps
|
||||||
|
|
||||||
|
for container in $(docker ps --format '{{.Image}} {{.ID}}' | grep -v -e '^drydock/' -e '^quay.io/ansible/azure-pipelines-test-container:' | sed 's/^.* //'); do
|
||||||
|
docker rm -f "${container}" || true # ignore errors
|
||||||
|
done
|
||||||
|
|
||||||
|
docker ps
|
||||||
|
command -v python
|
||||||
|
python -V
|
||||||
|
|
||||||
|
function retry
|
||||||
|
{
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
for repetition in 1 2 3; do
|
||||||
|
set +e
|
||||||
|
"$@"
|
||||||
|
result=$?
|
||||||
|
set -e
|
||||||
|
if [ ${result} == 0 ]; then
|
||||||
|
return ${result}
|
||||||
|
fi
|
||||||
|
echo "@* -> ${result}"
|
||||||
|
done
|
||||||
|
echo "Command '@*' failed 3 times!"
|
||||||
|
exit 255
|
||||||
|
}
|
||||||
|
|
||||||
|
command -v pip
|
||||||
|
pip --version
|
||||||
|
pip list --disable-pip-version-check
|
||||||
|
retry pip install https://github.com/ansible-community/antsibull-nox/archive/main.tar.gz --disable-pip-version-check
|
||||||
|
|
||||||
|
export PYTHONIOENCODING='utf-8'
|
||||||
|
|
||||||
|
if [ -n "${COVERAGE:-}" ]; then
|
||||||
|
# on-demand coverage reporting triggered by setting the COVERAGE environment variable to a non-empty value
|
||||||
|
export COVERAGE="--coverage"
|
||||||
|
elif [[ "${COMMIT_MESSAGE}" =~ ci_coverage ]]; then
|
||||||
|
# on-demand coverage reporting triggered by having 'ci_coverage' in the latest commit message
|
||||||
|
export COVERAGE="--coverage"
|
||||||
|
else
|
||||||
|
# on-demand coverage reporting disabled (default behavior, always-on coverage reporting remains enabled)
|
||||||
|
export COVERAGE="--coverage-check"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${COMPLETE:-}" ]; then
|
||||||
|
# disable change detection triggered by setting the COMPLETE environment variable to a non-empty value
|
||||||
|
export ANTSIBULL_CHANGE_DETECTION=""
|
||||||
|
elif [[ "${COMMIT_MESSAGE}" =~ ci_complete ]]; then
|
||||||
|
# disable change detection triggered by having 'ci_complete' in the latest commit message
|
||||||
|
export ANTSIBULL_CHANGE_DETECTION=""
|
||||||
|
else
|
||||||
|
# enable change detection (default behavior)
|
||||||
|
export ANTSIBULL_CHANGE_DETECTION="true"
|
||||||
|
export ANTSIBULL_BASE_BRANCH="${SYSTEM_PULLREQUEST_TARGETBRANCH}"
|
||||||
|
# Create a branch for the current HEAD, which happens to be a merge commit
|
||||||
|
git checkout -b "pull-request-branch"
|
||||||
|
# Name the target branch
|
||||||
|
git branch "${SYSTEM_PULLREQUEST_TARGETBRANCH}" --track "origin/${SYSTEM_PULLREQUEST_TARGETBRANCH}"
|
||||||
|
# Show branches
|
||||||
|
git branch -vv
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${COVERAGE:-}" == "--coverage" ]]; then
|
||||||
|
export ANTSIBULL_NOX_TIMEOUT=60
|
||||||
|
else
|
||||||
|
export ANTSIBULL_NOX_TIMEOUT=50
|
||||||
|
fi
|
||||||
|
|
||||||
|
export FORCE_COLOR=1
|
||||||
|
export ANTSIBULL_NOX_IGNORE_INSTALLED_COLLECTIONS="true"
|
||||||
|
export ANTSIBULL_NOX_ALWAYS_COPY_REPO_STRUCTURE="true" # https://github.com/ansible/ansible/issues/87052
|
||||||
|
|
||||||
|
nox -e "${nox_session}" -- ${COVERAGE}
|
||||||
Loading…
Reference in New Issue
Block a user