{ // 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" } ] }