cmd/relui: remove original implementation

This is in preparation for a move to using internal/workflow.

For golang/go#47401

Change-Id: Ie58224fff4fb73d006f2ce56f17329193140a5e6
Reviewed-on: https://go-review.googlesource.com/c/build/+/347291
Trust: Alexander Rakoczy <alex@golang.org>
Run-TryBot: Alexander Rakoczy <alex@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
diff --git a/cmd/relui/main.go b/cmd/relui/main.go
index 4738f5a..660f909 100644
--- a/cmd/relui/main.go
+++ b/cmd/relui/main.go
@@ -32,7 +32,6 @@
 	}
 	http.Handle("/workflows/create", http.HandlerFunc(s.createWorkflowHandler))
 	http.Handle("/workflows/new", http.HandlerFunc(s.newWorkflowHandler))
-	http.Handle("/tasks/start", http.HandlerFunc(s.startTaskHandler))
 	http.Handle("/", fileServerHandler(static, http.HandlerFunc(s.homeHandler)))
 	port := os.Getenv("PORT")
 	if port == "" {
diff --git a/cmd/relui/protos/protos.go b/cmd/relui/protos/protos.go
deleted file mode 100644
index 295e877..0000000
--- a/cmd/relui/protos/protos.go
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package protos
-
-// Run "go generate" in this directory to update. You need to have:
-//
-// - a protoc binary (see https://github.com/golang/protobuf#installation)
-// - go get -u github.com/golang/protobuf/protoc-gen-go
-
-//go:generate protoc --proto_path=$GOPATH/src:. --go_out=plugins=grpc:. relui.proto
diff --git a/cmd/relui/protos/relui.pb.go b/cmd/relui/protos/relui.pb.go
deleted file mode 100644
index fde593f..0000000
--- a/cmd/relui/protos/relui.pb.go
+++ /dev/null
@@ -1,404 +0,0 @@
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: relui.proto
-
-package protos
-
-import (
-	fmt "fmt"
-	proto "github.com/golang/protobuf/proto"
-	math "math"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-type TaskStatus int32
-
-const (
-	TaskStatus_TASK_STATUS_UNKNOWN TaskStatus = 0
-	TaskStatus_TASK_STATUS_CREATED TaskStatus = 1
-	TaskStatus_TASK_STATUS_STARTED TaskStatus = 2
-)
-
-var TaskStatus_name = map[int32]string{
-	0: "TASK_STATUS_UNKNOWN",
-	1: "TASK_STATUS_CREATED",
-	2: "TASK_STATUS_STARTED",
-}
-
-var TaskStatus_value = map[string]int32{
-	"TASK_STATUS_UNKNOWN": 0,
-	"TASK_STATUS_CREATED": 1,
-	"TASK_STATUS_STARTED": 2,
-}
-
-func (x TaskStatus) String() string {
-	return proto.EnumName(TaskStatus_name, int32(x))
-}
-
-func (TaskStatus) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_6de8859f82adce0a, []int{0}
-}
-
-type Workflow struct {
-	// name is a unique name for a workflow, such as local_go_release. The name must be unique across
-	// all workflow configurations.
-	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	// buildable_asks is a list of tasks to be performed by the workflow.
-	BuildableTasks []*BuildableTask `protobuf:"bytes,2,rep,name=buildable_tasks,json=buildableTasks,proto3" json:"buildable_tasks,omitempty"`
-	// git_source is an optional configuration for which git source to fetch.
-	GitSource *GitSource `protobuf:"bytes,3,opt,name=git_source,json=gitSource,proto3" json:"git_source,omitempty"`
-	// id is a unique identifier generated by relui when a workflow is created.
-	Id                   string   `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *Workflow) Reset()         { *m = Workflow{} }
-func (m *Workflow) String() string { return proto.CompactTextString(m) }
-func (*Workflow) ProtoMessage()    {}
-func (*Workflow) Descriptor() ([]byte, []int) {
-	return fileDescriptor_6de8859f82adce0a, []int{0}
-}
-
-func (m *Workflow) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Workflow.Unmarshal(m, b)
-}
-func (m *Workflow) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Workflow.Marshal(b, m, deterministic)
-}
-func (m *Workflow) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Workflow.Merge(m, src)
-}
-func (m *Workflow) XXX_Size() int {
-	return xxx_messageInfo_Workflow.Size(m)
-}
-func (m *Workflow) XXX_DiscardUnknown() {
-	xxx_messageInfo_Workflow.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Workflow proto.InternalMessageInfo
-
-func (m *Workflow) GetName() string {
-	if m != nil {
-		return m.Name
-	}
-	return ""
-}
-
-func (m *Workflow) GetBuildableTasks() []*BuildableTask {
-	if m != nil {
-		return m.BuildableTasks
-	}
-	return nil
-}
-
-func (m *Workflow) GetGitSource() *GitSource {
-	if m != nil {
-		return m.GitSource
-	}
-	return nil
-}
-
-func (m *Workflow) GetId() string {
-	if m != nil {
-		return m.Id
-	}
-	return ""
-}
-
-type BuildableTask struct {
-	// name is a unique name for a task, such as fetch_go_source. The name must be unique across
-	// all workflow configurations.
-	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
-	// depends_on is the name of a task this task depends on. Artifacts from the depends_on task will be available
-	// to this task.
-	DependsOn string `protobuf:"bytes,2,opt,name=depends_on,json=dependsOn,proto3" json:"depends_on,omitempty"`
-	// task_status is the current status of a task.
-	Status TaskStatus `protobuf:"varint,3,opt,name=status,proto3,enum=protos.TaskStatus" json:"status,omitempty"`
-	// artifact_url is an optional URL to an artifact published by this task.
-	ArtifactUrl string `protobuf:"bytes,4,opt,name=artifact_url,json=artifactUrl,proto3" json:"artifact_url,omitempty"`
-	// git_source is an optional configuration for which git source to fetch.
-	GitSource *GitSource `protobuf:"bytes,5,opt,name=git_source,json=gitSource,proto3" json:"git_source,omitempty"`
-	// task_type is a unique type for a task, such as FetchGerritSource. Types are used by task runners to identify
-	// how to execute a task.
-	TaskType string `protobuf:"bytes,6,opt,name=task_type,json=taskType,proto3" json:"task_type,omitempty"`
-	// id is a unique identifier generated by relui when a buildable task is created.
-	Id                   string   `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *BuildableTask) Reset()         { *m = BuildableTask{} }
-func (m *BuildableTask) String() string { return proto.CompactTextString(m) }
-func (*BuildableTask) ProtoMessage()    {}
-func (*BuildableTask) Descriptor() ([]byte, []int) {
-	return fileDescriptor_6de8859f82adce0a, []int{1}
-}
-
-func (m *BuildableTask) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_BuildableTask.Unmarshal(m, b)
-}
-func (m *BuildableTask) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_BuildableTask.Marshal(b, m, deterministic)
-}
-func (m *BuildableTask) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_BuildableTask.Merge(m, src)
-}
-func (m *BuildableTask) XXX_Size() int {
-	return xxx_messageInfo_BuildableTask.Size(m)
-}
-func (m *BuildableTask) XXX_DiscardUnknown() {
-	xxx_messageInfo_BuildableTask.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_BuildableTask proto.InternalMessageInfo
-
-func (m *BuildableTask) GetName() string {
-	if m != nil {
-		return m.Name
-	}
-	return ""
-}
-
-func (m *BuildableTask) GetDependsOn() string {
-	if m != nil {
-		return m.DependsOn
-	}
-	return ""
-}
-
-func (m *BuildableTask) GetStatus() TaskStatus {
-	if m != nil {
-		return m.Status
-	}
-	return TaskStatus_TASK_STATUS_UNKNOWN
-}
-
-func (m *BuildableTask) GetArtifactUrl() string {
-	if m != nil {
-		return m.ArtifactUrl
-	}
-	return ""
-}
-
-func (m *BuildableTask) GetGitSource() *GitSource {
-	if m != nil {
-		return m.GitSource
-	}
-	return nil
-}
-
-func (m *BuildableTask) GetTaskType() string {
-	if m != nil {
-		return m.TaskType
-	}
-	return ""
-}
-
-func (m *BuildableTask) GetId() string {
-	if m != nil {
-		return m.Id
-	}
-	return ""
-}
-
-// StartBuildableTaskRequest is a message sent to workers to start working on a BuildableTask for a Workflow.
-type StartBuildableTaskRequest struct {
-	// workflow_id is the workflow to which the BuildableTask belongs.
-	WorkflowId string `protobuf:"bytes,1,opt,name=workflow_id,json=workflowId,proto3" json:"workflow_id,omitempty"`
-	// buildable_task_id is the id of the BuildableTask to be started.
-	BuildableTaskId string `protobuf:"bytes,2,opt,name=buildable_task_id,json=buildableTaskId,proto3" json:"buildable_task_id,omitempty"`
-	// buildable_task_type is the type of the BuildableTask to be started.
-	BuildableTaskType    string   `protobuf:"bytes,3,opt,name=buildable_task_type,json=buildableTaskType,proto3" json:"buildable_task_type,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *StartBuildableTaskRequest) Reset()         { *m = StartBuildableTaskRequest{} }
-func (m *StartBuildableTaskRequest) String() string { return proto.CompactTextString(m) }
-func (*StartBuildableTaskRequest) ProtoMessage()    {}
-func (*StartBuildableTaskRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_6de8859f82adce0a, []int{2}
-}
-
-func (m *StartBuildableTaskRequest) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_StartBuildableTaskRequest.Unmarshal(m, b)
-}
-func (m *StartBuildableTaskRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_StartBuildableTaskRequest.Marshal(b, m, deterministic)
-}
-func (m *StartBuildableTaskRequest) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_StartBuildableTaskRequest.Merge(m, src)
-}
-func (m *StartBuildableTaskRequest) XXX_Size() int {
-	return xxx_messageInfo_StartBuildableTaskRequest.Size(m)
-}
-func (m *StartBuildableTaskRequest) XXX_DiscardUnknown() {
-	xxx_messageInfo_StartBuildableTaskRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_StartBuildableTaskRequest proto.InternalMessageInfo
-
-func (m *StartBuildableTaskRequest) GetWorkflowId() string {
-	if m != nil {
-		return m.WorkflowId
-	}
-	return ""
-}
-
-func (m *StartBuildableTaskRequest) GetBuildableTaskId() string {
-	if m != nil {
-		return m.BuildableTaskId
-	}
-	return ""
-}
-
-func (m *StartBuildableTaskRequest) GetBuildableTaskType() string {
-	if m != nil {
-		return m.BuildableTaskType
-	}
-	return ""
-}
-
-// LocalStorage is the persisted data of relui. It is used in development mode for saving application state.
-type LocalStorage struct {
-	// workflows are a list of user-created workflows.
-	Workflows            []*Workflow `protobuf:"bytes,1,rep,name=workflows,proto3" json:"workflows,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
-	XXX_unrecognized     []byte      `json:"-"`
-	XXX_sizecache        int32       `json:"-"`
-}
-
-func (m *LocalStorage) Reset()         { *m = LocalStorage{} }
-func (m *LocalStorage) String() string { return proto.CompactTextString(m) }
-func (*LocalStorage) ProtoMessage()    {}
-func (*LocalStorage) Descriptor() ([]byte, []int) {
-	return fileDescriptor_6de8859f82adce0a, []int{3}
-}
-
-func (m *LocalStorage) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_LocalStorage.Unmarshal(m, b)
-}
-func (m *LocalStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_LocalStorage.Marshal(b, m, deterministic)
-}
-func (m *LocalStorage) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_LocalStorage.Merge(m, src)
-}
-func (m *LocalStorage) XXX_Size() int {
-	return xxx_messageInfo_LocalStorage.Size(m)
-}
-func (m *LocalStorage) XXX_DiscardUnknown() {
-	xxx_messageInfo_LocalStorage.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_LocalStorage proto.InternalMessageInfo
-
-func (m *LocalStorage) GetWorkflows() []*Workflow {
-	if m != nil {
-		return m.Workflows
-	}
-	return nil
-}
-
-type GitSource struct {
-	Url                  string   `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
-	Ref                  string   `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
-}
-
-func (m *GitSource) Reset()         { *m = GitSource{} }
-func (m *GitSource) String() string { return proto.CompactTextString(m) }
-func (*GitSource) ProtoMessage()    {}
-func (*GitSource) Descriptor() ([]byte, []int) {
-	return fileDescriptor_6de8859f82adce0a, []int{4}
-}
-
-func (m *GitSource) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_GitSource.Unmarshal(m, b)
-}
-func (m *GitSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_GitSource.Marshal(b, m, deterministic)
-}
-func (m *GitSource) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_GitSource.Merge(m, src)
-}
-func (m *GitSource) XXX_Size() int {
-	return xxx_messageInfo_GitSource.Size(m)
-}
-func (m *GitSource) XXX_DiscardUnknown() {
-	xxx_messageInfo_GitSource.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_GitSource proto.InternalMessageInfo
-
-func (m *GitSource) GetUrl() string {
-	if m != nil {
-		return m.Url
-	}
-	return ""
-}
-
-func (m *GitSource) GetRef() string {
-	if m != nil {
-		return m.Ref
-	}
-	return ""
-}
-
-func init() {
-	proto.RegisterEnum("protos.TaskStatus", TaskStatus_name, TaskStatus_value)
-	proto.RegisterType((*Workflow)(nil), "protos.Workflow")
-	proto.RegisterType((*BuildableTask)(nil), "protos.BuildableTask")
-	proto.RegisterType((*StartBuildableTaskRequest)(nil), "protos.StartBuildableTaskRequest")
-	proto.RegisterType((*LocalStorage)(nil), "protos.LocalStorage")
-	proto.RegisterType((*GitSource)(nil), "protos.GitSource")
-}
-
-func init() { proto.RegisterFile("relui.proto", fileDescriptor_6de8859f82adce0a) }
-
-var fileDescriptor_6de8859f82adce0a = []byte{
-	// 434 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0xd1, 0x6e, 0xd3, 0x30,
-	0x14, 0xc5, 0xe9, 0x28, 0xcb, 0xcd, 0xe8, 0x5a, 0x4f, 0x88, 0x20, 0x84, 0x28, 0x7d, 0xaa, 0xfa,
-	0x50, 0x50, 0x79, 0x9f, 0x54, 0x60, 0x42, 0xd3, 0x50, 0x27, 0xc5, 0xa9, 0xfa, 0x68, 0xb9, 0xb5,
-	0x5b, 0x59, 0x0d, 0x75, 0xb1, 0x1d, 0x4d, 0xfb, 0x13, 0x1e, 0xf9, 0x44, 0x3e, 0x01, 0xd9, 0x89,
-	0x37, 0x12, 0xf1, 0xc0, 0x53, 0x6e, 0xee, 0x39, 0xb9, 0x3e, 0xe7, 0x5c, 0x07, 0x12, 0x2d, 0x8a,
-	0x52, 0x4e, 0x8f, 0x5a, 0x59, 0x85, 0xbb, 0xfe, 0x61, 0x46, 0xbf, 0x10, 0x9c, 0xae, 0x94, 0xde,
-	0x6f, 0x0b, 0x75, 0x87, 0x31, 0x9c, 0x1c, 0xd8, 0x77, 0x91, 0xa2, 0x21, 0x1a, 0xc7, 0x99, 0xaf,
-	0xf1, 0x25, 0x9c, 0xaf, 0x4b, 0x59, 0x70, 0xb6, 0x2e, 0x04, 0xb5, 0xcc, 0xec, 0x4d, 0x1a, 0x0d,
-	0x3b, 0xe3, 0x64, 0xf6, 0xa2, 0x9a, 0x64, 0xa6, 0x9f, 0x02, 0x9c, 0x33, 0xb3, 0xcf, 0x7a, 0xeb,
-	0xbf, 0x5f, 0x0d, 0xfe, 0x00, 0xb0, 0x93, 0x96, 0x1a, 0x55, 0xea, 0x8d, 0x48, 0x3b, 0x43, 0x34,
-	0x4e, 0x66, 0x83, 0xf0, 0xe9, 0x57, 0x69, 0x89, 0x07, 0xb2, 0x78, 0x17, 0x4a, 0xdc, 0x83, 0x48,
-	0xf2, 0xf4, 0xc4, 0x6b, 0x88, 0x24, 0x1f, 0xfd, 0x46, 0xf0, 0xbc, 0x71, 0xc6, 0x3f, 0x75, 0xbe,
-	0x01, 0xe0, 0xe2, 0x28, 0x0e, 0xdc, 0x50, 0x75, 0x48, 0x23, 0x8f, 0xc4, 0x75, 0xe7, 0xf6, 0x80,
-	0x27, 0xd0, 0x35, 0x96, 0xd9, 0xd2, 0x78, 0x09, 0xbd, 0x19, 0x0e, 0x12, 0xdc, 0x40, 0xe2, 0x91,
-	0xac, 0x66, 0xe0, 0x77, 0x70, 0xc6, 0xb4, 0x95, 0x5b, 0xb6, 0xb1, 0xb4, 0xd4, 0x45, 0x2d, 0x25,
-	0x09, 0xbd, 0xa5, 0x2e, 0x5a, 0xae, 0x9e, 0xfe, 0x87, 0xab, 0xd7, 0x10, 0xbb, 0xf4, 0xa8, 0xbd,
-	0x3f, 0x8a, 0xb4, 0xeb, 0x27, 0x9e, 0xba, 0x46, 0x7e, 0x7f, 0x0c, 0x96, 0x9f, 0x3d, 0x58, 0xfe,
-	0x89, 0xe0, 0x15, 0xb1, 0x4c, 0xdb, 0x66, 0xb6, 0xe2, 0x47, 0x29, 0x8c, 0xc5, 0x6f, 0x21, 0xb9,
-	0xab, 0x57, 0x46, 0x25, 0xaf, 0x53, 0x80, 0xd0, 0xba, 0xe6, 0x78, 0x02, 0x83, 0xe6, 0xce, 0x1c,
-	0xad, 0x8a, 0xe4, 0xbc, 0xb1, 0x9e, 0x6b, 0x8e, 0xa7, 0x70, 0xd1, 0xe2, 0x7a, 0x85, 0x1d, 0xcf,
-	0x1e, 0x34, 0xd8, 0x4e, 0xea, 0xe8, 0x12, 0xce, 0xbe, 0xa9, 0x0d, 0x2b, 0x88, 0x55, 0x9a, 0xed,
-	0x04, 0x9e, 0x42, 0x1c, 0x4e, 0x36, 0x29, 0xf2, 0x37, 0xa3, 0x1f, 0x82, 0x08, 0x17, 0x2b, 0x7b,
-	0xa4, 0x8c, 0xde, 0x43, 0xfc, 0x90, 0x0f, 0xee, 0x43, 0xc7, 0x05, 0x5c, 0x39, 0x70, 0xa5, 0xeb,
-	0x68, 0xb1, 0xad, 0xc5, 0xba, 0x72, 0xb2, 0x02, 0x78, 0xdc, 0x11, 0x7e, 0x09, 0x17, 0xf9, 0x9c,
-	0xdc, 0x50, 0x92, 0xcf, 0xf3, 0x25, 0xa1, 0xcb, 0xc5, 0xcd, 0xe2, 0x76, 0xb5, 0xe8, 0x3f, 0x69,
-	0x03, 0x9f, 0xb3, 0xab, 0x79, 0x7e, 0xf5, 0xa5, 0x8f, 0xda, 0x00, 0xc9, 0xe7, 0x99, 0x03, 0xa2,
-	0x75, 0xf5, 0x0b, 0x7c, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0xa6, 0xee, 0x56, 0xcb, 0x18, 0x03,
-	0x00, 0x00,
-}
diff --git a/cmd/relui/protos/relui.proto b/cmd/relui/protos/relui.proto
deleted file mode 100644
index 933a1cf..0000000
--- a/cmd/relui/protos/relui.proto
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright 2020 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-syntax = "proto3";
-
-package protos;
-
-message Workflow {
-  // name is a unique name for a workflow, such as local_go_release. The name must be unique across
-  // all workflow configurations.
-  string name = 1;
-
-  // buildable_asks is a list of tasks to be performed by the workflow.
-  repeated BuildableTask buildable_tasks = 2;
-
-  // git_source is an optional configuration for which git source to fetch.
-  GitSource git_source = 3;
-
-  // id is a unique identifier generated by relui when a workflow is created.
-  string id = 4;
-}
-
-message BuildableTask {
-  // name is a unique name for a task, such as fetch_go_source. The name must be unique across
-  // all workflow configurations.
-  string name = 1;
-
-  // depends_on is the name of a task this task depends on. Artifacts from the depends_on task will be available
-  // to this task.
-  string depends_on = 2;
-
-  // task_status is the current status of a task.
-  TaskStatus status = 3;
-
-  // artifact_url is an optional URL to an artifact published by this task.
-  string artifact_url = 4;
-
-  // git_source is an optional configuration for which git source to fetch.
-  GitSource git_source = 5;
-
-  // task_type is a unique type for a task, such as FetchGerritSource. Types are used by task runners to identify
-  // how to execute a task.
-  string task_type = 6;
-
-  // id is a unique identifier generated by relui when a buildable task is created.
-  string id = 7;
-}
-
-// StartBuildableTaskRequest is a message sent to workers to start working on a BuildableTask for a Workflow.
-message StartBuildableTaskRequest {
-  // workflow_id is the workflow to which the BuildableTask belongs.
-  string workflow_id = 1;
-
-  // buildable_task_id is the id of the BuildableTask to be started.
-  string buildable_task_id = 2;
-
-  // buildable_task_type is the type of the BuildableTask to be started.
-  string buildable_task_type = 3;
-}
-
-// LocalStorage is the persisted data of relui. It is used in development mode for saving application state.
-message LocalStorage {
-  // workflows are a list of user-created workflows.
-  repeated Workflow workflows = 1;
-}
-
-message GitSource {
-  string url = 1;
-  string ref = 2;
-}
-
-enum TaskStatus {
-  TASK_STATUS_UNKNOWN = 0;
-  TASK_STATUS_CREATED = 1;
-  TASK_STATUS_STARTED = 2;
-}
diff --git a/cmd/relui/store.go b/cmd/relui/store.go
index 537365a..ea200c9 100644
--- a/cmd/relui/store.go
+++ b/cmd/relui/store.go
@@ -11,25 +11,19 @@
 	"context"
 	"errors"
 	"fmt"
-	"log"
 
-	"cloud.google.com/go/datastore"
-	"github.com/googleapis/google-cloud-go-testing/datastore/dsiface"
 	"github.com/jackc/pgx/v4"
 	"github.com/jackc/pgx/v4/pgxpool"
-	reluipb "golang.org/x/build/cmd/relui/protos"
 )
 
 var errDBNotExist = errors.New("database does not exist")
 
 // store is a persistence interface for saving data.
 type store interface {
-	AddWorkflow(workflow *reluipb.Workflow) error
-	BuildableTask(workflowId, id string) *reluipb.BuildableTask
-	Workflow(id string) *reluipb.Workflow
-	Workflows() []*reluipb.Workflow
 }
 
+var _ store = (*pgStore)(nil)
+
 // pgStore is a store backed by a Postgres database.
 type pgStore struct {
 	db *pgxpool.Pool
@@ -122,65 +116,3 @@
 	}
 	return exists == 1, nil
 }
-
-func (*pgStore) AddWorkflow(workflow *reluipb.Workflow) error {
-	return nil
-}
-
-func (*pgStore) BuildableTask(workflowId, id string) *reluipb.BuildableTask {
-	return nil
-}
-
-func (*pgStore) Workflow(id string) *reluipb.Workflow {
-	return nil
-}
-
-func (*pgStore) Workflows() []*reluipb.Workflow {
-	return nil
-}
-
-var _ store = (*dsStore)(nil)
-
-// dsStore is a store backed by Google Cloud Datastore.
-type dsStore struct {
-	client dsiface.Client
-}
-
-// AddWorkflow adds a reluipb.Workflow to the database.
-func (d *dsStore) AddWorkflow(wf *reluipb.Workflow) error {
-	key := datastore.NameKey("Workflow", wf.GetId(), nil)
-	_, err := d.client.Put(context.TODO(), key, wf)
-	return err
-}
-
-// BuildableTask fetches a reluipb.BuildableTask from the database.
-func (d *dsStore) BuildableTask(workflowId, id string) *reluipb.BuildableTask {
-	wf := d.Workflow(workflowId)
-	for _, bt := range wf.GetBuildableTasks() {
-		if bt.GetId() == id {
-			return bt
-		}
-	}
-	return nil
-}
-
-// Workflow fetches a reluipb.Workflow from the database.
-func (d *dsStore) Workflow(id string) *reluipb.Workflow {
-	key := datastore.NameKey("Workflow", id, nil)
-	wf := new(reluipb.Workflow)
-	if err := d.client.Get(context.TODO(), key, wf); err != nil {
-		log.Printf("d.client.Get(_, %q, %v) = %v", key, wf, err)
-		return nil
-	}
-	return wf
-}
-
-// Workflows returns all reluipb.Workflow entities from the database.
-func (d *dsStore) Workflows() []*reluipb.Workflow {
-	var wfs []*reluipb.Workflow
-	if _, err := d.client.GetAll(context.TODO(), datastore.NewQuery("Workflow"), &wfs); err != nil {
-		log.Printf("d.client.GetAll(_, %#v, %v) = %v", datastore.NewQuery("Workflow"), &wfs, err)
-		return nil
-	}
-	return wfs
-}
diff --git a/cmd/relui/web.go b/cmd/relui/web.go
index bc50eef..034b629 100644
--- a/cmd/relui/web.go
+++ b/cmd/relui/web.go
@@ -15,13 +15,7 @@
 	"log"
 	"mime"
 	"net/http"
-	"os"
 	"path"
-	"path/filepath"
-
-	"github.com/golang/protobuf/proto"
-	"github.com/google/uuid"
-	reluipb "golang.org/x/build/cmd/relui/protos"
 )
 
 // fileServerHandler returns a http.Handler rooted at root. It will
@@ -50,21 +44,18 @@
 
 // server implements the http handlers for relui.
 type server struct {
-	// configs are all configured release workflows.
-	configs []*reluipb.Workflow
-
 	// store is for persisting application state.
 	store store
 }
 
 type homeResponse struct {
-	Workflows []*reluipb.Workflow
+	Workflows []interface{}
 }
 
 // homeHandler renders the homepage.
 func (s *server) homeHandler(w http.ResponseWriter, _ *http.Request) {
 	out := bytes.Buffer{}
-	if err := homeTmpl.Execute(&out, homeResponse{Workflows: s.store.Workflows()}); err != nil {
+	if err := homeTmpl.Execute(&out, homeResponse{}); err != nil {
 		log.Printf("homeHandler: %v", err)
 		http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
 		return
@@ -84,53 +75,6 @@
 }
 
 // createWorkflowHandler persists a new workflow in the datastore.
-func (s *server) createWorkflowHandler(w http.ResponseWriter, r *http.Request) {
-	if err := r.ParseForm(); err != nil {
-		http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
-		return
-	}
-	ref := r.Form.Get("workflow.revision")
-	if ref == "" {
-		// TODO(golang.org/issue/40279) - render a better error in the form.
-		http.Error(w, "workflow revision is required", http.StatusBadRequest)
-		return
-	}
-	if len(s.configs) == 0 {
-		http.Error(w, "Unable to create workflow: no workflows configured", http.StatusInternalServerError)
-		return
-	}
-	// Always create the first workflow for now, until we have more.
-	wf := proto.Clone(s.configs[0]).(*reluipb.Workflow)
-	wf.Id = uuid.New().String()
-	for _, t := range wf.GetBuildableTasks() {
-		t.Id = uuid.New().String()
-	}
-	wf.GitSource = &reluipb.GitSource{Ref: ref}
-	if err := s.store.AddWorkflow(wf); err != nil {
-		log.Printf("Error adding workflow: s.store.AddWorkflow(%v) = %v", wf, err)
-		http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
-		return
-	}
-	http.Redirect(w, r, "/", http.StatusSeeOther)
-}
-
-func (s *server) startTaskHandler(w http.ResponseWriter, r *http.Request) {
-	bt := s.store.BuildableTask(r.PostFormValue("workflow.id"), r.PostFormValue("task.id"))
-	if bt == nil {
-		http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
-		return
-	}
-	http.Redirect(w, r, "/", http.StatusSeeOther)
-}
-
-// relativeFile returns the path to the provided file or directory,
-// conditionally prepending a relative path depending on the environment.
-//
-// In tests the current directory is ".", but the command may be running from the module root.
-func relativeFile(base string) string {
-	// Check to see if it is in "." first.
-	if _, err := os.Stat(base); err == nil {
-		return base
-	}
-	return filepath.Join("cmd/relui", base)
+func (s *server) createWorkflowHandler(w http.ResponseWriter, _ *http.Request) {
+	http.Error(w, "Unable to create workflow: no workflows configured", http.StatusInternalServerError)
 }
diff --git a/cmd/relui/web_test.go b/cmd/relui/web_test.go
index 8952580..4b4f2bf 100644
--- a/cmd/relui/web_test.go
+++ b/cmd/relui/web_test.go
@@ -12,12 +12,7 @@
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
-	"net/url"
-	"strings"
 	"testing"
-
-	reluipb "golang.org/x/build/cmd/relui/protos"
-	"golang.org/x/build/internal/datastore/fake"
 )
 
 // testStatic is our static web server content.
@@ -94,7 +89,7 @@
 	req := httptest.NewRequest(http.MethodGet, "/", nil)
 	w := httptest.NewRecorder()
 
-	s := &server{store: &dsStore{client: &fake.Client{}}}
+	s := &server{}
 	s.homeHandler(w, req)
 	resp := w.Result()
 
@@ -107,7 +102,7 @@
 	req := httptest.NewRequest(http.MethodGet, "/workflows/new", nil)
 	w := httptest.NewRecorder()
 
-	s := &server{store: &dsStore{client: &fake.Client{}}}
+	s := &server{}
 	s.newWorkflowHandler(w, req)
 	resp := w.Result()
 
@@ -115,136 +110,3 @@
 		t.Errorf("rep.StatusCode = %d, wanted %d", resp.StatusCode, http.StatusOK)
 	}
 }
-
-func TestServerCreateWorkflowHandler(t *testing.T) {
-	config := []*reluipb.Workflow{
-		{
-			Name:           "test_workflow",
-			BuildableTasks: []*reluipb.BuildableTask{{Name: "test_task"}},
-		},
-	}
-	cases := []struct {
-		desc        string
-		params      url.Values
-		wantCode    int
-		wantHeaders map[string]string
-	}{
-		{
-			desc:     "bad request",
-			wantCode: http.StatusBadRequest,
-		},
-		{
-			desc:     "successful creation",
-			params:   url.Values{"workflow.revision": []string{"abc"}},
-			wantCode: http.StatusSeeOther,
-			wantHeaders: map[string]string{
-				"Location": "/",
-			},
-		},
-	}
-	for _, c := range cases {
-		t.Run(c.desc, func(t *testing.T) {
-			req := httptest.NewRequest(http.MethodPost, "/workflows/create", strings.NewReader(c.params.Encode()))
-			req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
-			w := httptest.NewRecorder()
-
-			s := &server{store: &dsStore{client: &fake.Client{}}, configs: config}
-			s.createWorkflowHandler(w, req)
-			resp := w.Result()
-
-			if resp.StatusCode != c.wantCode {
-				t.Errorf("rep.StatusCode = %d, wanted %d", resp.StatusCode, c.wantCode)
-			}
-			for k, v := range c.wantHeaders {
-				if resp.Header.Get(k) != v {
-					t.Errorf("resp.Header.Get(%q) = %q, wanted %q", k, resp.Header.Get(k), v)
-				}
-			}
-			if c.wantCode == http.StatusBadRequest {
-				return
-			}
-			wfs := s.store.Workflows()
-			if len(wfs) != 1 {
-				t.Fatalf("len(wfs) = %d, wanted %d", len(wfs), 1)
-			}
-			if wfs[0].GetId() == "" {
-				t.Errorf("s.Store.Workflows[0].GetId() = %q, wanted not empty", wfs[0].GetId())
-			}
-			if wfs[0].GetBuildableTasks()[0].GetId() == "" {
-				t.Errorf("s.Store.Workflows[0].GetBuildableTasks()[0].GetId() = %q, wanted not empty", wfs[0].GetId())
-			}
-		})
-	}
-}
-
-func TestServerStartTaskHandler(t *testing.T) {
-	s := server{store: &dsStore{client: &fake.Client{}}}
-	wf := &reluipb.Workflow{
-		Id:   "someworkflow",
-		Name: "test_workflow",
-		BuildableTasks: []*reluipb.BuildableTask{{
-			Name:     "test_task",
-			TaskType: "TestTask",
-			Id:       "sometask",
-		}},
-	}
-	if err := s.store.AddWorkflow(wf); err != nil {
-		t.Fatalf("store.AddWorkflow(%v) = %v, wanted no error", wf, err)
-	}
-	params := url.Values{"workflow.id": []string{"someworkflow"}, "task.id": []string{"sometask"}}
-	req := httptest.NewRequest(http.MethodPost, "/tasks/start", strings.NewReader(params.Encode()))
-	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
-
-	w := httptest.NewRecorder()
-	s.startTaskHandler(w, req)
-	resp := w.Result()
-
-	if resp.StatusCode != http.StatusSeeOther {
-		t.Errorf("resp.StatusCode = %d, wanted %d", resp.StatusCode, http.StatusSeeOther)
-	}
-	if resp.Header.Get("Location") != "/" {
-		t.Errorf("resp.Header.Get(%q) = %q, wanted %q", "Location", resp.Header.Get("Location"), "/")
-	}
-}
-
-func TestStartTaskHandlerErrors(t *testing.T) {
-	wf := &reluipb.Workflow{
-		Id:   "someworkflow",
-		Name: "test_workflow",
-		BuildableTasks: []*reluipb.BuildableTask{{
-			Name:     "test_task",
-			TaskType: "TestTask",
-			Id:       "sometask",
-		}},
-	}
-
-	cases := []struct {
-		desc     string
-		params   url.Values
-		wantCode int
-	}{
-		{
-			desc:     "task not found",
-			params:   url.Values{"workflow.id": []string{"someworkflow"}, "task.id": []string{"notexist"}},
-			wantCode: http.StatusNotFound,
-		},
-	}
-	for _, c := range cases {
-		t.Run(c.desc, func(t *testing.T) {
-			s := server{store: &dsStore{client: &fake.Client{}}}
-			if err := s.store.AddWorkflow(wf); err != nil {
-				t.Fatalf("store.AddWorkflow(%v) = %v, wanted no error", wf, err)
-			}
-			req := httptest.NewRequest(http.MethodPost, "/tasks/start", strings.NewReader(c.params.Encode()))
-			req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
-
-			w := httptest.NewRecorder()
-			s.startTaskHandler(w, req)
-			resp := w.Result()
-
-			if resp.StatusCode != c.wantCode {
-				t.Errorf("resp.StatusCode = %d, wanted %d", resp.StatusCode, c.wantCode)
-			}
-		})
-	}
-}