summaryrefslogtreecommitdiffstats
path: root/hacking/build_library/build_ansible/command_plugins/release_announcement.py
diff options
context:
space:
mode:
Diffstat (limited to 'hacking/build_library/build_ansible/command_plugins/release_announcement.py')
-rw-r--r--hacking/build_library/build_ansible/command_plugins/release_announcement.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/hacking/build_library/build_ansible/command_plugins/release_announcement.py b/hacking/build_library/build_ansible/command_plugins/release_announcement.py
new file mode 100644
index 0000000..edc928a
--- /dev/null
+++ b/hacking/build_library/build_ansible/command_plugins/release_announcement.py
@@ -0,0 +1,78 @@
+# coding: utf-8
+# Copyright: (c) 2019, Ansible Project
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+# Make coding more python3-ish
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+
+import sys
+from collections import UserString
+from ansible.module_utils.compat.version import LooseVersion
+
+# Pylint doesn't understand Python3 namespace modules.
+from ..commands import Command # pylint: disable=relative-beyond-top-level
+from .. import errors # pylint: disable=relative-beyond-top-level
+
+
+class VersionStr(UserString):
+ def __init__(self, string):
+ super().__init__(string.strip())
+ self.ver_obj = LooseVersion(string)
+
+
+def transform_args(args):
+ # Make it possible to sort versions in the jinja2 templates
+ new_versions = []
+ for version in args.versions:
+ new_versions.append(VersionStr(version))
+ args.versions = new_versions
+
+ return args
+
+
+def write_message(filename, message):
+ if filename != '-':
+ with open(filename, 'w') as out_file:
+ out_file.write(message)
+ else:
+ sys.stdout.write('\n\n')
+ sys.stdout.write(message)
+
+
+class ReleaseAnnouncementCommand(Command):
+ name = 'release-announcement'
+
+ @classmethod
+ def init_parser(cls, add_parser):
+ parser = add_parser(cls.name,
+ description="Generate email and twitter announcements from template")
+
+ parser.add_argument("--version", dest="versions", type=str, required=True, action='append',
+ help="Versions of Ansible to announce")
+ parser.add_argument("--name", type=str, required=True, help="Real name to use on emails")
+ parser.add_argument("--email-out", type=str, default="-",
+ help="Filename to place the email announcement into")
+ parser.add_argument("--twitter-out", type=str, default="-",
+ help="Filename to place the twitter announcement into")
+
+ @classmethod
+ def main(cls, args):
+ if sys.version_info < (3, 6):
+ raise errors.DependencyError('The {0} subcommand needs Python-3.6+'
+ ' to run'.format(cls.name))
+
+ # Import here because these functions are invalid on Python-3.5 and the command plugins and
+ # init_parser() method need to be compatible with Python-3.4+ for now.
+ # Pylint doesn't understand Python3 namespace modules.
+ from .. announce import create_short_message, create_long_message # pylint: disable=relative-beyond-top-level
+
+ args = transform_args(args)
+
+ twitter_message = create_short_message(args.versions)
+ email_message = create_long_message(args.versions, args.name)
+
+ write_message(args.twitter_out, twitter_message)
+ write_message(args.email_out, email_message)
+ return 0