yhub 0.0.1__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.
- yhub-0.0.1/.github/workflows/publish.yml +29 -0
- yhub-0.0.1/.gitignore +6 -0
- yhub-0.0.1/LICENSE +21 -0
- yhub-0.0.1/PKG-INFO +58 -0
- yhub-0.0.1/PUBLISHING.md +80 -0
- yhub-0.0.1/README.md +37 -0
- yhub-0.0.1/pyproject.toml +35 -0
- yhub-0.0.1/yhub/__init__.py +9 -0
- yhub-0.0.1/yhub/__main__.py +40 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
# Publishes the built distributions to PyPI.
|
|
4
|
+
#
|
|
5
|
+
# First publish of a brand-new project name uses a PyPI *pending publisher* (no secrets needed):
|
|
6
|
+
# PyPI → Account → Publishing → "Add a pending publisher"
|
|
7
|
+
# PyPI project name: yhub
|
|
8
|
+
# Owner: ifeitao
|
|
9
|
+
# Repository name: yhub
|
|
10
|
+
# Workflow name: publish.yml
|
|
11
|
+
# Environment name: pypi
|
|
12
|
+
# After that, publishing a GitHub Release (or running this workflow manually) uploads with OIDC.
|
|
13
|
+
|
|
14
|
+
on:
|
|
15
|
+
release:
|
|
16
|
+
types: [published]
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
pypi:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
environment: pypi
|
|
23
|
+
permissions:
|
|
24
|
+
id-token: write # required for trusted publishing (OIDC)
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- uses: astral-sh/setup-uv@v5
|
|
28
|
+
- run: uv build --no-sources
|
|
29
|
+
- run: uv publish
|
yhub-0.0.1/.gitignore
ADDED
yhub-0.0.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yifeitao
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
yhub-0.0.1/PKG-INFO
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: yhub
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Name reservation for yhub — an always-on local hub for your own machines and services.
|
|
5
|
+
Project-URL: Homepage, https://github.com/ifeitao/yhub
|
|
6
|
+
Project-URL: Repository, https://github.com/ifeitao/yhub
|
|
7
|
+
Project-URL: Issues, https://github.com/ifeitao/yhub/issues
|
|
8
|
+
Author: Yifeitao
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: cli,dashboard,homelab,mcp,monitoring,self-hosted
|
|
12
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Operating System :: MacOS
|
|
15
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Topic :: System :: Monitoring
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# yhub
|
|
23
|
+
|
|
24
|
+
**This is a name-reservation release (`0.0.1`).** It reserves the distribution name `yhub` on
|
|
25
|
+
PyPI and does nothing else.
|
|
26
|
+
|
|
27
|
+
The real package — **an always-on local hub for your own machines, services and pipelines**
|
|
28
|
+
(CLI + web dashboard + MCP server, installed from a single wheel) — is planned for **2027**.
|
|
29
|
+
|
|
30
|
+
Nothing in this repository is a working product yet. Please don't build on it.
|
|
31
|
+
|
|
32
|
+
## What the real release will be
|
|
33
|
+
|
|
34
|
+
- **Information surface**: a wall of status cells (services, sync pipelines, scheduled jobs,
|
|
35
|
+
mounts) you keep on screen, each cell a three-state reading — fresh / stale / failing.
|
|
36
|
+
- **Action surface**: buttons, toggles and inputs on those same cells, so a cell can *do*
|
|
37
|
+
something, not just report.
|
|
38
|
+
- **Three faces from one declaration**: every capability is declared once and generated into a
|
|
39
|
+
CLI command, an HTTP route and an MCP tool.
|
|
40
|
+
- **Local by default**: binds `127.0.0.1` only; reads the machine it runs on (local daemons,
|
|
41
|
+
mounts, files), not a cloud account.
|
|
42
|
+
|
|
43
|
+
## Verify the install
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
uv tool install yhub
|
|
47
|
+
yhub --version # -> yhub 0.0.1
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
or without installing anything:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uv run --no-project --with yhub python -m yhub --version
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## License
|
|
57
|
+
|
|
58
|
+
MIT — see [LICENSE](LICENSE).
|
yhub-0.0.1/PUBLISHING.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Publishing `yhub` 0.0.1 (name reservation)
|
|
2
|
+
|
|
3
|
+
Everything here is prepared; the only steps left need your PyPI/GitHub credentials.
|
|
4
|
+
|
|
5
|
+
## 0. Check what will be uploaded
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cd ~/Projects/yhub
|
|
9
|
+
uv build --no-sources # -> dist/yhub-0.0.1-py3-none-any.whl + dist/yhub-0.0.1.tar.gz
|
|
10
|
+
uv run --no-project --with ./dist/yhub-0.0.1-py3-none-any.whl yhub --version
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Option A — fastest one-off (API token)
|
|
14
|
+
|
|
15
|
+
The project does not exist yet, so you need an **account-scoped** token
|
|
16
|
+
(PyPI → Account settings → API tokens → "Add API token", scope = *entire account*).
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
cd ~/Projects/yhub
|
|
20
|
+
uv build --no-sources
|
|
21
|
+
UV_PUBLISH_TOKEN=pypi-... uv publish
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
After the project exists you can (and should) switch to a project-scoped token, or to Option B.
|
|
25
|
+
|
|
26
|
+
## Option B — recommended, no secrets (trusted publishing)
|
|
27
|
+
|
|
28
|
+
1. Create the GitHub repo `ifeitao/yhub` and push these files.
|
|
29
|
+
2. On PyPI: **Account → Publishing → Add a pending publisher**
|
|
30
|
+
- PyPI project name: `yhub`
|
|
31
|
+
- Owner: `ifeitao`
|
|
32
|
+
- Repository name: `yhub`
|
|
33
|
+
- Workflow name: `publish.yml`
|
|
34
|
+
- Environment name: `pypi`
|
|
35
|
+
3. Create a GitHub Release (or run the `publish` workflow manually). `.github/workflows/publish.yml`
|
|
36
|
+
builds and uploads with OIDC — no token anywhere.
|
|
37
|
+
|
|
38
|
+
## Rehearse on TestPyPI first (recommended)
|
|
39
|
+
|
|
40
|
+
Add this to `pyproject.toml`:
|
|
41
|
+
|
|
42
|
+
```toml
|
|
43
|
+
[[tool.uv.index]]
|
|
44
|
+
name = "testpypi"
|
|
45
|
+
url = "https://test.pypi.org/simple/"
|
|
46
|
+
publish-url = "https://test.pypi.org/legacy/"
|
|
47
|
+
explicit = true
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Then:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uv build --no-sources
|
|
54
|
+
uv publish --index testpypi # needs a TestPyPI token (separate account)
|
|
55
|
+
uv run --no-project --index-url https://test.pypi.org/simple/ --with yhub yhub --version
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## After publishing
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
uv tool install yhub --refresh
|
|
62
|
+
yhub --version # -> yhub 0.0.1
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Notes and pitfalls
|
|
66
|
+
|
|
67
|
+
- **The license is baked into 0.0.1 permanently.** `license = "MIT"` is what this version will
|
|
68
|
+
carry forever; changing it later only affects new releases. Confirm MIT (simplest, most
|
|
69
|
+
permissive) vs Apache-2.0 (adds an explicit patent grant, common for dev tools) *before*
|
|
70
|
+
uploading.
|
|
71
|
+
- **PEP 639 needs hatchling >= 1.27** for `license = "MIT"` + `license-files`; the pin in
|
|
72
|
+
`pyproject.toml` says so.
|
|
73
|
+
- **`uv build --no-sources`** is the documented build for publishing (builds resolve without
|
|
74
|
+
`tool.uv.sources`).
|
|
75
|
+
- PyPI rejects new names that are **too similar to an existing project** (`-`, `_`, `.` count as
|
|
76
|
+
the same character). Reserving `yhub` therefore also blocks look-alikes such as `y-hub`.
|
|
77
|
+
- Do **not** publish empty metadata-only releases: a name claimed with no intent to use can be
|
|
78
|
+
reclaimed by PyPI. This package has a real, runnable entry point and a README explaining the
|
|
79
|
+
reservation, which is the intended shape.
|
|
80
|
+
- PyPI no longer accepts username/password uploads — token or trusted publishing only.
|
yhub-0.0.1/README.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# yhub
|
|
2
|
+
|
|
3
|
+
**This is a name-reservation release (`0.0.1`).** It reserves the distribution name `yhub` on
|
|
4
|
+
PyPI and does nothing else.
|
|
5
|
+
|
|
6
|
+
The real package — **an always-on local hub for your own machines, services and pipelines**
|
|
7
|
+
(CLI + web dashboard + MCP server, installed from a single wheel) — is planned for **2027**.
|
|
8
|
+
|
|
9
|
+
Nothing in this repository is a working product yet. Please don't build on it.
|
|
10
|
+
|
|
11
|
+
## What the real release will be
|
|
12
|
+
|
|
13
|
+
- **Information surface**: a wall of status cells (services, sync pipelines, scheduled jobs,
|
|
14
|
+
mounts) you keep on screen, each cell a three-state reading — fresh / stale / failing.
|
|
15
|
+
- **Action surface**: buttons, toggles and inputs on those same cells, so a cell can *do*
|
|
16
|
+
something, not just report.
|
|
17
|
+
- **Three faces from one declaration**: every capability is declared once and generated into a
|
|
18
|
+
CLI command, an HTTP route and an MCP tool.
|
|
19
|
+
- **Local by default**: binds `127.0.0.1` only; reads the machine it runs on (local daemons,
|
|
20
|
+
mounts, files), not a cloud account.
|
|
21
|
+
|
|
22
|
+
## Verify the install
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv tool install yhub
|
|
26
|
+
yhub --version # -> yhub 0.0.1
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
or without installing anything:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
uv run --no-project --with yhub python -m yhub --version
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## License
|
|
36
|
+
|
|
37
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "yhub"
|
|
3
|
+
version = "0.0.1"
|
|
4
|
+
description = "Name reservation for yhub — an always-on local hub for your own machines and services."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
license = "MIT"
|
|
8
|
+
license-files = ["LICENSE"]
|
|
9
|
+
authors = [{ name = "Yifeitao" }]
|
|
10
|
+
keywords = ["dashboard", "self-hosted", "homelab", "monitoring", "cli", "mcp"]
|
|
11
|
+
classifiers = [
|
|
12
|
+
"Development Status :: 2 - Pre-Alpha",
|
|
13
|
+
"Environment :: Console",
|
|
14
|
+
"Operating System :: MacOS",
|
|
15
|
+
"Operating System :: POSIX :: Linux",
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
18
|
+
"Topic :: System :: Monitoring",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[project.urls]
|
|
22
|
+
Homepage = "https://github.com/ifeitao/yhub"
|
|
23
|
+
Repository = "https://github.com/ifeitao/yhub"
|
|
24
|
+
Issues = "https://github.com/ifeitao/yhub/issues"
|
|
25
|
+
|
|
26
|
+
[project.scripts]
|
|
27
|
+
yhub = "yhub.__main__:main"
|
|
28
|
+
|
|
29
|
+
[build-system]
|
|
30
|
+
# PEP 639 (SPDX license string + license-files) needs hatchling >= 1.27.
|
|
31
|
+
requires = ["hatchling>=1.27"]
|
|
32
|
+
build-backend = "hatchling.build"
|
|
33
|
+
|
|
34
|
+
[tool.hatch.build.targets.wheel]
|
|
35
|
+
packages = ["yhub"]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""yhub — name-reservation release.
|
|
2
|
+
|
|
3
|
+
The real package (a CLI + web dashboard + MCP server for your own machines, services and
|
|
4
|
+
pipelines) is planned for 2027. This release only reserves the distribution name on PyPI.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
__version__ = "0.0.1"
|
|
8
|
+
|
|
9
|
+
__all__ = ["__version__"]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Console entry point for the yhub name-reservation release."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
from . import __version__
|
|
8
|
+
|
|
9
|
+
_NAME = "yhub"
|
|
10
|
+
_TAGLINE = "an always-on local hub for your own machines, services and pipelines"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _text() -> str:
|
|
14
|
+
return (
|
|
15
|
+
f"{_NAME} {__version__} — name-reservation release\n"
|
|
16
|
+
"\n"
|
|
17
|
+
"This release reserves the distribution name on PyPI and does nothing else.\n"
|
|
18
|
+
f"The real package ({_TAGLINE}) is planned for 2027: CLI + web dashboard + MCP\n"
|
|
19
|
+
"server, installed from a single wheel.\n"
|
|
20
|
+
"\n"
|
|
21
|
+
f"Until then, `{_NAME} --version` is all this package does.\n"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def main(argv: list[str] | None = None) -> int:
|
|
26
|
+
"""Print the reservation notice. `--version` / `--help` are the only recognised flags."""
|
|
27
|
+
args = list(sys.argv[1:] if argv is None else argv)
|
|
28
|
+
if args and args[0] in ("-V", "--version"):
|
|
29
|
+
print(f"{_NAME} {__version__}")
|
|
30
|
+
return 0
|
|
31
|
+
if args and args[0] in ("-h", "--help"):
|
|
32
|
+
print(_text())
|
|
33
|
+
print(f"usage: {_NAME} [--version | --help]")
|
|
34
|
+
return 0
|
|
35
|
+
print(_text())
|
|
36
|
+
return 0
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if __name__ == "__main__":
|
|
40
|
+
raise SystemExit(main())
|