summaryrefslogtreecommitdiff
path: root/packaging
diff options
context:
space:
mode:
authorMatt Clay <matt@mystile.com>2019-03-14 11:18:14 -0700
committerGitHub <noreply@github.com>2019-03-14 11:18:14 -0700
commit90a38670be6a09dd51d2a44a253d681513e7ab95 (patch)
tree9a3edd2c52d3e118dcd93efadaff9b43f9eac60c /packaging
parente9816e10bc0a682ebacf4d6f9d06dcca397fbd7b (diff)
downloadansible-90a38670be6a09dd51d2a44a253d681513e7ab95.tar.gz
Changelog lint and generation bug fixes. (#53792)
* Add missing dict entry for changelog generation. * Enforce str and list types on sections. * Check type of section list items. * Support non-ascii characters in changelogs.
Diffstat (limited to 'packaging')
-rwxr-xr-xpackaging/release/changelogs/changelog.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/packaging/release/changelogs/changelog.py b/packaging/release/changelogs/changelog.py
index dcaedbb7b1..974324d58e 100755
--- a/packaging/release/changelogs/changelog.py
+++ b/packaging/release/changelogs/changelog.py
@@ -25,6 +25,7 @@ except ImportError:
argcomplete = None
from ansible import constants as C
+from ansible.module_utils.six import string_types
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
CHANGELOG_DIR = os.path.join(BASE_DIR, 'changelogs')
@@ -175,6 +176,8 @@ def load_plugins(version, force_reload):
LOGGER.info('refreshing plugin cache')
plugins_data['version'] = version
+ plugins_data['plugins'] = {}
+
for plugin_type in C.DOCUMENTABLE_PLUGINS:
plugins_data['plugins'][plugin_type] = json.loads(subprocess.check_output([os.path.join(BASE_DIR, 'bin', 'ansible-doc'),
'--json', '-t', plugin_type]))
@@ -302,14 +305,26 @@ class ChangelogFragmentLinter(object):
errors = []
for section, lines in fragment.content.items():
- if section not in self.config.sections:
- errors.append((fragment.path, 0, 0, 'invalid section: %s' % section))
+ if section == self.config.prelude_name:
+ if not isinstance(lines, string_types):
+ errors.append((fragment.path, 0, 0, 'section "%s" must be type str not %s' % (section, type(lines).__name__)))
+ else:
+ # doesn't account for prelude but only the RM should be adding those
+ if not isinstance(lines, list):
+ errors.append((fragment.path, 0, 0, 'section "%s" must be type list not %s' % (section, type(lines).__name__)))
+
+ if section not in self.config.sections:
+ errors.append((fragment.path, 0, 0, 'invalid section: %s' % section))
if isinstance(lines, list):
for line in lines:
+ if not isinstance(line, string_types):
+ errors.append((fragment.path, 0, 0, 'section "%s" list items must be type str not %s' % (section, type(line).__name__)))
+ continue
+
results = rstcheck.check(line, filename=fragment.path, report_level=docutils.utils.Reporter.WARNING_LEVEL)
errors += [(fragment.path, 0, 0, result[1]) for result in results]
- else:
+ elif isinstance(lines, string_types):
results = rstcheck.check(lines, filename=fragment.path, report_level=docutils.utils.Reporter.WARNING_LEVEL)
errors += [(fragment.path, 0, 0, result[1]) for result in results]