32 lines
1.1 KiB
Bash
32 lines
1.1 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
ROOT="$(mktemp -d)"
|
|
trap 'docker compose -f "$ROOT/compose.yaml" down --volumes >/dev/null 2>&1 || true; rm -rf "$ROOT"' EXIT
|
|
mkdir -p "$ROOT/app"
|
|
cat > "$ROOT/app/main.py" <<'PY'
|
|
from fastapi import FastAPI
|
|
app = FastAPI()
|
|
@app.get("/health")
|
|
def health(): return {"status": "ok"}
|
|
PY
|
|
# Complete, exact dependency closure; --no-deps prevents unpinned resolution.
|
|
cat > "$ROOT/requirements.lock" <<'REQ'
|
|
annotated-types==0.7.0
|
|
anyio==4.7.0
|
|
click==8.1.8
|
|
fastapi==0.115.6
|
|
h11==0.14.0
|
|
idna==3.10
|
|
pydantic==2.10.4
|
|
pydantic-core==2.27.2
|
|
sniffio==1.3.1
|
|
starlette==0.41.3
|
|
typing-extensions==4.12.2
|
|
uvicorn==0.34.0
|
|
REQ
|
|
cat > "$ROOT/input.json" <<'JSON'
|
|
{"service_specification":{"container":{"startup_module":"app.main:app","port":8000,"health_endpoint":"/health"}},"target_management_implementation":{},"endpoint_check_implementation":{},"current_status_implementation":{}}
|
|
JSON
|
|
containerize-fastapi --input "$ROOT/input.json" --service-dir "$ROOT" --output "$ROOT/output.json" --verify-docker
|
|
python -c 'import json,sys; d=json.load(open(sys.argv[1])); assert d["container_artifacts"]["docker_verification"]["passed"]' "$ROOT/output.json"
|