diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/ci-circleci-start-pipeline.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/scripts/ci-circleci-start-pipeline.py b/scripts/ci-circleci-start-pipeline.py new file mode 100755 index 0000000000..a7aa0f49ad --- /dev/null +++ b/scripts/ci-circleci-start-pipeline.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 + +# Implements https://circleci.com/docs/api/v2/#trigger-a-new-pipeline + +import argparse +import os +import requests +import sys + + +def TriggerPiperline(slug, token, branch, params): + url = "https://circleci.com/api/v2/project/github/%s/pipeline" % (slug) + + headers = { + "Content-Type": "application/json", + "Accept": "application/json", + } + + data = { + "parameters": params + } + + if branch: + data["branch"] = branch + + r = requests.post(url, auth=(token, ""), headers=headers, json=data) + + if r.status_code != 201: + print("Error triggering the CircleCI: %s." % r.json()["message"]) + sys.exit(1) + + +def Main(): + token = os.getenv("CIRCLE_API_TOKEN") + hash = os.getenv("CIRCLE_SHA1", default="1234567890") + username = os.getenv("CIRCLE_PROJECT_USERNAME", default="username") + project = os.getenv("CIRCLE_PROJECT_REPONAME", default="repository") + + parser = argparse.ArgumentParser( + description="Creates CircleCI jobs and waits for the result.") + + parser.add_argument("--token", default=token, + help="CircleCI token, otherwise environment CIRCLE_API_TOKEN.") + parser.add_argument("--origin-slug", default="mapbox/mapbox-gl-native", + help="Origin repository, otherwise CIRCLE_PROJECT_USERNAME/CIRCLE_PROJECT_REPONAME.") + parser.add_argument("--target-slug", default="".join((username, '/', project)), + help="Repository to trigger the pipeline, example: mapbox/mapbox-gl-native-internal.") + parser.add_argument("--hash", default=hash, + help="Commit git hash that triggered the pipeline, otherwise environment CIRCLE_SHA1.") + parser.add_argument("--branch", + help="Build a specific branch, otherwise it will build the default branch.") + + args = parser.parse_args() + + if not args.token: + print("CircleCI token not set. Use --token or set CIRCLE_API_TOKEN.") + sys.exit(1) + + params = { + "mapbox_upstream": True, + "mapbox_slug": args.origin_slug, + "mapbox_hash": args.hash + } + + TriggerPiperline(args.target_slug, args.token, args.branch, params) + + return 0 + + +if __name__ == "__main__": + Main() |