v0.30.0 c899179

commit-signatures.md RawHistoryFolder

Commit signatures

ermite checks commit signatures on the commit list, the commit page and the commits of a merge request, and shows a badge with the protocol and the result. The API returns the same result in Commit.verification from ListCommits, GetCommit and GetMergeRequest.

Formats

Format Git setting Checked
SSH gpg.format=ssh yes
OpenPGP gpg.format=openpgp (default) yes
X.509 gpg.format=x509 no, shown as unverified

Signatures are checked in the server, without gpg or ssh-keygen.

States

Badge Meaning
SSH Verified / GPG Verified valid signature, trusted key, committer email listed for that key
Unverified unknown key, email not listed for the key, expired or revoked OpenPGP key, or X.509; the tooltip says which
Bad signature the signature is malformed or does not match the commit
none (list) / unsigned (commit page) no signature

An OpenPGP key's expiry is judged when the signature was made; a revoked key is unverified for all its commits. OpenPGP signatures over SHA-1 count as bad signatures.

Trusted keys

Only the owner (the admin token, or a token with every scope, no repository list and no branch prefix) changes the list. Any authenticated caller can read it.

ermite signing-key trust add --format ssh --title laptop --email me@example.com ~/.ssh/id_ed25519.pub
gpg --armor --export me@example.com | ermite signing-key trust add --format gpg --title gpg --email me@example.com -
ermite signing-key trust list
ermite signing-key trust remove <id>
  • A key may sign for 1 to 10 emails; up to 100 keys.
  • The id is the fingerprint: SHA256:… for SSH, the primary key fingerprint for OpenPGP.
  • The server's own key (ermite signing-key show), which signs squash and merge commits (generated automatically on first start), is always trusted for the committer email and cannot be removed.
  • Private keys are refused.
source
1# Commit signatures
2
3ermite checks commit signatures on the commit list, the commit page and the commits of a merge request, and shows a badge with the protocol and the result. The API returns the same result in `Commit.verification` from `ListCommits`, `GetCommit` and `GetMergeRequest`.
4
5## Formats
6
7| Format | Git setting | Checked |
8|---|---|---|
9| SSH | `gpg.format=ssh` | yes |
10| OpenPGP | `gpg.format=openpgp` (default) | yes |
11| X.509 | `gpg.format=x509` | no, shown as unverified |
12
13Signatures are checked in the server, without `gpg` or `ssh-keygen`.
14
15## States
16
17| Badge | Meaning |
18|---|---|
19| `SSH Verified` / `GPG Verified` | valid signature, trusted key, committer email listed for that key |
20| `Unverified` | unknown key, email not listed for the key, expired or revoked OpenPGP key, or X.509; the tooltip says which |
21| `Bad signature` | the signature is malformed or does not match the commit |
22| none (list) / `unsigned` (commit page) | no signature |
23
24An OpenPGP key's expiry is judged when the signature was made; a revoked key is unverified for all its commits. OpenPGP signatures over SHA-1 count as bad signatures.
25
26## Trusted keys
27
28Only the owner (the admin token, or a token with every scope, no repository list and no branch prefix) changes the list. Any authenticated caller can read it.
29
30```sh
31ermite signing-key trust add --format ssh --title laptop --email me@example.com ~/.ssh/id_ed25519.pub
32gpg --armor --export me@example.com | ermite signing-key trust add --format gpg --title gpg --email me@example.com -
33ermite signing-key trust list
34ermite signing-key trust remove <id>
35```
36
37- A key may sign for 1 to 10 emails; up to 100 keys.
38- The id is the fingerprint: `SHA256:…` for SSH, the primary key fingerprint for OpenPGP.
39- The server's own key (`ermite signing-key show`), which signs squash and merge commits (generated automatically on first start), is always trusted for the committer email and cannot be removed.
40- Private keys are refused.

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 42

↑↓ moveenter openesc close