feat: init_desktop_app bash pipeline — scaffold Wails desktop app
Genera apps/{nombre}/ con Wails v2 backend (main.go con embed frontend/dist,
app.go con struct App y bindings Greet/GetVersion) + frontend Vite+React+Mantine
con alias @fn_library.
Flag --with-db anade store.go con SQLite (schema items) y bindings CRUD
(ListItems, CreateItem); app.go se regenera con campo db.
wails.json con scripts pnpm, go.mod con replace a fn-registry, app.md con
framework wails+vite+react+mantine y dir_path correcto.
Verifica con go mod tidy al final. wails build requiere CLI instalado pero
el scaffold funciona sin el.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
---
|
||||
name: init_desktop_app
|
||||
kind: pipeline
|
||||
lang: bash
|
||||
domain: pipelines
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "init_desktop_app(nombre: string, [--with-db]) -> void"
|
||||
description: "Scaffold de Wails desktop app: Go backend + React frontend con Mantine y @fn_library. Genera main.go (Wails con embed frontend), app.go (bindings Greet/GetVersion), wails.json, go.mod con replace a fn-registry y frontend/ con vite + react + mantine."
|
||||
tags: [init, scaffold, desktop, wails, pipeline, bash, launcher]
|
||||
uses_functions:
|
||||
- assert_command_exists_bash_shell
|
||||
- scaffold_wails_app_go_infra
|
||||
- install_wails_bash_infra
|
||||
- wails_bind_crud_go_infra
|
||||
- wails_build_go_infra
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: []
|
||||
params:
|
||||
- name: nombre
|
||||
desc: "nombre de la app Wails (apps/{nombre}/)"
|
||||
- name: "--with-db"
|
||||
desc: "anade store.go con SQLite + bindings CRUD (Item, ListItems, CreateItem)"
|
||||
output: "app Wails en apps/{nombre}/ con main.go + app.go + wails.json + frontend/ Vite+React. Ejecutar 'wails dev' o 'wails build' dentro del directorio."
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
example: "fn run init_desktop_app my_tool"
|
||||
file_path: "bash/functions/pipelines/init_desktop_app.sh"
|
||||
---
|
||||
|
||||
## Sinopsis
|
||||
|
||||
```bash
|
||||
fn run init_desktop_app <nombre> [--with-db]
|
||||
```
|
||||
|
||||
## Ejemplo rapido
|
||||
|
||||
```bash
|
||||
fn run init_desktop_app data_explorer --with-db
|
||||
cd apps/data_explorer/frontend && pnpm install && cd ..
|
||||
wails dev # dev con hot reload
|
||||
# o bien:
|
||||
wails build && ./build/bin/data_explorer
|
||||
```
|
||||
|
||||
## Archivos generados
|
||||
|
||||
| Archivo | Descripcion |
|
||||
|---------|-------------|
|
||||
| `main.go` | Entry Wails con embed de frontend/dist, options.App, Bind: []interface{}{app} |
|
||||
| `app.go` | Struct App con bindings `Greet(name)`, `GetVersion()` (y con `--with-db`: `ListItems`, `CreateItem`) |
|
||||
| `wails.json` | Config Wails: name, outputfilename, scripts frontend (pnpm) |
|
||||
| `go.mod` | Modulo Go con `github.com/wailsapp/wails/v2` + replace `fn-registry` |
|
||||
| `frontend/package.json` | pnpm + vite + react + @mantine/core + @tabler/icons-react |
|
||||
| `frontend/vite.config.ts` | Alias `@fn_library`, outDir `dist` para embed |
|
||||
| `frontend/tsconfig.json` | TS strict con paths `@fn_library/*` |
|
||||
| `frontend/src/main.tsx` | Root con `MantineProvider` (defaultColorScheme: dark) |
|
||||
| `frontend/src/App.tsx` | Componente que llama bindings `Greet` y `GetVersion` via wailsjs |
|
||||
| `frontend/postcss.config.cjs` | postcss-preset-mantine |
|
||||
| `app.md` | Framework: `wails + vite + react + mantine` |
|
||||
|
||||
Con `--with-db` anade ademas:
|
||||
- `store.go` — `openDB`, tipo `Item`, bindings CRUD `ListItems`, `CreateItem`
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Efecto |
|
||||
|------|--------|
|
||||
| `--with-db` | SQLite con schema `items` + bindings CRUD como ejemplo |
|
||||
|
||||
## Post-setup
|
||||
|
||||
```bash
|
||||
# 1. Instalar deps del frontend (una vez)
|
||||
cd apps/{nombre}/frontend && pnpm install && cd ..
|
||||
|
||||
# 2. Desarrollo
|
||||
wails dev # Ventana desktop con hot reload del frontend
|
||||
|
||||
# 3. Produccion
|
||||
wails build # binario en build/bin/{nombre}
|
||||
./build/bin/{nombre}
|
||||
```
|
||||
|
||||
## Requisitos
|
||||
|
||||
El scaffold funciona sin Wails CLI, pero `wails dev`/`wails build` requiere:
|
||||
|
||||
- **Wails CLI:** `go install github.com/wailsapp/wails/v2/cmd/wails@latest`
|
||||
- **Deps del sistema (Linux):** GTK3 + WebKit2GTK — usa
|
||||
`install_wails_bash_infra` para instalarlas:
|
||||
```bash
|
||||
source bash/functions/infra/install_wails.sh && install_wails
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
Pipeline impuro: genera archivos via heredocs, ejecuta `go mod tidy` al
|
||||
final como verificacion. Si Wails CLI no esta disponible, reporta el warning
|
||||
y continua — el scaffold es valido, solo `wails build` falla hasta instalar
|
||||
el CLI.
|
||||
|
||||
El frontend importa `@fn_library` via alias en vite.config.ts apuntando a
|
||||
`../../../frontend/functions/ui/` (los componentes del registry sin
|
||||
duplicarlos).
|
||||
|
||||
Los bindings de Wails (funciones del struct App) se regeneran en
|
||||
`frontend/wailsjs/go/main/App.ts` automaticamente cuando corres `wails dev`
|
||||
o `wails build`.
|
||||
|
||||
Abort si `apps/{nombre}/` ya existe.
|
||||
|
||||
El tag `launcher` permite que aparezca en el Pipeline Launcher TUI.
|
||||
Reference in New Issue
Block a user