[build] Trigger the downstream CI and get the status back

Allows triggering a pipeline at any other repository
passing parameters.
This commit is contained in:
Thiago Marcos P. Santos
2020-03-04 11:53:01 +02:00
parent 8bf841a951
commit ef19a33866
2 changed files with 91 additions and 0 deletions

View File

@@ -33,6 +33,15 @@ workflows:
- linux-gcc8-release
- macos-xcode11-release
- ios-render-test-runner
- trigger-pipeline:
requires:
- android-render-test-runner
- ios-render-test-runner
- linux-clang8-release
- linux-gcc8-release
- macos-xcode11-release
name: mapboxci
slug: mapbox/mapbox-gl-native-internal
- build-template:
name: android-armeabi-v7a-release
executor_name: ubuntu-disco
@@ -631,6 +640,17 @@ jobs:
metricsResult=$(gsutil ls -d gs://test-lab-186672a0qp5bq-ycr70axads3nc/render-test-app-${CIRCLE_BUILD_NUM}/*/*/sdcard/baselines/*) || true
gsutil -m cp -r $metricsResult metrics/android-render-test-runner/ || true
- save
trigger-pipeline:
executor: ubuntu-disco
parameters:
slug:
type: string
steps:
- checkout
- run:
name: Trigger Pipeline
command: |
scripts/ci-circleci-start-pipeline.py --target-slug << parameters.slug >>
sanity-checks:
executor: ubuntu-disco
steps:

View File

@@ -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()