batches: Introduce `ui` package and implement task execution UI in TUI and JSONLines
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"}