Skip to content

batches: Introduce `ui` package and implement task execution UI in TUI and JSONLines

Warren Gifford requested to merge mrn/task-execution-ui into main

Created by: mrnugget

This is part of https://github.com/sourcegraph/sourcegraph/issues/22766 and adds the missing task execution status updates in the -text-only output.

It does so by defining the executor.TaskExecutionUI that the Coordinator and the executor use to let the UI know about the current state of the task execution.

In order to make this happen I moved all of the UI-related things out of the main package and into a new, separate batches/ui package that contains the ui.JSONLines UI and the old TUI under a new name, ui.TUI.

Both UIs can return a TaskExecutionUI: a taskExecutionJSONLines or taskExecTUI. The latter was formerly known as batchProgressPrinter and a mess of spaghetti code.

Since the UIs are essentially event-driven it's much easier to implement a stateful UI such as taskExecTUI. It also feels quicker.


NOTE FOR REVIEWERS: A lot of code has been moved around, that's why the diff seems to large. But only the interface and its implementations and use are new.


Videos

OLD

The old TUI:

https://user-images.githubusercontent.com/1185253/127151622-f4fd04cb-bbef-4681-8953-7281f25b38af.mp4

NEW

The new TUI:

https://user-images.githubusercontent.com/1185253/127151643-78868aae-0b15-4548-b354-e4852b3e13fc.mp4

And here it is as JSON with -text-only:

Click to expand!
{"operation":"PARSING_BATCH_SPEC","timestamp":"2021-07-27T12:15:46.99Z","status":"STARTED"}
{"operation":"PARSING_BATCH_SPEC","timestamp":"2021-07-27T12:15:46.991Z","status":"SUCCESS"}
{"operation":"RESOLVING_NAMESPACE","timestamp":"2021-07-27T12:15:46.991Z","status":"STARTED"}
{"operation":"RESOLVING_NAMESPACE","timestamp":"2021-07-27T12:15:46.996Z","status":"SUCCESS","message":"Namespace: VXNlcjox"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:46.996Z","status":"STARTED"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:46.996Z","status":"PROGRESS","message":"0% done"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:47.015Z","status":"PROGRESS","message":"0% done"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:47.015Z","status":"PROGRESS","message":"20% done"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:47.015Z","status":"PROGRESS","message":"40% done"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:47.015Z","status":"PROGRESS","message":"60% done"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:47.015Z","status":"PROGRESS","message":"100% done"}
{"operation":"PREPARING_DOCKER_IMAGES","timestamp":"2021-07-27T12:15:47.015Z","status":"SUCCESS"}
{"operation":"DETERMINING_WORKSPACE_TYPE","timestamp":"2021-07-27T12:15:47.015Z","status":"STARTED"}
{"operation":"DETERMINING_WORKSPACE_TYPE","timestamp":"2021-07-27T12:15:47.015Z","status":"SUCCESS","message":"BIND"}
{"operation":"RESOLVING_REPOSITORIES","timestamp":"2021-07-27T12:15:47.015Z","status":"STARTED"}
{"operation":"RESOLVING_REPOSITORIES","timestamp":"2021-07-27T12:15:47.091Z","status":"SUCCESS","message":"Resolved 6 repositories"}
{"operation":"DETERMINING_WORKSPACES","timestamp":"2021-07-27T12:15:47.091Z","status":"STARTED"}
{"operation":"DETERMINING_WORKSPACES","timestamp":"2021-07-27T12:15:47.091Z","status":"SUCCESS","message":"Found 6 workspaces with steps to execute"}
{"operation":"CHECKING_CACHE","timestamp":"2021-07-27T12:15:47.091Z","status":"STARTED"}
{"operation":"CHECKING_CACHE","timestamp":"2021-07-27T12:15:47.091Z","status":"SUCCESS","message":"Found 0 cached changeset specs; 6 tasks need to be executed"}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.092Z","status":"STARTED","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.092Z","status":"STARTED","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.092Z","status":"PROGRESS","message":"Downloading archive","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.092Z","status":"PROGRESS","message":"Downloading archive","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.092Z","status":"STARTED","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.092Z","status":"PROGRESS","message":"Downloading archive","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.102Z","status":"PROGRESS","message":"Initializing workspace","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.104Z","status":"PROGRESS","message":"Initializing workspace","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.108Z","status":"PROGRESS","message":"Initializing workspace","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.114Z","status":"PROGRESS","message":"Preparing step 1","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.114Z","status":"PROGRESS","message":"Preparing step 1","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:47.118Z","status":"PROGRESS","message":"Preparing step 1","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:48.843Z","status":"PROGRESS","message":"echo \"this is step 1\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:49.14Z","status":"PROGRESS","message":"echo \"this is step 1\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:49.268Z","status":"PROGRESS","message":"echo \"this is step 1\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:50.041Z","status":"PROGRESS","message":"Preparing step 2","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:50.147Z","status":"PROGRESS","message":"Preparing step 2","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:50.275Z","status":"PROGRESS","message":"Preparing step 2","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:51.912Z","status":"PROGRESS","message":"echo \"this is step 2\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:52.017Z","status":"PROGRESS","message":"echo \"this is step 2\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:52.315Z","status":"PROGRESS","message":"echo \"this is step 2\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:52.829Z","status":"PROGRESS","message":"Preparing step 3","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:52.914Z","status":"PROGRESS","message":"Preparing step 3","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:53.334Z","status":"PROGRESS","message":"Preparing step 3","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:54.746Z","status":"PROGRESS","message":"echo \"this is step 3\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:54.816Z","status":"PROGRESS","message":"echo \"this is step 3\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:55.015Z","status":"PROGRESS","message":"echo \"this is step 3\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:55.579Z","status":"PROGRESS","message":"Preparing step 4","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:55.819Z","status":"PROGRESS","message":"Preparing step 4","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:55.924Z","status":"PROGRESS","message":"Preparing step 4","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:57.36Z","status":"PROGRESS","message":"echo \"this is step 4\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.063Z","status":"PROGRESS","message":"echo \"this is step 4\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.106Z","status":"PROGRESS","message":"echo \"this is step 4\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.215Z","status":"PROGRESS","message":"Calculating diff","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.217Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.217Z","status":"STARTED","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.217Z","status":"PROGRESS","message":"Downloading archive","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.93Z","status":"PROGRESS","message":"Initializing workspace","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.945Z","status":"PROGRESS","message":"Calculating diff","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.948Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.948Z","status":"STARTED","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.948Z","status":"PROGRESS","message":"Downloading archive","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:58.978Z","status":"PROGRESS","message":"Initializing workspace","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:59.014Z","status":"PROGRESS","message":"Preparing step 1","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:59.032Z","status":"PROGRESS","message":"Calculating diff","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:59.034Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:59.034Z","status":"STARTED","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:59.034Z","status":"PROGRESS","message":"Downloading archive","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:59.626Z","status":"PROGRESS","message":"Initializing workspace","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:15:59.636Z","status":"PROGRESS","message":"Preparing step 1","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:00.301Z","status":"PROGRESS","message":"echo \"this is step 1\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:00.329Z","status":"PROGRESS","message":"Preparing step 1","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:01.247Z","status":"PROGRESS","message":"Preparing step 2","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:01.32Z","status":"PROGRESS","message":"echo \"this is step 1\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:02.109Z","status":"PROGRESS","message":"echo \"this is step 1\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:02.421Z","status":"PROGRESS","message":"Preparing step 2","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:03.044Z","status":"PROGRESS","message":"echo \"this is step 2\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:03.209Z","status":"PROGRESS","message":"Preparing step 2","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:04.16Z","status":"PROGRESS","message":"Preparing step 3","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:04.629Z","status":"PROGRESS","message":"echo \"this is step 2\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:05.18Z","status":"PROGRESS","message":"echo \"this is step 2\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:05.587Z","status":"PROGRESS","message":"Preparing step 3","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:06.125Z","status":"PROGRESS","message":"echo \"this is step 3\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:06.256Z","status":"PROGRESS","message":"Preparing step 3","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:06.971Z","status":"PROGRESS","message":"Preparing step 4","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:07.286Z","status":"PROGRESS","message":"echo \"this is step 3\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:07.79Z","status":"PROGRESS","message":"echo \"this is step 3\" \u003e\u003e README.md","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:08.205Z","status":"PROGRESS","message":"Preparing step 4","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:08.767Z","status":"PROGRESS","message":"Preparing step 4","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:08.926Z","status":"PROGRESS","message":"echo \"this is step 4\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:09.863Z","status":"PROGRESS","message":"Calculating diff","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:09.868Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:09.941Z","status":"PROGRESS","message":"echo \"this is step 4\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:10.469Z","status":"PROGRESS","message":"echo \"this is step 4\" \u003e\u003e caching.txt","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:10.579Z","status":"PROGRESS","message":"Calculating diff","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:10.611Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:11.007Z","status":"PROGRESS","message":"Calculating diff","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASK","timestamp":"2021-07-27T12:16:11.06Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"BUILDING_TASK_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.06Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tiny-go-test-repository","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"BUILDING_TASK_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.061Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph/automation-testing","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"BUILDING_TASK_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.061Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/mkcert","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"BUILDING_TASK_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.061Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/titan","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"BUILDING_TASK_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.061Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/tidb","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"BUILDING_TASK_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.062Z","status":"SUCCESS","metadata":{"task":{"Repository":"github.com/sourcegraph-testing/etcd","Workspace":"","Steps":[{"run":"echo \"this is step 1\" \u003e\u003e caching.txt","container":"alpine:3","env":{}},{"run":"echo \"this is step 2\" \u003e\u003e README.md","container":"alpine:3","env":{}},{"run":"echo \"this is step 3\" \u003e\u003e README.md","container":"alpine:3","env":{},"outputs":{"myOutput":{"value":"what is up"}}},{"run":"echo \"this is step 4\" \u003e\u003e caching.txt","container":"alpine:3","env":{}}],"CachedStepResultsFound":false,"StartStep":0}}}
{"operation":"EXECUTING_TASKS","timestamp":"2021-07-27T12:16:11.062Z","status":"SUCCESS"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.062Z","status":"STARTED","message":"Sending 6 changeset specs"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.07Z","status":"PROGRESS","message":"Uploaded 1 out of 6"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.076Z","status":"PROGRESS","message":"Uploaded 2 out of 6"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.081Z","status":"PROGRESS","message":"Uploaded 3 out of 6"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.086Z","status":"PROGRESS","message":"Uploaded 4 out of 6"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.091Z","status":"PROGRESS","message":"Uploaded 5 out of 6"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.097Z","status":"PROGRESS","message":"Uploaded 6 out of 6"}
{"operation":"UPLOADING_CHANGESET_SPECS","timestamp":"2021-07-27T12:16:11.097Z","status":"SUCCESS"}
{"operation":"CREATING_BATCH_SPEC","timestamp":"2021-07-27T12:16:11.097Z","status":"STARTED"}
{"operation":"APPLYING_BATCH_SPEC","timestamp":"2021-07-27T12:16:11.105Z","status":"STARTED"}
{"operation":"APPLYING_BATCH_SPEC","timestamp":"2021-07-27T12:16:11.119Z","status":"SUCCESS","message":"https://sourcegraph.test:3443/users/mrnugget/batch-changes/text-only-output-4"}

Merge request reports

Loading