Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
2059d97
feat(resources): Support for Serverless.type QB|LB
deanq Nov 7, 2025
f21bc82
feat(cli): add flash init project skeleton template
deanq Nov 10, 2025
b9db5fe
feat(cli): add flash init in-place with conflict warnings
deanq Nov 10, 2025
dce72e9
fix(cli): correct GPU and CPU types in skeleton README
deanq Nov 10, 2025
5d62eb3
chore(cli): lint and format fixes
deanq Nov 10, 2025
f34165c
fix(cli): correct API endpoints and request/response models in skelet…
deanq Nov 10, 2025
8479235
feat(cli): add parallel test block to skeleton interface endpoint
deanq Nov 10, 2025
6f0aaf7
Merge branch 'main' into deanq/ae-1249-improve-cli
deanq Nov 11, 2025
53795b9
perf: reduce the load footprint from runpod library
deanq Nov 14, 2025
b874154
refactor(cli): restore IDE functionality and fix command signatures
deanq Nov 14, 2025
aed00e3
build: pegged latest main branch of runpod-python for now
deanq Nov 14, 2025
8cbb166
test: fix test for lazy-loaded runpod
deanq Nov 14, 2025
c76a9cf
feat(client): add async function support to @remote decorator
deanq Nov 14, 2025
62715d8
fix: ruff format
deanq Nov 14, 2025
3517d0f
feat(client): add async function support to remote decorator
deanq Nov 14, 2025
698596c
Merge branch 'deanq/ae-1469-bug-support-async-and-non-for-remote-deco…
deanq Nov 14, 2025
b77bbec
fix(stubs): support async functions and decorator unwrapping
deanq Nov 14, 2025
37ecaa1
Merge branch 'deanq/ae-1469-bug-support-async-and-non-for-remote-deco…
deanq Nov 14, 2025
a089d42
chore: quality check
deanq Nov 14, 2025
590df46
refactor(cli): simplify skeleton template examples
deanq Nov 14, 2025
0648216
fix(cli): update flash init output to reflect new skeleton structure
deanq Nov 14, 2025
a4fccdb
refactor(cli): remove conda environment management from flash init
deanq Nov 14, 2025
7366956
docs(cli): update flash init documentation to remove conda references
deanq Nov 14, 2025
ea74f57
fix(cli): use recursive glob for worker dependency extraction
deanq Nov 14, 2025
2df184a
fix(cli): improve pip error reporting in flash build
deanq Nov 14, 2025
8f3ecd5
fix(cli): add uv pip fallback for flash build
deanq Nov 14, 2025
a4cfb6e
fix(cli): remove workers/interface and update outdated endpoint refer…
deanq Nov 14, 2025
1b54bfb
fix(cli): standardize default port to 8888 in skeleton template
deanq Nov 14, 2025
12b9b95
Merge branch 'main' into deanq/ae-1251-flash-build-handler-classifica…
deanq Nov 14, 2025
84337a7
Merge branch 'deanq/ae-1249-improve-cli' into deanq/ae-1251-flash-bui…
deanq Nov 14, 2025
dc363c6
refactor(cli): rename .tetra directory to .flash
deanq Nov 14, 2025
2845583
feat(cli): add handler discovery and classification for flash build
deanq Nov 14, 2025
a6c9a5b
fix(cli): remove false positive route conflict warnings in handler di…
deanq Nov 14, 2025
5a27411
feat(cli): limit flash CLI to init and run commands for this release
deanq Nov 14, 2025
8061b4c
Merge branch 'main' into deanq/ae-1249-improve-cli
deanq Nov 14, 2025
2f29c5e
Merge branch 'main' into deanq/ae-1249-improve-cli
deanq Nov 14, 2025
dd725f6
Merge branch 'main' into deanq/ae-1251-flash-build-handler-classifica…
deanq Nov 14, 2025
496aecc
Merge branch 'deanq/ae-1249-improve-cli' into deanq/ae-1251-flash-bui…
deanq Nov 14, 2025
f44df05
Merge branch 'main' into deanq/ae-1251-flash-build-handler-classifica…
deanq Nov 14, 2025
6516194
Merge branch 'main' into deanq/ae-1251-flash-build-handler-classifica…
deanq Nov 14, 2025
62b483d
Merge branch 'main' into deanq/ae-1251-flash-build-handler-classifica…
deanq Dec 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 37 additions & 7 deletions src/tetra_rp/cli/commands/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
from rich.progress import Progress, SpinnerColumn, TextColumn
from rich.table import Table

from ..utils.handler_discovery import (
discover_and_classify_handlers,
write_handler_metadata,
)
from ..utils.ignore import get_file_tree, load_ignore_patterns

console = Console()
Expand Down Expand Up @@ -92,7 +96,7 @@ def build_command(
build_dir = create_build_directory(project_dir, app_name)
progress.update(
build_task,
description=f"[green]✓ Created .tetra/.build/{app_name}/",
description=f"[green]✓ Created .flash/build/{app_name}/",
)
progress.stop_task(build_task)

Expand All @@ -104,6 +108,32 @@ def build_command(
)
progress.stop_task(copy_task)

# Discover handlers
discover_task = progress.add_task("Discovering handlers...")
discovery_result = discover_and_classify_handlers(build_dir)

# Display warnings if any
if discovery_result.warnings:
progress.stop_task(discover_task)
for warning in discovery_result.warnings:
console.print(f"[yellow]Warning:[/yellow] {warning}")

# Write handler metadata to build directory
# This will be included in the tarball for runtime introspection
# and used by FlashApp state manager for handler registration
write_handler_metadata(build_dir, discovery_result)

stats = discovery_result.stats
queue_count = stats.get("queue_handlers", 0)
lb_count = stats.get("load_balancer_handlers", 0)
total = stats.get("total_handlers", 0)

progress.update(
discover_task,
description=f"[green]✓ Discovered {total} handlers ({queue_count} queue, {lb_count} load-balancer)",
)
progress.stop_task(discover_task)

# Install dependencies
deps_task = progress.add_task("Installing dependencies...")
requirements = collect_requirements(project_dir, build_dir)
Expand Down Expand Up @@ -136,7 +166,7 @@ def build_command(
# Create archive
archive_task = progress.add_task("Creating archive...")
archive_name = output_name or "archive.tar.gz"
archive_path = project_dir / ".tetra" / archive_name
archive_path = project_dir / ".flash" / archive_name

create_tarball(build_dir, archive_path, app_name)

Expand Down Expand Up @@ -219,7 +249,7 @@ def validate_project_structure(project_dir: Path) -> bool:

def create_build_directory(project_dir: Path, app_name: str) -> Path:
"""
Create .tetra/.build/{app_name}/ directory.
Create .flash/build/{app_name}/ directory.

Args:
project_dir: Flash project directory
Expand All @@ -228,10 +258,10 @@ def create_build_directory(project_dir: Path, app_name: str) -> Path:
Returns:
Path to build directory
"""
tetra_dir = project_dir / ".tetra"
tetra_dir.mkdir(exist_ok=True)
flash_dir = project_dir / ".flash"
flash_dir.mkdir(exist_ok=True)

build_base = tetra_dir / ".build"
build_base = flash_dir / "build"
build_dir = build_base / app_name

# Remove existing build directory
Expand Down Expand Up @@ -495,7 +525,7 @@ def _display_build_config(
Panel(
f"[bold]Project:[/bold] {app_name}\n"
f"[bold]Directory:[/bold] {project_dir}\n"
f"[bold]Archive:[/bold] .tetra/{archive_name}\n"
f"[bold]Archive:[/bold] .flash/{archive_name}\n"
f"[bold]Skip transitive deps:[/bold] {no_deps}\n"
f"[bold]Keep build dir:[/bold] {keep_build}",
title="Flash Build Configuration",
Expand Down
Loading
Loading