diff --git a/go/test_platform/result_flow/common.pb.go b/go/test_platform/result_flow/common.pb.go
new file mode 100644
index 0000000..558c69c
--- /dev/null
+++ b/go/test_platform/result_flow/common.pb.go
@@ -0,0 +1,394 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: test_platform/result_flow/common.proto
+
+package result_flow
+
+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
+
+// PubSubConfig contains the config to interact with Pub/Sub.
+type PubSubConfig struct {
+	Project              string   `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
+	Topic                string   `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"`
+	Subscription         string   `protobuf:"bytes,3,opt,name=subscription,proto3" json:"subscription,omitempty"`
+	MaxReceivingMessages int32    `protobuf:"varint,4,opt,name=max_receiving_messages,json=maxReceivingMessages,proto3" json:"max_receiving_messages,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PubSubConfig) Reset()         { *m = PubSubConfig{} }
+func (m *PubSubConfig) String() string { return proto.CompactTextString(m) }
+func (*PubSubConfig) ProtoMessage()    {}
+func (*PubSubConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8230a50564e8bbac, []int{0}
+}
+
+func (m *PubSubConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PubSubConfig.Unmarshal(m, b)
+}
+func (m *PubSubConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PubSubConfig.Marshal(b, m, deterministic)
+}
+func (m *PubSubConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PubSubConfig.Merge(m, src)
+}
+func (m *PubSubConfig) XXX_Size() int {
+	return xxx_messageInfo_PubSubConfig.Size(m)
+}
+func (m *PubSubConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_PubSubConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PubSubConfig proto.InternalMessageInfo
+
+func (m *PubSubConfig) GetProject() string {
+	if m != nil {
+		return m.Project
+	}
+	return ""
+}
+
+func (m *PubSubConfig) GetTopic() string {
+	if m != nil {
+		return m.Topic
+	}
+	return ""
+}
+
+func (m *PubSubConfig) GetSubscription() string {
+	if m != nil {
+		return m.Subscription
+	}
+	return ""
+}
+
+func (m *PubSubConfig) GetMaxReceivingMessages() int32 {
+	if m != nil {
+		return m.MaxReceivingMessages
+	}
+	return 0
+}
+
+// BuildbucketConfig contains the config to interact with Buildbucket.
+type BuildbucketConfig struct {
+	Host                 string   `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
+	Project              string   `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
+	Bucket               string   `protobuf:"bytes,3,opt,name=bucket,proto3" json:"bucket,omitempty"`
+	Builder              string   `protobuf:"bytes,4,opt,name=builder,proto3" json:"builder,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BuildbucketConfig) Reset()         { *m = BuildbucketConfig{} }
+func (m *BuildbucketConfig) String() string { return proto.CompactTextString(m) }
+func (*BuildbucketConfig) ProtoMessage()    {}
+func (*BuildbucketConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8230a50564e8bbac, []int{1}
+}
+
+func (m *BuildbucketConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BuildbucketConfig.Unmarshal(m, b)
+}
+func (m *BuildbucketConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BuildbucketConfig.Marshal(b, m, deterministic)
+}
+func (m *BuildbucketConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BuildbucketConfig.Merge(m, src)
+}
+func (m *BuildbucketConfig) XXX_Size() int {
+	return xxx_messageInfo_BuildbucketConfig.Size(m)
+}
+func (m *BuildbucketConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_BuildbucketConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BuildbucketConfig proto.InternalMessageInfo
+
+func (m *BuildbucketConfig) GetHost() string {
+	if m != nil {
+		return m.Host
+	}
+	return ""
+}
+
+func (m *BuildbucketConfig) GetProject() string {
+	if m != nil {
+		return m.Project
+	}
+	return ""
+}
+
+func (m *BuildbucketConfig) GetBucket() string {
+	if m != nil {
+		return m.Bucket
+	}
+	return ""
+}
+
+func (m *BuildbucketConfig) GetBuilder() string {
+	if m != nil {
+		return m.Builder
+	}
+	return ""
+}
+
+// BigqueryConfig contains the config to interact with Bigquery.
+type BigqueryConfig struct {
+	Project              string   `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
+	Dataset              string   `protobuf:"bytes,2,opt,name=dataset,proto3" json:"dataset,omitempty"`
+	Table                string   `protobuf:"bytes,3,opt,name=table,proto3" json:"table,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *BigqueryConfig) Reset()         { *m = BigqueryConfig{} }
+func (m *BigqueryConfig) String() string { return proto.CompactTextString(m) }
+func (*BigqueryConfig) ProtoMessage()    {}
+func (*BigqueryConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8230a50564e8bbac, []int{2}
+}
+
+func (m *BigqueryConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_BigqueryConfig.Unmarshal(m, b)
+}
+func (m *BigqueryConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_BigqueryConfig.Marshal(b, m, deterministic)
+}
+func (m *BigqueryConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_BigqueryConfig.Merge(m, src)
+}
+func (m *BigqueryConfig) XXX_Size() int {
+	return xxx_messageInfo_BigqueryConfig.Size(m)
+}
+func (m *BigqueryConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_BigqueryConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_BigqueryConfig proto.InternalMessageInfo
+
+func (m *BigqueryConfig) GetProject() string {
+	if m != nil {
+		return m.Project
+	}
+	return ""
+}
+
+func (m *BigqueryConfig) GetDataset() string {
+	if m != nil {
+		return m.Dataset
+	}
+	return ""
+}
+
+func (m *BigqueryConfig) GetTable() string {
+	if m != nil {
+		return m.Table
+	}
+	return ""
+}
+
+// Source is a wrapper for the source side configuration.
+type Source struct {
+	Pubsub               *PubSubConfig      `protobuf:"bytes,1,opt,name=pubsub,proto3" json:"pubsub,omitempty"`
+	Bb                   *BuildbucketConfig `protobuf:"bytes,2,opt,name=bb,proto3" json:"bb,omitempty"`
+	Fields               []string           `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *Source) Reset()         { *m = Source{} }
+func (m *Source) String() string { return proto.CompactTextString(m) }
+func (*Source) ProtoMessage()    {}
+func (*Source) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8230a50564e8bbac, []int{3}
+}
+
+func (m *Source) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Source.Unmarshal(m, b)
+}
+func (m *Source) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Source.Marshal(b, m, deterministic)
+}
+func (m *Source) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Source.Merge(m, src)
+}
+func (m *Source) XXX_Size() int {
+	return xxx_messageInfo_Source.Size(m)
+}
+func (m *Source) XXX_DiscardUnknown() {
+	xxx_messageInfo_Source.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Source proto.InternalMessageInfo
+
+func (m *Source) GetPubsub() *PubSubConfig {
+	if m != nil {
+		return m.Pubsub
+	}
+	return nil
+}
+
+func (m *Source) GetBb() *BuildbucketConfig {
+	if m != nil {
+		return m.Bb
+	}
+	return nil
+}
+
+func (m *Source) GetFields() []string {
+	if m != nil {
+		return m.Fields
+	}
+	return nil
+}
+
+// Target is a wrapper for the target side configuration.
+type Target struct {
+	Bq                   *BigqueryConfig `protobuf:"bytes,1,opt,name=bq,proto3" json:"bq,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *Target) Reset()         { *m = Target{} }
+func (m *Target) String() string { return proto.CompactTextString(m) }
+func (*Target) ProtoMessage()    {}
+func (*Target) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8230a50564e8bbac, []int{4}
+}
+
+func (m *Target) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Target.Unmarshal(m, b)
+}
+func (m *Target) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Target.Marshal(b, m, deterministic)
+}
+func (m *Target) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Target.Merge(m, src)
+}
+func (m *Target) XXX_Size() int {
+	return xxx_messageInfo_Target.Size(m)
+}
+func (m *Target) XXX_DiscardUnknown() {
+	xxx_messageInfo_Target.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Target proto.InternalMessageInfo
+
+func (m *Target) GetBq() *BigqueryConfig {
+	if m != nil {
+		return m.Bq
+	}
+	return nil
+}
+
+// Environment defines the configuration parameters common to
+//  the result_flow's subcommands.
+type Environment struct {
+	Source               *Source  `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"`
+	Target               *Target  `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Environment) Reset()         { *m = Environment{} }
+func (m *Environment) String() string { return proto.CompactTextString(m) }
+func (*Environment) ProtoMessage()    {}
+func (*Environment) Descriptor() ([]byte, []int) {
+	return fileDescriptor_8230a50564e8bbac, []int{5}
+}
+
+func (m *Environment) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Environment.Unmarshal(m, b)
+}
+func (m *Environment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Environment.Marshal(b, m, deterministic)
+}
+func (m *Environment) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Environment.Merge(m, src)
+}
+func (m *Environment) XXX_Size() int {
+	return xxx_messageInfo_Environment.Size(m)
+}
+func (m *Environment) XXX_DiscardUnknown() {
+	xxx_messageInfo_Environment.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Environment proto.InternalMessageInfo
+
+func (m *Environment) GetSource() *Source {
+	if m != nil {
+		return m.Source
+	}
+	return nil
+}
+
+func (m *Environment) GetTarget() *Target {
+	if m != nil {
+		return m.Target
+	}
+	return nil
+}
+
+func init() {
+	proto.RegisterType((*PubSubConfig)(nil), "test_platform.result_flow.PubSubConfig")
+	proto.RegisterType((*BuildbucketConfig)(nil), "test_platform.result_flow.BuildbucketConfig")
+	proto.RegisterType((*BigqueryConfig)(nil), "test_platform.result_flow.BigqueryConfig")
+	proto.RegisterType((*Source)(nil), "test_platform.result_flow.Source")
+	proto.RegisterType((*Target)(nil), "test_platform.result_flow.Target")
+	proto.RegisterType((*Environment)(nil), "test_platform.result_flow.Environment")
+}
+
+func init() {
+	proto.RegisterFile("test_platform/result_flow/common.proto", fileDescriptor_8230a50564e8bbac)
+}
+
+var fileDescriptor_8230a50564e8bbac = []byte{
+	// 432 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0x4d, 0x6b, 0xdc, 0x30,
+	0x10, 0xc5, 0xde, 0xc4, 0x21, 0xb3, 0xa1, 0x50, 0x11, 0x82, 0x7b, 0xdb, 0xfa, 0xd0, 0xa6, 0x50,
+	0x6c, 0x48, 0x7b, 0x29, 0x14, 0x0a, 0xbb, 0xe4, 0x58, 0x28, 0x4a, 0x4f, 0xb9, 0x2c, 0x92, 0x57,
+	0x76, 0xd4, 0x5a, 0x1a, 0xaf, 0x3e, 0xd2, 0xf4, 0xdc, 0x3f, 0xd1, 0x5b, 0xff, 0x6a, 0xb1, 0x2c,
+	0x97, 0x5d, 0x4a, 0x36, 0x37, 0x3d, 0xcd, 0xbc, 0x37, 0x4f, 0x4f, 0x0c, 0xbc, 0x72, 0xc2, 0xba,
+	0x75, 0xdf, 0x31, 0xd7, 0xa0, 0x51, 0x95, 0x11, 0xd6, 0x77, 0x6e, 0xdd, 0x74, 0xf8, 0xa3, 0xaa,
+	0x51, 0x29, 0xd4, 0x65, 0x6f, 0xd0, 0x21, 0x79, 0xb1, 0xd7, 0x57, 0xee, 0xf4, 0x15, 0xbf, 0x13,
+	0x38, 0xfb, 0xe2, 0xf9, 0x8d, 0xe7, 0x2b, 0xd4, 0x8d, 0x6c, 0x49, 0x0e, 0x27, 0xbd, 0xc1, 0x6f,
+	0xa2, 0x76, 0x79, 0xb2, 0x48, 0x2e, 0x4f, 0xe9, 0x04, 0xc9, 0x39, 0x1c, 0x3b, 0xec, 0x65, 0x9d,
+	0xa7, 0xe1, 0x7e, 0x04, 0xa4, 0x80, 0x33, 0xeb, 0xb9, 0xad, 0x8d, 0xec, 0x9d, 0x44, 0x9d, 0xcf,
+	0x42, 0x71, 0xef, 0x8e, 0xbc, 0x87, 0x0b, 0xc5, 0x1e, 0xd6, 0x46, 0xd4, 0x42, 0xde, 0x4b, 0xdd,
+	0xae, 0x95, 0xb0, 0x96, 0xb5, 0xc2, 0xe6, 0x47, 0x8b, 0xe4, 0xf2, 0x98, 0x9e, 0x2b, 0xf6, 0x40,
+	0xa7, 0xe2, 0xe7, 0x58, 0x2b, 0x2c, 0x3c, 0x5f, 0x7a, 0xd9, 0x6d, 0xb8, 0xaf, 0xbf, 0x0b, 0x17,
+	0xed, 0x11, 0x38, 0xba, 0x43, 0x3b, 0x79, 0x0b, 0xe7, 0x5d, 0xcb, 0xe9, 0xbe, 0xe5, 0x0b, 0xc8,
+	0x46, 0x76, 0xb4, 0x15, 0xd1, 0xc0, 0xe0, 0x83, 0xb4, 0x30, 0xc1, 0xc1, 0x29, 0x9d, 0x60, 0x71,
+	0x0b, 0xcf, 0x96, 0xb2, 0xdd, 0x7a, 0x61, 0x7e, 0x3e, 0x19, 0x48, 0x0e, 0x27, 0x1b, 0xe6, 0x98,
+	0x15, 0xff, 0xe6, 0x46, 0x18, 0xa2, 0x62, 0xbc, 0x13, 0x71, 0xec, 0x08, 0x8a, 0x3f, 0x09, 0x64,
+	0x37, 0xe8, 0x4d, 0x2d, 0xc8, 0x27, 0xc8, 0x7a, 0xcf, 0xad, 0xe7, 0x41, 0x73, 0x7e, 0xf5, 0xba,
+	0x7c, 0xf4, 0x8b, 0xca, 0xdd, 0xef, 0xa1, 0x91, 0x46, 0x3e, 0x42, 0xca, 0x79, 0x18, 0x3b, 0xbf,
+	0x7a, 0x7b, 0x80, 0xfc, 0x5f, 0x82, 0x34, 0xe5, 0x7c, 0xc8, 0xa5, 0x91, 0xa2, 0xdb, 0xd8, 0x7c,
+	0xb6, 0x98, 0x0d, 0xb9, 0x8c, 0xa8, 0x58, 0x41, 0xf6, 0x95, 0x99, 0x56, 0x38, 0xf2, 0x01, 0x52,
+	0xbe, 0x8d, 0xe6, 0xde, 0x1c, 0xd2, 0xdf, 0x0b, 0x8b, 0xa6, 0x7c, 0x5b, 0xfc, 0x4a, 0x60, 0x7e,
+	0xad, 0xef, 0xa5, 0x41, 0xad, 0x84, 0x1e, 0xa4, 0x32, 0x1b, 0x5e, 0x1d, 0xe5, 0x5e, 0x1e, 0x90,
+	0x1b, 0xe3, 0xa1, 0x91, 0x30, 0x50, 0x5d, 0xf0, 0x13, 0x5f, 0x7a, 0x88, 0x3a, 0x1a, 0xa7, 0x91,
+	0xb0, 0xbc, 0xbe, 0x5d, 0xb5, 0x58, 0xd6, 0x77, 0x06, 0x95, 0xf4, 0xaa, 0x44, 0xd3, 0x56, 0x13,
+	0x40, 0x5b, 0x49, 0xdd, 0x18, 0x56, 0x85, 0xed, 0xa8, 0x5a, 0xac, 0x1e, 0xdd, 0x23, 0x9e, 0x85,
+	0x9e, 0x77, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x82, 0xff, 0x66, 0x89, 0x6b, 0x03, 0x00, 0x00,
+}
diff --git a/go/test_platform/result_flow/ctp.pb.go b/go/test_platform/result_flow/ctp.pb.go
new file mode 100644
index 0000000..6917933
--- /dev/null
+++ b/go/test_platform/result_flow/ctp.pb.go
@@ -0,0 +1,193 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: test_platform/result_flow/ctp.proto
+
+package result_flow
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	timestamp "github.com/golang/protobuf/ptypes/timestamp"
+	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
+
+// Values should be consistent with https://aip.dev/216
+type CTPResponse_State int32
+
+const (
+	// Should not be used.
+	CTPResponse_STATE_UNSPECIFIED CTPResponse_State = 0
+	// Successfully pulled the CTP build IDs from Pub/Sub.
+	CTPResponse_SUCCEEDED CTPResponse_State = 1
+	// Failed to pull the CTP build IDs.
+	CTPResponse_FAILED CTPResponse_State = 2
+	// CTP command has hit the predefined timeout.
+	CTPResponse_TIMED_OUT CTPResponse_State = 3
+	// CTP command was aborted externally.
+	CTPResponse_ABORTED CTPResponse_State = 4
+)
+
+var CTPResponse_State_name = map[int32]string{
+	0: "STATE_UNSPECIFIED",
+	1: "SUCCEEDED",
+	2: "FAILED",
+	3: "TIMED_OUT",
+	4: "ABORTED",
+}
+
+var CTPResponse_State_value = map[string]int32{
+	"STATE_UNSPECIFIED": 0,
+	"SUCCEEDED":         1,
+	"FAILED":            2,
+	"TIMED_OUT":         3,
+	"ABORTED":           4,
+}
+
+func (x CTPResponse_State) String() string {
+	return proto.EnumName(CTPResponse_State_name, int32(x))
+}
+
+func (CTPResponse_State) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_0cd3889564661eb4, []int{1, 0}
+}
+
+// CTPRequest defines the input of `result_flow ctp`.
+type CTPRequest struct {
+	// How long the client could subscribe to the Pub/Sub.
+	// It should stop the subscription before the overall
+	// deadline.
+	SubscriptionDeadline *timestamp.Timestamp `protobuf:"bytes,1,opt,name=subscription_deadline,json=subscriptionDeadline,proto3" json:"subscription_deadline,omitempty"`
+	// Hard deadline for execution.
+	//
+	// CTP command should abort beyond this deadline.
+	Deadline             *timestamp.Timestamp `protobuf:"bytes,2,opt,name=deadline,proto3" json:"deadline,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *CTPRequest) Reset()         { *m = CTPRequest{} }
+func (m *CTPRequest) String() string { return proto.CompactTextString(m) }
+func (*CTPRequest) ProtoMessage()    {}
+func (*CTPRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0cd3889564661eb4, []int{0}
+}
+
+func (m *CTPRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CTPRequest.Unmarshal(m, b)
+}
+func (m *CTPRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CTPRequest.Marshal(b, m, deterministic)
+}
+func (m *CTPRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CTPRequest.Merge(m, src)
+}
+func (m *CTPRequest) XXX_Size() int {
+	return xxx_messageInfo_CTPRequest.Size(m)
+}
+func (m *CTPRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CTPRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CTPRequest proto.InternalMessageInfo
+
+func (m *CTPRequest) GetSubscriptionDeadline() *timestamp.Timestamp {
+	if m != nil {
+		return m.SubscriptionDeadline
+	}
+	return nil
+}
+
+func (m *CTPRequest) GetDeadline() *timestamp.Timestamp {
+	if m != nil {
+		return m.Deadline
+	}
+	return nil
+}
+
+// CTPResponse defines the output of `result_flow ctp`.
+type CTPResponse struct {
+	// `result_flow ctp` exits with exit code 0 unless there is an
+	// infrastructure failure. When the exit code is 0, `state` indicates the
+	// best known state of the ctp command execution (see comments on State enum).
+	State                CTPResponse_State `protobuf:"varint,1,opt,name=state,proto3,enum=test_platform.result_flow.CTPResponse_State" json:"state,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
+}
+
+func (m *CTPResponse) Reset()         { *m = CTPResponse{} }
+func (m *CTPResponse) String() string { return proto.CompactTextString(m) }
+func (*CTPResponse) ProtoMessage()    {}
+func (*CTPResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0cd3889564661eb4, []int{1}
+}
+
+func (m *CTPResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CTPResponse.Unmarshal(m, b)
+}
+func (m *CTPResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CTPResponse.Marshal(b, m, deterministic)
+}
+func (m *CTPResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CTPResponse.Merge(m, src)
+}
+func (m *CTPResponse) XXX_Size() int {
+	return xxx_messageInfo_CTPResponse.Size(m)
+}
+func (m *CTPResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_CTPResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CTPResponse proto.InternalMessageInfo
+
+func (m *CTPResponse) GetState() CTPResponse_State {
+	if m != nil {
+		return m.State
+	}
+	return CTPResponse_STATE_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterEnum("test_platform.result_flow.CTPResponse_State", CTPResponse_State_name, CTPResponse_State_value)
+	proto.RegisterType((*CTPRequest)(nil), "test_platform.result_flow.CTPRequest")
+	proto.RegisterType((*CTPResponse)(nil), "test_platform.result_flow.CTPResponse")
+}
+
+func init() {
+	proto.RegisterFile("test_platform/result_flow/ctp.proto", fileDescriptor_0cd3889564661eb4)
+}
+
+var fileDescriptor_0cd3889564661eb4 = []byte{
+	// 319 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0x41, 0x4b, 0xf3, 0x30,
+	0x18, 0x80, 0xbf, 0xee, 0x73, 0x53, 0x33, 0x94, 0x1a, 0x1c, 0xe8, 0x2e, 0xca, 0xbc, 0x78, 0x90,
+	0x04, 0x26, 0x78, 0xdf, 0x9a, 0x0c, 0x0a, 0xea, 0x46, 0x9b, 0x5e, 0xbc, 0x94, 0x6e, 0x4b, 0x6b,
+	0xa1, 0xed, 0x5b, 0x93, 0x14, 0x7f, 0x89, 0xff, 0xc1, 0x9f, 0x29, 0x6b, 0xb7, 0x51, 0x0f, 0xc3,
+	0xe3, 0x4b, 0x9e, 0xe7, 0xe1, 0x4d, 0x82, 0xee, 0x8c, 0xd4, 0x26, 0x2c, 0xb3, 0xc8, 0xc4, 0xa0,
+	0x72, 0xaa, 0xa4, 0xae, 0x32, 0x13, 0xc6, 0x19, 0x7c, 0xd2, 0x95, 0x29, 0x49, 0xa9, 0xc0, 0x00,
+	0xbe, 0xfe, 0x05, 0x91, 0x16, 0x34, 0xbc, 0x49, 0x00, 0x92, 0x4c, 0xd2, 0x1a, 0x5c, 0x56, 0x31,
+	0x35, 0x69, 0x2e, 0xb5, 0x89, 0xf2, 0xad, 0x3b, 0xfa, 0xb2, 0x10, 0x72, 0xc4, 0xc2, 0x93, 0x1f,
+	0x95, 0xd4, 0x06, 0xcf, 0xd1, 0x40, 0x57, 0x4b, 0xbd, 0x52, 0x69, 0x69, 0x52, 0x28, 0xc2, 0xb5,
+	0x8c, 0xd6, 0x59, 0x5a, 0xc8, 0x2b, 0xeb, 0xd6, 0xba, 0xef, 0x8f, 0x87, 0xa4, 0xe9, 0x91, 0x5d,
+	0x8f, 0x88, 0x5d, 0xcf, 0xbb, 0x6c, 0x8b, 0x6c, 0xeb, 0xe1, 0x27, 0x74, 0xb2, 0x6f, 0x74, 0xfe,
+	0x6c, 0xec, 0xd9, 0xd1, 0xb7, 0x85, 0xfa, 0xf5, 0x5e, 0xba, 0x84, 0x42, 0x4b, 0x3c, 0x45, 0x5d,
+	0x6d, 0x22, 0xd3, 0x2c, 0x72, 0x3e, 0x7e, 0x20, 0x07, 0xef, 0x4c, 0x5a, 0x1a, 0xf1, 0x37, 0x8e,
+	0xd7, 0xa8, 0xa3, 0x00, 0x75, 0xeb, 0x19, 0x0f, 0xd0, 0x85, 0x2f, 0x26, 0x82, 0x87, 0xc1, 0xab,
+	0xbf, 0xe0, 0x8e, 0x3b, 0x73, 0x39, 0xb3, 0xff, 0xe1, 0x33, 0x74, 0xea, 0x07, 0x8e, 0xc3, 0x39,
+	0xe3, 0xcc, 0xb6, 0x30, 0x42, 0xbd, 0xd9, 0xc4, 0x7d, 0xe6, 0xcc, 0xee, 0x6c, 0x8e, 0x84, 0xfb,
+	0xc2, 0x59, 0x38, 0x0f, 0x84, 0xfd, 0x1f, 0xf7, 0xd1, 0xf1, 0x64, 0x3a, 0xf7, 0x04, 0x67, 0xf6,
+	0xd1, 0x94, 0xbf, 0x39, 0x09, 0x90, 0xd5, 0xbb, 0x82, 0x3c, 0xad, 0x72, 0x02, 0x2a, 0xa1, 0xbb,
+	0x01, 0x34, 0x4d, 0x8b, 0x58, 0x45, 0xcd, 0xfb, 0xd3, 0x04, 0xe8, 0xc1, 0xff, 0x5c, 0xf6, 0x6a,
+	0xe6, 0xf1, 0x27, 0x00, 0x00, 0xff, 0xff, 0x2f, 0x02, 0x27, 0x77, 0xf3, 0x01, 0x00, 0x00,
+}
diff --git a/go/test_platform/result_flow/publish.pb.go b/go/test_platform/result_flow/publish.pb.go
new file mode 100644
index 0000000..2ef05f4
--- /dev/null
+++ b/go/test_platform/result_flow/publish.pb.go
@@ -0,0 +1,200 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: test_platform/result_flow/publish.proto
+
+package result_flow
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	timestamp "github.com/golang/protobuf/ptypes/timestamp"
+	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
+
+// Values should be consistent with https://aip.dev/216
+type PublishResponse_State int32
+
+const (
+	// Should not be used.
+	PublishResponse_STATE_UNSPECIFIED PublishResponse_State = 0
+	// Successfully published the build ID to Pub/Sub.
+	PublishResponse_SUCCEEDED PublishResponse_State = 1
+	// Failed to publish the build ID.
+	PublishResponse_FAILED PublishResponse_State = 2
+	// Publish has hit the predefined timeout.
+	PublishResponse_TIMED_OUT PublishResponse_State = 3
+	// The publish command was aborted externally.
+	PublishResponse_ABORTED PublishResponse_State = 4
+)
+
+var PublishResponse_State_name = map[int32]string{
+	0: "STATE_UNSPECIFIED",
+	1: "SUCCEEDED",
+	2: "FAILED",
+	3: "TIMED_OUT",
+	4: "ABORTED",
+}
+
+var PublishResponse_State_value = map[string]int32{
+	"STATE_UNSPECIFIED": 0,
+	"SUCCEEDED":         1,
+	"FAILED":            2,
+	"TIMED_OUT":         3,
+	"ABORTED":           4,
+}
+
+func (x PublishResponse_State) String() string {
+	return proto.EnumName(PublishResponse_State_name, int32(x))
+}
+
+func (PublishResponse_State) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_c45128fac736122f, []int{1, 0}
+}
+
+// PublishRequest defines the input of `result_flow publish`.
+type PublishRequest struct {
+	BuildId       int64 `protobuf:"varint,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"`
+	ParentBuildId int64 `protobuf:"varint,2,opt,name=parent_build_id,json=parentBuildId,proto3" json:"parent_build_id,omitempty"`
+	// Hard deadline for execution.
+	//
+	// Publish command should abort beyond this deadline.
+	Deadline             *timestamp.Timestamp `protobuf:"bytes,3,opt,name=deadline,proto3" json:"deadline,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *PublishRequest) Reset()         { *m = PublishRequest{} }
+func (m *PublishRequest) String() string { return proto.CompactTextString(m) }
+func (*PublishRequest) ProtoMessage()    {}
+func (*PublishRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c45128fac736122f, []int{0}
+}
+
+func (m *PublishRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PublishRequest.Unmarshal(m, b)
+}
+func (m *PublishRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PublishRequest.Marshal(b, m, deterministic)
+}
+func (m *PublishRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PublishRequest.Merge(m, src)
+}
+func (m *PublishRequest) XXX_Size() int {
+	return xxx_messageInfo_PublishRequest.Size(m)
+}
+func (m *PublishRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_PublishRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PublishRequest proto.InternalMessageInfo
+
+func (m *PublishRequest) GetBuildId() int64 {
+	if m != nil {
+		return m.BuildId
+	}
+	return 0
+}
+
+func (m *PublishRequest) GetParentBuildId() int64 {
+	if m != nil {
+		return m.ParentBuildId
+	}
+	return 0
+}
+
+func (m *PublishRequest) GetDeadline() *timestamp.Timestamp {
+	if m != nil {
+		return m.Deadline
+	}
+	return nil
+}
+
+// PublishRequest defines the output of `result_flow publish`.
+type PublishResponse struct {
+	// `result_flow publish` exits with exit code 0 unless there is an
+	// infrastructure failure. When the exit code is 0, `state` indicates the
+	// best known state of the publish execution (see comments on State enum).
+	State                PublishResponse_State `protobuf:"varint,1,opt,name=state,proto3,enum=test_platform.result_flow.PublishResponse_State" json:"state,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
+	XXX_unrecognized     []byte                `json:"-"`
+	XXX_sizecache        int32                 `json:"-"`
+}
+
+func (m *PublishResponse) Reset()         { *m = PublishResponse{} }
+func (m *PublishResponse) String() string { return proto.CompactTextString(m) }
+func (*PublishResponse) ProtoMessage()    {}
+func (*PublishResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c45128fac736122f, []int{1}
+}
+
+func (m *PublishResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PublishResponse.Unmarshal(m, b)
+}
+func (m *PublishResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PublishResponse.Marshal(b, m, deterministic)
+}
+func (m *PublishResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PublishResponse.Merge(m, src)
+}
+func (m *PublishResponse) XXX_Size() int {
+	return xxx_messageInfo_PublishResponse.Size(m)
+}
+func (m *PublishResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_PublishResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PublishResponse proto.InternalMessageInfo
+
+func (m *PublishResponse) GetState() PublishResponse_State {
+	if m != nil {
+		return m.State
+	}
+	return PublishResponse_STATE_UNSPECIFIED
+}
+
+func init() {
+	proto.RegisterEnum("test_platform.result_flow.PublishResponse_State", PublishResponse_State_name, PublishResponse_State_value)
+	proto.RegisterType((*PublishRequest)(nil), "test_platform.result_flow.PublishRequest")
+	proto.RegisterType((*PublishResponse)(nil), "test_platform.result_flow.PublishResponse")
+}
+
+func init() {
+	proto.RegisterFile("test_platform/result_flow/publish.proto", fileDescriptor_c45128fac736122f)
+}
+
+var fileDescriptor_c45128fac736122f = []byte{
+	// 340 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0xcb, 0x6e, 0xe2, 0x30,
+	0x14, 0x86, 0x27, 0x30, 0x5c, 0xc6, 0x08, 0xc8, 0x58, 0x1a, 0x09, 0xd8, 0x0c, 0x62, 0xd1, 0xb2,
+	0xb2, 0x2b, 0x2a, 0x75, 0x0f, 0x89, 0x91, 0x22, 0xb5, 0x05, 0xe5, 0xb2, 0xe9, 0x26, 0x4a, 0x1a,
+	0x27, 0x58, 0x72, 0xe2, 0xd4, 0x76, 0xd4, 0x87, 0xe8, 0xcb, 0xf4, 0x11, 0x2b, 0x92, 0x82, 0xda,
+	0x4a, 0x2c, 0x7f, 0xfb, 0xfb, 0xad, 0xcf, 0xe7, 0x80, 0x6b, 0x4d, 0x95, 0x0e, 0x4b, 0x1e, 0xe9,
+	0x54, 0xc8, 0x1c, 0x4b, 0xaa, 0x2a, 0xae, 0xc3, 0x94, 0x8b, 0x57, 0x5c, 0x56, 0x31, 0x67, 0xea,
+	0x80, 0x4a, 0x29, 0xb4, 0x80, 0xd3, 0x6f, 0x20, 0xfa, 0x02, 0xce, 0xfe, 0x67, 0x42, 0x64, 0x9c,
+	0xe2, 0x1a, 0x8c, 0xab, 0x14, 0x6b, 0x96, 0x53, 0xa5, 0xa3, 0xbc, 0x6c, 0xba, 0x8b, 0x37, 0x03,
+	0x8c, 0xf6, 0xcd, 0x6b, 0x2e, 0x7d, 0xa9, 0xa8, 0xd2, 0x70, 0x0a, 0xfa, 0x71, 0xc5, 0x78, 0x12,
+	0xb2, 0x64, 0x62, 0xcc, 0x8d, 0x65, 0xdb, 0xed, 0xd5, 0xd9, 0x49, 0xe0, 0x15, 0x18, 0x97, 0x91,
+	0xa4, 0x85, 0x0e, 0xcf, 0x44, 0xab, 0x26, 0x86, 0xcd, 0xf1, 0xe6, 0x93, 0xbb, 0x03, 0xfd, 0x84,
+	0x46, 0x09, 0x67, 0x05, 0x9d, 0xb4, 0xe7, 0xc6, 0x72, 0xb0, 0x9a, 0xa1, 0xc6, 0x04, 0x9d, 0x4c,
+	0x90, 0x7f, 0x32, 0x71, 0xcf, 0xec, 0xe2, 0xdd, 0x00, 0xe3, 0xb3, 0x8d, 0x2a, 0x45, 0xa1, 0x28,
+	0xdc, 0x82, 0x8e, 0xd2, 0x91, 0xa6, 0xb5, 0xcb, 0x68, 0x75, 0x83, 0x2e, 0xfe, 0x16, 0xfd, 0xa8,
+	0x22, 0xef, 0xd8, 0x73, 0x9b, 0xfa, 0x22, 0x00, 0x9d, 0x3a, 0xc3, 0x7f, 0xe0, 0xaf, 0xe7, 0xaf,
+	0x7d, 0x12, 0x06, 0x8f, 0xde, 0x9e, 0x58, 0xce, 0xd6, 0x21, 0xb6, 0xf9, 0x0b, 0x0e, 0xc1, 0x1f,
+	0x2f, 0xb0, 0x2c, 0x42, 0x6c, 0x62, 0x9b, 0x06, 0x04, 0xa0, 0xbb, 0x5d, 0x3b, 0xf7, 0xc4, 0x36,
+	0x5b, 0xc7, 0x2b, 0xdf, 0x79, 0x20, 0x76, 0xb8, 0x0b, 0x7c, 0xb3, 0x0d, 0x07, 0xa0, 0xb7, 0xde,
+	0xec, 0x5c, 0x9f, 0xd8, 0xe6, 0xef, 0x0d, 0x79, 0xb2, 0x32, 0x81, 0x9e, 0x0f, 0x52, 0xe4, 0xac,
+	0xca, 0x91, 0x90, 0x19, 0x3e, 0x05, 0xa1, 0x30, 0x2b, 0x52, 0x19, 0x35, 0xd3, 0xc7, 0x99, 0xc0,
+	0x17, 0x37, 0x1a, 0x77, 0x6b, 0xe6, 0xf6, 0x23, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x90, 0xa2, 0xd2,
+	0xf5, 0x01, 0x00, 0x00,
+}
diff --git a/src/test_platform/result_flow/common.proto b/src/test_platform/result_flow/common.proto
new file mode 100644
index 0000000..bab85dc
--- /dev/null
+++ b/src/test_platform/result_flow/common.proto
@@ -0,0 +1,51 @@
+// Copyright 2020 The Chromium OS 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 test_platform.result_flow;
+
+option go_package = "go.chromium.org/chromiumos/infra/proto/go/test_platform/result_flow";
+
+// PubSubConfig contains the config to interact with Pub/Sub.
+message PubSubConfig {
+    string project = 1;
+    string topic = 2;
+    string subscription = 3;
+    int32 max_receiving_messages = 4;
+}
+
+// BuildbucketConfig contains the config to interact with Buildbucket.
+message BuildbucketConfig {
+    string host = 1;
+    string project = 2;
+    string bucket = 3;
+    string builder = 4;
+}
+
+// BigqueryConfig contains the config to interact with Bigquery.
+message BigqueryConfig {
+    string project = 1;
+    string dataset = 2;
+    string table = 3;
+}
+
+// Source is a wrapper for the source side configuration.
+message Source {
+	PubSubConfig pubsub = 1;
+	BuildbucketConfig bb = 2;
+	repeated string fields = 3;
+}
+
+// Target is a wrapper for the target side configuration.
+message Target {
+	BigqueryConfig bq = 1;
+}
+
+// Environment defines the configuration parameters common to
+//  the result_flow's subcommands.
+message Environment {
+    Source source = 1;
+    Target target = 2;
+}
\ No newline at end of file
diff --git a/src/test_platform/result_flow/ctp.proto b/src/test_platform/result_flow/ctp.proto
new file mode 100644
index 0000000..e7a3fc8
--- /dev/null
+++ b/src/test_platform/result_flow/ctp.proto
@@ -0,0 +1,45 @@
+// Copyright 2020 The Chromium OS 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 test_platform.result_flow;
+
+option go_package = "go.chromium.org/chromiumos/infra/proto/go/test_platform/result_flow";
+
+import "google/protobuf/timestamp.proto";
+
+// CTPRequest defines the input of `result_flow ctp`.
+message CTPRequest {
+  // How long the client could subscribe to the Pub/Sub.
+  // It should stop the subscription before the overall
+  // deadline.
+  google.protobuf.Timestamp subscription_deadline = 1;
+  // Hard deadline for execution.
+  //
+  // CTP command should abort beyond this deadline.
+  google.protobuf.Timestamp deadline = 2;
+}
+
+// CTPResponse defines the output of `result_flow ctp`.
+message CTPResponse {
+  // Values should be consistent with https://aip.dev/216
+  enum State {
+    // Should not be used.
+    STATE_UNSPECIFIED = 0;
+    // Successfully pulled the CTP build IDs from Pub/Sub.
+    SUCCEEDED = 1;
+    // Failed to pull the CTP build IDs.
+    FAILED = 2;
+    // CTP command has hit the predefined timeout.
+    TIMED_OUT = 3;
+    // CTP command was aborted externally.
+    ABORTED = 4;
+  }
+
+  // `result_flow ctp` exits with exit code 0 unless there is an
+  // infrastructure failure. When the exit code is 0, `state` indicates the
+  // best known state of the ctp command execution (see comments on State enum).
+  State state = 1;
+}
\ No newline at end of file
diff --git a/src/test_platform/result_flow/publish.proto b/src/test_platform/result_flow/publish.proto
new file mode 100644
index 0000000..41f0c92
--- /dev/null
+++ b/src/test_platform/result_flow/publish.proto
@@ -0,0 +1,43 @@
+// Copyright 2020 The Chromium OS 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 test_platform.result_flow;
+
+option go_package = "go.chromium.org/chromiumos/infra/proto/go/test_platform/result_flow";
+
+import "google/protobuf/timestamp.proto";
+
+// PublishRequest defines the input of `result_flow publish`.
+message PublishRequest {
+    int64 build_id = 1;
+    int64 parent_build_id = 2;
+    // Hard deadline for execution.
+    //
+    // Publish command should abort beyond this deadline.
+    google.protobuf.Timestamp deadline = 3;
+}
+
+// PublishRequest defines the output of `result_flow publish`.
+message PublishResponse {
+    // Values should be consistent with https://aip.dev/216
+    enum State {
+      // Should not be used.
+      STATE_UNSPECIFIED = 0;
+      // Successfully published the build ID to Pub/Sub.
+      SUCCEEDED = 1;
+      // Failed to publish the build ID.
+      FAILED = 2;
+      // Publish has hit the predefined timeout.
+      TIMED_OUT = 3;
+      // The publish command was aborted externally.
+      ABORTED = 4;
+    }
+
+    // `result_flow publish` exits with exit code 0 unless there is an
+    // infrastructure failure. When the exit code is 0, `state` indicates the
+    // best known state of the publish execution (see comments on State enum).
+    State state = 1;
+  }
\ No newline at end of file
