v0.16.1 ffa9a5e

services.md RawHistoryFolder

Services

Service RPCs
RepoService ListRepos, GetRepo, CreateRepo, UpdateRepo (field mask, merge settings), DeleteRepo
GitService ListRefs, GetTree, ListPaths, GetBlob (streamed), ListCommits, GetCommit (structured diff), ResolveRevision
TokenService CreateToken (secret shown once), ListTokens, RevokeToken
MergeRequestService CreateMergeRequest, ListMergeRequests, GetMergeRequest (commits, diff, comments), AddComment, EditComment, DeleteComment, ResolveComment, CloseMergeRequest, MarkReady, MergeMergeRequest (modes fast-forward, squash, merge commit), MarkRead, EnableAutoMerge, CancelAutoMerge (merge by itself once a check passed on the head and all its runs are complete; setting allow_auto_merge, MergeRequest.auto_merge, events MergeRequestAutoMergeEnabled and MergeRequestAutoMergeCancelled, MergeRequestMerged.auto; feature merge_requests.auto_merge). Open merge requests carry mergeability (up to date, behind, conflict, or checking) and Watch publishes MergeRequestMergeability each time a result is settled for new branch tips (feature merge_requests.mergeability)
IssueService CreateIssue, ListIssues, GetIssue (comments, merge requests naming the issue, closed_by_merge_request), AddIssueComment, CloseIssue, ReopenIssue; owner only: ListPendingIssues, ApproveIssue, RejectIssue. Features issues, issues.links. Issues share numbers with merge requests
SessionService CreateLoginLink, SignOutEverywhere (owner only)
EventService Watch (streamed, resumable). Topics home, repo:<name> and owner (owner rights only). Events 17–21: issue_opened, issue_closed, issue_reopened, issue_commented, and issue_submitted (only on owner, no content). Event 22: merge_request_mergeability
ServerService GetVersion (version and features), GetSigningKey, RotateOIDCKey (owner only)
TrustedKeyService ListTrustedKeys, AddTrustedKey and RemoveTrustedKey (owner only). Commit.verification carries the result of the check (feature commit_signatures)
RunService ListRuns, GetRun, GetJob, GetJobLog (streamed, follow), ListAnnotations, GetStepSummaries, CancelRun, RerunRun, DispatchWorkflow, ListWorkflows, DisableWorkflow, EnableWorkflow, ListChecks, ListRunners, RemoveRunner
RunnerService RegisterRunner, FetchJob (long poll), UpdateJob, AppendLog (offset-idempotent), Heartbeat, WatchJob (cancel requests, streamed), CompleteJob (idempotent), ResolveActions, UploadSummary
SecretService SetSecret, ListSecrets (names only), DeleteSecret. Scopes: instance, repository, environment
VariableService SetVariable, GetVariable, ListVariables, DeleteVariable. Same scopes
EnvironmentService CreateEnvironment, ListEnvironments, DeleteEnvironment
ArtifactService ListArtifacts, DownloadArtifact (streamed, resumable), DeleteArtifact
JobArtifactService CreateJobArtifact, UploadJobArtifactBlock (client stream), CommitJobArtifact, FinalizeJobArtifact, ListJobArtifacts, DownloadJobArtifact (streamed, resumable), DeleteJobArtifact. Scoped to the run of the job token

MirrorService

Servers implementing push mirrors advertise mirror in GetVersionResponse.features. No new token scope is introduced.

RPC Access and behavior
GetMirrorKey Non-anonymous caller; generates the public SSH key on first call. Without ERMITE_SECRETS_KEY, returns failed_precondition
RotateMirrorKey Owner rights: admin token or a token with every scope and no repository or branch limits. Replaces the key immediately and returns the previous fingerprint
GetMirrorConfig, SetMirrorConfig Owner rights. Set patches only present fields; invalid fields return invalid_argument with field violations
SetRepoMirror repo:admin on the repository. Sets an override, even if global mirroring is disabled; empty cron and absent all-branches inherit the global values
RemoveRepoMirror repo:admin on the repository. Removes the override
SetRepoMirrorExcluded repo:admin on the repository. Opts out of or into the global template; a URL override wins over exclusion
GetMirrorStatus Read access to the repository. Error detail is returned only with repo:admin
ListMirrorStatus Owner rights
SyncMirror repo:admin for repo, or owner rights for all=true (with empty repo). Returns per-repository results, including queued and no-op indicators and a per-repository error; all=true continues past failing repositories and skips disabled ones

Cron expressions have five fields, run in UTC and must be at least five minutes apart. Mirrors push the default branch (or every branch with all_branches) and tags. force lifts a pause, skips the no-op check and the 60-second manual sync throttle; it never performs a Git force push. Pushes are atomic: one rejected ref fails the whole push. After key rotation, add the new public key to remotes and sync with force to recover from authentication failures. Configuration can be saved without ERMITE_SECRETS_KEY, but pushes cannot run without it.

EventService.Watch adds mirror_failed (field 23, MirrorFailed) when a mirror starts failing (ok or disabled to failing or paused, once per incident), and mirror_recovered (field 24, MirrorRecovered) when a failing or paused mirror succeeds again. These are transition events, not events for every attempt. They are delivered on repo:<name> and home, subject to repository visibility. Neither event carries a URL, reason or error detail (MirrorFailed field 4, reason, was removed).

ReleaseService

Servers advertise releases in GetVersionResponse.features.

RPC Behavior
CreateRelease, GetRelease, ListReleases, UpdateRelease, DeleteRelease Manage releases; get selects by id, tag or latest. Lists are paginated, newest first. Updates use a field mask
UploadReleaseAsset Client stream: metadata and nonnegative exact size first, then data in chunks of at most 1 MiB. replace replaces a taken name
UpdateReleaseAsset, DeleteReleaseAsset, ListReleaseAssets Rename/relabel with a field mask, delete, or list uploaded assets by name
DownloadReleaseAsset Select by asset id, tag/name or latest/name; metadata first, then chunks of at most 1 MiB. Resume with a byte offset
GetReleaseUsage Repository usage including reserved uploads, quota, asset size and count limits

Published releases follow repository read access; drafts are visible only to writers. Writes require release:write (SCOPE_RELEASE_WRITE = 13) or a job token with contents: write for that repository. Branch-limited tokens cannot write releases. Unreadable objects return not_found. Duplicate tags or asset names return already_exists; limits return resource_exhausted. Publishing requires an existing tag or target_commitish to create it; existing tags never move. make_latest is a boolean pin, and updates use mask presence.

EventService.Watch adds release_published (27), release_updated (28), release_deleted (29) and release_unpublished (30), delivered on repo:<name> and home subject to repository visibility. Payloads carry repository, release id and tag; all except deletion also carry draft and prerelease flags. Tag deletion turns a release into a draft without deleting its assets.

source
1# Services
2
3| Service | RPCs |
4|---|---|
5| `RepoService` | `ListRepos`, `GetRepo`, `CreateRepo`, `UpdateRepo` (field mask, merge settings), `DeleteRepo` |
6| `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |
7| `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |
8| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MarkReady`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
9| `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Features `issues`, `issues.links`. Issues share numbers with merge requests |
10| `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |
11| `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |
12| `ServerService` | `GetVersion` (version and features), `GetSigningKey`, `RotateOIDCKey` (owner only) |
13| `TrustedKeyService` | `ListTrustedKeys`, `AddTrustedKey` and `RemoveTrustedKey` (owner only). `Commit.verification` carries the result of the check (feature `commit_signatures`) |
14| `RunService` | `ListRuns`, `GetRun`, `GetJob`, `GetJobLog` (streamed, follow), `ListAnnotations`, `GetStepSummaries`, `CancelRun`, `RerunRun`, `DispatchWorkflow`, `ListWorkflows`, `DisableWorkflow`, `EnableWorkflow`, `ListChecks`, `ListRunners`, `RemoveRunner` |
15| `RunnerService` | `RegisterRunner`, `FetchJob` (long poll), `UpdateJob`, `AppendLog` (offset-idempotent), `Heartbeat`, `WatchJob` (cancel requests, streamed), `CompleteJob` (idempotent), `ResolveActions`, `UploadSummary` |
16| `SecretService` | `SetSecret`, `ListSecrets` (names only), `DeleteSecret`. Scopes: instance, repository, environment |
17| `VariableService` | `SetVariable`, `GetVariable`, `ListVariables`, `DeleteVariable`. Same scopes |
18| `EnvironmentService` | `CreateEnvironment`, `ListEnvironments`, `DeleteEnvironment` |
19| `ArtifactService` | `ListArtifacts`, `DownloadArtifact` (streamed, resumable), `DeleteArtifact` |
20| `JobArtifactService` | `CreateJobArtifact`, `UploadJobArtifactBlock` (client stream), `CommitJobArtifact`, `FinalizeJobArtifact`, `ListJobArtifacts`, `DownloadJobArtifact` (streamed, resumable), `DeleteJobArtifact`. Scoped to the run of the job token |
21
22## MirrorService
23
24Servers implementing push mirrors advertise `mirror` in `GetVersionResponse.features`.
25No new token scope is introduced.
26
27| RPC | Access and behavior |
28|---|---|
29| `GetMirrorKey` | Non-anonymous caller; generates the public SSH key on first call. Without `ERMITE_SECRETS_KEY`, returns `failed_precondition` |
30| `RotateMirrorKey` | Owner rights: admin token or a token with every scope and no repository or branch limits. Replaces the key immediately and returns the previous fingerprint |
31| `GetMirrorConfig`, `SetMirrorConfig` | Owner rights. Set patches only present fields; invalid fields return `invalid_argument` with field violations |
32| `SetRepoMirror` | `repo:admin` on the repository. Sets an override, even if global mirroring is disabled; empty cron and absent all-branches inherit the global values |
33| `RemoveRepoMirror` | `repo:admin` on the repository. Removes the override |
34| `SetRepoMirrorExcluded` | `repo:admin` on the repository. Opts out of or into the global template; a URL override wins over exclusion |
35| `GetMirrorStatus` | Read access to the repository. Error `detail` is returned only with `repo:admin` |
36| `ListMirrorStatus` | Owner rights |
37| `SyncMirror` | `repo:admin` for `repo`, or owner rights for `all=true` (with empty `repo`). Returns per-repository results, including queued and no-op indicators and a per-repository `error`; `all=true` continues past failing repositories and skips disabled ones |
38
39Cron expressions have five fields, run in UTC and must be at least five minutes
40apart. Mirrors push the default branch (or every branch with `all_branches`) and
41tags. `force` lifts a pause, skips the no-op check and the 60-second manual sync
42throttle; it **never** performs a Git force push. Pushes are atomic: one rejected
43ref fails the whole push. After key rotation, add the new public key to remotes
44and sync with `force` to recover from authentication failures. Configuration can
45be saved without `ERMITE_SECRETS_KEY`, but pushes cannot run without it.
46
47`EventService.Watch` adds `mirror_failed` (field 23, `MirrorFailed`) when a mirror
48starts failing (ok or disabled to failing or paused, once per incident), and `mirror_recovered`
49(field 24, `MirrorRecovered`) when a failing or paused mirror succeeds again.
50These are transition events, not events for every attempt. They are delivered on
51`repo:<name>` and `home`, subject to repository visibility. Neither event carries
52a URL, reason or error detail (`MirrorFailed` field 4, `reason`, was removed).
53
54## ReleaseService
55
56Servers advertise `releases` in `GetVersionResponse.features`.
57
58| RPC | Behavior |
59|---|---|
60| `CreateRelease`, `GetRelease`, `ListReleases`, `UpdateRelease`, `DeleteRelease` | Manage releases; get selects by id, tag or latest. Lists are paginated, newest first. Updates use a field mask |
61| `UploadReleaseAsset` | Client stream: metadata and nonnegative exact size first, then data in chunks of at most 1 MiB. `replace` replaces a taken name |
62| `UpdateReleaseAsset`, `DeleteReleaseAsset`, `ListReleaseAssets` | Rename/relabel with a field mask, delete, or list uploaded assets by name |
63| `DownloadReleaseAsset` | Select by asset id, tag/name or latest/name; metadata first, then chunks of at most 1 MiB. Resume with a byte offset |
64| `GetReleaseUsage` | Repository usage including reserved uploads, quota, asset size and count limits |
65
66Published releases follow repository read access; drafts are visible only to
67writers. Writes require `release:write` (`SCOPE_RELEASE_WRITE = 13`) or a job
68token with `contents: write` for that repository. Branch-limited tokens cannot
69write releases. Unreadable objects return `not_found`. Duplicate tags or asset
70names return `already_exists`; limits return `resource_exhausted`. Publishing
71requires an existing tag or `target_commitish` to create it; existing tags never
72move. `make_latest` is a boolean pin, and updates use mask presence.
73
74`EventService.Watch` adds `release_published` (27), `release_updated` (28),
75`release_deleted` (29) and `release_unpublished` (30), delivered on `repo:<name>`
76and `home` subject to repository visibility. Payloads carry repository, release
77id and tag; all except deletion also carry draft and prerelease flags. Tag
78deletion turns a release into a draft without deleting its assets.

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