diff --git a/decision-task.py b/decision-task.py index 58cd58af621..9decfb0f71d 100644 --- a/decision-task.py +++ b/decision-task.py @@ -15,7 +15,6 @@ def main(): route_prefix="project.servo.servo", worker_type="servo-docker-worker", ) - create_task = decision.create_task_with_in_tree_dockerfile # FIXME: remove this before merging in servo/servo os.environ["GIT_URL"] = "https://github.com/SimonSapin/servo" @@ -53,7 +52,7 @@ def main(): "cache": build_caches, } - create_task( + decision.create_task( task_name="Linux x86_64: tidy + dev build + unit tests", script=""" ./mach test-tidy --no-progress --all @@ -68,7 +67,7 @@ def main(): **build_kwargs ) - release_build_task = create_task( + release_build_task = decision.create_task( task_name="Linux x86_64: release build", script=""" ./mach build --release --with-debug-assertions -p servo @@ -94,7 +93,7 @@ def main(): --location \ | tar -xz """ - create_task( + decision.create_task( script=fetch_build + script, env=dict(**env or {}, BUILD_TASK_ID=release_build_task), dependencies=[release_build_task], diff --git a/decisionlib.py b/decisionlib.py index 56cef29a8f0..bbe2ebc9dd1 100644 --- a/decisionlib.py +++ b/decisionlib.py @@ -46,16 +46,6 @@ class DecisionTask: def from_now_json(self, offset): return taskcluster.stringDate(taskcluster.fromNow(offset, dateObj=self.now)) - def create_task_with_in_tree_dockerfile(self, *, dockerfile, **kwargs): - image_build_task = self.find_or_build_image(dockerfile) - kwargs.setdefault("dependencies", []).append(image_build_task) - image = { - "type": "task-image", - "taskId": image_build_task, - "path": "public/" + self.DOCKER_IMAGE_ARTIFACT_FILENAME, - } - return self.create_task(image=image, **kwargs) - def find_or_build_image(self, dockerfile): image_build_task = self.built_images.get(dockerfile) if image_build_task is None: @@ -89,7 +79,7 @@ class DecisionTask: ("/" + self.DOCKER_IMAGE_ARTIFACT_FILENAME, self.docker_image_cache_expiry), ], max_run_time_minutes=20, - image=self.DOCKER_IMAGE_BUILDER_IMAGE, + docker_image=self.DOCKER_IMAGE_BUILDER_IMAGE, features={ "dind": True, # docker-in-docker }, @@ -114,10 +104,30 @@ class DecisionTask: else: return basename - def create_task(self, *, task_name, script, image, max_run_time_minutes, + def create_task(self, *, task_name, script, max_run_time_minutes, + docker_image=None, dockerfile=None, # One of these is required artifacts=None, dependencies=None, env=None, cache=None, scopes=None, routes=None, extra=None, features=None, with_repo=True): + if docker_image and dockerfile: + raise TypeError("cannot use both `docker_image` or `dockerfile`") + if not docker_image and not dockerfile: + raise TypeError("need one of `docker_image` or `dockerfile`") + + # https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/environment + decision_task_id = os.environ["TASK_ID"] + + dependencies = [decision_task_id] + (dependencies or []) + + if dockerfile: + image_build_task = self.find_or_build_image(dockerfile) + dependencies.append(image_build_task) + docker_image = { + "type": "task-image", + "taskId": image_build_task, + "path": "public/" + self.DOCKER_IMAGE_ARTIFACT_FILENAME, + } + # Set in .taskcluster.yml task_owner = os.environ["TASK_OWNER"] task_source = os.environ["TASK_SOURCE"] @@ -136,12 +146,9 @@ class DecisionTask: git reset --hard "$GIT_SHA" """ + script - # https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/environment - decision_task_id = os.environ["TASK_ID"] - payload = { "taskGroupId": decision_task_id, - "dependencies": [decision_task_id] + (dependencies or []), + "dependencies": dependencies or [], "schedulerId": "taskcluster-github", "provisionerId": "aws-provisioner-v1", "workerType": self.worker_type, @@ -160,7 +167,7 @@ class DecisionTask: "payload": { "cache": cache or {}, "maxRunTime": max_run_time_minutes * 60, - "image": image, + "image": docker_image, "command": [ "/bin/bash", "--login",