#!/usr/bin/env python2 import os import sys from argparse import ArgumentParser from launchpadlib.credentials import UnencryptedFileCredentialStore from launchpadlib.launchpad import Launchpad HERE = os.path.dirname(os.path.abspath(__file__)) def parse_args(): """ Parse the command line arguments """ parser = ArgumentParser() parser.add_argument('-p', '--merge-proposal', required=True, help='The main part of the URL to the merge proposal, without the hostname.') parser.add_argument('-m', '--message', required=True, help='The comment to add to the merge proposal') parser.add_argument('-s', '--subject', default=None, help='The subject for the comment') return parser.parse_args() def get_merge_proposal(merge_proposal_url): """ Get the merge proposal for the ``merge_proposal_url`` """ lp = Launchpad.login_with('OpenLP CI', 'production', version='devel', credential_store=UnencryptedFileCredentialStore(os.path.join(HERE, 'launchpadcreds.txt'))) openlp_project = lp.projects['openlp'] merge_proposals = openlp_project.getMergeProposals() for merge_proposal in merge_proposals: if str(merge_proposal).endswith(merge_proposal_url): return merge_proposal return None def create_comment(merge_proposal, comment, subject): """ Create a comment on the merge proposal """ if not subject: subject = 'Jenkins test update' merge_proposal.createComment(subject=subject, content=comment) def main(): """ Run the thing """ args = parse_args() merge_proposal = get_merge_proposal(args.merge_proposal) if not merge_proposal: print('No merge proposal with that URL found') sys.exit(1) else: create_comment(merge_proposal, args.message, args.subject) if __name__ == '__main__': main()