diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..b1b6279 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,47 @@ +name: Publish to PyPI + +on: + release: + types: [published] + +permissions: {} + +jobs: + build: + name: Build distributions + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + - name: Build and check distributions + run: | + python -m pip install --upgrade build twine + python -m build + python -m twine check dist/* + - uses: actions/upload-artifact@v5 + with: + name: python-package-distributions + path: dist/ + if-no-files-found: error + + publish: + name: Publish distributions + needs: build + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/project/geometry-validated-layout/ + permissions: + id-token: write + steps: + - uses: actions/download-artifact@v6 + with: + name: python-package-distributions + path: dist/ + - uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/README.md b/README.md index 094b2c5..423232d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ auditable layout proposals and agent-generated designs. > may change incompatibly while downstream use cases establish the right public > abstractions. -![A validated kitchen plan beside a refused invalid render](docs/social-preview.png) +![A validated kitchen plan beside a refused invalid render](https://raw.githubusercontent.com/davidf9999/geometry-validated-layout/main/docs/social-preview.png) ## Why This Exists @@ -46,7 +46,13 @@ This refusal is part of the public contract: rendering and validation use the same structured coordinates, so a plausible image cannot hide rejected geometry. -## Quick Start +## Install + +```bash +pip install geometry-validated-layout +``` + +## Run the Included Examples ```bash git clone https://github.com/davidf9999/geometry-validated-layout.git @@ -96,8 +102,9 @@ existing app/domain model -> adapter -> LayoutProject -> validate_project() -> render only after pass ``` -See the [integration guide](docs/INTEGRATION.md) for pinned installation, CLI -exit/report behavior, Python, adapter, HTTP-service, and coding-agent examples. +See the [integration guide](https://github.com/davidf9999/geometry-validated-layout/blob/main/docs/INTEGRATION.md) +for pinned installation, CLI exit/report behavior, Python, adapter, +HTTP-service, and coding-agent examples. ## Scope diff --git a/STATUS.md b/STATUS.md index 48490a0..a682cde 100644 --- a/STATUS.md +++ b/STATUS.md @@ -13,11 +13,13 @@ leave material plans only in chat history. package, and documentation audit passed before publication. GitHub private vulnerability reporting and protected-branch CI are enabled. The `v0.1.0` developer prerelease was published on 2026-07-22. -- Package and CLI: `geometry-validated-layout` version `0.1.0`. +- Package and CLI source version: `geometry-validated-layout` `0.1.1`. - Python import: `geometry_validated_layout`. - Test baseline: 12 tests, with CI coverage for Python 3.10 through 3.14. - CI: tests, passing examples, deterministic rendering, and failing-render refusal run on every push and pull request. +- Distribution: GitHub Releases trigger tokenless PyPI Trusted Publishing + through the protected `pypi` environment. - Complete example: `examples/complete_kitchen/` contains synthetic YAML, validation JSON, SVG, and usage notes. - Integration guide: `docs/INTEGRATION.md` covers CLI, Python, adapters, service @@ -59,8 +61,6 @@ leave material plans only in chat history. ## Deferred publication work -- Optional later PyPI publication; the package name was unclaimed when checked - on 2026-07-22. - Contributor-facing issue templates and broader compatibility testing. - Plugin packaging for distributing the generic and kitchen workflow skills. diff --git a/pyproject.toml b/pyproject.toml index a2d7dc9..533ccc4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,13 +4,25 @@ build-backend = "setuptools.build_meta" [project] name = "geometry-validated-layout" -version = "0.1.0" +version = "0.1.1" description = "Deterministic geometry validation and rendering for coordinate-based spatial layouts" readme = "README.md" requires-python = ">=3.10" license = "MIT" license-files = ["LICENSE"] +authors = [{ name = "David Front" }] keywords = ["computational-geometry", "layout", "spatial-validation", "svg"] +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Topic :: Software Development :: Libraries :: Python Modules", +] dependencies = [ "PyYAML>=6.0", "pydantic>=2.7", @@ -25,6 +37,7 @@ geometry-validated-layout = "geometry_validated_layout.cli:main" [project.urls] Homepage = "https://github.com/davidf9999/geometry-validated-layout" +Documentation = "https://github.com/davidf9999/geometry-validated-layout/blob/main/docs/INTEGRATION.md" Issues = "https://github.com/davidf9999/geometry-validated-layout/issues" [tool.pytest.ini_options]