v0.1.0 cbb8ad6

exec.pb.go RawHistoryFolder

1// SPDX-License-Identifier: MIT
2
3// Internal wire format between the host process of ermite-runner and the
4// executor running inside a sandbox (vsock in a micro-VM, Unix socket in a
5// container). Frames are length-prefixed on the stream (see frame.go); this file
6// defines the payload. It is internal to ermite-runner: no compatibility is
7// promised between runner versions, which is safe because the host attaches its
8// own executable to every sandbox.
9
10// Code generated by protoc-gen-go. DO NOT EDIT.
11// versions:
12// 	protoc-gen-go v1.36.12
13// 	protoc        (unknown)
14// source: exec.proto
15
16package execpb
17
18import (
19	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
20	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
21	reflect "reflect"
22	sync "sync"
23	unsafe "unsafe"
24)
25
26const (
27	// Verify that this generated code is sufficiently up-to-date.
28	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
29	// Verify that runtime/protoimpl is sufficiently up-to-date.
30	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
31)
32
33type StreamKind int32
34
35const (
36	StreamKind_STREAM_KIND_UNSPECIFIED StreamKind = 0
37	StreamKind_STREAM_KIND_STDOUT      StreamKind = 1
38	StreamKind_STREAM_KIND_STDERR      StreamKind = 2
39)
40
41// Enum value maps for StreamKind.
42var (
43	StreamKind_name = map[int32]string{
44		0: "STREAM_KIND_UNSPECIFIED",
45		1: "STREAM_KIND_STDOUT",
46		2: "STREAM_KIND_STDERR",
47	}
48	StreamKind_value = map[string]int32{
49		"STREAM_KIND_UNSPECIFIED": 0,
50		"STREAM_KIND_STDOUT":      1,
51		"STREAM_KIND_STDERR":      2,
52	}
53)
54
55func (x StreamKind) Enum() *StreamKind {
56	p := new(StreamKind)
57	*p = x
58	return p
59}
60
61func (x StreamKind) String() string {
62	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
63}
64
65func (StreamKind) Descriptor() protoreflect.EnumDescriptor {
66	return file_exec_proto_enumTypes[0].Descriptor()
67}
68
69func (StreamKind) Type() protoreflect.EnumType {
70	return &file_exec_proto_enumTypes[0]
71}
72
73func (x StreamKind) Number() protoreflect.EnumNumber {
74	return protoreflect.EnumNumber(x)
75}
76
77// Deprecated: Use StreamKind.Descriptor instead.
78func (StreamKind) EnumDescriptor() ([]byte, []int) {
79	return file_exec_proto_rawDescGZIP(), []int{0}
80}
81
82type CancelKind int32
83
84const (
85	CancelKind_CANCEL_KIND_UNSPECIFIED CancelKind = 0 // same as USER
86	CancelKind_CANCEL_KIND_USER        CancelKind = 1
87	CancelKind_CANCEL_KIND_TIMEOUT     CancelKind = 2
88	CancelKind_CANCEL_KIND_SHUTDOWN    CancelKind = 3
89)
90
91// Enum value maps for CancelKind.
92var (
93	CancelKind_name = map[int32]string{
94		0: "CANCEL_KIND_UNSPECIFIED",
95		1: "CANCEL_KIND_USER",
96		2: "CANCEL_KIND_TIMEOUT",
97		3: "CANCEL_KIND_SHUTDOWN",
98	}
99	CancelKind_value = map[string]int32{
100		"CANCEL_KIND_UNSPECIFIED": 0,
101		"CANCEL_KIND_USER":        1,
102		"CANCEL_KIND_TIMEOUT":     2,
103		"CANCEL_KIND_SHUTDOWN":    3,
104	}
105)
106
107func (x CancelKind) Enum() *CancelKind {
108	p := new(CancelKind)
109	*p = x
110	return p
111}
112
113func (x CancelKind) String() string {
114	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
115}
116
117func (CancelKind) Descriptor() protoreflect.EnumDescriptor {
118	return file_exec_proto_enumTypes[1].Descriptor()
119}
120
121func (CancelKind) Type() protoreflect.EnumType {
122	return &file_exec_proto_enumTypes[1]
123}
124
125func (x CancelKind) Number() protoreflect.EnumNumber {
126	return protoreflect.EnumNumber(x)
127}
128
129// Deprecated: Use CancelKind.Descriptor instead.
130func (CancelKind) EnumDescriptor() ([]byte, []int) {
131	return file_exec_proto_rawDescGZIP(), []int{1}
132}
133
134type StepConclusion int32
135
136const (
137	StepConclusion_STEP_CONCLUSION_UNSPECIFIED StepConclusion = 0
138	StepConclusion_STEP_CONCLUSION_SUCCESS     StepConclusion = 1
139	StepConclusion_STEP_CONCLUSION_FAILURE     StepConclusion = 2
140	StepConclusion_STEP_CONCLUSION_CANCELLED   StepConclusion = 3
141	StepConclusion_STEP_CONCLUSION_SKIPPED     StepConclusion = 4
142	StepConclusion_STEP_CONCLUSION_TIMED_OUT   StepConclusion = 5 // jobs only
143)
144
145// Enum value maps for StepConclusion.
146var (
147	StepConclusion_name = map[int32]string{
148		0: "STEP_CONCLUSION_UNSPECIFIED",
149		1: "STEP_CONCLUSION_SUCCESS",
150		2: "STEP_CONCLUSION_FAILURE",
151		3: "STEP_CONCLUSION_CANCELLED",
152		4: "STEP_CONCLUSION_SKIPPED",
153		5: "STEP_CONCLUSION_TIMED_OUT",
154	}
155	StepConclusion_value = map[string]int32{
156		"STEP_CONCLUSION_UNSPECIFIED": 0,
157		"STEP_CONCLUSION_SUCCESS":     1,
158		"STEP_CONCLUSION_FAILURE":     2,
159		"STEP_CONCLUSION_CANCELLED":   3,
160		"STEP_CONCLUSION_SKIPPED":     4,
161		"STEP_CONCLUSION_TIMED_OUT":   5,
162	}
163)
164
165func (x StepConclusion) Enum() *StepConclusion {
166	p := new(StepConclusion)
167	*p = x
168	return p
169}
170
171func (x StepConclusion) String() string {
172	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
173}
174
175func (StepConclusion) Descriptor() protoreflect.EnumDescriptor {
176	return file_exec_proto_enumTypes[2].Descriptor()
177}
178
179func (StepConclusion) Type() protoreflect.EnumType {
180	return &file_exec_proto_enumTypes[2]
181}
182
183func (x StepConclusion) Number() protoreflect.EnumNumber {
184	return protoreflect.EnumNumber(x)
185}
186
187// Deprecated: Use StepConclusion.Descriptor instead.
188func (StepConclusion) EnumDescriptor() ([]byte, []int) {
189	return file_exec_proto_rawDescGZIP(), []int{2}
190}
191
192// Frame is the only message on the stream.
193type Frame struct {
194	state protoimpl.MessageState `protogen:"open.v1"`
195	// Types that are valid to be assigned to Body:
196	//
197	//	*Frame_Hello
198	//	*Frame_Run
199	//	*Frame_Output
200	//	*Frame_Exit
201	//	*Frame_Cancel
202	//	*Frame_StepStarted
203	//	*Frame_StepCompleted
204	//	*Frame_Log
205	//	*Frame_JobResult
206	Body          isFrame_Body `protobuf_oneof:"body"`
207	unknownFields protoimpl.UnknownFields
208	sizeCache     protoimpl.SizeCache
209}
210
211func (x *Frame) Reset() {
212	*x = Frame{}
213	mi := &file_exec_proto_msgTypes[0]
214	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
215	ms.StoreMessageInfo(mi)
216}
217
218func (x *Frame) String() string {
219	return protoimpl.X.MessageStringOf(x)
220}
221
222func (*Frame) ProtoMessage() {}
223
224func (x *Frame) ProtoReflect() protoreflect.Message {
225	mi := &file_exec_proto_msgTypes[0]
226	if x != nil {
227		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
228		if ms.LoadMessageInfo() == nil {
229			ms.StoreMessageInfo(mi)
230		}
231		return ms
232	}
233	return mi.MessageOf(x)
234}
235
236// Deprecated: Use Frame.ProtoReflect.Descriptor instead.
237func (*Frame) Descriptor() ([]byte, []int) {
238	return file_exec_proto_rawDescGZIP(), []int{0}
239}
240
241func (x *Frame) GetBody() isFrame_Body {
242	if x != nil {
243		return x.Body
244	}
245	return nil
246}
247
248func (x *Frame) GetHello() *Hello {
249	if x != nil {
250		if x, ok := x.Body.(*Frame_Hello); ok {
251			return x.Hello
252		}
253	}
254	return nil
255}
256
257func (x *Frame) GetRun() *Run {
258	if x != nil {
259		if x, ok := x.Body.(*Frame_Run); ok {
260			return x.Run
261		}
262	}
263	return nil
264}
265
266func (x *Frame) GetOutput() *Output {
267	if x != nil {
268		if x, ok := x.Body.(*Frame_Output); ok {
269			return x.Output
270		}
271	}
272	return nil
273}
274
275func (x *Frame) GetExit() *Exit {
276	if x != nil {
277		if x, ok := x.Body.(*Frame_Exit); ok {
278			return x.Exit
279		}
280	}
281	return nil
282}
283
284func (x *Frame) GetCancel() *Cancel {
285	if x != nil {
286		if x, ok := x.Body.(*Frame_Cancel); ok {
287			return x.Cancel
288		}
289	}
290	return nil
291}
292
293func (x *Frame) GetStepStarted() *StepStarted {
294	if x != nil {
295		if x, ok := x.Body.(*Frame_StepStarted); ok {
296			return x.StepStarted
297		}
298	}
299	return nil
300}
301
302func (x *Frame) GetStepCompleted() *StepCompleted {
303	if x != nil {
304		if x, ok := x.Body.(*Frame_StepCompleted); ok {
305			return x.StepCompleted
306		}
307	}
308	return nil
309}
310
311func (x *Frame) GetLog() *Log {
312	if x != nil {
313		if x, ok := x.Body.(*Frame_Log); ok {
314			return x.Log
315		}
316	}
317	return nil
318}
319
320func (x *Frame) GetJobResult() *JobResult {
321	if x != nil {
322		if x, ok := x.Body.(*Frame_JobResult); ok {
323			return x.JobResult
324		}
325	}
326	return nil
327}
328
329type isFrame_Body interface {
330	isFrame_Body()
331}
332
333type Frame_Hello struct {
334	Hello *Hello `protobuf:"bytes,1,opt,name=hello,proto3,oneof"` // executor -> host, first frame
335}
336
337type Frame_Run struct {
338	Run *Run `protobuf:"bytes,2,opt,name=run,proto3,oneof"` // host -> executor, after Hello
339}
340
341type Frame_Output struct {
342	Output *Output `protobuf:"bytes,3,opt,name=output,proto3,oneof"` // executor -> host
343}
344
345type Frame_Exit struct {
346	Exit *Exit `protobuf:"bytes,4,opt,name=exit,proto3,oneof"` // executor -> host, last frame
347}
348
349type Frame_Cancel struct {
350	Cancel *Cancel `protobuf:"bytes,5,opt,name=cancel,proto3,oneof"` // host -> executor
351}
352
353type Frame_StepStarted struct {
354	StepStarted *StepStarted `protobuf:"bytes,6,opt,name=step_started,json=stepStarted,proto3,oneof"` // executor -> host
355}
356
357type Frame_StepCompleted struct {
358	StepCompleted *StepCompleted `protobuf:"bytes,7,opt,name=step_completed,json=stepCompleted,proto3,oneof"` // executor -> host
359}
360
361type Frame_Log struct {
362	Log *Log `protobuf:"bytes,8,opt,name=log,proto3,oneof"` // executor -> host
363}
364
365type Frame_JobResult struct {
366	JobResult *JobResult `protobuf:"bytes,9,opt,name=job_result,json=jobResult,proto3,oneof"` // executor -> host, before Exit
367}
368
369func (*Frame_Hello) isFrame_Body() {}
370
371func (*Frame_Run) isFrame_Body() {}
372
373func (*Frame_Output) isFrame_Body() {}
374
375func (*Frame_Exit) isFrame_Body() {}
376
377func (*Frame_Cancel) isFrame_Body() {}
378
379func (*Frame_StepStarted) isFrame_Body() {}
380
381func (*Frame_StepCompleted) isFrame_Body() {}
382
383func (*Frame_Log) isFrame_Body() {}
384
385func (*Frame_JobResult) isFrame_Body() {}
386
387type Hello struct {
388	state         protoimpl.MessageState `protogen:"open.v1"`
389	Version       string                 `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` // runner version of the executor
390	Sandbox       string                 `protobuf:"bytes,2,opt,name=sandbox,proto3" json:"sandbox,omitempty"` // "vm" or "container"
391	Hostname      string                 `protobuf:"bytes,3,opt,name=hostname,proto3" json:"hostname,omitempty"`
392	unknownFields protoimpl.UnknownFields
393	sizeCache     protoimpl.SizeCache
394}
395
396func (x *Hello) Reset() {
397	*x = Hello{}
398	mi := &file_exec_proto_msgTypes[1]
399	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
400	ms.StoreMessageInfo(mi)
401}
402
403func (x *Hello) String() string {
404	return protoimpl.X.MessageStringOf(x)
405}
406
407func (*Hello) ProtoMessage() {}
408
409func (x *Hello) ProtoReflect() protoreflect.Message {
410	mi := &file_exec_proto_msgTypes[1]
411	if x != nil {
412		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
413		if ms.LoadMessageInfo() == nil {
414			ms.StoreMessageInfo(mi)
415		}
416		return ms
417	}
418	return mi.MessageOf(x)
419}
420
421// Deprecated: Use Hello.ProtoReflect.Descriptor instead.
422func (*Hello) Descriptor() ([]byte, []int) {
423	return file_exec_proto_rawDescGZIP(), []int{1}
424}
425
426func (x *Hello) GetVersion() string {
427	if x != nil {
428		return x.Version
429	}
430	return ""
431}
432
433func (x *Hello) GetSandbox() string {
434	if x != nil {
435		return x.Sandbox
436	}
437	return ""
438}
439
440func (x *Hello) GetHostname() string {
441	if x != nil {
442		return x.Hostname
443	}
444	return ""
445}
446
447// Run asks the executor to run a script or a job. Without job it is the stub
448// executor of sandbox-check: the script is run with `sh -c`; an empty script
449// means the built-in diagnostics script. With job the executor runs the job
450// like a GitHub Actions runner and reports it with StepStarted, Log,
451// StepCompleted and JobResult frames, then Exit.
452type Run struct {
453	state         protoimpl.MessageState `protogen:"open.v1"`
454	Script        string                 `protobuf:"bytes,1,opt,name=script,proto3" json:"script,omitempty"`
455	Env           map[string]string      `protobuf:"bytes,2,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
456	Job           *JobSpec               `protobuf:"bytes,3,opt,name=job,proto3" json:"job,omitempty"`
457	unknownFields protoimpl.UnknownFields
458	sizeCache     protoimpl.SizeCache
459}
460
461func (x *Run) Reset() {
462	*x = Run{}
463	mi := &file_exec_proto_msgTypes[2]
464	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
465	ms.StoreMessageInfo(mi)
466}
467
468func (x *Run) String() string {
469	return protoimpl.X.MessageStringOf(x)
470}
471
472func (*Run) ProtoMessage() {}
473
474func (x *Run) ProtoReflect() protoreflect.Message {
475	mi := &file_exec_proto_msgTypes[2]
476	if x != nil {
477		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
478		if ms.LoadMessageInfo() == nil {
479			ms.StoreMessageInfo(mi)
480		}
481		return ms
482	}
483	return mi.MessageOf(x)
484}
485
486// Deprecated: Use Run.ProtoReflect.Descriptor instead.
487func (*Run) Descriptor() ([]byte, []int) {
488	return file_exec_proto_rawDescGZIP(), []int{2}
489}
490
491func (x *Run) GetScript() string {
492	if x != nil {
493		return x.Script
494	}
495	return ""
496}
497
498func (x *Run) GetEnv() map[string]string {
499	if x != nil {
500		return x.Env
501	}
502	return nil
503}
504
505func (x *Run) GetJob() *JobSpec {
506	if x != nil {
507		return x.Job
508	}
509	return nil
510}
511
512// JobSpec is the job to run: the fields of the job that ermite handed to the
513// host process, minus the tokens (the sandbox never sees them).
514type JobSpec struct {
515	state          protoimpl.MessageState `protogen:"open.v1"`
516	WorkflowPath   string                 `protobuf:"bytes,1,opt,name=workflow_path,json=workflowPath,proto3" json:"workflow_path,omitempty"`
517	WorkflowYaml   string                 `protobuf:"bytes,2,opt,name=workflow_yaml,json=workflowYaml,proto3" json:"workflow_yaml,omitempty"`
518	JobKey         string                 `protobuf:"bytes,3,opt,name=job_key,json=jobKey,proto3" json:"job_key,omitempty"`
519	Matrix         string                 `protobuf:"bytes,4,opt,name=matrix,proto3" json:"matrix,omitempty"`     // JSON object
520	Contexts       string                 `protobuf:"bytes,5,opt,name=contexts,proto3" json:"contexts,omitempty"` // JSON object
521	Repo           string                 `protobuf:"bytes,6,opt,name=repo,proto3" json:"repo,omitempty"`         // repository name
522	TimeoutMinutes int32                  `protobuf:"varint,7,opt,name=timeout_minutes,json=timeoutMinutes,proto3" json:"timeout_minutes,omitempty"`
523	RunnerName     string                 `protobuf:"bytes,8,opt,name=runner_name,json=runnerName,proto3" json:"runner_name,omitempty"`
524	RunnerVersion  string                 `protobuf:"bytes,9,opt,name=runner_version,json=runnerVersion,proto3" json:"runner_version,omitempty"`
525	// runner_environment is the runner.environment value ("github-hosted" or "self-hosted").
526	RunnerEnvironment string `protobuf:"bytes,10,opt,name=runner_environment,json=runnerEnvironment,proto3" json:"runner_environment,omitempty"`
527	Debug             bool   `protobuf:"varint,11,opt,name=debug,proto3" json:"debug,omitempty"` // ACTIONS_STEP_DEBUG
528	// deadline_ms is what is left of the job timeout when the host sends this
529	// Run, in milliseconds: the timeout counts from the moment the host received
530	// the job (runner.proto: Job.timeout_minutes), not from the start of the
531	// executor, and booting the sandbox takes time. 0 means "use
532	// timeout_minutes from now".
533	DeadlineMs    int64 `protobuf:"varint,12,opt,name=deadline_ms,json=deadlineMs,proto3" json:"deadline_ms,omitempty"`
534	unknownFields protoimpl.UnknownFields
535	sizeCache     protoimpl.SizeCache
536}
537
538func (x *JobSpec) Reset() {
539	*x = JobSpec{}
540	mi := &file_exec_proto_msgTypes[3]
541	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
542	ms.StoreMessageInfo(mi)
543}
544
545func (x *JobSpec) String() string {
546	return protoimpl.X.MessageStringOf(x)
547}
548
549func (*JobSpec) ProtoMessage() {}
550
551func (x *JobSpec) ProtoReflect() protoreflect.Message {
552	mi := &file_exec_proto_msgTypes[3]
553	if x != nil {
554		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
555		if ms.LoadMessageInfo() == nil {
556			ms.StoreMessageInfo(mi)
557		}
558		return ms
559	}
560	return mi.MessageOf(x)
561}
562
563// Deprecated: Use JobSpec.ProtoReflect.Descriptor instead.
564func (*JobSpec) Descriptor() ([]byte, []int) {
565	return file_exec_proto_rawDescGZIP(), []int{3}
566}
567
568func (x *JobSpec) GetWorkflowPath() string {
569	if x != nil {
570		return x.WorkflowPath
571	}
572	return ""
573}
574
575func (x *JobSpec) GetWorkflowYaml() string {
576	if x != nil {
577		return x.WorkflowYaml
578	}
579	return ""
580}
581
582func (x *JobSpec) GetJobKey() string {
583	if x != nil {
584		return x.JobKey
585	}
586	return ""
587}
588
589func (x *JobSpec) GetMatrix() string {
590	if x != nil {
591		return x.Matrix
592	}
593	return ""
594}
595
596func (x *JobSpec) GetContexts() string {
597	if x != nil {
598		return x.Contexts
599	}
600	return ""
601}
602
603func (x *JobSpec) GetRepo() string {
604	if x != nil {
605		return x.Repo
606	}
607	return ""
608}
609
610func (x *JobSpec) GetTimeoutMinutes() int32 {
611	if x != nil {
612		return x.TimeoutMinutes
613	}
614	return 0
615}
616
617func (x *JobSpec) GetRunnerName() string {
618	if x != nil {
619		return x.RunnerName
620	}
621	return ""
622}
623
624func (x *JobSpec) GetRunnerVersion() string {
625	if x != nil {
626		return x.RunnerVersion
627	}
628	return ""
629}
630
631func (x *JobSpec) GetRunnerEnvironment() string {
632	if x != nil {
633		return x.RunnerEnvironment
634	}
635	return ""
636}
637
638func (x *JobSpec) GetDebug() bool {
639	if x != nil {
640		return x.Debug
641	}
642	return false
643}
644
645func (x *JobSpec) GetDeadlineMs() int64 {
646	if x != nil {
647		return x.DeadlineMs
648	}
649	return 0
650}
651
652type Output struct {
653	state         protoimpl.MessageState `protogen:"open.v1"`
654	Stream        StreamKind             `protobuf:"varint,1,opt,name=stream,proto3,enum=ermite.runner.exec.v1.StreamKind" json:"stream,omitempty"`
655	Data          []byte                 `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
656	UnixNano      int64                  `protobuf:"varint,3,opt,name=unix_nano,json=unixNano,proto3" json:"unix_nano,omitempty"`
657	unknownFields protoimpl.UnknownFields
658	sizeCache     protoimpl.SizeCache
659}
660
661func (x *Output) Reset() {
662	*x = Output{}
663	mi := &file_exec_proto_msgTypes[4]
664	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
665	ms.StoreMessageInfo(mi)
666}
667
668func (x *Output) String() string {
669	return protoimpl.X.MessageStringOf(x)
670}
671
672func (*Output) ProtoMessage() {}
673
674func (x *Output) ProtoReflect() protoreflect.Message {
675	mi := &file_exec_proto_msgTypes[4]
676	if x != nil {
677		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
678		if ms.LoadMessageInfo() == nil {
679			ms.StoreMessageInfo(mi)
680		}
681		return ms
682	}
683	return mi.MessageOf(x)
684}
685
686// Deprecated: Use Output.ProtoReflect.Descriptor instead.
687func (*Output) Descriptor() ([]byte, []int) {
688	return file_exec_proto_rawDescGZIP(), []int{4}
689}
690
691func (x *Output) GetStream() StreamKind {
692	if x != nil {
693		return x.Stream
694	}
695	return StreamKind_STREAM_KIND_UNSPECIFIED
696}
697
698func (x *Output) GetData() []byte {
699	if x != nil {
700		return x.Data
701	}
702	return nil
703}
704
705func (x *Output) GetUnixNano() int64 {
706	if x != nil {
707		return x.UnixNano
708	}
709	return 0
710}
711
712type Exit struct {
713	state         protoimpl.MessageState `protogen:"open.v1"`
714	Code          int32                  `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
715	Error         string                 `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` // set when the executor failed to run the script at all
716	unknownFields protoimpl.UnknownFields
717	sizeCache     protoimpl.SizeCache
718}
719
720func (x *Exit) Reset() {
721	*x = Exit{}
722	mi := &file_exec_proto_msgTypes[5]
723	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
724	ms.StoreMessageInfo(mi)
725}
726
727func (x *Exit) String() string {
728	return protoimpl.X.MessageStringOf(x)
729}
730
731func (*Exit) ProtoMessage() {}
732
733func (x *Exit) ProtoReflect() protoreflect.Message {
734	mi := &file_exec_proto_msgTypes[5]
735	if x != nil {
736		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
737		if ms.LoadMessageInfo() == nil {
738			ms.StoreMessageInfo(mi)
739		}
740		return ms
741	}
742	return mi.MessageOf(x)
743}
744
745// Deprecated: Use Exit.ProtoReflect.Descriptor instead.
746func (*Exit) Descriptor() ([]byte, []int) {
747	return file_exec_proto_rawDescGZIP(), []int{5}
748}
749
750func (x *Exit) GetCode() int32 {
751	if x != nil {
752		return x.Code
753	}
754	return 0
755}
756
757func (x *Exit) GetError() string {
758	if x != nil {
759		return x.Error
760	}
761	return ""
762}
763
764// Cancel asks the executor to stop the running script. The executor escalates
765// like the official runner: SIGINT to the script's process group at once,
766// SIGTERM 7.5 s later, SIGKILL 2.5 s after that.
767type Cancel struct {
768	state protoimpl.MessageState `protogen:"open.v1"`
769	// reason is for the job log and diagnostics ("cancelled by the user",
770	// "job timeout", ...); it never changes the behaviour.
771	Reason string `protobuf:"bytes,1,opt,name=reason,proto3" json:"reason,omitempty"`
772	// kind tells the job executor how the job ends: cancelled, timed out, or
773	// cancelled because the runner shuts down. The stub executor ignores it.
774	Kind          CancelKind `protobuf:"varint,2,opt,name=kind,proto3,enum=ermite.runner.exec.v1.CancelKind" json:"kind,omitempty"`
775	unknownFields protoimpl.UnknownFields
776	sizeCache     protoimpl.SizeCache
777}
778
779func (x *Cancel) Reset() {
780	*x = Cancel{}
781	mi := &file_exec_proto_msgTypes[6]
782	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
783	ms.StoreMessageInfo(mi)
784}
785
786func (x *Cancel) String() string {
787	return protoimpl.X.MessageStringOf(x)
788}
789
790func (*Cancel) ProtoMessage() {}
791
792func (x *Cancel) ProtoReflect() protoreflect.Message {
793	mi := &file_exec_proto_msgTypes[6]
794	if x != nil {
795		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
796		if ms.LoadMessageInfo() == nil {
797			ms.StoreMessageInfo(mi)
798		}
799		return ms
800	}
801	return mi.MessageOf(x)
802}
803
804// Deprecated: Use Cancel.ProtoReflect.Descriptor instead.
805func (*Cancel) Descriptor() ([]byte, []int) {
806	return file_exec_proto_rawDescGZIP(), []int{6}
807}
808
809func (x *Cancel) GetReason() string {
810	if x != nil {
811		return x.Reason
812	}
813	return ""
814}
815
816func (x *Cancel) GetKind() CancelKind {
817	if x != nil {
818		return x.Kind
819	}
820	return CancelKind_CANCEL_KIND_UNSPECIFIED
821}
822
823// Steps are numbered like GitHub's log: "Set up job" is 1, the steps of the
824// workflow follow, "Complete job" is last.
825type StepStarted struct {
826	state         protoimpl.MessageState `protogen:"open.v1"`
827	Number        int32                  `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
828	Name          string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
829	UnixNano      int64                  `protobuf:"varint,3,opt,name=unix_nano,json=unixNano,proto3" json:"unix_nano,omitempty"`
830	unknownFields protoimpl.UnknownFields
831	sizeCache     protoimpl.SizeCache
832}
833
834func (x *StepStarted) Reset() {
835	*x = StepStarted{}
836	mi := &file_exec_proto_msgTypes[7]
837	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
838	ms.StoreMessageInfo(mi)
839}
840
841func (x *StepStarted) String() string {
842	return protoimpl.X.MessageStringOf(x)
843}
844
845func (*StepStarted) ProtoMessage() {}
846
847func (x *StepStarted) ProtoReflect() protoreflect.Message {
848	mi := &file_exec_proto_msgTypes[7]
849	if x != nil {
850		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
851		if ms.LoadMessageInfo() == nil {
852			ms.StoreMessageInfo(mi)
853		}
854		return ms
855	}
856	return mi.MessageOf(x)
857}
858
859// Deprecated: Use StepStarted.ProtoReflect.Descriptor instead.
860func (*StepStarted) Descriptor() ([]byte, []int) {
861	return file_exec_proto_rawDescGZIP(), []int{7}
862}
863
864func (x *StepStarted) GetNumber() int32 {
865	if x != nil {
866		return x.Number
867	}
868	return 0
869}
870
871func (x *StepStarted) GetName() string {
872	if x != nil {
873		return x.Name
874	}
875	return ""
876}
877
878func (x *StepStarted) GetUnixNano() int64 {
879	if x != nil {
880		return x.UnixNano
881	}
882	return 0
883}
884
885type StepCompleted struct {
886	state         protoimpl.MessageState `protogen:"open.v1"`
887	Number        int32                  `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"`
888	Name          string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
889	Conclusion    StepConclusion         `protobuf:"varint,3,opt,name=conclusion,proto3,enum=ermite.runner.exec.v1.StepConclusion" json:"conclusion,omitempty"`
890	UnixNano      int64                  `protobuf:"varint,4,opt,name=unix_nano,json=unixNano,proto3" json:"unix_nano,omitempty"`
891	unknownFields protoimpl.UnknownFields
892	sizeCache     protoimpl.SizeCache
893}
894
895func (x *StepCompleted) Reset() {
896	*x = StepCompleted{}
897	mi := &file_exec_proto_msgTypes[8]
898	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
899	ms.StoreMessageInfo(mi)
900}
901
902func (x *StepCompleted) String() string {
903	return protoimpl.X.MessageStringOf(x)
904}
905
906func (*StepCompleted) ProtoMessage() {}
907
908func (x *StepCompleted) ProtoReflect() protoreflect.Message {
909	mi := &file_exec_proto_msgTypes[8]
910	if x != nil {
911		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
912		if ms.LoadMessageInfo() == nil {
913			ms.StoreMessageInfo(mi)
914		}
915		return ms
916	}
917	return mi.MessageOf(x)
918}
919
920// Deprecated: Use StepCompleted.ProtoReflect.Descriptor instead.
921func (*StepCompleted) Descriptor() ([]byte, []int) {
922	return file_exec_proto_rawDescGZIP(), []int{8}
923}
924
925func (x *StepCompleted) GetNumber() int32 {
926	if x != nil {
927		return x.Number
928	}
929	return 0
930}
931
932func (x *StepCompleted) GetName() string {
933	if x != nil {
934		return x.Name
935	}
936	return ""
937}
938
939func (x *StepCompleted) GetConclusion() StepConclusion {
940	if x != nil {
941		return x.Conclusion
942	}
943	return StepConclusion_STEP_CONCLUSION_UNSPECIFIED
944}
945
946func (x *StepCompleted) GetUnixNano() int64 {
947	if x != nil {
948		return x.UnixNano
949	}
950	return 0
951}
952
953// Log is one line of the job log, without terminator, valid UTF-8. A line of
954// more than 64 KiB is cut by the executor into pieces at character boundaries;
955// every piece but the first has continued set (the AppendLog rule).
956type Log struct {
957	state         protoimpl.MessageState `protogen:"open.v1"`
958	Step          int32                  `protobuf:"varint,1,opt,name=step,proto3" json:"step,omitempty"`
959	UnixNano      int64                  `protobuf:"varint,2,opt,name=unix_nano,json=unixNano,proto3" json:"unix_nano,omitempty"`
960	Text          string                 `protobuf:"bytes,3,opt,name=text,proto3" json:"text,omitempty"`
961	Continued     bool                   `protobuf:"varint,4,opt,name=continued,proto3" json:"continued,omitempty"`
962	unknownFields protoimpl.UnknownFields
963	sizeCache     protoimpl.SizeCache
964}
965
966func (x *Log) Reset() {
967	*x = Log{}
968	mi := &file_exec_proto_msgTypes[9]
969	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
970	ms.StoreMessageInfo(mi)
971}
972
973func (x *Log) String() string {
974	return protoimpl.X.MessageStringOf(x)
975}
976
977func (*Log) ProtoMessage() {}
978
979func (x *Log) ProtoReflect() protoreflect.Message {
980	mi := &file_exec_proto_msgTypes[9]
981	if x != nil {
982		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
983		if ms.LoadMessageInfo() == nil {
984			ms.StoreMessageInfo(mi)
985		}
986		return ms
987	}
988	return mi.MessageOf(x)
989}
990
991// Deprecated: Use Log.ProtoReflect.Descriptor instead.
992func (*Log) Descriptor() ([]byte, []int) {
993	return file_exec_proto_rawDescGZIP(), []int{9}
994}
995
996func (x *Log) GetStep() int32 {
997	if x != nil {
998		return x.Step
999	}
1000	return 0
1001}
1002
1003func (x *Log) GetUnixNano() int64 {
1004	if x != nil {
1005		return x.UnixNano
1006	}
1007	return 0
1008}
1009
1010func (x *Log) GetText() string {
1011	if x != nil {
1012		return x.Text
1013	}
1014	return ""
1015}
1016
1017func (x *Log) GetContinued() bool {
1018	if x != nil {
1019		return x.Continued
1020	}
1021	return false
1022}
1023
1024// JobResult is the outcome of the job; Exit follows.
1025type JobResult struct {
1026	state          protoimpl.MessageState `protogen:"open.v1"`
1027	Conclusion     StepConclusion         `protobuf:"varint,1,opt,name=conclusion,proto3,enum=ermite.runner.exec.v1.StepConclusion" json:"conclusion,omitempty"`
1028	Outputs        map[string]string      `protobuf:"bytes,2,rep,name=outputs,proto3" json:"outputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
1029	Error          string                 `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
1030	RunnerShutdown bool                   `protobuf:"varint,4,opt,name=runner_shutdown,json=runnerShutdown,proto3" json:"runner_shutdown,omitempty"`
1031	unknownFields  protoimpl.UnknownFields
1032	sizeCache      protoimpl.SizeCache
1033}
1034
1035func (x *JobResult) Reset() {
1036	*x = JobResult{}
1037	mi := &file_exec_proto_msgTypes[10]
1038	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1039	ms.StoreMessageInfo(mi)
1040}
1041
1042func (x *JobResult) String() string {
1043	return protoimpl.X.MessageStringOf(x)
1044}
1045
1046func (*JobResult) ProtoMessage() {}
1047
1048func (x *JobResult) ProtoReflect() protoreflect.Message {
1049	mi := &file_exec_proto_msgTypes[10]
1050	if x != nil {
1051		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1052		if ms.LoadMessageInfo() == nil {
1053			ms.StoreMessageInfo(mi)
1054		}
1055		return ms
1056	}
1057	return mi.MessageOf(x)
1058}
1059
1060// Deprecated: Use JobResult.ProtoReflect.Descriptor instead.
1061func (*JobResult) Descriptor() ([]byte, []int) {
1062	return file_exec_proto_rawDescGZIP(), []int{10}
1063}
1064
1065func (x *JobResult) GetConclusion() StepConclusion {
1066	if x != nil {
1067		return x.Conclusion
1068	}
1069	return StepConclusion_STEP_CONCLUSION_UNSPECIFIED
1070}
1071
1072func (x *JobResult) GetOutputs() map[string]string {
1073	if x != nil {
1074		return x.Outputs
1075	}
1076	return nil
1077}
1078
1079func (x *JobResult) GetError() string {
1080	if x != nil {
1081		return x.Error
1082	}
1083	return ""
1084}
1085
1086func (x *JobResult) GetRunnerShutdown() bool {
1087	if x != nil {
1088		return x.RunnerShutdown
1089	}
1090	return false
1091}
1092
1093var File_exec_proto protoreflect.FileDescriptor
1094
1095const file_exec_proto_rawDesc = "" +
1096	"\n" +
1097	"\n" +
1098	"exec.proto\x12\x15ermite.runner.exec.v1\"\xa5\x04\n" +
1099	"\x05Frame\x124\n" +
1100	"\x05hello\x18\x01 \x01(\v2\x1c.ermite.runner.exec.v1.HelloH\x00R\x05hello\x12.\n" +
1101	"\x03run\x18\x02 \x01(\v2\x1a.ermite.runner.exec.v1.RunH\x00R\x03run\x127\n" +
1102	"\x06output\x18\x03 \x01(\v2\x1d.ermite.runner.exec.v1.OutputH\x00R\x06output\x121\n" +
1103	"\x04exit\x18\x04 \x01(\v2\x1b.ermite.runner.exec.v1.ExitH\x00R\x04exit\x127\n" +
1104	"\x06cancel\x18\x05 \x01(\v2\x1d.ermite.runner.exec.v1.CancelH\x00R\x06cancel\x12G\n" +
1105	"\fstep_started\x18\x06 \x01(\v2\".ermite.runner.exec.v1.StepStartedH\x00R\vstepStarted\x12M\n" +
1106	"\x0estep_completed\x18\a \x01(\v2$.ermite.runner.exec.v1.StepCompletedH\x00R\rstepCompleted\x12.\n" +
1107	"\x03log\x18\b \x01(\v2\x1a.ermite.runner.exec.v1.LogH\x00R\x03log\x12A\n" +
1108	"\n" +
1109	"job_result\x18\t \x01(\v2 .ermite.runner.exec.v1.JobResultH\x00R\tjobResultB\x06\n" +
1110	"\x04body\"W\n" +
1111	"\x05Hello\x12\x18\n" +
1112	"\aversion\x18\x01 \x01(\tR\aversion\x12\x18\n" +
1113	"\asandbox\x18\x02 \x01(\tR\asandbox\x12\x1a\n" +
1114	"\bhostname\x18\x03 \x01(\tR\bhostname\"\xbe\x01\n" +
1115	"\x03Run\x12\x16\n" +
1116	"\x06script\x18\x01 \x01(\tR\x06script\x125\n" +
1117	"\x03env\x18\x02 \x03(\v2#.ermite.runner.exec.v1.Run.EnvEntryR\x03env\x120\n" +
1118	"\x03job\x18\x03 \x01(\v2\x1e.ermite.runner.exec.v1.JobSpecR\x03job\x1a6\n" +
1119	"\bEnvEntry\x12\x10\n" +
1120	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
1121	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x8b\x03\n" +
1122	"\aJobSpec\x12#\n" +
1123	"\rworkflow_path\x18\x01 \x01(\tR\fworkflowPath\x12#\n" +
1124	"\rworkflow_yaml\x18\x02 \x01(\tR\fworkflowYaml\x12\x17\n" +
1125	"\ajob_key\x18\x03 \x01(\tR\x06jobKey\x12\x16\n" +
1126	"\x06matrix\x18\x04 \x01(\tR\x06matrix\x12\x1a\n" +
1127	"\bcontexts\x18\x05 \x01(\tR\bcontexts\x12\x12\n" +
1128	"\x04repo\x18\x06 \x01(\tR\x04repo\x12'\n" +
1129	"\x0ftimeout_minutes\x18\a \x01(\x05R\x0etimeoutMinutes\x12\x1f\n" +
1130	"\vrunner_name\x18\b \x01(\tR\n" +
1131	"runnerName\x12%\n" +
1132	"\x0erunner_version\x18\t \x01(\tR\rrunnerVersion\x12-\n" +
1133	"\x12runner_environment\x18\n" +
1134	" \x01(\tR\x11runnerEnvironment\x12\x14\n" +
1135	"\x05debug\x18\v \x01(\bR\x05debug\x12\x1f\n" +
1136	"\vdeadline_ms\x18\f \x01(\x03R\n" +
1137	"deadlineMs\"t\n" +
1138	"\x06Output\x129\n" +
1139	"\x06stream\x18\x01 \x01(\x0e2!.ermite.runner.exec.v1.StreamKindR\x06stream\x12\x12\n" +
1140	"\x04data\x18\x02 \x01(\fR\x04data\x12\x1b\n" +
1141	"\tunix_nano\x18\x03 \x01(\x03R\bunixNano\"0\n" +
1142	"\x04Exit\x12\x12\n" +
1143	"\x04code\x18\x01 \x01(\x05R\x04code\x12\x14\n" +
1144	"\x05error\x18\x02 \x01(\tR\x05error\"W\n" +
1145	"\x06Cancel\x12\x16\n" +
1146	"\x06reason\x18\x01 \x01(\tR\x06reason\x125\n" +
1147	"\x04kind\x18\x02 \x01(\x0e2!.ermite.runner.exec.v1.CancelKindR\x04kind\"V\n" +
1148	"\vStepStarted\x12\x16\n" +
1149	"\x06number\x18\x01 \x01(\x05R\x06number\x12\x12\n" +
1150	"\x04name\x18\x02 \x01(\tR\x04name\x12\x1b\n" +
1151	"\tunix_nano\x18\x03 \x01(\x03R\bunixNano\"\x9f\x01\n" +
1152	"\rStepCompleted\x12\x16\n" +
1153	"\x06number\x18\x01 \x01(\x05R\x06number\x12\x12\n" +
1154	"\x04name\x18\x02 \x01(\tR\x04name\x12E\n" +
1155	"\n" +
1156	"conclusion\x18\x03 \x01(\x0e2%.ermite.runner.exec.v1.StepConclusionR\n" +
1157	"conclusion\x12\x1b\n" +
1158	"\tunix_nano\x18\x04 \x01(\x03R\bunixNano\"h\n" +
1159	"\x03Log\x12\x12\n" +
1160	"\x04step\x18\x01 \x01(\x05R\x04step\x12\x1b\n" +
1161	"\tunix_nano\x18\x02 \x01(\x03R\bunixNano\x12\x12\n" +
1162	"\x04text\x18\x03 \x01(\tR\x04text\x12\x1c\n" +
1163	"\tcontinued\x18\x04 \x01(\bR\tcontinued\"\x96\x02\n" +
1164	"\tJobResult\x12E\n" +
1165	"\n" +
1166	"conclusion\x18\x01 \x01(\x0e2%.ermite.runner.exec.v1.StepConclusionR\n" +
1167	"conclusion\x12G\n" +
1168	"\aoutputs\x18\x02 \x03(\v2-.ermite.runner.exec.v1.JobResult.OutputsEntryR\aoutputs\x12\x14\n" +
1169	"\x05error\x18\x03 \x01(\tR\x05error\x12'\n" +
1170	"\x0frunner_shutdown\x18\x04 \x01(\bR\x0erunnerShutdown\x1a:\n" +
1171	"\fOutputsEntry\x12\x10\n" +
1172	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
1173	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01*Y\n" +
1174	"\n" +
1175	"StreamKind\x12\x1b\n" +
1176	"\x17STREAM_KIND_UNSPECIFIED\x10\x00\x12\x16\n" +
1177	"\x12STREAM_KIND_STDOUT\x10\x01\x12\x16\n" +
1178	"\x12STREAM_KIND_STDERR\x10\x02*r\n" +
1179	"\n" +
1180	"CancelKind\x12\x1b\n" +
1181	"\x17CANCEL_KIND_UNSPECIFIED\x10\x00\x12\x14\n" +
1182	"\x10CANCEL_KIND_USER\x10\x01\x12\x17\n" +
1183	"\x13CANCEL_KIND_TIMEOUT\x10\x02\x12\x18\n" +
1184	"\x14CANCEL_KIND_SHUTDOWN\x10\x03*\xc6\x01\n" +
1185	"\x0eStepConclusion\x12\x1f\n" +
1186	"\x1bSTEP_CONCLUSION_UNSPECIFIED\x10\x00\x12\x1b\n" +
1187	"\x17STEP_CONCLUSION_SUCCESS\x10\x01\x12\x1b\n" +
1188	"\x17STEP_CONCLUSION_FAILURE\x10\x02\x12\x1d\n" +
1189	"\x19STEP_CONCLUSION_CANCELLED\x10\x03\x12\x1b\n" +
1190	"\x17STEP_CONCLUSION_SKIPPED\x10\x04\x12\x1d\n" +
1191	"\x19STEP_CONCLUSION_TIMED_OUT\x10\x05B4Z2bnema.dev/ermite-runner/internal/execstream/execpbb\x06proto3"
1192
1193var (
1194	file_exec_proto_rawDescOnce sync.Once
1195	file_exec_proto_rawDescData []byte
1196)
1197
1198func file_exec_proto_rawDescGZIP() []byte {
1199	file_exec_proto_rawDescOnce.Do(func() {
1200		file_exec_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_exec_proto_rawDesc), len(file_exec_proto_rawDesc)))
1201	})
1202	return file_exec_proto_rawDescData
1203}
1204
1205var file_exec_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
1206var file_exec_proto_msgTypes = make([]protoimpl.MessageInfo, 13)
1207var file_exec_proto_goTypes = []any{
1208	(StreamKind)(0),       // 0: ermite.runner.exec.v1.StreamKind
1209	(CancelKind)(0),       // 1: ermite.runner.exec.v1.CancelKind
1210	(StepConclusion)(0),   // 2: ermite.runner.exec.v1.StepConclusion
1211	(*Frame)(nil),         // 3: ermite.runner.exec.v1.Frame
1212	(*Hello)(nil),         // 4: ermite.runner.exec.v1.Hello
1213	(*Run)(nil),           // 5: ermite.runner.exec.v1.Run
1214	(*JobSpec)(nil),       // 6: ermite.runner.exec.v1.JobSpec
1215	(*Output)(nil),        // 7: ermite.runner.exec.v1.Output
1216	(*Exit)(nil),          // 8: ermite.runner.exec.v1.Exit
1217	(*Cancel)(nil),        // 9: ermite.runner.exec.v1.Cancel
1218	(*StepStarted)(nil),   // 10: ermite.runner.exec.v1.StepStarted
1219	(*StepCompleted)(nil), // 11: ermite.runner.exec.v1.StepCompleted
1220	(*Log)(nil),           // 12: ermite.runner.exec.v1.Log
1221	(*JobResult)(nil),     // 13: ermite.runner.exec.v1.JobResult
1222	nil,                   // 14: ermite.runner.exec.v1.Run.EnvEntry
1223	nil,                   // 15: ermite.runner.exec.v1.JobResult.OutputsEntry
1224}
1225var file_exec_proto_depIdxs = []int32{
1226	4,  // 0: ermite.runner.exec.v1.Frame.hello:type_name -> ermite.runner.exec.v1.Hello
1227	5,  // 1: ermite.runner.exec.v1.Frame.run:type_name -> ermite.runner.exec.v1.Run
1228	7,  // 2: ermite.runner.exec.v1.Frame.output:type_name -> ermite.runner.exec.v1.Output
1229	8,  // 3: ermite.runner.exec.v1.Frame.exit:type_name -> ermite.runner.exec.v1.Exit
1230	9,  // 4: ermite.runner.exec.v1.Frame.cancel:type_name -> ermite.runner.exec.v1.Cancel
1231	10, // 5: ermite.runner.exec.v1.Frame.step_started:type_name -> ermite.runner.exec.v1.StepStarted
1232	11, // 6: ermite.runner.exec.v1.Frame.step_completed:type_name -> ermite.runner.exec.v1.StepCompleted
1233	12, // 7: ermite.runner.exec.v1.Frame.log:type_name -> ermite.runner.exec.v1.Log
1234	13, // 8: ermite.runner.exec.v1.Frame.job_result:type_name -> ermite.runner.exec.v1.JobResult
1235	14, // 9: ermite.runner.exec.v1.Run.env:type_name -> ermite.runner.exec.v1.Run.EnvEntry
1236	6,  // 10: ermite.runner.exec.v1.Run.job:type_name -> ermite.runner.exec.v1.JobSpec
1237	0,  // 11: ermite.runner.exec.v1.Output.stream:type_name -> ermite.runner.exec.v1.StreamKind
1238	1,  // 12: ermite.runner.exec.v1.Cancel.kind:type_name -> ermite.runner.exec.v1.CancelKind
1239	2,  // 13: ermite.runner.exec.v1.StepCompleted.conclusion:type_name -> ermite.runner.exec.v1.StepConclusion
1240	2,  // 14: ermite.runner.exec.v1.JobResult.conclusion:type_name -> ermite.runner.exec.v1.StepConclusion
1241	15, // 15: ermite.runner.exec.v1.JobResult.outputs:type_name -> ermite.runner.exec.v1.JobResult.OutputsEntry
1242	16, // [16:16] is the sub-list for method output_type
1243	16, // [16:16] is the sub-list for method input_type
1244	16, // [16:16] is the sub-list for extension type_name
1245	16, // [16:16] is the sub-list for extension extendee
1246	0,  // [0:16] is the sub-list for field type_name
1247}
1248
1249func init() { file_exec_proto_init() }
1250func file_exec_proto_init() {
1251	if File_exec_proto != nil {
1252		return
1253	}
1254	file_exec_proto_msgTypes[0].OneofWrappers = []any{
1255		(*Frame_Hello)(nil),
1256		(*Frame_Run)(nil),
1257		(*Frame_Output)(nil),
1258		(*Frame_Exit)(nil),
1259		(*Frame_Cancel)(nil),
1260		(*Frame_StepStarted)(nil),
1261		(*Frame_StepCompleted)(nil),
1262		(*Frame_Log)(nil),
1263		(*Frame_JobResult)(nil),
1264	}
1265	type x struct{}
1266	out := protoimpl.TypeBuilder{
1267		File: protoimpl.DescBuilder{
1268			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
1269			RawDescriptor: unsafe.Slice(unsafe.StringData(file_exec_proto_rawDesc), len(file_exec_proto_rawDesc)),
1270			NumEnums:      3,
1271			NumMessages:   13,
1272			NumExtensions: 0,
1273			NumServices:   0,
1274		},
1275		GoTypes:           file_exec_proto_goTypes,
1276		DependencyIndexes: file_exec_proto_depIdxs,
1277		EnumInfos:         file_exec_proto_enumTypes,
1278		MessageInfos:      file_exec_proto_msgTypes,
1279	}.Build()
1280	File_exec_proto = out.File
1281	file_exec_proto_goTypes = nil
1282	file_exec_proto_depIdxs = nil
1283}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 11

↑↓ moveenter openesc close