Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ansible-core-2.18 for
openSUSE:Factory checked in at 2025-12-11 18:41:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansible-core-2.18 (Old)
and /work/SRC/openSUSE:Factory/.ansible-core-2.18.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansible-core-2.18"
Thu Dec 11 18:41:02 2025 rev:4 rq:1322167 version:2.18.12
Changes:
--------
--- /work/SRC/openSUSE:Factory/ansible-core-2.18/ansible-core-2.18.changes
2025-11-06 18:13:48.148931853 +0100
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.18.new.1939/ansible-core-2.18.changes
2025-12-11 18:44:12.316692848 +0100
@@ -1,0 +2,12 @@
+Thu Dec 11 08:24:57 UTC 2025 - Johannes Kastl
<[email protected]>
+
+- update to 2.18.12:
+ * Bugfixes
+ - Variable loading now uses file source instead of variables
+ when invalidly formmated vars file is loaded.
+ - ansible-test - The runtime-metadata sanity test now ignores
+ pre-release and build identifiers in collection versions.
+ This prevents errors if a tombstone version is X.0.0, while
+ the collection's version is X.0.0-prerelease (#85193)."
+
+-------------------------------------------------------------------
Old:
----
ansible_core-2.18.11.tar.gz
ansible_core-2.18.11.tar.gz.sha256
New:
----
ansible_core-2.18.12.tar.gz
ansible_core-2.18.12.tar.gz.sha256
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ansible-core-2.18.spec ++++++
--- /var/tmp/diff_new_pack.ccoqfO/_old 2025-12-11 18:44:13.968762260 +0100
+++ /var/tmp/diff_new_pack.ccoqfO/_new 2025-12-11 18:44:13.980762765 +0100
@@ -43,7 +43,7 @@
%endif
Name: ansible-core-2.18
-Version: 2.18.11
+Version: 2.18.12
Release: 0
Summary: Radically simple IT automation
License: GPL-3.0-or-later
++++++ ansible_core-2.18.11.tar.gz -> ansible_core-2.18.12.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.11/PKG-INFO
new/ansible_core-2.18.12/PKG-INFO
--- old/ansible_core-2.18.11/PKG-INFO 2025-11-05 00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/PKG-INFO 2025-12-09 17:45:08.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: ansible-core
-Version: 2.18.11
+Version: 2.18.12
Summary: Radically simple IT automation
Author: Ansible Project
Project-URL: Homepage, https://ansible.com/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.11/ansible_core.egg-info/PKG-INFO
new/ansible_core-2.18.12/ansible_core.egg-info/PKG-INFO
--- old/ansible_core-2.18.11/ansible_core.egg-info/PKG-INFO 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/ansible_core.egg-info/PKG-INFO 2025-12-09
17:45:08.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: ansible-core
-Version: 2.18.11
+Version: 2.18.12
Summary: Radically simple IT automation
Author: Ansible Project
Project-URL: Homepage, https://ansible.com/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/ansible_core.egg-info/SOURCES.txt
new/ansible_core-2.18.12/ansible_core.egg-info/SOURCES.txt
--- old/ansible_core-2.18.11/ansible_core.egg-info/SOURCES.txt 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/ansible_core.egg-info/SOURCES.txt 2025-12-09
17:45:08.000000000 +0100
@@ -1085,10 +1085,13 @@
test/integration/targets/ansible-test-sanity-replace-urlopen/ansible_collections/ns/col/plugins/modules/check-me.py
test/integration/targets/ansible-test-sanity-runtime-metadata/aliases
test/integration/targets/ansible-test-sanity-runtime-metadata/expected-no_version.txt
+test/integration/targets/ansible-test-sanity-runtime-metadata/expected-prerelease.txt
test/integration/targets/ansible-test-sanity-runtime-metadata/expected-version.txt
test/integration/targets/ansible-test-sanity-runtime-metadata/runme.sh
test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/no_version/galaxy.yml
test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/no_version/meta/runtime.yml
+test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/galaxy.yml
+test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/meta/runtime.yml
test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/version/galaxy.yml
test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/version/meta/runtime.yml
test/integration/targets/ansible-test-sanity-shebang/aliases
@@ -3887,13 +3890,15 @@
test/integration/targets/user/tasks/test_umask.yml
test/integration/targets/user/vars/main.yml
test/integration/targets/var_blending/aliases
+test/integration/targets/var_blending/error_handling.yml
test/integration/targets/var_blending/inventory
test/integration/targets/var_blending/runme.sh
+test/integration/targets/var_blending/supersecretvaultsecret
test/integration/targets/var_blending/test_var_blending.yml
test/integration/targets/var_blending/test_vars.yml
test/integration/targets/var_blending/vars_file.yml
test/integration/targets/var_blending/group_vars/all
-test/integration/targets/var_blending/group_vars/local
+test/integration/targets/var_blending/group_vars/local/main.yml
test/integration/targets/var_blending/host_vars/testhost
test/integration/targets/var_blending/roles/test_var_blending/defaults/main.yml
test/integration/targets/var_blending/roles/test_var_blending/files/foo.txt
@@ -3901,6 +3906,7 @@
test/integration/targets/var_blending/roles/test_var_blending/templates/foo.j2
test/integration/targets/var_blending/roles/test_var_blending/vars/main.yml
test/integration/targets/var_blending/roles/test_var_blending/vars/more_vars.yml
+test/integration/targets/var_blending/vars/bad_vault.yml
test/integration/targets/var_inheritance/aliases
test/integration/targets/var_inheritance/tasks/main.yml
test/integration/targets/var_precedence/aliases
@@ -4472,6 +4478,7 @@
test/units/ansible_test/test_diff.py
test/units/ansible_test/_internal/__init__.py
test/units/ansible_test/_internal/test_util.py
+test/units/ansible_test/_internal/ci/test_azp.py
test/units/ansible_test/diff/add_binary_file.diff
test/units/ansible_test/diff/add_text_file.diff
test/units/ansible_test/diff/add_trailing_newline.diff
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.11/changelogs/CHANGELOG-v2.18.rst
new/ansible_core-2.18.12/changelogs/CHANGELOG-v2.18.rst
--- old/ansible_core-2.18.11/changelogs/CHANGELOG-v2.18.rst 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/changelogs/CHANGELOG-v2.18.rst 2025-12-09
17:45:08.000000000 +0100
@@ -4,6 +4,21 @@
.. contents:: Topics
+v2.18.12
+========
+
+Release Summary
+---------------
+
+| Release Date: 2025-12-09
+| `Porting Guide
<https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__
+
+Bugfixes
+--------
+
+- Variable loading now uses file source instead of variables when invalidly
formmated vars file is loaded.
+- ansible-test - The runtime-metadata sanity test now ignores pre-release and
build identifiers in collection versions. This prevents errors if a tombstone
version is ``X.0.0``, while the collection's version is ``X.0.0-prerelease``
(https://github.com/ansible/ansible/issues/85193)."
+
v2.18.11
========
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.11/changelogs/changelog.yaml
new/ansible_core-2.18.12/changelogs/changelog.yaml
--- old/ansible_core-2.18.11/changelogs/changelog.yaml 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/changelogs/changelog.yaml 2025-12-09
17:45:08.000000000 +0100
@@ -678,6 +678,37 @@
- 2.18.11rc1_summary.yaml
- 85361-collection-name-from-path-none.yml
release_date: '2025-10-29'
+ 2.18.12:
+ changes:
+ release_summary: '| Release Date: 2025-12-09
+
+ | `Porting Guide
<https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__
+
+ '
+ codename: Fool in the Rain
+ fragments:
+ - 2.18.12_summary.yaml
+ release_date: '2025-12-09'
+ 2.18.12rc1:
+ changes:
+ bugfixes:
+ - Variable loading now uses file source instead of variables when
invalidly
+ formmated vars file is loaded.
+ - ansible-test - The runtime-metadata sanity test now ignores
pre-release and
+ build identifiers in collection versions. This prevents errors if a
tombstone
+ version is ``X.0.0``, while the collection's version is
``X.0.0-prerelease``
+ (https://github.com/ansible/ansible/issues/85193)."
+ release_summary: '| Release Date: 2025-12-02
+
+ | `Porting Guide
<https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__
+
+ '
+ codename: Fool in the Rain
+ fragments:
+ - 2.18.12rc1_summary.yaml
+ - 85193-runtime-metadata.yml
+ - varloaderror.yml
+ release_date: '2025-12-02'
2.18.1rc1:
changes:
bugfixes:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/lib/ansible/module_utils/ansible_release.py
new/ansible_core-2.18.12/lib/ansible/module_utils/ansible_release.py
--- old/ansible_core-2.18.11/lib/ansible/module_utils/ansible_release.py
2025-11-05 00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/lib/ansible/module_utils/ansible_release.py
2025-12-09 17:45:08.000000000 +0100
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.18.11'
+__version__ = '2.18.12'
__author__ = 'Ansible, Inc.'
__codename__ = "Fool in the Rain"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/lib/ansible/plugins/vars/host_group_vars.py
new/ansible_core-2.18.12/lib/ansible/plugins/vars/host_group_vars.py
--- old/ansible_core-2.18.11/lib/ansible/plugins/vars/host_group_vars.py
2025-11-05 00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/lib/ansible/plugins/vars/host_group_vars.py
2025-12-09 17:45:08.000000000 +0100
@@ -53,7 +53,7 @@
'''
import os
-from ansible.errors import AnsibleParserError
+from ansible.errors import AnsibleError, AnsibleParserError
from ansible.module_utils.common.text.converters import to_native
from ansible.plugins.vars import BaseVarsPlugin
from ansible.utils.path import basedir
@@ -75,7 +75,10 @@
for found in found_files:
new_data = loader.load_from_file(found, cache='all', unsafe=True)
if new_data: # ignore empty files
- data = combine_vars(data, new_data)
+ try:
+ data = combine_vars(data, new_data)
+ except AnsibleError as e:
+ raise AnsibleParserError("Could not process '%s'." %
found, orig_exc=e)
return data
def get_vars(self, loader, path, entities, cache=True):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.11/lib/ansible/release.py
new/ansible_core-2.18.12/lib/ansible/release.py
--- old/ansible_core-2.18.11/lib/ansible/release.py 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/lib/ansible/release.py 2025-12-09
17:45:08.000000000 +0100
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.18.11'
+__version__ = '2.18.12'
__author__ = 'Ansible, Inc.'
__codename__ = "Fool in the Rain"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.11/lib/ansible/utils/vars.py
new/ansible_core-2.18.12/lib/ansible/utils/vars.py
--- old/ansible_core-2.18.11/lib/ansible/utils/vars.py 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/lib/ansible/utils/vars.py 2025-12-09
17:45:08.000000000 +0100
@@ -69,9 +69,7 @@
myvars.append(dumps(x))
except Exception:
myvars.append(to_native(x))
- raise AnsibleError("failed to combine variables, expected dicts but
got a '{0}' and a '{1}': \n{2}\n{3}".format(
- a.__class__.__name__, b.__class__.__name__, myvars[0], myvars[1])
- )
+ raise AnsibleError("failed to combine variables, expected dicts but
got a '{0}' and a '{1}'.".format(a.__class__.__name__, b.__class__.__name__))
def combine_vars(a, b, merge=None):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.11/lib/ansible/vars/manager.py
new/ansible_core-2.18.12/lib/ansible/vars/manager.py
--- old/ansible_core-2.18.11/lib/ansible/vars/manager.py 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/lib/ansible/vars/manager.py 2025-12-09
17:45:08.000000000 +0100
@@ -60,7 +60,7 @@
for item in data:
if not isinstance(item, MutableMapping):
- raise AnsibleError("variable files must contain either a
dictionary of variables, or a list of dictionaries. Got: %s (%s)" % (a,
type(a)))
+ raise AnsibleError("variable files must contain either a
dictionary of variables, or a list of dictionaries. Got: %s " % (type(a)))
return data
@@ -367,6 +367,8 @@
continue
except AnsibleParserError:
raise
+ except AnsibleError as e:
+ raise AnsibleError("Invalid vars_file '%s'." %
found_file, orig_exc=e)
except (UndefinedError, AnsibleUndefinedVariable):
if host is not None and
self._fact_cache.get(host.name, dict()).get('module_setup') and task is not
None:
raise AnsibleUndefinedVariable("an undefined
variable was found when attempting to template the vars_files item '%s'"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/galaxy.yml
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/galaxy.yml
---
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/galaxy.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/galaxy.yml
2025-12-09 17:45:08.000000000 +0100
@@ -0,0 +1,5 @@
+namespace: ns
+name: prerelease
+version: 3.0.0-prerelease
+authors:
+ - Ansible
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/meta/runtime.yml
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/meta/runtime.yml
---
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/meta/runtime.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/ansible_collections/ns/prerelease/meta/runtime.yml
2025-12-09 17:45:08.000000000 +0100
@@ -0,0 +1,25 @@
+plugin_routing:
+ modules:
+ deprecated_module:
+ deprecation:
+ removal_version: 4.0.0
+ warning_text: Will no longer be there.
+ tombstoned_module:
+ tombstone:
+ removal_version: 3.0.0
+ warning_text: Is no longer there.
+ tombstoned_module_with_prerelease_version:
+ tombstone:
+ removal_version: 3.0.0-a1
+ warning_text: Is no longer there.
+ tombstoned_module_with_prerelease_and_build_meta_version:
+ tombstone:
+ removal_version: 3.0.0-a1+bla.test.1234567
+ warning_text: Is no longer there.
+ tombstoned_module_with_build_meta_version:
+ tombstone:
+ removal_version: 3.0.0+bla.test.1234567
+ warning_text: Is no longer there.
+ module_with_invalid_removal_version:
+ tombstone:
+ removal_version: 4.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/expected-prerelease.txt
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/expected-prerelease.txt
---
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/expected-prerelease.txt
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/expected-prerelease.txt
2025-12-09 17:45:08.000000000 +0100
@@ -0,0 +1 @@
+meta/runtime.yml:0:0: The tombstone removal_version ('4.0.0') must not be
after the current version (SemanticVersion('3.0.0')) for dictionary value @
data['plugin_routing']['modules']['module_with_invalid_removal_version']['tombstone']['removal_version'].
Got '4.0.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/runme.sh
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/runme.sh
---
old/ansible_core-2.18.11/test/integration/targets/ansible-test-sanity-runtime-metadata/runme.sh
2025-11-05 00:26:58.000000000 +0100
+++
new/ansible_core-2.18.12/test/integration/targets/ansible-test-sanity-runtime-metadata/runme.sh
2025-12-09 17:45:08.000000000 +0100
@@ -13,3 +13,8 @@
ansible-test sanity --test runtime-metadata --color --truncate 0 --failure-ok
--lint "${@}" 1> actual-stdout.txt 2> actual-stderr.txt
diff -u "${TEST_DIR}/expected-no_version.txt" actual-stdout.txt
grep -F -f "${TEST_DIR}/expected-no_version.txt" actual-stderr.txt
+
+cd ../prerelease
+ansible-test sanity --test runtime-metadata --color --truncate 0 --failure-ok
--lint "${@}" 1> actual-stdout.txt 2> actual-stderr.txt
+diff -u "${TEST_DIR}/expected-prerelease.txt" actual-stdout.txt
+grep -F -f "${TEST_DIR}/expected-prerelease.txt" actual-stderr.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/iptables/tasks/main.yml
new/ansible_core-2.18.12/test/integration/targets/iptables/tasks/main.yml
--- old/ansible_core-2.18.11/test/integration/targets/iptables/tasks/main.yml
2025-11-05 00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/test/integration/targets/iptables/tasks/main.yml
2025-12-09 17:45:08.000000000 +0100
@@ -35,4 +35,17 @@
# prevent attempts to upgrade the kernel and install kernel modules for a
non-running kernel version
exclude: "{{ 'kernel-core' if ansible_distribution == 'RedHat' else omit
}}"
+- name: install xt_comment for iptables `-m comment` tests on RHEL 10
+ dnf:
+ name:
+ - kernel-modules-extra-{{ ansible_facts.kernel }}
+ state: present
+ exclude:
+ # prevent attempts to upgrade the kernel and install kernel modules for a
non-running kernel version
+ - kernel-core
+ when:
+ - ansible_distribution == 'RedHat'
+ - >-
+ ansible_distribution_major_version | int >= 10
+
- import_tasks: chain_management.yml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/var_blending/error_handling.yml
new/ansible_core-2.18.12/test/integration/targets/var_blending/error_handling.yml
---
old/ansible_core-2.18.11/test/integration/targets/var_blending/error_handling.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.12/test/integration/targets/var_blending/error_handling.yml
2025-12-09 17:45:08.000000000 +0100
@@ -0,0 +1,14 @@
+- hosts: all
+ name: test vault errors
+ gather_facts: false
+ tasks:
+
+ - name: bad included vault
+ include_vars:
+ file: vars/bad_vault.yml
+ tags: includevault, never
+ no_log: false
+
+ - name: Show bad vault contents ... if i get here, it was a good vault!
+ debug:
+ msg: "{{ test_password }} {{ jdbc_test_password }} {{ api_test_password
}}"
File
old/ansible_core-2.18.11/test/integration/targets/var_blending/group_vars/local
is a regular file while file
new/ansible_core-2.18.12/test/integration/targets/var_blending/group_vars/local
is a directory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/var_blending/runme.sh
new/ansible_core-2.18.12/test/integration/targets/var_blending/runme.sh
--- old/ansible_core-2.18.11/test/integration/targets/var_blending/runme.sh
2025-11-05 00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/test/integration/targets/var_blending/runme.sh
2025-12-09 17:45:08.000000000 +0100
@@ -3,3 +3,12 @@
set -eux
ansible-playbook test_var_blending.yml -i inventory -e @test_vars.yml -v "$@"
+
+# check bad vault file erros
+[ "$(ansible-playbook error_handling.yml -i inventory --vault-password-file
supersecretvaultsecret -e @vars/bad_vault.yml 2>&1 | grep -c 'dummy')" -eq "0" ]
+[ "$(ansible-playbook error_handling.yml -i inventory --vault-password-file
supersecretvaultsecret --tags includevault 2>&1 | grep -c 'dummy')" -eq "0" ]
+
+# setup group file for bad vault tests
+trap 'rm group_vars/local/bad_vault.yml' EXIT
+ln -s "${PWD}/vars/bad_vault.yml" group_vars/local/
+[ "$(ansible-playbook error_handling.yml -i inventory --vault-password-file
supersecretvaultsecret 2>&1 | grep -c 'dummy')" -eq "0" ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/var_blending/supersecretvaultsecret
new/ansible_core-2.18.12/test/integration/targets/var_blending/supersecretvaultsecret
---
old/ansible_core-2.18.11/test/integration/targets/var_blending/supersecretvaultsecret
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.12/test/integration/targets/var_blending/supersecretvaultsecret
2025-12-09 17:45:08.000000000 +0100
@@ -0,0 +1 @@
+test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/integration/targets/var_blending/vars/bad_vault.yml
new/ansible_core-2.18.12/test/integration/targets/var_blending/vars/bad_vault.yml
---
old/ansible_core-2.18.11/test/integration/targets/var_blending/vars/bad_vault.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.12/test/integration/targets/var_blending/vars/bad_vault.yml
2025-12-09 17:45:08.000000000 +0100
@@ -0,0 +1,10 @@
+$ANSIBLE_VAULT;1.1;AES256
+65616232393566313961313431386633366639386133383230656230333934656366363636393730
+3266313739663639636161373033333865303461343936370a356463393635623664316464353061
+63396639643331303231616336663562303764653733326532316139643036336436396565653531
+3836383032626262620a316666363164626537346663383333376330623339633762363932613537
+32663462613532646139633364363136656132346661373331363164356162313762343337393666
+38653864363938316534333438643761623264376535336233656630376430346366333262313532
+33366662663137306431623464303561383730336466613166386136656364306436343032343631
+37396234633230626263373435623731616664653939343630393935626461396230663734373861
+3634
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/lib/ansible_test/_internal/ci/azp.py
new/ansible_core-2.18.12/test/lib/ansible_test/_internal/ci/azp.py
--- old/ansible_core-2.18.11/test/lib/ansible_test/_internal/ci/azp.py
2025-11-05 00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/test/lib/ansible_test/_internal/ci/azp.py
2025-12-09 17:45:08.000000000 +0100
@@ -1,6 +1,7 @@
"""Support code for working with Azure Pipelines."""
from __future__ import annotations
+import json
import os
import tempfile
import uuid
@@ -26,6 +27,7 @@
from ..util import (
display,
+ ApplicationError,
MissingEnvironmentVariable,
)
@@ -219,6 +221,19 @@
self.diff = []
def get_successful_merge_run_commits(self) -> set[str]:
+ """
+ Return a set of recent successful merge commits from Azure Pipelines.
+ A warning will be displayed and no commits returned if an error occurs.
+ """
+ try:
+ commits = self._get_successful_merge_run_commits()
+ except ApplicationError as ex:
+ commits = set()
+ display.warning(f'Cannot determine changes. All tests will be
executed. Reason: {ex}')
+
+ return commits
+
+ def _get_successful_merge_run_commits(self) -> set[str]:
"""Return a set of recent successful merge commits from Azure
Pipelines."""
parameters = dict(
maxBuildsPerDefinition=100, # max 5000
@@ -229,20 +244,29 @@
repositoryId='%s/%s' % (self.org, self.project),
)
- url = '%s%s/_apis/build/builds?api-version=6.0&%s' % (self.org_uri,
self.project, urllib.parse.urlencode(parameters))
+ url = '%s%s/_apis/build/builds?api-version=7.1&%s' % (self.org_uri,
self.project, urllib.parse.urlencode(parameters))
http = HttpClient(self.args, always=True)
response = http.get(url)
- # noinspection PyBroadException
try:
- result = response.json()
- except Exception: # pylint: disable=broad-except
- # most likely due to a private project, which returns an HTTP 203
response with HTML
- display.warning('Unable to find project. Cannot determine changes.
All tests will be executed.')
- return set()
+ result = json.loads(response.response)
+ result_type = 'JSON'
+ except json.JSONDecodeError:
+ result = ...
+ result_type = 'Non-JSON'
- commits = set(build['sourceVersion'] for build in result['value'])
+ result_description = f'HTTP {response.status_code} {result_type}
result'
+
+ if response.status_code != 200 or result is ...:
+ raise ApplicationError(f'Unable to find project due to
{result_description}.')
+
+ try:
+ commits = {build['sourceVersion'] for build in result['value']}
+ except KeyError as ex:
+ raise ApplicationError(f'Missing {ex.args[0]!r} key in response
from {result_description}.') from ex
+ except (ValueError, TypeError) as ex:
+ raise ApplicationError(f'Unexpected response format from
{result_description}: {ex}') from ex
return commits
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/lib/ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py
new/ansible_core-2.18.12/test/lib/ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py
---
old/ansible_core-2.18.11/test/lib/ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py
2025-11-05 00:26:58.000000000 +0100
+++
new/ansible_core-2.18.12/test/lib/ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py
2025-12-09 17:45:08.000000000 +0100
@@ -124,7 +124,7 @@
try:
result = collection_detail.read_manifest_json('.') or
collection_detail.read_galaxy_yml('.')
version = SemanticVersion()
- version.parse(result['version'])
+ version.parse(result['version'].split('-', 1)[0].split('+', 1)[0])
return version
except Exception: # pylint: disable=broad-except
# We do not care why it fails, in case we cannot get the version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/sanity/code-smell/mypy/ansible-core.ini
new/ansible_core-2.18.12/test/sanity/code-smell/mypy/ansible-core.ini
--- old/ansible_core-2.18.11/test/sanity/code-smell/mypy/ansible-core.ini
2025-11-05 00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/test/sanity/code-smell/mypy/ansible-core.ini
2025-12-09 17:45:08.000000000 +0100
@@ -21,6 +21,9 @@
[mypy-ansible_test.*]
ignore_missing_imports = True
+[mypy-pytest_mock]
+ignore_missing_imports = True
+
[mypy-ansible.module_utils.six.moves.*]
ignore_missing_imports = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/units/ansible_test/_internal/ci/test_azp.py
new/ansible_core-2.18.12/test/units/ansible_test/_internal/ci/test_azp.py
--- old/ansible_core-2.18.11/test/units/ansible_test/_internal/ci/test_azp.py
1970-01-01 01:00:00.000000000 +0100
+++ new/ansible_core-2.18.12/test/units/ansible_test/_internal/ci/test_azp.py
2025-12-09 17:45:08.000000000 +0100
@@ -0,0 +1,96 @@
+from __future__ import annotations
+
+import argparse
+import json
+import os
+import typing as t
+
+import pytest
+import pytest_mock
+
+if t.TYPE_CHECKING:
+ from ansible_test._internal.ci.azp import AzurePipelinesChanges
+
+
+def create_azure_pipelines_changes(mocker: pytest_mock.MockerFixture) ->
AzurePipelinesChanges:
+ """Prepare an AzurePipelinesChanges instance for testing."""
+ from ansible_test._internal.ci.azp import AzurePipelinesChanges
+ from ansible_test._internal.config import CommonConfig
+
+ namespace = argparse.Namespace()
+ namespace.color = False
+ namespace.explain = False
+ namespace.verbosity = False
+ namespace.debug = False
+ namespace.truncate = False
+ namespace.redact = False
+ namespace.display_traceback = False
+
+ config = CommonConfig(namespace, 'sanity')
+
+ env = dict(
+ HOME=os.environ['HOME'],
+ SYSTEM_COLLECTIONURI='https://dev.azure.com/ansible/',
+ SYSTEM_TEAMPROJECT='ansible',
+ BUILD_REPOSITORY_PROVIDER='GitHub',
+ BUILD_SOURCEBRANCH='devel',
+ BUILD_SOURCEBRANCHNAME='devel',
+ )
+
+ mocker.patch.dict(os.environ, env, clear=True)
+
+ return AzurePipelinesChanges(config)
+
+
[email protected]("status_code,response,expected_commits,expected_warning",
(
+ # valid 200 responses
+ (200, dict(value=[]), None, None),
+ (200, dict(value=[dict(sourceVersion='abc')]), {'abc'}, None),
+ # invalid 200 responses
+ (200, 'not-json', None, "Unable to find project due to HTTP 200 Non-JSON
result."),
+ (200, '"not-a-dict"', None, "Unexpected response format from HTTP 200 JSON
result: string indices must be integers, not 'str'"),
+ (200, dict(value='not-a-list'), None, "Unexpected response format from
HTTP 200 JSON result: string indices must be integers, not 'str'"),
+ (200, dict(value=['not-a-dict']), None, "Unexpected response format from
HTTP 200 JSON result: string indices must be integers, not 'str'"),
+ (200, dict(), None, "Missing 'value' key in response from HTTP 200 JSON
result."),
+ (200, dict(value=[{}]), None, "Missing 'sourceVersion' key in response
from HTTP 200 JSON result."),
+ # non-200 responses
+ (404, '', None, "Unable to find project due to HTTP 404 Non-JSON result."),
+ (404, '""', None, "Unable to find project due to HTTP 404 JSON result."),
+ (404, dict(value=[]), None, "Unable to find project due to HTTP 404 JSON
result."),
+))
+def test_get_successful_merge_run_commits(
+ status_code: int,
+ response: object,
+ expected_commits: set[str] | None,
+ expected_warning: str | None,
+ mocker: pytest_mock.MockerFixture,
+) -> None:
+ """Verify AZP commit retrieval handles invalid responses gracefully."""
+ from ansible_test._internal.ci.azp import AzurePipelinesChanges
+ from ansible_test._internal.git import Git
+ from ansible_test._internal.http import HttpClient, HttpResponse
+ from ansible_test._internal.util import display
+
+ if not isinstance(response, str):
+ response = json.dumps(response)
+
+ if expected_warning:
+ expected_warning = f'Cannot determine changes. All tests will be
executed. Reason: {expected_warning}'
+
+ patched_get = mocker.patch.object(HttpClient, 'get',
return_value=HttpResponse('GET', 'URL', status_code, response))
+ patched_warning = mocker.patch.object(display, 'warning')
+
+ mocker.patch.object(Git, 'run_git', return_value='') # avoid git
+
+ spy_get_successful_merge_run_commits = mocker.spy(AzurePipelinesChanges,
'get_successful_merge_run_commits')
+
+ create_azure_pipelines_changes(mocker)
+
+ assert patched_get.call_count == 1
+
+ if expected_warning:
+ patched_warning.assert_called_once_with(expected_warning)
+ else:
+ patched_warning.assert_not_called()
+
+ assert spy_get_successful_merge_run_commits.spy_return ==
(expected_commits or set())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.11/test/units/playbook/test_task.py
new/ansible_core-2.18.12/test/units/playbook/test_task.py
--- old/ansible_core-2.18.11/test/units/playbook/test_task.py 2025-11-05
00:26:58.000000000 +0100
+++ new/ansible_core-2.18.12/test/units/playbook/test_task.py 2025-12-09
17:45:08.000000000 +0100
@@ -102,16 +102,16 @@
self.assertEqual(t.get_validated_value('delay',
t.fattributes.get('delay'), delay, None), expected)
bad_params = [
- ('E', ValueError),
- ('1.E', ValueError),
- ('E.1', ValueError),
+ 'E',
+ '1.E',
+ 'E.1',
]
- for delay, expected in bad_params:
- with self.subTest(f'type "{type(delay)} was cast to float w/o
error', delay=delay, expected=expected):
+ for delay in bad_params:
+ with self.subTest(f'type "{type(delay)} was cast to float w/o
error', delay=delay):
p = dict(delay=delay)
p.update(self._task_base)
t = Task().load_data(p)
- with self.assertRaises(expected):
+ with self.assertRaises(ValueError):
dummy = t.get_validated_value('delay',
t.fattributes.get('delay'), delay, None)
def test_task_auto_name_with_role(self):
++++++ ansible_core-2.18.11.tar.gz.sha256 -> ansible_core-2.18.12.tar.gz.sha256
++++++
---
/work/SRC/openSUSE:Factory/ansible-core-2.18/ansible_core-2.18.11.tar.gz.sha256
2025-11-06 18:13:48.224935082 +0100
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.18.new.1939/ansible_core-2.18.12.tar.gz.sha256
2025-12-11 18:44:12.392696041 +0100
@@ -1 +1 @@
-e1e6611559d730e95a9456895e8e157c378e97c479d1dd8299e25a89689bfd9f
ansible_core-2.18.11.tar.gz
+40e03f74bee7f0eb65e76827017373c4e56dc57ba0618e98c435d875e8e349fc
ansible_core-2.18.12.tar.gz