168 lines
6.5 KiB
JSON
168 lines
6.5 KiB
JSON
{
|
|
// Tasks for the kjol repo.
|
|
//
|
|
// kjol-web — the website, and the runnable example of both web layers — is a nested
|
|
// module at go/cmd/kjol-web, so its tasks set cwd there; the module-wide Go tasks run
|
|
// in go/.
|
|
//
|
|
// These used to be called "gowasm: ...", which stopped being true: the site is two
|
|
// front-ends now, and one build compiles Go to WebAssembly AND bundles a Solid app.
|
|
// They are "kjol-web: ..." to match the directory they act on.
|
|
//
|
|
// The build pipeline is Go, not a shell script — see go/cmd/kjol-web/build. The dev
|
|
// server calls the same functions on every save, and a bash script would not run for
|
|
// anyone on Windows. Note there is no `./build` COMMAND any more: the steps are a
|
|
// library (the server imports them, and Go will not let you import a main), so a cold
|
|
// build is `go run ./server -build`.
|
|
//
|
|
// "kjol-web: prebuild" is what every run/debug config depends on. Codegen has to happen
|
|
// before the server is COMPILED — it writes app/*.gen.go, which the server imports — and
|
|
// under the debugger the binary is built by Delve, not by the server's own Build hook,
|
|
// so nothing else would generate it. Tailwind and the Solid bundle are in there too, so
|
|
// that a -watch=false session serves current artefacts instead of stale ones. Each step
|
|
// is also exposed on its own, so you can rerun just the one you need.
|
|
"version": "2.0.0",
|
|
"tasks": [
|
|
{
|
|
"label": "kjol-web: prebuild",
|
|
"detail": "Codegen -> Tailwind -> Solid bundle. Dependency of the run + debug configs.",
|
|
"dependsOrder": "sequence",
|
|
"dependsOn": ["kjol-web: codegen", "kjol-web: tailwind", "kjol-web: bundle (Solid)"],
|
|
"problemMatcher": [],
|
|
"group": "build"
|
|
},
|
|
{
|
|
"label": "kjol-web: codegen",
|
|
"detail": "Regenerate app/*.gen.go from the //gowasm: directives (pages, layouts, server components)",
|
|
"type": "shell",
|
|
"command": "go",
|
|
"args": ["run", "kjol/cmd/wasmgen", "./app"],
|
|
"options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web" },
|
|
"problemMatcher": ["$go"],
|
|
"presentation": { "reveal": "silent", "panel": "shared" },
|
|
"group": "build"
|
|
},
|
|
{
|
|
"label": "kjol-web: tailwind",
|
|
"detail": "Compile css/app.css -> wwwroot/app.css, scanning the webui kit + the site's Go markup",
|
|
"type": "shell",
|
|
"command": "go",
|
|
"args": [
|
|
"run", "./cmd/twcss",
|
|
"-entry", "cmd/kjol-web/css/app.css",
|
|
"-out", "cmd/kjol-web/wwwroot/app.css",
|
|
"-base", ".",
|
|
"webui/**/*.go",
|
|
"cmd/kjol-web/app/**/*.go",
|
|
"cmd/kjol-web/server/**/*.go"
|
|
],
|
|
// Run from the kjol module root so the Tailwind engine's deps resolve in kjol's
|
|
// go.mod, not the site's.
|
|
"options": { "cwd": "${workspaceFolder}/go" },
|
|
"problemMatcher": ["$go"],
|
|
"presentation": { "reveal": "silent", "panel": "shared" },
|
|
"group": "build"
|
|
},
|
|
{
|
|
"label": "kjol-web: bundle (Solid)",
|
|
"detail": "TSX -> Solid -> esbuild, plus the SSR bake: wwwroot/bundle.min.{js,css} + public.bundle.min.*",
|
|
"type": "shell",
|
|
"command": "go",
|
|
"args": [
|
|
"run", "kjol/cmd/bundle",
|
|
"-app", "frontend",
|
|
// The shared JS tree: the Solid kit, the vendored runtime, the icon SVGs and the
|
|
// @theme scaffold all live there.
|
|
"-web", "../../jsruntime",
|
|
"-out", "wwwroot",
|
|
"-gen-ts", "frontend/src/ui/generated"
|
|
],
|
|
"options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web" },
|
|
"problemMatcher": ["$go"],
|
|
"presentation": { "reveal": "silent", "panel": "shared" },
|
|
"group": "build"
|
|
},
|
|
{
|
|
"label": "kjol-web: dev server (hot reload)",
|
|
"detail": "SSR + /rsc + hot reload on :8085. Rebuilds on save; a .css save recompiles Tailwind only and swaps the stylesheet in place.",
|
|
"type": "shell",
|
|
"command": "go",
|
|
"args": ["run", "./server"],
|
|
"options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web" },
|
|
"dependsOn": ["kjol-web: prebuild"],
|
|
"isBackground": true,
|
|
"problemMatcher": {
|
|
"owner": "go",
|
|
"pattern": {
|
|
"regexp": "^(.*):(\\d+):(\\d+):\\s+(.*)$",
|
|
"file": 1, "line": 2, "column": 3, "message": 4
|
|
},
|
|
"background": {
|
|
"activeOnStart": true,
|
|
"beginsPattern": "rebuilding|recompiling",
|
|
"endsPattern": "serving|reloading clients|stylesheet updated"
|
|
}
|
|
},
|
|
"presentation": { "reveal": "always", "panel": "dedicated", "clear": true },
|
|
"group": { "kind": "build", "isDefault": true }
|
|
},
|
|
{
|
|
"label": "kjol-web: build (cold)",
|
|
"detail": "Cold build, then exit: codegen + Tailwind + wasm + Solid bundle + wasm_exec.js.",
|
|
"type": "shell",
|
|
"command": "go",
|
|
"args": ["run", "./server", "-build"],
|
|
"options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web" },
|
|
"problemMatcher": ["$go"],
|
|
"group": "build"
|
|
},
|
|
{
|
|
"label": "kjol: build ./...",
|
|
"detail": "Build the whole kjol module (does not descend into the nested kjol-web module)",
|
|
"type": "shell",
|
|
"command": "go build ./...",
|
|
"options": { "cwd": "${workspaceFolder}/go" },
|
|
"problemMatcher": ["$go"],
|
|
"group": "build"
|
|
},
|
|
{
|
|
"label": "kjol: vet ./...",
|
|
"type": "shell",
|
|
"command": "go vet ./...",
|
|
"options": { "cwd": "${workspaceFolder}/go" },
|
|
"problemMatcher": ["$go"],
|
|
"group": "test"
|
|
},
|
|
{
|
|
"label": "kjol: test ./...",
|
|
"type": "shell",
|
|
"command": "go test ./...",
|
|
"options": { "cwd": "${workspaceFolder}/go" },
|
|
"problemMatcher": ["$go"],
|
|
"group": { "kind": "test", "isDefault": true }
|
|
},
|
|
{
|
|
"label": "kjol: test the reconciler (wasm)",
|
|
"detail": "The reconciler needs a DOM, so `go test ./...` cannot reach it. This runs it under node, against a minimal DOM shim.",
|
|
"type": "shell",
|
|
"command": "go",
|
|
"args": ["test", "-exec=node testdata/domexec.js", "./wasmruntime"],
|
|
"options": {
|
|
"cwd": "${workspaceFolder}/go",
|
|
"env": { "GOOS": "js", "GOARCH": "wasm" }
|
|
},
|
|
"problemMatcher": ["$go"],
|
|
"group": "test"
|
|
},
|
|
{
|
|
"label": "kjol-web: test",
|
|
"detail": "The site's own tests (SSR, the icon registry, the AutoTable export bytes). Its own module, so `kjol: test ./...` does not reach it.",
|
|
"type": "shell",
|
|
"command": "go test ./...",
|
|
"options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web" },
|
|
"problemMatcher": ["$go"],
|
|
"group": "test"
|
|
}
|
|
]
|
|
}
|