mirror of
https://github.com/katanemo/plano.git
synced 2026-04-25 00:36:34 +02:00
* fix sdist build: use build hook to bundle config files * copy hatch_build.py in Dockerfile
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""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"
|