Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
102 changes: 102 additions & 0 deletions .github/workflows/scaffold-cross-platform.yml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
name: Cross-platform scaffold smoke

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

permissions:
contents: read

concurrency:
group: scaffold-cross-platform-${{ github.ref }}
cancel-in-progress: true

env:
# Full registry URLs: published PyPI 0.1.0 does not resolve catalog slugs.
# After create-awesome-python-app>=0.2.0 ships resolve_catalog_spec, slugs also work.
CPA_TEMPLATE_FASTAPI: https://github.com/Create-Python-App/cpa-templates?subdir=templates/fastapi-starter
CPA_ADDON_DOCKER: https://github.com/Create-Python-App/cpa-templates?subdir=extensions/python-docker

jobs:
scaffold:
name: ${{ matrix.os }} / fastapi-starter
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: astral-sh/setup-uv@v7
- uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Scaffold FastAPI starter from PyPI CLI
env:
TARGET: ${{ runner.temp }}/cpa-fastapi-starter
shell: bash
run: |
set -euo pipefail
# Options before project_directory — Typer treats a leading path as the
# positional arg; trailing options after a bare path can be misparsed.
uvx create-awesome-python-app@latest \
--template "$CPA_TEMPLATE_FASTAPI" \
--no-interactive \
--no-install \
--force \
"$TARGET"

- name: Verify scaffolded project
env:
TARGET: ${{ runner.temp }}/cpa-fastapi-starter
shell: bash
run: |
set -euo pipefail
python - <<'PY'
import os
from pathlib import Path

target = Path(os.environ["TARGET"])
required = [
target / "pyproject.toml",
target / "app" / "main.py",
target / "README.md",
]
missing = [str(path) for path in required if not path.exists()]
if missing:
raise SystemExit(f"Missing scaffolded files: {missing}")
print(f"Verified scaffold at {target}")
PY

addon-smoke:
name: ubuntu-latest / fastapi-starter + python-docker
runs-on: ubuntu-latest
steps:
- uses: astral-sh/setup-uv@v7
- uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Scaffold with one extension from PyPI CLI
env:
TARGET: ${{ runner.temp }}/cpa-fastapi-docker
run: |
set -euo pipefail
uvx create-awesome-python-app@latest \
--template "$CPA_TEMPLATE_FASTAPI" \
--addons "$CPA_ADDON_DOCKER" \
--no-interactive \
--no-install \
--force \
"$TARGET"

- name: Verify extension files
env:
TARGET: ${{ runner.temp }}/cpa-fastapi-docker
run: |
set -euo pipefail
test -f "$TARGET/Dockerfile"
test -f "$TARGET/.dockerignore"
3 changes: 2 additions & 1 deletion docs/CPA_TEMPLATES_TRACKING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,7 +31,8 @@ uvx create-awesome-python-app@latest …

It must **not** check out this monorepo or fall back to `uv run` against a local source tree. That way green Actions means the same binary users install works with the templates under test.

CLI CI in this repo stays focused on unit/lint/type/smoke-distribution (`uvx` / Docker / brew / AUR).
CLI CI in this repo stays focused on unit/lint/type, cross-platform scaffold
smoke via published `uvx`, and smoke-distribution (`uvx` / Docker / brew / AUR).

## CNA parity reference

Expand Down
Loading