From 938c0fa944cabdc1a21745abade7f05ac3e6ee26 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Wed, 2 Nov 2022 16:19:10 -0700 Subject: ansible-test - Fix and update documentation links. --- changelogs/fragments/ansible-test-docs-links.yml | 4 ++++ .../_internal/commands/integration/cloud/aws.py | 2 +- .../commands/sanity/integration_aliases.py | 3 ++- test/lib/ansible_test/_internal/test.py | 18 +++------------ test/lib/ansible_test/_internal/util_common.py | 26 ++++++++++++++++++++++ 5 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 changelogs/fragments/ansible-test-docs-links.yml diff --git a/changelogs/fragments/ansible-test-docs-links.yml b/changelogs/fragments/ansible-test-docs-links.yml new file mode 100644 index 0000000000..6941788042 --- /dev/null +++ b/changelogs/fragments/ansible-test-docs-links.yml @@ -0,0 +1,4 @@ +bugfixes: + - ansible-test - Fix broken documentation link for ``aws`` test plugin error messages. +minor_changes: + - ansible-test - Improve consistency of version specific documentation links. diff --git a/test/lib/ansible_test/_internal/commands/integration/cloud/aws.py b/test/lib/ansible_test/_internal/commands/integration/cloud/aws.py index efbcda937b..234f31121f 100644 --- a/test/lib/ansible_test/_internal/commands/integration/cloud/aws.py +++ b/test/lib/ansible_test/_internal/commands/integration/cloud/aws.py @@ -127,5 +127,5 @@ class AwsCloudEnvironment(CloudEnvironment): """Callback to run when an integration target fails.""" if not tries and self.managed: display.notice('If %s failed due to permissions, the IAM test policy may need to be updated. ' - 'https://docs.ansible.com/ansible-core/devel/dev_guide/platforms/aws_guidelines.html#aws-permissions-for-integration-tests.' + 'https://docs.ansible.com/ansible/devel/collections/amazon/aws/docsite/dev_guidelines.html#aws-permissions-for-integration-tests' % target.name) diff --git a/test/lib/ansible_test/_internal/commands/sanity/integration_aliases.py b/test/lib/ansible_test/_internal/commands/sanity/integration_aliases.py index 919ccdb7c1..92206ae802 100644 --- a/test/lib/ansible_test/_internal/commands/sanity/integration_aliases.py +++ b/test/lib/ansible_test/_internal/commands/sanity/integration_aliases.py @@ -49,6 +49,7 @@ from ...util import ( ) from ...util_common import ( + get_docs_url, write_json_test_results, ResultType, ) @@ -67,7 +68,7 @@ class IntegrationAliasesTest(SanitySingleVersion): UNSTABLE = 'unstable/' UNSUPPORTED = 'unsupported/' - EXPLAIN_URL = 'https://docs.ansible.com/ansible-core/devel/dev_guide/testing/sanity/integration-aliases.html' + EXPLAIN_URL = get_docs_url('https://docs.ansible.com/ansible-core/devel/dev_guide/testing/sanity/integration-aliases.html') TEMPLATE_DISABLED = """ The following integration tests are **disabled** [[explain]({explain_url}#disabled)]: diff --git a/test/lib/ansible_test/_internal/test.py b/test/lib/ansible_test/_internal/test.py index 3a31c4b999..da6af355a4 100644 --- a/test/lib/ansible_test/_internal/test.py +++ b/test/lib/ansible_test/_internal/test.py @@ -3,15 +3,14 @@ from __future__ import annotations import collections.abc as c import datetime -import re import typing as t from .util import ( display, - get_ansible_version, ) from .util_common import ( + get_docs_url, write_text_test_results, write_json_test_results, ResultType, @@ -341,19 +340,8 @@ class TestFailure(TestResult): if self.command != 'sanity': return None # only sanity tests have docs links - # Use the major.minor version for the URL only if this a release that - # matches the pattern 2.4.0, otherwise, use 'devel' - ansible_version = get_ansible_version() - url_version = 'devel' - if re.search(r'^[0-9.]+$', ansible_version): - url_version = '.'.join(ansible_version.split('.')[:2]) - - testing_docs_url = 'https://docs.ansible.com/ansible-core/%s/dev_guide/testing' % url_version - - url = '%s/%s/' % (testing_docs_url, self.command) - - if self.test: - url += '%s.html' % self.test + filename = f'{self.test}.html' if self.test else '' + url = get_docs_url(f'https://docs.ansible.com/ansible-core/devel/dev_guide/testing/{self.command}/{filename}') return url diff --git a/test/lib/ansible_test/_internal/util_common.py b/test/lib/ansible_test/_internal/util_common.py index 96beae0c11..fbd9e71d87 100644 --- a/test/lib/ansible_test/_internal/util_common.py +++ b/test/lib/ansible_test/_internal/util_common.py @@ -24,6 +24,7 @@ from .encoding import ( from .util import ( cache, display, + get_ansible_version, remove_tree, MODE_DIRECTORY, MODE_FILE_EXECUTE, @@ -151,6 +152,31 @@ class CommonConfig: return os.path.join(ANSIBLE_TEST_DATA_ROOT, 'ansible.cfg') +def get_docs_url(url: str) -> str: + """ + Return the given docs.ansible.com URL updated to match the running ansible-test version, if it is not a pre-release version. + The URL should be in the form: https://docs.ansible.com/ansible/devel/path/to/doc.html + Where 'devel' will be replaced with the current version, unless it is a pre-release version. + When run under a pre-release version, the URL will remain unchanged. + This serves to provide a fallback URL for pre-release versions. + It also makes searching the source for docs links easier, since a full URL is provided to this function. + """ + url_prefix = 'https://docs.ansible.com/ansible-core/devel/' + + if not url.startswith(url_prefix): + raise ValueError(f'URL "{url}" does not start with: {url_prefix}') + + ansible_version = get_ansible_version() + + if re.search(r'^[0-9.]+$', ansible_version): + url_version = '.'.join(ansible_version.split('.')[:2]) + new_prefix = f'https://docs.ansible.com/ansible-core/{url_version}/' + + url = url.replace(url_prefix, new_prefix) + + return url + + def create_result_directories(args: CommonConfig) -> None: """Create result directories.""" if args.explain: -- cgit v1.2.1