urun-cli 0.7.8__tar.gz → 0.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {urun_cli-0.7.8 → urun_cli-0.8.0}/CHANGELOG.md +24 -3
- urun_cli-0.8.0/PKG-INFO +164 -0
- urun_cli-0.8.0/README.md +140 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/pyproject.toml +7 -5
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/cli.py +88 -73
- urun_cli-0.8.0/src/urun/feature_flags.py +252 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/fleet.py +2 -1
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/kubectl_plugin.py +26 -9
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/serve.py +2 -1
- urun_cli-0.7.8/PKG-INFO +0 -659
- urun_cli-0.7.8/README.md +0 -634
- {urun_cli-0.7.8 → urun_cli-0.8.0}/.gitignore +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/LICENSE +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/SECURITY.md +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/hatch_build.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/__init__.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/_bin/README.md +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/api.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/buildlogs.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/catalog.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/client_tokens.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/config.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/deps.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/dev.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/devconsole.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/devstream.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/discovery.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/errors.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/frontend_launch.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/hub_builds.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/launch_auth.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/manifest.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/nodes.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/openai_proxy_bin.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/repo_deps.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/reserve.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/retry.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/runtime_health.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/rust.py +0 -0
- {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/scratch.py +0 -0
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
##
|
|
1
|
+
## 0.8.0
|
|
2
|
+
|
|
3
|
+
MVP launch release (URU-673). The CLI ships only its launch surface, gated by
|
|
4
|
+
release feature flags (`src/urun/feature_flags.py`, conventions in
|
|
5
|
+
[FLAGS.md](FLAGS.md)): `login`, `org`, `account`
|
|
6
|
+
(`org`/`usage`/`credit`/`quota`), `member`, `api-key`, `credit-ledger`,
|
|
7
|
+
`feedback`, and `open billing` register; every other command stays in the
|
|
8
|
+
tree but unregistered, failing exactly like an unknown command (argparse's
|
|
9
|
+
own invalid-choice error, exit 2 — no "not available" text, no flag names,
|
|
10
|
+
and no mention of a gated surface in any launch `--help` or in `login`'s
|
|
11
|
+
output). Hidden means nonexistent. Re-introducing a capability is a flag
|
|
12
|
+
flip in `feature_flags.py` plus the launch-pin update in
|
|
13
|
+
`tests/test_feature_flags.py` (see FLAGS.md, "Re-introducing a
|
|
14
|
+
capability") — no re-implementation.
|
|
15
|
+
|
|
16
|
+
Also in this release's code, but gated OFF in the launch surface (flipping
|
|
17
|
+
their flags re-introduces them):
|
|
2
18
|
|
|
3
19
|
- `urun release promote <release_id> [--environment main]` — make an existing
|
|
4
20
|
release current again (clean rollback, no marker commits). Server side it
|
|
@@ -13,8 +29,13 @@
|
|
|
13
29
|
import it came through, and the fix — previously it silently shipped an
|
|
14
30
|
EMPTY manifest (no python pins, no files) and the app's boot self-test died
|
|
15
31
|
with `No module named ...` after fleet rollout (sense, 2026-10-27/28).
|
|
16
|
-
- `kubectl urun` — a kubectl plugin (`
|
|
17
|
-
`urun`
|
|
32
|
+
- `kubectl urun` — a kubectl plugin (the `urun.kubectl_plugin` module ships
|
|
33
|
+
in the wheel; the `kubectl-urun` entry point is NOT installed in this
|
|
34
|
+
release — restoring it takes the `feat-byo-nodes` flip plus re-registering
|
|
35
|
+
the entry point in `[project.scripts]` and updating
|
|
36
|
+
`test_launch_wheel_ships_no_kubectl_urun_entry_point`, per FLAGS.md's
|
|
37
|
+
re-introduction procedure) with four verbs over the
|
|
38
|
+
`gpu.urun.sh/v1alpha1` GPUWorker surface:
|
|
18
39
|
`logs` (the `logs.urun.sh/v1` log subresource, with `-f` follow
|
|
19
40
|
passthrough, `--since`, `--tail`, `-s <service>`), `cordon`/`uncordon`
|
|
20
41
|
(`spec.unschedulable`), `drain` (cordon, then wait for the `Draining`
|
urun_cli-0.8.0/PKG-INFO
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: urun-cli
|
|
3
|
+
Version: 0.8.0
|
|
4
|
+
Summary: CLI for the urun platform — login, billing & usage. More capabilities coming soon.
|
|
5
|
+
Project-URL: Homepage, https://urun.sh
|
|
6
|
+
Project-URL: Repository, https://github.com/urun-sh/urun-cli
|
|
7
|
+
Project-URL: Issues, https://github.com/urun-sh/urun-cli/issues
|
|
8
|
+
Author: urun
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: cli,urun
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Provides-Extra: rust
|
|
21
|
+
Requires-Dist: tree-sitter-rust==0.24.0; extra == 'rust'
|
|
22
|
+
Requires-Dist: tree-sitter==0.25.2; extra == 'rust'
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# urun CLI
|
|
26
|
+
|
|
27
|
+
Command-line access to your urun org: log in, inspect billing, usage, and
|
|
28
|
+
cost information, and jump to the billing console. More capabilities are on
|
|
29
|
+
the way — see [What's next](#whats-next).
|
|
30
|
+
|
|
31
|
+
[](https://pypi.org/project/urun-cli/)
|
|
32
|
+
[](https://pypi.org/project/urun-cli/)
|
|
33
|
+
|
|
34
|
+
## Install
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
uv tool install urun-cli
|
|
38
|
+
# or
|
|
39
|
+
pip install urun-cli
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The package installs the `urun` command:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
urun --version
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For one-off `uvx` usage:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uvx --from urun-cli urun --version
|
|
52
|
+
# or the package-matching command alias
|
|
53
|
+
uvx urun-cli --version
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Log in
|
|
57
|
+
|
|
58
|
+
Save an org-scoped API key locally with `urun login`:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
urun login
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
If `URUN_API_KEY` is not already set, `urun login` opens the urun console API
|
|
65
|
+
keys page, prompts you to paste the generated `urun_sk_...` key, verifies it
|
|
66
|
+
with the urun API, and stores credentials for later commands.
|
|
67
|
+
|
|
68
|
+
If you already have a key, you can pass it directly:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
urun login --api-key urun_sk_<secret>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
For CI or one-off commands, you can use the environment variable instead:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
export URUN_API_KEY=urun_sk_<secret>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Billing & usage
|
|
81
|
+
|
|
82
|
+
Every command is org-scoped via your API key.
|
|
83
|
+
|
|
84
|
+
Your org identity (use `--id` in scripts: `ORG=$(urun org --id)`):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
urun org
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Usage summary and credit balance:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
urun account usage
|
|
94
|
+
urun account credit
|
|
95
|
+
urun account quota
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The credit ledger — every credit grant and charge to your org, newest first:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
urun credit-ledger list
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Org config, members, and API keys:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
urun account org
|
|
108
|
+
urun member list
|
|
109
|
+
urun api-key list
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Open the billing page in the urun console:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
urun open billing
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`urun feedback` raises and tracks issues with the urun team from your
|
|
119
|
+
terminal.
|
|
120
|
+
|
|
121
|
+
## Common options
|
|
122
|
+
|
|
123
|
+
| Option | Description |
|
|
124
|
+
| --- | --- |
|
|
125
|
+
| `--api-url` | Override the API URL; defaults to `URUN_API_URL`, saved login credentials, or `https://api.urun.sh/v1`. |
|
|
126
|
+
| `--api-key` | API key; defaults to `URUN_API_KEY` or saved login credentials. |
|
|
127
|
+
| `--json` | Machine-readable output, where supported. |
|
|
128
|
+
|
|
129
|
+
## Troubleshooting
|
|
130
|
+
|
|
131
|
+
| Error | Fix |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| `missing API key` | Run `urun login`, set `URUN_API_KEY`, or pass `--api-key`. |
|
|
134
|
+
| `invalid API key format` | Use `urun_<32 lowercase hex chars>`. |
|
|
135
|
+
|
|
136
|
+
## What's next
|
|
137
|
+
|
|
138
|
+
This release focuses on account access: login, billing, usage, and cost
|
|
139
|
+
information. Additional capabilities — deploy tooling, app management, and
|
|
140
|
+
more — are in development and will arrive in upcoming releases.
|
|
141
|
+
|
|
142
|
+
## Development
|
|
143
|
+
|
|
144
|
+
Contributing and test instructions are in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
145
|
+
The CLI gates unreleased surfaces behind release feature flags — see
|
|
146
|
+
[FLAGS.md](FLAGS.md) for the conventions and how to exercise them from a
|
|
147
|
+
source checkout.
|
|
148
|
+
|
|
149
|
+
This repo has a Nix/direnv/devcontainer baseline:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
direnv allow
|
|
153
|
+
just sync
|
|
154
|
+
just check
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Use VS Code Dev Containers to open the repository with the same toolchain in a
|
|
158
|
+
container. Copy `devcontainer.env.example` to `.devcontainer.env` if you need
|
|
159
|
+
to pass local git identity or other non-secret development settings into the
|
|
160
|
+
container.
|
|
161
|
+
|
|
162
|
+
## License
|
|
163
|
+
|
|
164
|
+
MIT.
|
urun_cli-0.8.0/README.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# urun CLI
|
|
2
|
+
|
|
3
|
+
Command-line access to your urun org: log in, inspect billing, usage, and
|
|
4
|
+
cost information, and jump to the billing console. More capabilities are on
|
|
5
|
+
the way — see [What's next](#whats-next).
|
|
6
|
+
|
|
7
|
+
[](https://pypi.org/project/urun-cli/)
|
|
8
|
+
[](https://pypi.org/project/urun-cli/)
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
uv tool install urun-cli
|
|
14
|
+
# or
|
|
15
|
+
pip install urun-cli
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The package installs the `urun` command:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
urun --version
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
For one-off `uvx` usage:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
uvx --from urun-cli urun --version
|
|
28
|
+
# or the package-matching command alias
|
|
29
|
+
uvx urun-cli --version
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Log in
|
|
33
|
+
|
|
34
|
+
Save an org-scoped API key locally with `urun login`:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
urun login
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
If `URUN_API_KEY` is not already set, `urun login` opens the urun console API
|
|
41
|
+
keys page, prompts you to paste the generated `urun_sk_...` key, verifies it
|
|
42
|
+
with the urun API, and stores credentials for later commands.
|
|
43
|
+
|
|
44
|
+
If you already have a key, you can pass it directly:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
urun login --api-key urun_sk_<secret>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
For CI or one-off commands, you can use the environment variable instead:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
export URUN_API_KEY=urun_sk_<secret>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Billing & usage
|
|
57
|
+
|
|
58
|
+
Every command is org-scoped via your API key.
|
|
59
|
+
|
|
60
|
+
Your org identity (use `--id` in scripts: `ORG=$(urun org --id)`):
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
urun org
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Usage summary and credit balance:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
urun account usage
|
|
70
|
+
urun account credit
|
|
71
|
+
urun account quota
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The credit ledger — every credit grant and charge to your org, newest first:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
urun credit-ledger list
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Org config, members, and API keys:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
urun account org
|
|
84
|
+
urun member list
|
|
85
|
+
urun api-key list
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Open the billing page in the urun console:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
urun open billing
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
`urun feedback` raises and tracks issues with the urun team from your
|
|
95
|
+
terminal.
|
|
96
|
+
|
|
97
|
+
## Common options
|
|
98
|
+
|
|
99
|
+
| Option | Description |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| `--api-url` | Override the API URL; defaults to `URUN_API_URL`, saved login credentials, or `https://api.urun.sh/v1`. |
|
|
102
|
+
| `--api-key` | API key; defaults to `URUN_API_KEY` or saved login credentials. |
|
|
103
|
+
| `--json` | Machine-readable output, where supported. |
|
|
104
|
+
|
|
105
|
+
## Troubleshooting
|
|
106
|
+
|
|
107
|
+
| Error | Fix |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| `missing API key` | Run `urun login`, set `URUN_API_KEY`, or pass `--api-key`. |
|
|
110
|
+
| `invalid API key format` | Use `urun_<32 lowercase hex chars>`. |
|
|
111
|
+
|
|
112
|
+
## What's next
|
|
113
|
+
|
|
114
|
+
This release focuses on account access: login, billing, usage, and cost
|
|
115
|
+
information. Additional capabilities — deploy tooling, app management, and
|
|
116
|
+
more — are in development and will arrive in upcoming releases.
|
|
117
|
+
|
|
118
|
+
## Development
|
|
119
|
+
|
|
120
|
+
Contributing and test instructions are in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
121
|
+
The CLI gates unreleased surfaces behind release feature flags — see
|
|
122
|
+
[FLAGS.md](FLAGS.md) for the conventions and how to exercise them from a
|
|
123
|
+
source checkout.
|
|
124
|
+
|
|
125
|
+
This repo has a Nix/direnv/devcontainer baseline:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
direnv allow
|
|
129
|
+
just sync
|
|
130
|
+
just check
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Use VS Code Dev Containers to open the repository with the same toolchain in a
|
|
134
|
+
container. Copy `devcontainer.env.example` to `.devcontainer.env` if you need
|
|
135
|
+
to pass local git identity or other non-secret development settings into the
|
|
136
|
+
container.
|
|
137
|
+
|
|
138
|
+
## License
|
|
139
|
+
|
|
140
|
+
MIT.
|
|
@@ -20,14 +20,14 @@ name = "urun-cli"
|
|
|
20
20
|
# so every merge remains on the already-published version until this value is
|
|
21
21
|
# advanced. Wiring semantic-release into CI remains separate work; this patch
|
|
22
22
|
# bump is the minimal release unblock (post-v0.6.3 fixes + the Rust feature minor).
|
|
23
|
-
version = "0.
|
|
24
|
-
description = "
|
|
23
|
+
version = "0.8.0"
|
|
24
|
+
description = "CLI for the urun platform — login, billing & usage. More capabilities coming soon."
|
|
25
25
|
readme = "README.md"
|
|
26
26
|
requires-python = ">=3.11"
|
|
27
27
|
license = "MIT"
|
|
28
28
|
license-files = ["LICENSE"]
|
|
29
29
|
authors = [{ name = "urun" }]
|
|
30
|
-
keywords = ["urun", "
|
|
30
|
+
keywords = ["urun", "cli"]
|
|
31
31
|
classifiers = [
|
|
32
32
|
"Development Status :: 3 - Alpha",
|
|
33
33
|
"Environment :: Console",
|
|
@@ -36,7 +36,6 @@ classifiers = [
|
|
|
36
36
|
"Programming Language :: Python :: 3",
|
|
37
37
|
"Programming Language :: Python :: 3.11",
|
|
38
38
|
"Programming Language :: Python :: 3.12",
|
|
39
|
-
"Topic :: Software Development :: Build Tools",
|
|
40
39
|
]
|
|
41
40
|
dependencies = []
|
|
42
41
|
|
|
@@ -48,7 +47,10 @@ Issues = "https://github.com/urun-sh/urun-cli/issues"
|
|
|
48
47
|
[project.scripts]
|
|
49
48
|
urun = "urun.cli:main"
|
|
50
49
|
urun-cli = "urun.cli:main"
|
|
51
|
-
kubectl-urun
|
|
50
|
+
# No kubectl-urun entry point at launch (URU-673): the GPUWorker surface is
|
|
51
|
+
# flag-hidden (feat-byo-nodes, FLAGS.md) and the wheel must not install an
|
|
52
|
+
# operator binary whose every verb errors. The module stays, gated; the entry
|
|
53
|
+
# point returns when the flag flips on in a future release.
|
|
52
54
|
|
|
53
55
|
[project.optional-dependencies]
|
|
54
56
|
# Rust app discovery (urun/rust.py) parses with the pinned native
|