feat(new): other backend or frontend from the blank template

This commit is contained in:
hh committed 2026-09-19 22:09:16 +02:00
1 parent 68034cd2f5
commit 048f29f21e
2 files changed
+19 -9

No files matched your search

+16 -8
View File
@@ -14,8 +14,9 @@ from copier import run_copy, run_update
SOURCE = os.environ.get("TEMPLATES_DIR", "https://git.kotikot.com/templates")
REF = os.environ.get("TEMPLATES_REF")
BACKENDS = {"python": "backend-python"}
FRONTENDS = {"svelte": "frontend-svelte"}
BLANK = "blank"
BACKENDS = {"python": "backend-python", "other": BLANK}
FRONTENDS = {"svelte": "frontend-svelte", "other": BLANK}
SERVE = ["bun", "static", "api"]
@@ -65,25 +66,32 @@ def new(args: argparse.Namespace) -> None:
if "frontend" in parts:
frontend = args.frontend or ask_select("Frontend", list(FRONTENDS), "svelte")
serve = "bun"
if frontend:
if frontend and FRONTENDS[frontend] != BLANK:
options = SERVE if backend else SERVE[:-1]
serve = args.serve or ask_select("Frontend served by", options, "bun")
stack = [p for p in ("backend", "frontend") if p in parts]
single = len(stack) == 1
routes = [r for r, ok in (("api", backend), ("frontend", frontend and serve != "api")) if ok]
def copy(name: str, data: dict) -> None:
run_copy(template(name), dest, data=data, unsafe=True, defaults=args.defaults, vcs_ref=REF)
def copy(name: str, data: dict, answers_file: str | None = None) -> None:
run_copy(template(name), dest, data=data, answers_file=answers_file, unsafe=True,
defaults=args.defaults, vcs_ref=REF)
def copy_part(part: str, name: str, data: dict) -> None:
if name == BLANK:
copy(name, {**identity, "layout": layout, "part": part}, f".copier/{part}.yml")
else:
copy(name, {**identity, "layout": layout, **data})
dest.mkdir(parents=True, exist_ok=True)
identity = {"project_name": name, "project_slug": slug}
copy("infra", {"project_name": name, "layout": "single" if single else "parts", "parts": [] if single else stack})
layout = "root" if single else "part"
if backend:
copy(BACKENDS[backend], {**identity, "layout": layout, "serve_spa": serve == "api",
"author_name": git_config("user.name"), "author_email": git_config("user.email")})
copy_part("backend", BACKENDS[backend], {"serve_spa": serve == "api", "author_name": git_config("user.name"),
"author_email": git_config("user.email")})
if frontend:
copy(FRONTENDS[frontend], {**identity, "layout": layout, "serve": serve})
copy_part("frontend", FRONTENDS[frontend], {"serve": serve})
if "caddy" in parts:
copy("caddy", {"project_slug": slug, "routes": routes})
if (dest / "Makefile").is_file():