v0.1.0 4db3b8b

run.connect.go RawHistoryFolder

1// SPDX-License-Identifier: MIT
2
3// Code generated by protoc-gen-connect-go. DO NOT EDIT.
4//
5// Source: ermite/run.proto
6
7package ermiteconnect
8
9import (
10	ermite "bnema.dev/ermite-api/gen/ermite"
11	connect "connectrpc.com/connect"
12	context "context"
13	errors "errors"
14	http "net/http"
15	strings "strings"
16)
17
18// This is a compile-time assertion to ensure that this generated file and the connect package are
19// compatible. If you get a compiler error that this constant is not defined, this code was
20// generated with a version of connect newer than the one compiled into your binary. You can fix the
21// problem by either regenerating this code with an older version of connect or updating the connect
22// version compiled into your binary.
23const _ = connect.IsAtLeastVersion1_13_0
24
25const (
26	// RunServiceName is the fully-qualified name of the RunService service.
27	RunServiceName = "ermite.RunService"
28)
29
30// These constants are the fully-qualified names of the RPCs defined in this package. They're
31// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
32//
33// Note that these are different from the fully-qualified method names used by
34// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
35// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
36// period.
37const (
38	// RunServiceListRunsProcedure is the fully-qualified name of the RunService's ListRuns RPC.
39	RunServiceListRunsProcedure = "/ermite.RunService/ListRuns"
40	// RunServiceGetRunProcedure is the fully-qualified name of the RunService's GetRun RPC.
41	RunServiceGetRunProcedure = "/ermite.RunService/GetRun"
42	// RunServiceGetJobProcedure is the fully-qualified name of the RunService's GetJob RPC.
43	RunServiceGetJobProcedure = "/ermite.RunService/GetJob"
44	// RunServiceGetJobLogProcedure is the fully-qualified name of the RunService's GetJobLog RPC.
45	RunServiceGetJobLogProcedure = "/ermite.RunService/GetJobLog"
46	// RunServiceCancelRunProcedure is the fully-qualified name of the RunService's CancelRun RPC.
47	RunServiceCancelRunProcedure = "/ermite.RunService/CancelRun"
48	// RunServiceRerunRunProcedure is the fully-qualified name of the RunService's RerunRun RPC.
49	RunServiceRerunRunProcedure = "/ermite.RunService/RerunRun"
50	// RunServiceListChecksProcedure is the fully-qualified name of the RunService's ListChecks RPC.
51	RunServiceListChecksProcedure = "/ermite.RunService/ListChecks"
52	// RunServiceListRunnersProcedure is the fully-qualified name of the RunService's ListRunners RPC.
53	RunServiceListRunnersProcedure = "/ermite.RunService/ListRunners"
54	// RunServiceRemoveRunnerProcedure is the fully-qualified name of the RunService's RemoveRunner RPC.
55	RunServiceRemoveRunnerProcedure = "/ermite.RunService/RemoveRunner"
56)
57
58// RunServiceClient is a client for the ermite.RunService service.
59type RunServiceClient interface {
60	// ListRuns lists the runs of a repository, highest id (newest) first. Each
61	// run is described by its latest attempt. The filters narrow the result; a
62	// server without the feature "ci.runs.filters" ignores them and returns
63	// every run, so a client that needs them checks the feature. Fails with
64	// invalid_argument if a filter is malformed.
65	ListRuns(context.Context, *connect.Request[ermite.ListRunsRequest]) (*connect.Response[ermite.ListRunsResponse], error)
66	// GetRun returns a run with its jobs and their steps, for the latest attempt
67	// or for the one asked. Fails with not_found if the run or the attempt does
68	// not exist.
69	GetRun(context.Context, *connect.Request[ermite.GetRunRequest]) (*connect.Response[ermite.GetRunResponse], error)
70	// GetJob returns one job with its steps. Fails with not_found if the job
71	// or the attempt does not exist.
72	GetJob(context.Context, *connect.Request[ermite.GetJobRequest]) (*connect.Response[ermite.GetJobResponse], error)
73	// GetJobLog streams the lines of the log of a job, from a line number. The
74	// server sends them in order in messages of at most 1,000 lines and 64 KiB of
75	// text each.
76	//
77	// Without follow, the stream ends after the last line stored when the call
78	// was made. With follow, it goes on as lines arrive, with at most 1 second of
79	// delay after the runner's AppendLog, and ends without error once the job has
80	// completed and all its lines were sent; on a completed job follow changes
81	// nothing. A client that loses the stream calls again with the offset after
82	// the last line it received. The client may cancel at any time.
83	//
84	// Fails with not_found if the job, the attempt or its log does not exist (the
85	// log is removed by the retention sweep, and a queued job has none: with
86	// follow, the call waits for the first line instead), with out_of_range if
87	// offset is beyond the end of the log of a job without follow, and with
88	// resource_exhausted when there are too many concurrent log streams, in
89	// total or from one client. Like Watch, a stream ends with unauthenticated
90	// when the token was revoked or expired.
91	GetJobLog(context.Context, *connect.Request[ermite.GetJobLogRequest]) (*connect.ServerStreamForClient[ermite.GetJobLogResponse], error)
92	// CancelRun asks to cancel the latest attempt of a run. Needs the ci:write
93	// scope. Jobs that have not started are cancelled at once; jobs in progress
94	// get a CANCEL_REASON_USER request through WatchJob, and the run completes
95	// when they have ended, so the returned run may still be IN_PROGRESS.
96	// Cancelling a run that already has a cancellation requested succeeds and
97	// changes nothing. Fails with failed_precondition if the run has completed.
98	CancelRun(context.Context, *connect.Request[ermite.CancelRunRequest]) (*connect.Response[ermite.CancelRunResponse], error)
99	// RerunRun starts a new attempt of a completed run: same run id and number,
100	// attempt + 1, same commit and same workflow file as at the original run (the
101	// file of the repository is not read again). Needs the ci:write scope. Fails
102	// with failed_precondition if the latest attempt has not completed, or if
103	// failed_only is set and no job failed. The new attempt is returned QUEUED.
104	RerunRun(context.Context, *connect.Request[ermite.RerunRunRequest]) (*connect.Response[ermite.RerunRunResponse], error)
105	// ListChecks lists the checks of a commit: for each job of each run on that
106	// sha, the one of the latest attempt, ordered by creation time then name.
107	// A commit without a run has no check: the list is empty, which is not an
108	// error, and the server does not verify that the commit exists. Returns at
109	// most 1,000 checks (truncated tells).
110	ListChecks(context.Context, *connect.Request[ermite.ListChecksRequest]) (*connect.Response[ermite.ListChecksResponse], error)
111	// ListRunners lists the registered runners, ordered by name. Needs the
112	// runner:register scope.
113	ListRunners(context.Context, *connect.Request[ermite.ListRunnersRequest]) (*connect.Response[ermite.ListRunnersResponse], error)
114	// RemoveRunner removes a runner: its runner token stops working at once (a
115	// FetchJob in progress ends with unauthenticated) and it no longer gets
116	// jobs. A job it is running is not affected: it ends normally, or fails as
117	// a lost runner without heartbeats. Needs the runner:register scope. Fails
118	// with not_found if the id is unknown.
119	RemoveRunner(context.Context, *connect.Request[ermite.RemoveRunnerRequest]) (*connect.Response[ermite.RemoveRunnerResponse], error)
120}
121
122// NewRunServiceClient constructs a client for the ermite.RunService service. By default, it uses
123// the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends
124// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or
125// connect.WithGRPCWeb() options.
126//
127// The URL supplied here should be the base URL for the Connect or gRPC server (for example,
128// http://api.acme.com or https://acme.com/grpc).
129func NewRunServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) RunServiceClient {
130	baseURL = strings.TrimRight(baseURL, "/")
131	runServiceMethods := ermite.File_ermite_run_proto.Services().ByName("RunService").Methods()
132	return &runServiceClient{
133		listRuns: connect.NewClient[ermite.ListRunsRequest, ermite.ListRunsResponse](
134			httpClient,
135			baseURL+RunServiceListRunsProcedure,
136			connect.WithSchema(runServiceMethods.ByName("ListRuns")),
137			connect.WithClientOptions(opts...),
138		),
139		getRun: connect.NewClient[ermite.GetRunRequest, ermite.GetRunResponse](
140			httpClient,
141			baseURL+RunServiceGetRunProcedure,
142			connect.WithSchema(runServiceMethods.ByName("GetRun")),
143			connect.WithClientOptions(opts...),
144		),
145		getJob: connect.NewClient[ermite.GetJobRequest, ermite.GetJobResponse](
146			httpClient,
147			baseURL+RunServiceGetJobProcedure,
148			connect.WithSchema(runServiceMethods.ByName("GetJob")),
149			connect.WithClientOptions(opts...),
150		),
151		getJobLog: connect.NewClient[ermite.GetJobLogRequest, ermite.GetJobLogResponse](
152			httpClient,
153			baseURL+RunServiceGetJobLogProcedure,
154			connect.WithSchema(runServiceMethods.ByName("GetJobLog")),
155			connect.WithClientOptions(opts...),
156		),
157		cancelRun: connect.NewClient[ermite.CancelRunRequest, ermite.CancelRunResponse](
158			httpClient,
159			baseURL+RunServiceCancelRunProcedure,
160			connect.WithSchema(runServiceMethods.ByName("CancelRun")),
161			connect.WithClientOptions(opts...),
162		),
163		rerunRun: connect.NewClient[ermite.RerunRunRequest, ermite.RerunRunResponse](
164			httpClient,
165			baseURL+RunServiceRerunRunProcedure,
166			connect.WithSchema(runServiceMethods.ByName("RerunRun")),
167			connect.WithClientOptions(opts...),
168		),
169		listChecks: connect.NewClient[ermite.ListChecksRequest, ermite.ListChecksResponse](
170			httpClient,
171			baseURL+RunServiceListChecksProcedure,
172			connect.WithSchema(runServiceMethods.ByName("ListChecks")),
173			connect.WithClientOptions(opts...),
174		),
175		listRunners: connect.NewClient[ermite.ListRunnersRequest, ermite.ListRunnersResponse](
176			httpClient,
177			baseURL+RunServiceListRunnersProcedure,
178			connect.WithSchema(runServiceMethods.ByName("ListRunners")),
179			connect.WithClientOptions(opts...),
180		),
181		removeRunner: connect.NewClient[ermite.RemoveRunnerRequest, ermite.RemoveRunnerResponse](
182			httpClient,
183			baseURL+RunServiceRemoveRunnerProcedure,
184			connect.WithSchema(runServiceMethods.ByName("RemoveRunner")),
185			connect.WithClientOptions(opts...),
186		),
187	}
188}
189
190// runServiceClient implements RunServiceClient.
191type runServiceClient struct {
192	listRuns     *connect.Client[ermite.ListRunsRequest, ermite.ListRunsResponse]
193	getRun       *connect.Client[ermite.GetRunRequest, ermite.GetRunResponse]
194	getJob       *connect.Client[ermite.GetJobRequest, ermite.GetJobResponse]
195	getJobLog    *connect.Client[ermite.GetJobLogRequest, ermite.GetJobLogResponse]
196	cancelRun    *connect.Client[ermite.CancelRunRequest, ermite.CancelRunResponse]
197	rerunRun     *connect.Client[ermite.RerunRunRequest, ermite.RerunRunResponse]
198	listChecks   *connect.Client[ermite.ListChecksRequest, ermite.ListChecksResponse]
199	listRunners  *connect.Client[ermite.ListRunnersRequest, ermite.ListRunnersResponse]
200	removeRunner *connect.Client[ermite.RemoveRunnerRequest, ermite.RemoveRunnerResponse]
201}
202
203// ListRuns calls ermite.RunService.ListRuns.
204func (c *runServiceClient) ListRuns(ctx context.Context, req *connect.Request[ermite.ListRunsRequest]) (*connect.Response[ermite.ListRunsResponse], error) {
205	return c.listRuns.CallUnary(ctx, req)
206}
207
208// GetRun calls ermite.RunService.GetRun.
209func (c *runServiceClient) GetRun(ctx context.Context, req *connect.Request[ermite.GetRunRequest]) (*connect.Response[ermite.GetRunResponse], error) {
210	return c.getRun.CallUnary(ctx, req)
211}
212
213// GetJob calls ermite.RunService.GetJob.
214func (c *runServiceClient) GetJob(ctx context.Context, req *connect.Request[ermite.GetJobRequest]) (*connect.Response[ermite.GetJobResponse], error) {
215	return c.getJob.CallUnary(ctx, req)
216}
217
218// GetJobLog calls ermite.RunService.GetJobLog.
219func (c *runServiceClient) GetJobLog(ctx context.Context, req *connect.Request[ermite.GetJobLogRequest]) (*connect.ServerStreamForClient[ermite.GetJobLogResponse], error) {
220	return c.getJobLog.CallServerStream(ctx, req)
221}
222
223// CancelRun calls ermite.RunService.CancelRun.
224func (c *runServiceClient) CancelRun(ctx context.Context, req *connect.Request[ermite.CancelRunRequest]) (*connect.Response[ermite.CancelRunResponse], error) {
225	return c.cancelRun.CallUnary(ctx, req)
226}
227
228// RerunRun calls ermite.RunService.RerunRun.
229func (c *runServiceClient) RerunRun(ctx context.Context, req *connect.Request[ermite.RerunRunRequest]) (*connect.Response[ermite.RerunRunResponse], error) {
230	return c.rerunRun.CallUnary(ctx, req)
231}
232
233// ListChecks calls ermite.RunService.ListChecks.
234func (c *runServiceClient) ListChecks(ctx context.Context, req *connect.Request[ermite.ListChecksRequest]) (*connect.Response[ermite.ListChecksResponse], error) {
235	return c.listChecks.CallUnary(ctx, req)
236}
237
238// ListRunners calls ermite.RunService.ListRunners.
239func (c *runServiceClient) ListRunners(ctx context.Context, req *connect.Request[ermite.ListRunnersRequest]) (*connect.Response[ermite.ListRunnersResponse], error) {
240	return c.listRunners.CallUnary(ctx, req)
241}
242
243// RemoveRunner calls ermite.RunService.RemoveRunner.
244func (c *runServiceClient) RemoveRunner(ctx context.Context, req *connect.Request[ermite.RemoveRunnerRequest]) (*connect.Response[ermite.RemoveRunnerResponse], error) {
245	return c.removeRunner.CallUnary(ctx, req)
246}
247
248// RunServiceHandler is an implementation of the ermite.RunService service.
249type RunServiceHandler interface {
250	// ListRuns lists the runs of a repository, highest id (newest) first. Each
251	// run is described by its latest attempt. The filters narrow the result; a
252	// server without the feature "ci.runs.filters" ignores them and returns
253	// every run, so a client that needs them checks the feature. Fails with
254	// invalid_argument if a filter is malformed.
255	ListRuns(context.Context, *connect.Request[ermite.ListRunsRequest]) (*connect.Response[ermite.ListRunsResponse], error)
256	// GetRun returns a run with its jobs and their steps, for the latest attempt
257	// or for the one asked. Fails with not_found if the run or the attempt does
258	// not exist.
259	GetRun(context.Context, *connect.Request[ermite.GetRunRequest]) (*connect.Response[ermite.GetRunResponse], error)
260	// GetJob returns one job with its steps. Fails with not_found if the job
261	// or the attempt does not exist.
262	GetJob(context.Context, *connect.Request[ermite.GetJobRequest]) (*connect.Response[ermite.GetJobResponse], error)
263	// GetJobLog streams the lines of the log of a job, from a line number. The
264	// server sends them in order in messages of at most 1,000 lines and 64 KiB of
265	// text each.
266	//
267	// Without follow, the stream ends after the last line stored when the call
268	// was made. With follow, it goes on as lines arrive, with at most 1 second of
269	// delay after the runner's AppendLog, and ends without error once the job has
270	// completed and all its lines were sent; on a completed job follow changes
271	// nothing. A client that loses the stream calls again with the offset after
272	// the last line it received. The client may cancel at any time.
273	//
274	// Fails with not_found if the job, the attempt or its log does not exist (the
275	// log is removed by the retention sweep, and a queued job has none: with
276	// follow, the call waits for the first line instead), with out_of_range if
277	// offset is beyond the end of the log of a job without follow, and with
278	// resource_exhausted when there are too many concurrent log streams, in
279	// total or from one client. Like Watch, a stream ends with unauthenticated
280	// when the token was revoked or expired.
281	GetJobLog(context.Context, *connect.Request[ermite.GetJobLogRequest], *connect.ServerStream[ermite.GetJobLogResponse]) error
282	// CancelRun asks to cancel the latest attempt of a run. Needs the ci:write
283	// scope. Jobs that have not started are cancelled at once; jobs in progress
284	// get a CANCEL_REASON_USER request through WatchJob, and the run completes
285	// when they have ended, so the returned run may still be IN_PROGRESS.
286	// Cancelling a run that already has a cancellation requested succeeds and
287	// changes nothing. Fails with failed_precondition if the run has completed.
288	CancelRun(context.Context, *connect.Request[ermite.CancelRunRequest]) (*connect.Response[ermite.CancelRunResponse], error)
289	// RerunRun starts a new attempt of a completed run: same run id and number,
290	// attempt + 1, same commit and same workflow file as at the original run (the
291	// file of the repository is not read again). Needs the ci:write scope. Fails
292	// with failed_precondition if the latest attempt has not completed, or if
293	// failed_only is set and no job failed. The new attempt is returned QUEUED.
294	RerunRun(context.Context, *connect.Request[ermite.RerunRunRequest]) (*connect.Response[ermite.RerunRunResponse], error)
295	// ListChecks lists the checks of a commit: for each job of each run on that
296	// sha, the one of the latest attempt, ordered by creation time then name.
297	// A commit without a run has no check: the list is empty, which is not an
298	// error, and the server does not verify that the commit exists. Returns at
299	// most 1,000 checks (truncated tells).
300	ListChecks(context.Context, *connect.Request[ermite.ListChecksRequest]) (*connect.Response[ermite.ListChecksResponse], error)
301	// ListRunners lists the registered runners, ordered by name. Needs the
302	// runner:register scope.
303	ListRunners(context.Context, *connect.Request[ermite.ListRunnersRequest]) (*connect.Response[ermite.ListRunnersResponse], error)
304	// RemoveRunner removes a runner: its runner token stops working at once (a
305	// FetchJob in progress ends with unauthenticated) and it no longer gets
306	// jobs. A job it is running is not affected: it ends normally, or fails as
307	// a lost runner without heartbeats. Needs the runner:register scope. Fails
308	// with not_found if the id is unknown.
309	RemoveRunner(context.Context, *connect.Request[ermite.RemoveRunnerRequest]) (*connect.Response[ermite.RemoveRunnerResponse], error)
310}
311
312// NewRunServiceHandler builds an HTTP handler from the service implementation. It returns the path
313// on which to mount the handler and the handler itself.
314//
315// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
316// and JSON codecs. They also support gzip compression.
317func NewRunServiceHandler(svc RunServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
318	runServiceMethods := ermite.File_ermite_run_proto.Services().ByName("RunService").Methods()
319	runServiceListRunsHandler := connect.NewUnaryHandler(
320		RunServiceListRunsProcedure,
321		svc.ListRuns,
322		connect.WithSchema(runServiceMethods.ByName("ListRuns")),
323		connect.WithHandlerOptions(opts...),
324	)
325	runServiceGetRunHandler := connect.NewUnaryHandler(
326		RunServiceGetRunProcedure,
327		svc.GetRun,
328		connect.WithSchema(runServiceMethods.ByName("GetRun")),
329		connect.WithHandlerOptions(opts...),
330	)
331	runServiceGetJobHandler := connect.NewUnaryHandler(
332		RunServiceGetJobProcedure,
333		svc.GetJob,
334		connect.WithSchema(runServiceMethods.ByName("GetJob")),
335		connect.WithHandlerOptions(opts...),
336	)
337	runServiceGetJobLogHandler := connect.NewServerStreamHandler(
338		RunServiceGetJobLogProcedure,
339		svc.GetJobLog,
340		connect.WithSchema(runServiceMethods.ByName("GetJobLog")),
341		connect.WithHandlerOptions(opts...),
342	)
343	runServiceCancelRunHandler := connect.NewUnaryHandler(
344		RunServiceCancelRunProcedure,
345		svc.CancelRun,
346		connect.WithSchema(runServiceMethods.ByName("CancelRun")),
347		connect.WithHandlerOptions(opts...),
348	)
349	runServiceRerunRunHandler := connect.NewUnaryHandler(
350		RunServiceRerunRunProcedure,
351		svc.RerunRun,
352		connect.WithSchema(runServiceMethods.ByName("RerunRun")),
353		connect.WithHandlerOptions(opts...),
354	)
355	runServiceListChecksHandler := connect.NewUnaryHandler(
356		RunServiceListChecksProcedure,
357		svc.ListChecks,
358		connect.WithSchema(runServiceMethods.ByName("ListChecks")),
359		connect.WithHandlerOptions(opts...),
360	)
361	runServiceListRunnersHandler := connect.NewUnaryHandler(
362		RunServiceListRunnersProcedure,
363		svc.ListRunners,
364		connect.WithSchema(runServiceMethods.ByName("ListRunners")),
365		connect.WithHandlerOptions(opts...),
366	)
367	runServiceRemoveRunnerHandler := connect.NewUnaryHandler(
368		RunServiceRemoveRunnerProcedure,
369		svc.RemoveRunner,
370		connect.WithSchema(runServiceMethods.ByName("RemoveRunner")),
371		connect.WithHandlerOptions(opts...),
372	)
373	return "/ermite.RunService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
374		switch r.URL.Path {
375		case RunServiceListRunsProcedure:
376			runServiceListRunsHandler.ServeHTTP(w, r)
377		case RunServiceGetRunProcedure:
378			runServiceGetRunHandler.ServeHTTP(w, r)
379		case RunServiceGetJobProcedure:
380			runServiceGetJobHandler.ServeHTTP(w, r)
381		case RunServiceGetJobLogProcedure:
382			runServiceGetJobLogHandler.ServeHTTP(w, r)
383		case RunServiceCancelRunProcedure:
384			runServiceCancelRunHandler.ServeHTTP(w, r)
385		case RunServiceRerunRunProcedure:
386			runServiceRerunRunHandler.ServeHTTP(w, r)
387		case RunServiceListChecksProcedure:
388			runServiceListChecksHandler.ServeHTTP(w, r)
389		case RunServiceListRunnersProcedure:
390			runServiceListRunnersHandler.ServeHTTP(w, r)
391		case RunServiceRemoveRunnerProcedure:
392			runServiceRemoveRunnerHandler.ServeHTTP(w, r)
393		default:
394			http.NotFound(w, r)
395		}
396	})
397}
398
399// UnimplementedRunServiceHandler returns CodeUnimplemented from all methods.
400type UnimplementedRunServiceHandler struct{}
401
402func (UnimplementedRunServiceHandler) ListRuns(context.Context, *connect.Request[ermite.ListRunsRequest]) (*connect.Response[ermite.ListRunsResponse], error) {
403	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.ListRuns is not implemented"))
404}
405
406func (UnimplementedRunServiceHandler) GetRun(context.Context, *connect.Request[ermite.GetRunRequest]) (*connect.Response[ermite.GetRunResponse], error) {
407	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.GetRun is not implemented"))
408}
409
410func (UnimplementedRunServiceHandler) GetJob(context.Context, *connect.Request[ermite.GetJobRequest]) (*connect.Response[ermite.GetJobResponse], error) {
411	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.GetJob is not implemented"))
412}
413
414func (UnimplementedRunServiceHandler) GetJobLog(context.Context, *connect.Request[ermite.GetJobLogRequest], *connect.ServerStream[ermite.GetJobLogResponse]) error {
415	return connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.GetJobLog is not implemented"))
416}
417
418func (UnimplementedRunServiceHandler) CancelRun(context.Context, *connect.Request[ermite.CancelRunRequest]) (*connect.Response[ermite.CancelRunResponse], error) {
419	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.CancelRun is not implemented"))
420}
421
422func (UnimplementedRunServiceHandler) RerunRun(context.Context, *connect.Request[ermite.RerunRunRequest]) (*connect.Response[ermite.RerunRunResponse], error) {
423	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.RerunRun is not implemented"))
424}
425
426func (UnimplementedRunServiceHandler) ListChecks(context.Context, *connect.Request[ermite.ListChecksRequest]) (*connect.Response[ermite.ListChecksResponse], error) {
427	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.ListChecks is not implemented"))
428}
429
430func (UnimplementedRunServiceHandler) ListRunners(context.Context, *connect.Request[ermite.ListRunnersRequest]) (*connect.Response[ermite.ListRunnersResponse], error) {
431	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.ListRunners is not implemented"))
432}
433
434func (UnimplementedRunServiceHandler) RemoveRunner(context.Context, *connect.Request[ermite.RemoveRunnerRequest]) (*connect.Response[ermite.RemoveRunnerResponse], error) {
435	return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.RunService.RemoveRunner is not implemented"))
436}

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 2

Tags 18

↑↓ moveenter openesc close