diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index fc0f7941..c86a260a 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -30,7 +30,7 @@ jobs: enable-cache: true - name: Build package - run: uv build + run: uv build --wheel - name: Publish to PyPI env: diff --git a/Dockerfile b/Dockerfile index b87decb7..43bb5d0c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -69,7 +69,6 @@ RUN pip install --no-cache-dir uv COPY cli/pyproject.toml ./ COPY cli/uv.lock ./ COPY cli/README.md ./ -COPY cli/hatch_build.py ./ COPY config/plano_config_schema.yaml /config/plano_config_schema.yaml COPY config/envoy.template.yaml /config/envoy.template.yaml diff --git a/cli/.gitignore b/cli/.gitignore deleted file mode 100644 index 9165af36..00000000 --- a/cli/.gitignore +++ /dev/null @@ -1 +0,0 @@ -planoai/data/ diff --git a/cli/hatch_build.py b/cli/hatch_build.py deleted file mode 100644 index fae3fa42..00000000 --- a/cli/hatch_build.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Hatch build hook to bundle config files from the repo into the package. - -Single source of truth stays in ../config/. This hook copies them into -planoai/data/ so they end up inside both the sdist and wheel. -""" - -import os -import shutil - -from hatchling.builders.hooks.plugin.interface import BuildHookInterface - -FILES = { - "plano_config_schema.yaml": "plano_config_schema.yaml", - "envoy.template.yaml": "envoy.template.yaml", -} - - -class CustomBuildHook(BuildHookInterface): - def initialize(self, version, build_data): - root = os.path.dirname(__file__) - # Repo checkout: ../config/ | sdist: config/ - candidates = [ - os.path.join(root, "..", "config"), - os.path.join(root, "config"), - ] - dest_dir = os.path.join(root, "planoai", "data") - os.makedirs(dest_dir, exist_ok=True) - - for src_name, dest_name in FILES.items(): - dest = os.path.join(dest_dir, dest_name) - copied = False - for cand in candidates: - src = os.path.join(cand, src_name) - if os.path.exists(src): - shutil.copy2(src, dest) - copied = True - break - if not copied and not os.path.exists(dest): - raise FileNotFoundError( - f"Config file {src_name} not found. " - "Build from the repo root or ensure files are present." - ) - - build_data["force_include"][dest_dir] = "planoai/data" diff --git a/cli/pyproject.toml b/cli/pyproject.toml index 3d532165..f92d557e 100644 --- a/cli/pyproject.toml +++ b/cli/pyproject.toml @@ -37,15 +37,12 @@ path = "planoai/__init__.py" [tool.hatch.build.targets.wheel] packages = ["planoai"] +[tool.hatch.build.targets.wheel.force-include] +"../config/plano_config_schema.yaml" = "planoai/data/plano_config_schema.yaml" +"../config/envoy.template.yaml" = "planoai/data/envoy.template.yaml" + [tool.hatch.build.targets.sdist] -include = ["planoai/**", "hatch_build.py"] - -[tool.hatch.build.targets.sdist.force-include] -"../config/plano_config_schema.yaml" = "config/plano_config_schema.yaml" -"../config/envoy.template.yaml" = "config/envoy.template.yaml" - -[tool.hatch.build] -hooks.custom.path = "hatch_build.py" +include = ["planoai/**"] [tool.pytest.ini_options] addopts = ["-v"]