Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| #!/usr/bin/env python3 | |
| from os import getcwd | |
| import sys | |
| sys.path.append('lib') | |
| from charms.layer.basic import activate_venv # noqa: E402 | |
| activate_venv() | |
| from charmhelpers.core import hookenv # noqa: E402 | |
| from charms.reactive import RelationBase # noqa: E402 | |
| from charmhelpers.core import templating # noqa: E402 | |
| import cwrhelpers # noqa: E402 | |
| from jenkins import Jenkins, JenkinsException # noqa: E402 | |
| from utils import ( | |
| get_hook_token, | |
| get_rest_path, | |
| get_output_scenarios, | |
| REST_PORT | |
| ) # noqa: E402 | |
| def add_job(): | |
| ''' | |
| Adds a job to be triggered when a PR is submitted | |
| ''' | |
| jenkins_relation = (RelationBase.from_state('jenkins.available')) | |
| jenkins_connection_info = jenkins_relation.get_connection_info() | |
| jclient = Jenkins(jenkins_connection_info["jenkins_url"], | |
| jenkins_connection_info["admin_username"], | |
| jenkins_connection_info["admin_password"]) | |
| charm_name, charm_fname = cwrhelpers.get_charm_names() | |
| try: | |
| bundle_name, bundle_fname, bundle_app_name = cwrhelpers\ | |
| .get_reference_bundle() | |
| except cwrhelpers.InvalidBundle as e: | |
| cwrhelpers.fail_action(str(e), e.reason) | |
| if not bundle_name: | |
| cwrhelpers.fail_action('Charm does not provide reference bundle ' | |
| 'and none was provided to action') | |
| job_name = "cwr_charm_pr_{}_in_{}".format(charm_fname, bundle_fname) | |
| s3_creds, s3_creds_container = cwrhelpers.get_s3_creds_filenames(job_name) | |
| s3_options = cwrhelpers.get_s3_options(s3_creds, s3_creds_container) | |
| job_contents = templating.render( | |
| source="BuildMyPR/config.xml", | |
| target=None, | |
| context={ | |
| "gitrepo": hookenv.action_get("repo"), | |
| "charm_subdir": hookenv.action_get("charm-subdir"), | |
| "pushtochannel": hookenv.action_get("push-to-channel") or "", | |
| "lp_id": hookenv.action_get("namespace"), | |
| "charm_name": charm_name, | |
| "bundle_name": bundle_name, | |
| "app_name_in_bundle": bundle_app_name, | |
| "series": hookenv.action_get("series") or "", | |
| "controller": hookenv.action_get("controller") or "", | |
| "charm_home": getcwd(), | |
| "job_name": job_name, | |
| "output_scenarios": get_output_scenarios(), | |
| "oauth": hookenv.action_get("oauth-token"), | |
| "s3_options": s3_options, | |
| }) | |
| try: | |
| jclient.create_job(job_name, job_contents) | |
| except JenkinsException as e: | |
| cwrhelpers.fail_action(str(e)) | |
| token = get_hook_token(job_name) | |
| url = "http://<cwr-ip>:{}{}/pr-trigger/{}/{}".format( | |
| REST_PORT, get_rest_path(), job_name, token) | |
| hookenv.action_set({'hook.url': url}) | |
| if __name__ == "__main__": | |
| add_job() |