diff --git a/child-task.sh b/build-task.sh old mode 100755 new mode 100644 similarity index 89% rename from child-task.sh rename to build-task.sh index 404bf5f0ba5..e262bc2c7a9 --- a/child-task.sh +++ b/build-task.sh @@ -4,5 +4,5 @@ curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain none -y export PATH="$HOME/.cargo/bin:$PATH" cd something-rust -cargo run --release +cargo build --release gzip -c target/release/something-rust > something-rust.gz diff --git a/decision-task/curl-artifact.sh b/decision-task/curl-artifact.sh new file mode 100644 index 00000000000..8c367dc90de --- /dev/null +++ b/decision-task/curl-artifact.sh @@ -0,0 +1,6 @@ +#!/bin/sh +curl \ + --retry 5 \ + --connect-timeout 10 \ + --location + https://queue.taskcluster.net/v1/task/$1/artifacts/$2 diff --git a/decision-task/run.py b/decision-task/run.py index 736d2dbd582..1d1b175445b 100644 --- a/decision-task/run.py +++ b/decision-task/run.py @@ -11,45 +11,61 @@ import taskcluster event = json.loads(os.environ["GITHUB_EVENT"]) print("GitHub event:\n%s\n" % json.dumps(event, sort_keys=True, indent=4, separators=(',', ': '))) -task_id = taskcluster.slugId() -payload = { - "taskGroupId": os.environ["DECISION_TASK_ID"], - "dependencies": [os.environ["DECISION_TASK_ID"]], - "schedulerId": "taskcluster-github", # FIXME: can we avoid hard-coding this? - "provisionerId": "aws-provisioner-v1", - "workerType": "github-worker", - "created": taskcluster.fromNowJSON(""), - "deadline": taskcluster.fromNowJSON("1 hour"), - "metadata": { - "name": "Taskcluster experiments for Servo: Child task", - "description": "", - "owner": event["pusher"]["name"] + "@users.noreply.github.com", - "source": event["compare"], - }, - "payload": { - "maxRunTime": 600, - "image": "buildpack-deps:bionic", - "command": [ - "/bin/bash", - "--login", - "-c", - """ - git clone {event[repository][clone_url]} repo && - cd repo && - git checkout {event[after]} && - ./child-task.sh - """.format(event=event), - ], - "artifacts": { - "public/executable.gz": { - "type": "file", - "path": "/repo/something-rust/something-rust.gz", - "expires": taskcluster.fromNowJSON("1 week"), - }, - }, - }, -} # https://docs.taskcluster.net/docs/reference/workers/docker-worker/docs/features#feature-taskclusterproxy queue = taskcluster.Queue(options={"baseUrl": "http://taskcluster/queue/v1/"}) -queue.createTask(task_id, payload) -print("new task scheduled: " + task_id) + +command_prefix = """ + git clone {event[repository][clone_url]} repo && + cd repo && + git checkout {event[after]} && + """.format(event=event) + +def create_task(name, command, artifacts=None, dependencies=None): + task_id = taskcluster.slugId() + payload = { + "taskGroupId": os.environ["DECISION_TASK_ID"], + "dependencies": [os.environ["DECISION_TASK_ID"]] + (dependencies or []), + "schedulerId": "taskcluster-github", + "provisionerId": "aws-provisioner-v1", + "workerType": "github-worker", + "created": taskcluster.fromNowJSON(""), + "deadline": taskcluster.fromNowJSON("1 hour"), + "metadata": { + "name": "Taskcluster experiments for Servo: " + name, + "description": "", + "owner": event["pusher"]["name"] + "@users.noreply.github.com", + "source": event["compare"], + }, + "payload": { + "maxRunTime": 600, + "image": "buildpack-deps:bionic", + "command": [ + "/bin/bash", + "--login", + "-c", + command_prefix + command + ], + "artifacts": { + "public/" + artifact_name: { + "type": "file", + "path": path, + "expires": taskcluster.fromNowJSON("1 week"), + } + for artifact_name, path in artifacts or [] + }, + }, + } + queue.createTask(task_id, payload) + print("Scheduled %s: %s" % (name, task_id)) + return task_id + +build_task = create_task( + "build task", + "./build-task.sh", + artifacts=[("executable.gz", "/repo/something-rust/something-rust.gz")], +) +create_task( + "run task", + "./run-task.sh", + dependencies=[build_task], +) diff --git a/run-task.sh b/run-task.sh new file mode 100644 index 00000000000..b4bb951d719 --- /dev/null +++ b/run-task.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +./curl-artifact.sh $BUILD_TASK_ID public/executable.gz -o executable.gz +gunzip executable.gz +./executable