diff --git a/decision-task.py b/decision-task.py index 9ba891ae6ec..d910808b684 100644 --- a/decision-task.py +++ b/decision-task.py @@ -5,9 +5,81 @@ import sys import json import taskcluster -decision_task_id = os.environ["TASK_ID"] + +def main(): + build_task = create_task_with_built_image( + "build task", + "./build-task.sh", + image="servo-x86_64-linux", + + artifacts=[ + ("executable.gz", "/repo/something-rust/something-rust.gz"), + ], + + # https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/caches + scopes=[ + "docker-worker:cache:cargo-registry-cache", + "docker-worker:cache:cargo-git-cache", + ], + cache={ + "cargo-registry-cache": "/root/.cargo/registry", + "cargo-git-cache": "/root/.cargo/git", + }, + ) + + create_task( + "run task", + "./run-task.sh", + image="buildpack-deps:bionic-scm", + dependencies=[build_task], + env={"BUILD_TASK_ID": build_task}, + ) + + +# https://hub.docker.com/r/servobrowser/image-builder/ +# https://github.com/SimonSapin/servo-docker-image-builder-image +IMAGE_BUILDER_IMAGE = "servobrowser/image-builder@sha256:" \ + "f2370c4b28aa537e47c0cacb82cc53272233fa256b6634c0eebc46e2dd019333" + +# https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/environment +DECISION_TASK_ID = os.environ["TASK_ID"] + # https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/features#feature-taskclusterproxy -queue = taskcluster.Queue(options={"baseUrl": "http://taskcluster/queue/v1/"}) +QUEUE = taskcluster.Queue(options={"baseUrl": "http://taskcluster/queue/v1/"}) + +IMAGE_ARTIFACT_FILENAME = "image.tar.lz4" + + +def create_task_with_built_image(name, command, image, **kwargs): + image_build_task = build_image(image) + kwargs.setdefault("dependencies", []).append(image_build_task) + image = { + "type": "task-image", + "taskId": image_build_task, + "path": "public/" + IMAGE_ARTIFACT_FILENAME, + } + return create_task(name, command, image, **kwargs) + + +def build_image(name): + image_build_task = create_task( + "docker image build task for image: " + name, + """ + docker build -t "$IMAGE" "docker/$IMAGE" + docker save "$IMAGE" | lz4 > /%s + """ % IMAGE_ARTIFACT_FILENAME, + env={ + "IMAGE": name, + }, + artifacts=[ + (IMAGE_ARTIFACT_FILENAME, "/" + IMAGE_ARTIFACT_FILENAME), + ], + image=IMAGE_BUILDER_IMAGE, + features={ + "dind": True, # docker-in-docker + }, + ) + return image_build_task def create_task(name, command, image, artifacts=None, dependencies=None, env=None, cache=None, @@ -18,8 +90,8 @@ def create_task(name, command, image, artifacts=None, dependencies=None, env=Non task_id = taskcluster.slugId().decode("utf8") payload = { - "taskGroupId": decision_task_id, - "dependencies": [decision_task_id] + (dependencies or []), + "taskGroupId": DECISION_TASK_ID, + "dependencies": [DECISION_TASK_ID] + (dependencies or []), "schedulerId": "taskcluster-github", "provisionerId": "aws-provisioner-v1", "workerType": "servo-docker-worker", @@ -61,61 +133,10 @@ def create_task(name, command, image, artifacts=None, dependencies=None, env=Non "features": features or {}, }, } - queue.createTask(task_id, payload) + QUEUE.createTask(task_id, payload) print("Scheduled %s: %s" % (name, task_id)) return task_id -image_build_task = create_task( - "docker image build task", - """ - docker build -t "$IMAGE" "docker/$IMAGE" - docker save "$IMAGE" | lz4 > /image.tar.lz4 - """, - env={ - "IMAGE": "servo-x86_64-linux", - }, - artifacts=[ - ("image.tar.lz4", "/image.tar.lz4"), - ], - # https://hub.docker.com/r/servobrowser/image-builder/ - # https://github.com/SimonSapin/servo-docker-image-builder-image - image="servobrowser/image-builder@sha256:f2370c4b28aa537e47c0cacb82cc53272233fa256b6634c0eebc46e2dd019333", - - features={ - "dind": True, # docker-in-docker - }, -) - -build_task = create_task( - "build task", - "./build-task.sh", - dependencies=[image_build_task], - image={ - "type": "task-image", - "taskId": image_build_task, - "path": "public/image.tar.lz4", - }, - - artifacts=[ - ("executable.gz", "/repo/something-rust/something-rust.gz"), - ], - - # https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/caches - scopes=[ - "docker-worker:cache:cargo-registry-cache", - "docker-worker:cache:cargo-git-cache", - ], - cache={ - "cargo-registry-cache": "/root/.cargo/registry", - "cargo-git-cache": "/root/.cargo/git", - }, -) - -create_task( - "run task", - "./run-task.sh", - image="ubuntu:bionic-20180821@sha256:b5309340de7a9a540cf6c0cba3eabdfb9c9bc5153026d37991fd0028180fc725", - dependencies=[build_task], - env={"BUILD_TASK_ID": build_task}, -) +if __name__ == "__main__": + main()