Compare commits

..
Author SHA1 Message Date
e31ee5e39c
update ansible collections sops, docker and debops
All checks were successful
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Successful in 2m36s
/ Ansible Lint (pull_request) Successful in 2m41s
2026-09-21 22:46:50 +02:00
1024 changed files with 32646 additions and 26289 deletions

View file

@ -3,11 +3,7 @@ skip_list:
- "name[casing]"
exclude_paths:
- .ansible/
- .forgejo/
- "**/*.sops.yaml"
- ansible_collections/
- collections/
- galaxy_roles/
- docs/
- resources/

View file

@ -1,20 +1,18 @@
keys:
admins: &admin_keys
pgp: &admin_pgp_keys
- &admin_pgp_djerun EF643F59E008414882232C78FFA8331EEB7D6B70
- &admin_pgp_stb 21C9579E6503CA815A68ABD8541F9408A813C8B7
- &admin_pgp_fi 9633412309CCB83BFA39BA5F2FEF746201D7FCFE
- &admin_pgp_june 057870A2C72CD82566A3EC983695F4FCBCAE4912
- &admin_pgp_haegar F38C9D4228FC6F674E322D9C3326D914EB9B8F55
# - &admin_pgp_dario 5DA93D5C9D7320E1BD3522C79C78172B3551C9FD # expired
- &admin_pgp_echtnurich 8996B62CBD159DCADD3B6DC08BB33A8ABCF7BC4A
- &admin_pgp_c6ris B71138A6A8964A3C3B8899857B4F70C356765BAB
- &admin_pgp_lilly D2E9C0807BF681F5E164DAFC5EE1B61CD90954CD
- &admin_pgp_langoor 878FEA3CB6A6F6E7CD80ECBE28506E3585F9F533
- &admin_pgp_bitwhisker 41FFAF3D519CF5C039FBD8414BCC213729AF0E49
age: &admin_age_keys
- &admin_age_jtbx ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBQgnQAq6FUSDK8bxtYPjx3oRCAKG+xy9J3Gas2ztJk
- &admin_age_c6ris age1yubikey1qv7jkffslarpma2fxjm9gnq43xfvwdws0m6y3u58h033edwdyg0uzt8jl5n
admins:
gpg: &admin_gpg_keys
- &admin_gpg_djerun EF643F59E008414882232C78FFA8331EEB7D6B70
- &admin_gpg_stb 21C9579E6503CA815A68ABD8541F9408A813C8B7
- &admin_gpg_jtbx 18DFCE01456DAB52EA38A6584EDC64F35FA1D6A5
- &admin_gpg_fi 9633412309CCB83BFA39BA5F2FEF746201D7FCFE
- &admin_gpg_june 057870A2C72CD82566A3EC983695F4FCBCAE4912
- &admin_gpg_haegar F38C9D4228FC6F674E322D9C3326D914EB9B8F55
# - &admin_gpg_dario 5DA93D5C9D7320E1BD3522C79C78172B3551C9FD # expired
- &admin_gpg_echtnurich 8996B62CBD159DCADD3B6DC08BB33A8ABCF7BC4A
- &admin_gpg_c6ristian B71138A6A8964A3C3B8899857B4F70C356765BAB
- &admin_gpg_lilly D2E9C0807BF681F5E164DAFC5EE1B61CD90954CD
- &admin_gpg_langoor 878FEA3CB6A6F6E7CD80ECBE28506E3585F9F533
- &admin_gpg_bitwhisker 41FFAF3D519CF5C039FBD8414BCC213729AF0E49
hosts:
chaosknoten:
age: &host_chaosknoten_age_keys
@ -44,8 +42,6 @@ keys:
- &host_auth_dns_ansible_pull_age_key age18zgt4y2sd75hxnpe333zz39048ctxpr0q8a3uqh3jajjkyawsdrq8yg5ve
- &host_forgejo_runner_ansible_pull_age_key age1az0k6cadssk6r8qcqxfr8cyu5mndy59pwt8yqq6w065ew6au4ezsmg2vkf
- &host_forgejo_runner_external_ansible_pull_age_key age1pq1jqrcp3te50xugmv5wst3s9ahj0d38rfktxt43wlcqz7vnwyn3y2h7kyfr6rckrvmuk9m7yvp4efjnfsuxx6d8r9gn222r2eal5593arywrjwrgeypf745wyuvf3z2xk9tm5fgnwckftuvdggk66fph59rw69nt5dpjeewuww4vzt9gs4xelre952s7zjz56qv8tvesg2c89sp8rmy9dvhwfd6tucjhs6sjr6yp2njjra2u6w7c7f0sch3rwkw3wf2dc9su9aaa9q2f22sh5yf0fqejxa2qqpq4pg752589st5xsa5g8tpkjglj4tn35gd4hjj0xet9cjwhydmkmmkffy3nr8zdtctqu6pqsyf7aphvktryez39ru3qe7m6nvr465ffxr0ltvr85nddzxvcwpwpac64nu5tdfrxgjfqzc99vr3zxv8carpsw5evmruqlvrq6v6a4m2cwsz5gqw7nyk3jlj75kp5cnafzjn5dyrf8ppfhp5g5s34zsl7pejmmx2uuudjt7ru2y7as9mtagykrgqgt80fvp3eeh4gsmmd3ujgtp0ranq28aq9x0xdekqh49pfhhprjj6zqdfac5gxtjj736kh5jktc4ls4mjs3p33rzt6ze54uqsfept3qhua2pmugypup6hm6j2ek5sgxjnwvqyfj2l8vz4yfgkaxf699v7jqlwf7g68ang5kzqrjsu78lyardm4zen8zhrr24j334qdgs4zr8dhsfsnmvx9cdvu0swx27tcz8txs46zds9kekgmua7w7fnw3l2lf6zla956ssycac4zjy87rawr4thusxtcqgfzfzh2za9np0s34e5dwkp2l2k06cq09myxqfe7ze6a53d8sl5j43qcekh6kfvl9k0t7903q99pc35630zwm3hwxgnw354du5gngnz56skq9zx3pcnkr5eyh8r8t0dqudmvrrwmxreu6tgrklxw7yvu3zkjgt3gyjhc8kqcrevlukay45sz4k9zqxx9yrs88hzt4h52r2g74alf3cedes3atufy06q4lfq3nxdlnve0kqcwstzr6z6u7fqpqvacezdrr62ycteju6dqawkpthu0drtlxj547htfjcsnrmhgvhskwtuhk6yp7wp30p7qc5vkk8fegg6qx5kc9xs4trx7hj9xgydu7vd30hkceuxsczywjs9v2fl3svkwfypg62882yq6ltv7gfj4ajuy8ezd76g0z7juwspe7q6zs5ceshd6038tvvh2nlpjty6rg6a9qfzhgmjx9s6hynyk7xnq9zra6hxstg8p58x75hapd2mk6rapfunlnnkz5dsxjf4ud4dsvgjfjpzxcdy7sp8dzxtengrsdyu4824mqlw8p63d7m2z4mcyme4tm2qkugtdgrkyphe7akk2geukf6xkfkzd2pkdq5s3qm9fkvfkgrv6yw5kdgjak8xcgesg6tumans4fs8yrxtqlvv2z3emdvwchrjfq4xpzsj27yt4gdg8pknwz9tqpjkjxq6lysutrvwkvt2fwyj8wvv8wtmdl6fk6rsd9kq9a6wkhuq7vvrgwgj3xg2s229sprj4g2vzhy2dfesrp403gs64jqkrjuezwm4zd6uw2x4e2qkj8xqcf7c0zprdzu959x23u878vqqetgpjwt0z3kedt8l6dgpm0rf5dmrya5h3wgzfa0jjvgjphyxgxrwlrzpv4czgal933zs64tn90ks66ejjdaw4t67sch8r3q0kljeqnpdgmw0cpj6arc6k46wcqaccygczy76zt9362vslakvzqqv33tv3sjldp6qxprharmpm9uykgpx66343wuur5xj2aw0rgutpm4ztjzycn3a8d2jq2zpdzwmevezm7mkp9dmndkc3qz0kklgkxq9yehrk5ayfly97umhws0jll8qqg0r7gzxgw5vv76
- &host_matrix_sync_external_ansible_pull_age_key age1q7kz3pnfq6cvtn56rlfgs52efcvtcmaq4xny0va3x5wxj4vpgccsenwxk6
- &host_hta_ansible_pull_age_key age1n44q80zmsnq8dehnkm8g78u0ku48zafrq4vg5pzz8ft9jkqja5jsamwxhn
external:
age: &host_external_age_keys
- &host_status_ansible_pull_age_key age1p546j6whqsyfkjuf674lawrnk2ex653fuvwhcwt46gkrspkq59sqzm5y87
@ -61,234 +57,222 @@ creation_rules:
## group vars
- path_regex: "inventories/chaosknoten/group_vars/.+\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
*host_chaosknoten_age_keys
merge:
- *admin_keys
- path_regex: "inventories/external/group_vars/.+\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
*host_external_age_keys
merge:
- *admin_keys
- path_regex: "inventories/z9/group_vars/.+\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
*host_z9_age_keys
merge:
- *admin_keys
## host vars
# chaosknoten hosts
- path_regex: "inventories/chaosknoten/host_vars/acmedns\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_acmedns_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/cloud\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_cloud_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/jitsi\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_jitsi_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/keycloak\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_keycloak_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/grafana\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_grafana_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/pad\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_pad_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/ccchoir\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_ccchoir_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/pretalx\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_pretalx_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/netbox\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_netbox_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/hta\\.sops\\..+"
key_groups:
- age:
- *host_hta_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/tickets\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_tickets_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/onlyoffice\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_onlyoffice_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/zammad\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_zammad_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/ntfy\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_ntfy_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/eh22-wiki\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_eh22_wiki_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/sunders\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_sunders_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/wiki\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_wiki_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/renovate\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_renovate_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/lists\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_lists_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/mumble\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_mumble_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/public-reverse-proxy\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_public_reverse_proxy_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/spaceapiccc\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_spaceapiccc_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/draupnir\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_draupnir_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/diday-staging-runner\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_diday_staging_runner_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/auth-dns\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_auth_dns_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/forgejo-runner\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_forgejo_runner_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/forgejo-runner-external\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_forgejo_runner_external_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/matrix-sync\\.sops\\..+"
key_groups:
- age:
- *host_matrix_sync_external_ansible_pull_age_key
merge:
- *admin_keys
# external hosts
- path_regex: "inventories/external/host_vars/status\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_status_ansible_pull_age_key
merge:
- *admin_keys
# z9 hosts
- path_regex: "inventories/z9/host_vars/dooris\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_dooris_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/z9/host_vars/light\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_light_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/z9/host_vars/waybackproxy\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_waybackproxy_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/z9/host_vars/yate\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_yate_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/z9/host_vars/z9-router\\.sops\\..+"
key_groups:
- age:
- pgp:
*admin_gpg_keys
age:
- *host_z9_router_ansible_pull_age_key
merge:
- *admin_keys
# general
- path_regex: ".+\\.sops\\..+"
key_groups:
- *admin_keys
- pgp: *admin_gpg_keys
stores:
yaml:

View file

@ -1,6 +1,5 @@
rules:
brackets:
forbid: false
min-spaces-inside: 1
max-spaces-inside: 1
min-spaces-inside-empty: 1

View file

@ -2,6 +2,6 @@
inventory = ./inventories/z9/hosts.yaml
pipelining = True
vars_plugins_enabled = host_group_vars,community.sops.sops
collections_path = ./
roles_path = ./galaxy-roles
collections_path = ./ansible_collections
roles_path = ./ansible_collections
interpreter_python = python3

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -37,244 +37,116 @@ variables:
- name: coverageBranches
value: main
- name: entryPoint
value: tests/utils/shippable/shippable.sh
value: tests/utils/shippable/nox.sh
- name: prepareEntryPoint
value: tests/utils/shippable/nox-prepare.sh
- name: fetchDepth
value: 0
resources:
containers:
- container: default
image: quay.io/ansible/azure-pipelines-test-container:7.0.0
image: quay.io/ansible/azure-pipelines-test-container:8.0.0
pool: Standard
stages:
### Sanity & units
- stage: Ansible_devel
displayName: Sanity & Units devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
targets:
- name: Sanity
test: 'devel/sanity/1'
- name: Units
test: 'devel/units/1'
- stage: Ansible_2_20
displayName: Sanity & Units 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
targets:
- name: Sanity
test: '2.20/sanity/1'
- name: Units
test: '2.20/units/1'
- stage: Ansible_2_19
displayName: Sanity & Units 2.19
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
targets:
- name: Sanity
test: '2.19/sanity/1'
- name: Units
test: '2.19/units/1'
- stage: Ansible_2_18
displayName: Sanity & Units 2.18
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
targets:
- name: Sanity
test: '2.18/sanity/1'
- name: Units
test: '2.18/units/1'
### Docker
- stage: Docker_devel
displayName: Docker devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux/{0}
targets:
- name: Fedora 42
test: fedora42
- name: Ubuntu 22.04
test: ubuntu2204
- name: Ubuntu 24.04
test: ubuntu2404
- name: Alpine 3.22
test: alpine322
groups:
- 4
- 5
- stage: Docker_2_20
displayName: Docker 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.20/linux/{0}
targets:
- name: Fedora 42
test: fedora42
- name: Alpine 3.22
test: alpine322
groups:
- 4
- 5
- stage: Docker_2_19
displayName: Docker 2.19
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.19/linux/{0}
targets:
- name: Fedora 41
test: fedora41
- name: Alpine 3.21
test: alpine321
groups:
- 4
- 5
- stage: Docker_2_18
displayName: Docker 2.18
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.18/linux/{0}
targets:
- name: Fedora 40
test: fedora40
- name: Ubuntu 22.04
test: ubuntu2204
- name: Alpine 3.20
test: alpine320
groups:
- 4
- 5
### Community Docker
- stage: Docker_community_devel
displayName: Docker (community images) devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/linux-community/{0}
targets:
- name: Debian 11 Bullseye
test: debian-bullseye/3.9
- name: Debian 12 Bookworm
test: debian-bookworm/3.11
- name: Debian 13 Trixie
test: debian-13-trixie/3.13
- name: ArchLinux
test: archlinux/3.13
groups:
- 4
- 5
### Remote
- stage: Remote_devel
displayName: Remote devel
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: devel/{0}
targets:
- name: RHEL 10.0
test: rhel/10.0
- name: RHEL 9.6 with Docker SDK, urllib3, requests from sources
test: rhel/9.6-dev-latest
# For some reason, Ubuntu 24.04 is *extremely* slower than RHEL 9.6
# - name: Ubuntu 24.04
# test: ubuntu/24.04
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.6
test: rhel/9.6
groups:
- 1
- 2
- 3
- 4
- 5
- stage: Remote_2_19
- stage: remote_2_19
displayName: Remote 2.19
dependsOn: []
variables:
entryPoint: tests/utils/shippable/nox.sh
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.19/{0}
targets:
- name: RHEL 9.5
test: rhel/9.5
- 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.4
test: rhel/9.4
groups:
- 1
- 2
- 3
- 4
- 5
- name: Ubuntu 22.04 + group 1
test: ansible-test-integration-2.19-ubuntu-22.04-azp-1
- name: Ubuntu 22.04 + group 2
test: ansible-test-integration-2.19-ubuntu-22.04-azp-2
- name: Ubuntu 22.04 + group 3
test: ansible-test-integration-2.19-ubuntu-22.04-azp-3
- name: Ubuntu 22.04 + group 4
test: ansible-test-integration-2.19-ubuntu-22.04-azp-4
- name: Ubuntu 22.04 + group 5
test: ansible-test-integration-2.19-ubuntu-22.04-azp-5
## Finally
- stage: remote_2_20
displayName: Remote 2.20
dependsOn: []
variables:
entryPoint: tests/utils/shippable/nox.sh
jobs:
- template: templates/matrix.yml
parameters:
targets:
- name: RHEL 9.7 + group 1
test: ansible-test-integration-2.20-rhel-9.7-azp-1
- name: RHEL 9.7 + group 2
test: ansible-test-integration-2.20-rhel-9.7-azp-2
- name: RHEL 9.7 + group 3
test: ansible-test-integration-2.20-rhel-9.7-azp-3
- name: RHEL 9.7 + group 4
test: ansible-test-integration-2.20-rhel-9.7-azp-4
- name: RHEL 9.7 + group 5
test: ansible-test-integration-2.20-rhel-9.7-azp-5
- stage: remote_2_21
displayName: Remote 2.21
dependsOn: []
variables:
entryPoint: tests/utils/shippable/nox.sh
jobs:
- template: templates/matrix.yml
parameters:
targets:
- name: RHEL 10.1 + group 1
test: ansible-test-integration-2.21-rhel-10.1-azp-1
- name: RHEL 10.1 + group 2
test: ansible-test-integration-2.21-rhel-10.1-azp-2
- name: RHEL 10.1 + group 3
test: ansible-test-integration-2.21-rhel-10.1-azp-3
- name: RHEL 10.1 + group 4
test: ansible-test-integration-2.21-rhel-10.1-azp-4
- name: RHEL 10.1 + group 5
test: ansible-test-integration-2.21-rhel-10.1-azp-5
- stage: remote_devel
displayName: Remote devel
dependsOn: []
variables:
entryPoint: tests/utils/shippable/nox.sh
jobs:
- template: templates/matrix.yml
parameters:
targets:
- name: RHEL 10.2 + group 1 + sdk-dev-latest
test: ansible-test-integration-devel-rhel-10.2-azp-1
- name: RHEL 10.2 + group 2 + sdk-dev-latest
test: ansible-test-integration-devel-rhel-10.2-azp-2
- name: RHEL 10.2 + group 3 + sdk-dev-latest
test: ansible-test-integration-devel-rhel-10.2-azp-3
- name: RHEL 10.2 + group 4 + sdk-dev-latest
test: ansible-test-integration-devel-rhel-10.2-azp-4
- name: RHEL 10.2 + group 5 + sdk-dev-latest
test: ansible-test-integration-devel-rhel-10.2-azp-5
- name: RHEL 9.8 + group 1
test: ansible-test-integration-devel-rhel-9.8-azp-1
- name: RHEL 9.8 + group 2
test: ansible-test-integration-devel-rhel-9.8-azp-2
- name: RHEL 9.8 + group 3
test: ansible-test-integration-devel-rhel-9.8-azp-3
- name: RHEL 9.8 + group 4
test: ansible-test-integration-devel-rhel-9.8-azp-4
- name: RHEL 9.8 + group 5
test: ansible-test-integration-devel-rhel-9.8-azp-5
- stage: Summary
condition: succeededOrFailed()
dependsOn:
- Ansible_devel
- Ansible_2_20
- Ansible_2_19
- Ansible_2_18
- Remote_devel
- Remote_2_20
- Remote_2_19
- Remote_2_18
- Docker_devel
- Docker_2_20
- Docker_2_19
- Docker_2_18
- Docker_community_devel
- remote_2_19
- remote_2_20
- remote_2_21
- remote_devel
jobs:
- template: templates/coverage.yml

View file

@ -1,10 +1,10 @@
#!/usr/bin/env bash
# Aggregate code coverage results for later processing.
# 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
# Aggregate code coverage results for later processing.
set -o pipefail -eu
agent_temp_directory="$1"
@ -13,10 +13,6 @@ PATH="${PWD}/bin:${PATH}"
mkdir "${agent_temp_directory}/coverage/"
if [[ "$(ansible --version)" =~ \ 2\.9\. ]]; then
exit
fi
options=(--venv --venv-system-site-packages --color -v)
ansible-test coverage combine --group-by command --export "${agent_temp_directory}/coverage/" "${options[@]}"

View file

@ -11,8 +11,7 @@ Keep in mind that Azure Pipelines does not enforce unique job display names (onl
It is up to pipeline authors to avoid name collisions when deviating from the recommended format.
"""
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from __future__ import annotations
import os
import re
@ -24,12 +23,12 @@ def main():
"""Main program entry point."""
source_directory = sys.argv[1]
if '/ansible_collections/' in os.getcwd():
if "/ansible_collections/" in os.getcwd():
output_path = "tests/output"
else:
output_path = "test/results"
destination_directory = os.path.join(output_path, 'coverage')
destination_directory = os.path.join(output_path, "coverage")
if not os.path.exists(destination_directory):
os.makedirs(destination_directory)
@ -38,27 +37,27 @@ def main():
count = 0
for name in os.listdir(source_directory):
match = re.search('^Coverage (?P<attempt>[0-9]+) (?P<label>.+)$', name)
label = match.group('label')
attempt = int(match.group('attempt'))
match = re.search("^Coverage (?P<attempt>[0-9]+) (?P<label>.+)$", name)
label = match.group("label")
attempt = int(match.group("attempt"))
jobs[label] = max(attempt, jobs.get(label, 0))
for label, attempt in jobs.items():
name = 'Coverage {attempt} {label}'.format(label=label, attempt=attempt)
name = f"Coverage {attempt} {label}"
source = os.path.join(source_directory, name)
source_files = os.listdir(source)
for source_file in source_files:
source_path = os.path.join(source, source_file)
destination_path = os.path.join(destination_directory, source_file + '.' + label)
print('"%s" -> "%s"' % (source_path, destination_path))
destination_path = os.path.join(destination_directory, source_file + "." + label)
print(f'"{source_path}" -> "{destination_path}"')
shutil.copyfile(source_path, destination_path)
count += 1
print('Coverage file count: %d' % count)
print('##vso[task.setVariable variable=coverageFileCount]%d' % count)
print('##vso[task.setVariable variable=outputPath]%s' % output_path)
print(f"Coverage file count: {count}")
print(f"##vso[task.setVariable variable=coverageFileCount]{count}")
print(f"##vso[task.setVariable variable=outputPath]{output_path}")
if __name__ == '__main__':
if __name__ == "__main__":
main()

View file

@ -1,10 +1,10 @@
#!/usr/bin/env bash
# Check the test results and set variables for use in later steps.
# 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
# Check the test results and set variables for use in later steps.
set -o pipefail -eu
if [[ "$PWD" =~ /ansible_collections/ ]]; then

View file

@ -15,7 +15,6 @@ import pathlib
import shutil
import subprocess
import tempfile
import typing as t
import urllib.request
@ -23,7 +22,7 @@ import urllib.request
class CoverageFile:
name: str
path: pathlib.Path
flags: t.List[str]
flags: list[str]
@dataclasses.dataclass(frozen=True)
@ -34,8 +33,8 @@ class Args:
def parse_args() -> Args:
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--dry-run', action='store_true')
parser.add_argument('path', type=pathlib.Path)
parser.add_argument("-n", "--dry-run", action="store_true")
parser.add_argument("path", type=pathlib.Path)
args = parser.parse_args()
@ -46,32 +45,36 @@ def parse_args() -> Args:
return Args(**kwargs)
def process_files(directory: pathlib.Path) -> t.Tuple[CoverageFile, ...]:
def process_files(directory: pathlib.Path) -> tuple[CoverageFile, ...]:
processed = []
for file in directory.joinpath('reports').glob('coverage*.xml'):
name = file.stem.replace('coverage=', '')
for file in directory.joinpath("reports").glob("coverage*.xml"):
name = file.stem.replace("coverage=", "")
# Get flags from name
flags = name.replace('-powershell', '').split('=') # Drop '-powershell' suffix
flags = [flag if not flag.startswith('stub') else flag.split('-')[0] for flag in flags] # Remove "-01" from stub files
flags = name.replace("-powershell", "").split("=") # Drop '-powershell' suffix
flags = [
flag if not flag.startswith("stub") else flag.split("-")[0] for flag in flags
] # Remove "-01" from stub files
processed.append(CoverageFile(name, file, flags))
return tuple(processed)
def upload_files(codecov_bin: pathlib.Path, files: t.Tuple[CoverageFile, ...], dry_run: bool = False) -> None:
def upload_files(codecov_bin: pathlib.Path, files: tuple[CoverageFile, ...], dry_run: bool = False) -> None:
for file in files:
cmd = [
str(codecov_bin),
'--name', file.name,
'--file', str(file.path),
"--name",
file.name,
"--file",
str(file.path),
]
for flag in file.flags:
cmd.extend(['--flags', flag])
cmd.extend(["--flags", flag])
if dry_run:
print(f'DRY-RUN: Would run command: {cmd}')
print(f"DRY-RUN: Would run command: {cmd}")
continue
subprocess.run(cmd, check=True)
@ -79,11 +82,11 @@ def upload_files(codecov_bin: pathlib.Path, files: t.Tuple[CoverageFile, ...], d
def download_file(url: str, dest: pathlib.Path, flags: int, dry_run: bool = False) -> None:
if dry_run:
print(f'DRY-RUN: Would download {url} to {dest} and set mode to {flags:o}')
print(f"DRY-RUN: Would download {url} to {dest} and set mode to {flags:o}")
return
with urllib.request.urlopen(url) as resp:
with dest.open('w+b') as f:
with dest.open("w+b") as f:
# Read data in chunks rather than all at once
shutil.copyfileobj(resp, f, 64 * 1024)
@ -92,14 +95,14 @@ def download_file(url: str, dest: pathlib.Path, flags: int, dry_run: bool = Fals
def main():
args = parse_args()
url = 'https://ansible-ci-files.s3.amazonaws.com/codecov/linux/codecov'
with tempfile.TemporaryDirectory(prefix='codecov-') as tmpdir:
codecov_bin = pathlib.Path(tmpdir) / 'codecov'
url = "https://ansible-ci-files.s3.amazonaws.com/codecov/linux/codecov"
with tempfile.TemporaryDirectory(prefix="codecov-") as tmpdir:
codecov_bin = pathlib.Path(tmpdir) / "codecov"
download_file(url, codecov_bin, 0o755, args.dry_run)
files = process_files(args.path)
upload_files(codecov_bin, files, args.dry_run)
if __name__ == '__main__':
if __name__ == "__main__":
main()

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