Skip to content

chore(release): promote main to release - #90

Merged
spencer-osbrjp merged 23 commits into
releasefrom
main
Jul 23, 2026
Merged

chore(release): promote main to release#90
spencer-osbrjp merged 23 commits into
releasefrom
main

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated promotion PR. Merge with a merge commit (do NOT squash) so the feat:/fix: commits reach release intact — semantic-release reads them to cut the stable version + tag. Squashing collapses them into one non-conventional commit and no release is cut.

actions-user and others added 18 commits July 23, 2026 03:07
Extend bungkus beyond frontend-only scaffolding with two opt-in,
registry-driven categories (Closes #79). Both default to none, so the
tool stays a frontend scaffold unless asked otherwise.

- --backend none|hono|elysia: standalone server entry + dev:server script
- --orm none|drizzle|prisma, --db none|sqlite|postgres|mysql: db client,
  drizzle.config/prisma schema, .env.example. Drizzle driver selected by
  a cross-cutting rule from the orm+db combo; prisma bundles its own.

Wired through registry.json, config enums, packagejson merge, create
flags (+ --db-requires-orm guard), the TUI wizard, and templates.
Table-driven tests cover the combos, driver selection, and validation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
--db d1 wires the built-in drizzle-orm/d1 driver: a d1-http drizzle.config,
a request-scoped getDb(binding) client, and Cloudflare D1 env creds. Only
@cloudflare/workers-types is added (the binding is provided by the Workers
runtime) — no node driver. Pairs with --deploy cloudflare-workers.

Prisma + d1 is rejected with a clear error rather than emitting a
half-working template. Supabase needs no dedicated option: --db postgres
with either ORM covers it via the connection string.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Refs #81. Adds a --layout flag (flat default, monorepo opt-in). In monorepo
mode the scaffolder emits a pragmatic-layered pnpm workspace:

  apps/web       frontend + its own package.json/tooling
  apps/api       backend (hono/elysia + orm/db) + package.json + tsconfig
  packages/domain shared contract (zod schemas when --validation zod, else types)
  package.json   private workspace root with recursive dev/build scripts
  pnpm-workspace.yaml gains a packages: block; root .gitignore for hoisted deps

Scaffold is now layout-aware: FE templates route to apps/web, backend/orm to
apps/api, shared tooling + manifest to the root. The frontend package omits
backend/orm deps (they move to apps/api) and gains a workspace dep on domain;
web/api both depend on domain via workspace:*. Flat layout is unchanged.

Guarded to --pm pnpm for now. TUI stays flat-only (layout isn't registry-backed).
Table-driven tests cover the package split, api/domain/root builders, and layout
validation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts:
#	cmd/create.go
#	internal/tui/wizard.go
#	pkg/config.go
#	pkg/packagejson.go
Refs #81. A selected --backend now implies --layout monorepo unless the user
passed --layout explicitly, and only when pnpm is in use (monorepo requires
it). --backend with a non-pnpm PM, or an explicit --layout flat, stays flat.
Applied via ProjectConfig.ApplyDefaultLayout so the CLI and TUI share one rule.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The wizard auto-upgrades to monorepo when a backend is selected; surface the
resolved layout on the confirmation screen so it isn't a silent change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Refs #81. The wizard now has two tabs — Frontend (base, tooling, frontend
libraries, PM, advanced) and Backend (backend framework, ORM, database) — so
backend config is no longer mixed into the frontend LIBRARIES panel. Switch
with ] (to backend) and [ (to frontend); a tab bar shows the active screen and
the Backend tab notes that a selection produces a pnpm monorepo. Selections
still flow through collectConfig + ApplyDefaultLayout unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Summary backspace now returns to the tab the user confirmed from (frontend
  or backend), via a remembered prevScreen, instead of always the frontend tab.
- q quits the wizard from the backend and summary screens, and from the
  frontend screen when focus is not in the project-name input (so typing "q"
  into the name still works). Footers advertise q/esc.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The footer previously showed "] backend tab" and "[ frontend tab" in
different positions, making the two keys look unrelated. Frontend is the left
tab and Backend the right, so [ / ] map left/right; show them as one
"[ / ] switch tab" hint in the same leading position on both footers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Closes #88.

Code:
- T-2-1 (V2 2.2.1, L1): validate the project name / destination directory.
  New pkg.ValidateProjectName (npm-name rules) + pkg.ValidateDest
  (filepath.IsLocal) reject path traversal, absolute paths, and invalid
  package names at the CLI arg path and the TUI confirm path. Adds a table
  test. `create .` and valid names behave as before.
- T-15-3 (V15 15.3.2, L2): the bump HTTP client no longer follows redirects
  off the pinned registry host (CheckRedirect -> ErrUseLastResponse).
- T-15-4 (V15 15.2.3, L2): gate the maintainer `bump` command behind a
  //go:build bump tag so it is excluded from released binaries; the bump
  workflow now runs with -tags bump.

Verification:
- T-15-1 (V15 15.2.1, L1): govulncheck is clean; added a govulncheck step to
  run-tests.yml (and made that job actually build + test). Bumped
  golang.org/x/sys 0.42.0 -> 0.47.0 to clear GO-2026-5024 (uncalled).

Docs:
- T-15-2/5/6 + T-13-1: new SECURITY.md (dependency remediation policy,
  external-communication profile, dangerous-functionality map, risky-component
  review) and .github/dependabot.yml (gomod + github-actions).
- T-2-2: documented the project-name rule in `create --help`.

Out of scope: T-13-2 (SLACK_WEBHOOK_URL rotation) needs GitHub secret-console access.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
security: remediate ASVS 5.0 audit findings (input validation + supply-chain hardening)
Refs #81. After scaffolding a monorepo, PrintSuccess now explains the
pnpm-workspace layout instead of the flat instructions: notes that `pnpm dev`
runs apps/web + apps/api, lists the workspace packages, and (when an ORM is
selected) shows the apps/api database setup steps. Deploy instructions target
`pnpm --filter web run deploy` in monorepo mode since the deploy script lives
in apps/web. Flat-layout output is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Refs #81. Selecting --db postgres or --db mysql (with an ORM) now scaffolds a
local docker-compose.yml at the project/workspace root, with service
credentials that match the generated .env.example DATABASE_URL so it works out
of the box. sqlite/d1 get no compose file. The get-started box gains a
`docker compose up -d` step before db:migrate for those databases, and the DB
setup section now shows for flat layouts too (not just monorepo).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Refs #81. End-to-end verification of all new backend combos (hono/elysia ×
drizzle{sqlite,postgres,mysql,d1} / prisma{sqlite,postgres,mysql}, backend-only,
and flat orm-only) surfaced three template bugs that broke a fresh scaffold:

- pnpm install hard-failed (ERR_PNPM_IGNORED_BUILDS / ERR_PNPM_TRUST_DOWNGRADE):
  the workspace allowBuilds allowlist omitted the DB native/postinstall scripts,
  and @types/node's undici-types tripped trustPolicy: no-downgrade. Added
  better-sqlite3 (drizzle+sqlite) and prisma build approvals, and an
  undici-types trust exclusion — gated to when a backend/orm is selected.
- api `tsc` build failed with "Cannot find name 'process'": the api package
  relied on @types/node being pulled in transitively (it wasn't, for prisma).
  Added @types/node to the api devDependencies.
- the d1 tsconfig restricted types to @cloudflare/workers-types, which excluded
  node globals and broke the server typecheck. Added "node" to that list.

Verified per combo: pnpm install, drizzle-kit generate / prisma generate,
`tsc --noEmit`, and the server booting + responding. Also ran a full docker
end-to-end (docker compose up → drizzle db:migrate → users table created in a
real postgres, matching .env creds).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Refs #81. The common husky setup (prepare: husky + husky devDep) was landing in
apps/web while the .husky hooks and .git live at the workspace root, so
`pnpm install` ran husky from the wrong directory (".git can't be found"). In
monorepo mode the prepare script + husky devDep now go to the root package.json
and are stripped from apps/web; the flat layout is unchanged. Verified: install
runs `. prepare: husky` cleanly and git core.hooksPath is set at the root.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Vulnerability scan step failed on stdlib advisories (crypto/tls
GO-2026-5856, net/textproto GO-2026-5039, crypto/x509 GO-2026-5037) because
setup-go pinned exactly go 1.25.0 (from go.mod), whose standard library is
unpatched. govulncheck reports stdlib vulns against the exact toolchain, so
build/scan on go-version 1.25.x (latest patch, which includes the fixes).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
spencer-osbrjp and others added 5 commits July 23, 2026 17:46
fix(ci): build/scan on latest 1.25 Go patch to clear stdlib govulncheck failures
feat: add backend framework and ORM/DB add-on categories
Combines the open Dependabot PRs into one verified change:

go modules:
- charm.land/bubbles/v2   2.1.0 -> 2.1.1
- charm.land/bubbletea/v2 2.0.2 -> 2.0.8
- charm.land/lipgloss/v2  2.0.2 -> 2.0.5
- golang.org/x/mod        0.14.0 -> 0.38.0

github actions:
- actions/checkout                v4 -> v7
- actions/upload-artifact         v4 -> v7
- actions/download-artifact       v4 -> v8
- peter-evans/create-pull-request v6 -> v8
- cycjimmy/semantic-release-action v4 -> v6

Verified: go build (default + bump tag), go test ./..., and govulncheck all
pass. Supersedes #91-#99.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(deps): batch Dependabot updates (go modules + github actions)
@spencer-osbrjp
spencer-osbrjp merged commit 1414732 into release Jul 23, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants