OXYGENHUB
# cb71e18eb6f9 oxygenhub / docs / oh.md
3.0 KiB · Markdown · last changed Device sign-in: approve an app's code on the web, the app gets a scoped token (closes #67) 1 month ago renderedsource blame history raw
5c6e92fd Andy McCall ↶ 1
# oh: OxygenHub from the command line
2
3
`oh` is to OxygenHub what `gh` is to GitHub. It talks to the hub's JSON API
4
(hub spec §12) and prints what it gets back: in colour on a terminal, as
5
plain text with `--plain` or `NO_COLOR`, and as the API's own JSON with
6
`--json`.
7
8
## Which hub, which repository, which token
9
10
Inside an Oxygen checkout, `oh` uses the checkout's remote:
11
- **Remote:** `origin`, or the only remote, or `--remote NAME`.
12
- **Hub and repository:** from the remote's URL (`https://hub/OWNER/NAME`).
13
- **Token and CA:** the ones `oxy` pushes with (`remote.NAME.token`, `remote.NAME.ca`).
14
15
So in a checkout that pushes to the hub, `oh` needs no setup.
16
17
Elsewhere, sign in once and name the repository:
18
19
```
20
oh auth login --with-hub https://earth.andymccall.xyz:7343 --ca ~/.config/oxy/earth-ca.pem
21
oh issue list --repo andymccall/oxygen
22
```
23
df71c789 Andy McCall ↶ 24
`oh auth login` shows a code and a link: open it, signed in to the hub, and
25
approve the code, choosing what `oh` may do (device sign-in). The token
26
arrives by itself; `oh` checks it, saves it with the CA in
27
`~/.config/oh/config.toml` (owner-only), and makes that hub the default.
28
`--token TOKEN` uses a token from Settings → Tokens instead, and
29
`--token -` reads one from stdin. `OH_TOKEN` (or `OXY_TOKEN`), `OH_HUB` and
30
`OXY_CA` override the saved values.
5c6e92fd Andy McCall ↶ 31
32
## Commands
33
34
| Command | What it does |
35
|---|---|
df71c789 Andy McCall ↶ 36
| `oh auth login`, `oh auth status` | Sign in (approve a code on the web, or give a token); show who you are |
5c6e92fd Andy McCall ↶ 37
| `oh repo view` | Name, description, visibility, default bookmark, clone command |
38
| `oh issue list [--state open\|closed\|all]` | Issues |
39
| `oh issue view N` | An issue with its comments |
40
| `oh issue create -t TITLE [-b BODY \| -F FILE] [-l LABEL]…` | Open an issue |
41
| `oh issue close N [--reason not_planned]`, `oh issue reopen N` | Close or reopen |
42
| `oh issue comment N -b BODY` | Comment |
0b20f1ec Andy McCall ↶ 43
| `oh proposal list [--state open\|draft\|landed\|closed\|all]`, `oh proposal view N` | Proposals, with changes, approvals and blockers; a landed one with who landed it and how |
5c6e92fd Andy McCall ↶ 44
| `oh proposal create -t TITLE --from BOOKMARK [--into BOOKMARK] [--draft]` | Propose a bookmark's changes |
45
| `oh proposal checks N` | Checks on the projected state |
1f1eb06a Andy McCall ↶ 46
| `oh proposal land N` | Land it on its target, as the page's Land button does |
5c6e92fd Andy McCall ↶ 47
| `oh run list`, `oh run view N` | OxygenFlow runs and their jobs |
48
| `oh run start [--bookmark B \| --change HASH] [--watch]` | Run the pipeline without a push |
49
| `oh run watch N` | Follow a run; exit 0 if it passes, 1 if not |
50
| `oh run log N JOB` | A job's log |
51
| `oh run rerun N` | Run a finished run's state again |
52
| `oh release list`, `oh release create TAG [-t TITLE] [-n NOTES]` | Releases |
53
| `oh release upload TAG FILE…` | Attach assets |
54
| `oh release trust TAG` | The release's trust audit; exit 1 on a failure |
55
| `oh api PATH [-X METHOD] [-d JSON]` | Any API call, JSON out |
56
57
Exit codes: 0 on success, 1 when a watched run or an audit fails, 2 on an
58
error.
59
60
## Not yet
61
62
- Also still to come: reviews, labels and milestones as commands, runner management (oxygenhub#41), and shell completions.