Files
Frank Schwenk deac59d55a feat: manual deploy-app workflow for apps/ with build support
Add workflow_dispatch-only deploy-app action, deploy-app.sh script,
apps/_template for Cursor, and SOUL/README split between static
webhook deploy and app compose profiles.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 16:48:03 +02:00

48 lines
1.5 KiB
Markdown

# App template (`apps/<slug>/`)
Cursor copies this folder when creating a non-trivial app (npm, Docker, database).
## Layout
```
apps/<slug>/
├── Dockerfile
├── package.json # optional — Node apps
├── package-lock.json
└── src/ # or project-specific layout
```
## `compose.yml` — add a profile
Append a service (replace `<slug>`):
```yaml
<slug>:
profiles: ["<slug>"]
build: ./apps/<slug>
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.<slug>.rule=Host(`playground.schwenk.online`) && PathPrefix(`/<slug>`)"
- "traefik.http.routers.<slug>.entrypoints=websecure"
- "traefik.http.routers.<slug>.tls.certresolver=myresolver"
- "traefik.http.services.<slug>.loadbalancer.server.port=3000"
networks:
- traefik
```
Adjust port and PathPrefix to match the app. For Postgres/SQLite, add volumes and env in the same profile block.
## Deploy workflow
**Default:** use the shared manual workflow `.gitea/workflows/deploy-app.yml` (`workflow_dispatch`, input `app=<slug>`).
**Optional (stricter):** copy `workflow-deploy.yml.template` to `.gitea/workflows/deploy-<slug>.yml` — triggers **only** manually for that app.
## After implementation
1. Push to `main` (static webhook updates repo files only — does **not** build the app).
2. Gitea → Actions → **Deploy App (manual)** → Run workflow → `app` = `<slug>`.
Comment in the issue: *„App unter apps/<slug>/ — bitte Workflow Deploy App manuell starten.“*