Merge create_task_with_in_tree_dockerfile into create_task

This commit is contained in:
Simon Sapin 2018-09-20 18:35:15 +02:00
parent 8cfeda8806
commit c9d698fad7
2 changed files with 27 additions and 21 deletions

View file

@ -15,7 +15,6 @@ def main():
route_prefix="project.servo.servo", route_prefix="project.servo.servo",
worker_type="servo-docker-worker", worker_type="servo-docker-worker",
) )
create_task = decision.create_task_with_in_tree_dockerfile
# FIXME: remove this before merging in servo/servo # FIXME: remove this before merging in servo/servo
os.environ["GIT_URL"] = "https://github.com/SimonSapin/servo" os.environ["GIT_URL"] = "https://github.com/SimonSapin/servo"
@ -53,7 +52,7 @@ def main():
"cache": build_caches, "cache": build_caches,
} }
create_task( decision.create_task(
task_name="Linux x86_64: tidy + dev build + unit tests", task_name="Linux x86_64: tidy + dev build + unit tests",
script=""" script="""
./mach test-tidy --no-progress --all ./mach test-tidy --no-progress --all
@ -68,7 +67,7 @@ def main():
**build_kwargs **build_kwargs
) )
release_build_task = create_task( release_build_task = decision.create_task(
task_name="Linux x86_64: release build", task_name="Linux x86_64: release build",
script=""" script="""
./mach build --release --with-debug-assertions -p servo ./mach build --release --with-debug-assertions -p servo
@ -94,7 +93,7 @@ def main():
--location \ --location \
| tar -xz | tar -xz
""" """
create_task( decision.create_task(
script=fetch_build + script, script=fetch_build + script,
env=dict(**env or {}, BUILD_TASK_ID=release_build_task), env=dict(**env or {}, BUILD_TASK_ID=release_build_task),
dependencies=[release_build_task], dependencies=[release_build_task],

View file

@ -46,16 +46,6 @@ class DecisionTask:
def from_now_json(self, offset): def from_now_json(self, offset):
return taskcluster.stringDate(taskcluster.fromNow(offset, dateObj=self.now)) 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): def find_or_build_image(self, dockerfile):
image_build_task = self.built_images.get(dockerfile) image_build_task = self.built_images.get(dockerfile)
if image_build_task is None: if image_build_task is None:
@ -89,7 +79,7 @@ class DecisionTask:
("/" + self.DOCKER_IMAGE_ARTIFACT_FILENAME, self.docker_image_cache_expiry), ("/" + self.DOCKER_IMAGE_ARTIFACT_FILENAME, self.docker_image_cache_expiry),
], ],
max_run_time_minutes=20, max_run_time_minutes=20,
image=self.DOCKER_IMAGE_BUILDER_IMAGE, docker_image=self.DOCKER_IMAGE_BUILDER_IMAGE,
features={ features={
"dind": True, # docker-in-docker "dind": True, # docker-in-docker
}, },
@ -114,10 +104,30 @@ class DecisionTask:
else: else:
return basename 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, artifacts=None, dependencies=None, env=None, cache=None, scopes=None,
routes=None, extra=None, features=None, routes=None, extra=None, features=None,
with_repo=True): 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 # Set in .taskcluster.yml
task_owner = os.environ["TASK_OWNER"] task_owner = os.environ["TASK_OWNER"]
task_source = os.environ["TASK_SOURCE"] task_source = os.environ["TASK_SOURCE"]
@ -136,12 +146,9 @@ class DecisionTask:
git reset --hard "$GIT_SHA" git reset --hard "$GIT_SHA"
""" + script """ + script
# https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/environment
decision_task_id = os.environ["TASK_ID"]
payload = { payload = {
"taskGroupId": decision_task_id, "taskGroupId": decision_task_id,
"dependencies": [decision_task_id] + (dependencies or []), "dependencies": dependencies or [],
"schedulerId": "taskcluster-github", "schedulerId": "taskcluster-github",
"provisionerId": "aws-provisioner-v1", "provisionerId": "aws-provisioner-v1",
"workerType": self.worker_type, "workerType": self.worker_type,
@ -160,7 +167,7 @@ class DecisionTask:
"payload": { "payload": {
"cache": cache or {}, "cache": cache or {},
"maxRunTime": max_run_time_minutes * 60, "maxRunTime": max_run_time_minutes * 60,
"image": image, "image": docker_image,
"command": [ "command": [
"/bin/bash", "/bin/bash",
"--login", "--login",