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
3 changes: 2 additions & 1 deletion .tsforge/scaffold-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,8 @@
"healthUrls": [
"http://localhost:7331/",
"http://localhost:7330/swagger/json"
]
],
"strip": ["apps/docs"]
},
"astro": {
"subPath": "apps/docs",
Expand Down
7 changes: 7 additions & 0 deletions apps/api/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@
/dist
/build

# ESLint persistent cache — warm lint goes ~23s → ~2s (content-based
# invalidation, zero rule loss). Mirrors apps/ui.
.eslintcache

# Incremental TypeScript build info (fast typecheck cache).
*.tsbuildinfo

# misc
.DS_Store
*.pem
Expand Down
4 changes: 2 additions & 2 deletions apps/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
"preview:templates": "bun run src/templates/email/preview.ts",
"build": "bun run build:templates && bun build src/index.ts --outdir dist --target bun",
"start": "bun run dist/index.js",
"lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" \"scripts/**/*.ts\"",
"lint:fix": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" \"scripts/**/*.ts\" --fix",
"lint": "eslint --cache \"src/**/*.ts\" \"tests/**/*.ts\" \"scripts/**/*.ts\"",
"lint:fix": "eslint --cache \"src/**/*.ts\" \"tests/**/*.ts\" \"scripts/**/*.ts\" --fix",
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
"typecheck": "tsc --noEmit",
"knip": "knip",
Expand Down
18 changes: 15 additions & 3 deletions scripts/stack-check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,15 @@ run_check() {

require_dir "api" "$BORINGSTACK_API_DIR"
require_dir "ui" "$BORINGSTACK_UI_DIR"
require_dir "docs" "$BORINGSTACK_DOCS_DIR"

# `docs` is TEMPLATE-ONLY. The boringstack repo ships apps/docs (its own docs site)
# and checks it here; a product scaffolded FROM boringstack strips apps/docs (see
# .tsforge/scaffold-manifest.json `strip`), so its docs checks are skipped rather
# than hard-failing. Present ⇒ run them (the template); absent ⇒ this is a product.
HAS_DOCS=0
if [[ -d "$BORINGSTACK_DOCS_DIR" ]]; then
HAS_DOCS=1
fi

run_check "ACL drift" bash -c "cd \"$BORINGSTACK_API_DIR\" && bun run generate:acl-types:check"
run_check "api lint-meta docs" bash -c "cd \"$BORINGSTACK_API_DIR\" && bun run check:lint-meta-docs"
Expand All @@ -36,12 +44,16 @@ fi
run_check "ui lint-meta docs" bash -c "cd \"$BORINGSTACK_UI_DIR\" && bun run check:lint-meta-docs"
run_check "ui scripts docs" bash -c "cd \"$BORINGSTACK_UI_DIR\" && bun run check:scripts-docs"

run_check "docs data" bash -c "cd \"$BORINGSTACK_DOCS_DIR\" && BORINGSTACK_API_DIR=\"$BORINGSTACK_API_DIR\" BORINGSTACK_UI_DIR=\"$BORINGSTACK_UI_DIR\" bun run check:docs-data"
if [[ "$HAS_DOCS" == "1" ]]; then
run_check "docs data" bash -c "cd \"$BORINGSTACK_DOCS_DIR\" && BORINGSTACK_API_DIR=\"$BORINGSTACK_API_DIR\" BORINGSTACK_UI_DIR=\"$BORINGSTACK_UI_DIR\" bun run check:docs-data"
fi

if [[ "$FULL" == "--full" ]]; then
run_check "api validate" bash -c "cd \"$BORINGSTACK_API_DIR\" && bun run validate"
run_check "ui validate" bash -c "cd \"$BORINGSTACK_UI_DIR\" && bun run validate"
run_check "docs build:ci" bash -c "cd \"$BORINGSTACK_DOCS_DIR\" && BORINGSTACK_API_DIR=\"$BORINGSTACK_API_DIR\" BORINGSTACK_UI_DIR=\"$BORINGSTACK_UI_DIR\" bun run build:ci"
if [[ "$HAS_DOCS" == "1" ]]; then
run_check "docs build:ci" bash -c "cd \"$BORINGSTACK_DOCS_DIR\" && BORINGSTACK_API_DIR=\"$BORINGSTACK_API_DIR\" BORINGSTACK_UI_DIR=\"$BORINGSTACK_UI_DIR\" bun run build:ci"
fi
fi

printf '\n'
Expand Down
Loading