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.
Files changed (40) hide show
  1. {urun_cli-0.7.8 → urun_cli-0.8.0}/CHANGELOG.md +24 -3
  2. urun_cli-0.8.0/PKG-INFO +164 -0
  3. urun_cli-0.8.0/README.md +140 -0
  4. {urun_cli-0.7.8 → urun_cli-0.8.0}/pyproject.toml +7 -5
  5. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/cli.py +88 -73
  6. urun_cli-0.8.0/src/urun/feature_flags.py +252 -0
  7. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/fleet.py +2 -1
  8. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/kubectl_plugin.py +26 -9
  9. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/serve.py +2 -1
  10. urun_cli-0.7.8/PKG-INFO +0 -659
  11. urun_cli-0.7.8/README.md +0 -634
  12. {urun_cli-0.7.8 → urun_cli-0.8.0}/.gitignore +0 -0
  13. {urun_cli-0.7.8 → urun_cli-0.8.0}/LICENSE +0 -0
  14. {urun_cli-0.7.8 → urun_cli-0.8.0}/SECURITY.md +0 -0
  15. {urun_cli-0.7.8 → urun_cli-0.8.0}/hatch_build.py +0 -0
  16. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/__init__.py +0 -0
  17. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/_bin/README.md +0 -0
  18. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/api.py +0 -0
  19. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/buildlogs.py +0 -0
  20. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/catalog.py +0 -0
  21. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/client_tokens.py +0 -0
  22. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/config.py +0 -0
  23. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/deps.py +0 -0
  24. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/dev.py +0 -0
  25. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/devconsole.py +0 -0
  26. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/devstream.py +0 -0
  27. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/discovery.py +0 -0
  28. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/errors.py +0 -0
  29. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/frontend_launch.py +0 -0
  30. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/hub_builds.py +0 -0
  31. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/launch_auth.py +0 -0
  32. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/manifest.py +0 -0
  33. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/nodes.py +0 -0
  34. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/openai_proxy_bin.py +0 -0
  35. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/repo_deps.py +0 -0
  36. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/reserve.py +0 -0
  37. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/retry.py +0 -0
  38. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/runtime_health.py +0 -0
  39. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/rust.py +0 -0
  40. {urun_cli-0.7.8 → urun_cli-0.8.0}/src/urun/scratch.py +0 -0
@@ -1,4 +1,20 @@
1
- ## Unreleased
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 (`kubectl-urun`, installed alongside
17
- `urun`) with four verbs over the `gpu.urun.sh/v1alpha1` GPUWorker surface:
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`
@@ -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
+ [![PyPI](https://img.shields.io/pypi/v/urun-cli.svg)](https://pypi.org/project/urun-cli/)
32
+ [![Python](https://img.shields.io/pypi/pyversions/urun-cli.svg)](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.
@@ -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
+ [![PyPI](https://img.shields.io/pypi/v/urun-cli.svg)](https://pypi.org/project/urun-cli/)
8
+ [![Python](https://img.shields.io/pypi/pyversions/urun-cli.svg)](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.7.8"
24
- description = "End-user CLI for deploying apps to urun"
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", "deploy", "cli"]
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 = "urun.kubectl_plugin:main"
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