Remove dev subcommand, add standalone docker-compose with external URLs
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
buenosairesam
2026-01-02 23:35:19 -03:00
parent 47cd737bc0
commit c4e1f240b8
3 changed files with 84 additions and 68 deletions

123
build.py
View File

@@ -4,30 +4,30 @@ Soleprint Build Tool
Builds the soleprint instance using modelgen for model generation.
Both dev and deploy modes copy files (no symlinks) for Docker compatibility.
After editing source files, re-run `python build.py dev` to update gen/.
All modes copy files (no symlinks) for Docker compatibility.
After editing source files, re-run `python build.py` to update gen/.
Usage:
python build.py dev # Build gen/standalone/
python build.py dev --cfg amar # Build gen/amar/
python build.py dev --all # Build all (standalone + rooms)
python build.py deploy --output /path/ # Build for production
python build.py models # Only regenerate models
python build.py # Build gen/standalone/
python build.py --cfg <room> # Build gen/<room>/
python build.py --all # Build all (standalone + rooms)
python build.py --deploy --output /path/ # Build for production
python build.py --models # Only regenerate models
Examples:
# Set up dev environment (standalone)
python build.py dev
# Build standalone
python build.py
cd gen/standalone && .venv/bin/python run.py
# With room config
python build.py dev --cfg amar
cd gen/amar && .venv/bin/python run.py
python build.py --cfg myroom
cd gen/myroom && .venv/bin/python run.py
# Build all targets
python build.py dev --all
python build.py --all
# Build for deployment
python build.py deploy --output ../deploy/soleprint/
python build.py --deploy --output ../deploy/soleprint/
"""
import argparse
@@ -177,6 +177,13 @@ def copy_cfg(output_dir: Path, cfg_name: str | None):
target = output_dir / "models" / room
copy_path(room_models, target)
# Copy room-specific soleprint config (docker-compose.yml, etc)
room_soleprint = room_cfg / "soleprint"
if room_soleprint.exists():
log.info(f" Copying {room} soleprint config...")
for item in room_soleprint.iterdir():
copy_path(item, output_dir / item.name)
def build_dev(output_dir: Path, cfg_name: str | None = None):
"""
@@ -198,7 +205,7 @@ def build_dev(output_dir: Path, cfg_name: str | None = None):
├── .env.example # From cfg/<room>/.env.example
└── models/ # Generated
After editing source files, re-run `python build.py dev` to update.
After editing source files, re-run `python build.py` to update.
"""
log.info("\n=== Building DEV environment ===")
log.info(f"SPR root: {SPR_ROOT}")
@@ -243,10 +250,10 @@ def build_dev(output_dir: Path, cfg_name: str | None = None):
log.info(f" .venv/bin/python run.py # Single-port bare-metal dev")
if cfg_name:
log.info(
f"\nAfter editing source, rebuild with: python build.py dev --cfg {cfg_name}"
f"\nAfter editing source, rebuild with: python build.py --cfg {cfg_name}"
)
else:
log.info(f"\nAfter editing source, rebuild with: python build.py dev")
log.info(f"\nAfter editing source, rebuild with: python build.py")
def build_deploy(output_dir: Path, cfg_name: str | None = None):
@@ -353,76 +360,62 @@ def main():
epilog=__doc__,
)
subparsers = parser.add_subparsers(dest="command", required=True)
# dev command
dev_parser = subparsers.add_parser("dev", help="Build for development (copies)")
dev_parser.add_argument(
parser.add_argument(
"--output",
"-o",
type=Path,
default=None,
help="Output directory (default: gen/standalone/ or gen/<cfg>/)",
)
dev_parser.add_argument(
parser.add_argument(
"--cfg",
"-c",
type=str,
default=None,
help="Room config to include (e.g., 'amar')",
help="Room config to include (e.g., 'myroom')",
)
dev_parser.add_argument(
parser.add_argument(
"--all",
action="store_true",
help="Build all configs (standalone + all rooms in cfg/)",
)
# deploy command
deploy_parser = subparsers.add_parser(
"deploy", help="Build for deployment (copies)"
parser.add_argument(
"--deploy",
action="store_true",
help="Build for deployment (creates start.sh, schema.json)",
)
deploy_parser.add_argument(
"--output",
"-o",
type=Path,
required=True,
help="Output directory for deployment package",
parser.add_argument(
"--models",
action="store_true",
help="Only regenerate models",
)
deploy_parser.add_argument(
"--cfg",
"-c",
type=str,
default=None,
help="Room config to include (e.g., 'amar')",
)
# models command
subparsers.add_parser("models", help="Only regenerate models")
args = parser.parse_args()
if args.command == "dev":
if getattr(args, "all", False):
# Build standalone
build_dev(SPR_ROOT / "gen" / "standalone", None)
# Build all room configs
cfg_dir = SPR_ROOT / "cfg"
for room in cfg_dir.iterdir():
if room.is_dir() and room.name not in ("__pycache__",):
build_dev(SPR_ROOT / "gen" / room.name, room.name)
else:
# Determine output directory
if args.output:
output_dir = args.output.resolve()
elif args.cfg:
output_dir = SPR_ROOT / "gen" / args.cfg
else:
output_dir = SPR_ROOT / "gen" / "standalone"
build_dev(output_dir, args.cfg)
elif args.command == "deploy":
build_deploy(args.output.resolve(), args.cfg)
elif args.command == "models":
if args.models:
build_models()
elif args.deploy:
if not args.output:
log.error("--deploy requires --output")
sys.exit(1)
build_deploy(args.output.resolve(), args.cfg)
elif args.all:
# Build standalone
build_dev(SPR_ROOT / "gen" / "standalone", None)
# Build all room configs
cfg_dir = SPR_ROOT / "cfg"
for room in cfg_dir.iterdir():
if room.is_dir() and room.name not in ("__pycache__", "standalone"):
build_dev(SPR_ROOT / "gen" / room.name, room.name)
else:
# Determine output directory
if args.output:
output_dir = args.output.resolve()
elif args.cfg:
output_dir = SPR_ROOT / "gen" / args.cfg
else:
output_dir = SPR_ROOT / "gen" / "standalone"
build_dev(output_dir, args.cfg)
if __name__ == "__main__":