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.
@@ -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
@@ -0,0 +1,6 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ build/
5
+ dist/
6
+ .venv/
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).
@@ -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())