Skip to content

chore(tooling): pin biome, add git hooks, shared tsconfig, and release skeleton - #37

Merged
caio-pizzol merged 5 commits into
mainfrom
caio-pizzol/tooling-hooks-release
Jun 5, 2026
Merged

chore(tooling): pin biome, add git hooks, shared tsconfig, and release skeleton#37
caio-pizzol merged 5 commits into
mainfrom
caio-pizzol/tooling-hooks-release

Conversation

@caio-pizzol

Copy link
Copy Markdown
Contributor

Minimal tooling baseline for docfonts: pinned formatter, git hooks, a shared TypeScript config, and a release skeleton for @docfonts/fallbacks. Everything is kept deliberately small so we can add on top later, not strip back.

  • Biome: pin @biomejs/biome to 2.4.16 and match biome.json's $schema, so local checks stop printing the version mismatch. New check (typecheck + test + lint + build) and check:fast (typecheck + lint) scripts.
  • Hooks (lefthook + commitlint): pre-commit runs check:fast (non-mutating - no auto-format that would restage files); commit-msg enforces Conventional Commits. prepare installs hooks locally and is skipped in CI. This very commit was validated by the hook.
  • TypeScript: each package and apps/cli gets a one-line tsconfig.json that extends the root, and the fallbacks build config now extends it too. apps/site keeps its astro base (a real exception). The root config stays the single whole-repo typecheck; per-package configs give editors and tsc -p the inherited paths (verified tsc -p packages/registry resolves cross-imports).
  • Release: a minimal .releaserc.json (releases only packages/fallbacks, fallbacks-v* tags, no @semantic-release/git) and a manual, dry-run-default workflow. semantic-release is run via bunx in that workflow only, so it never weighs down regular CI installs.

CI is unchanged - the existing ci.yml already runs typecheck + lint + build + test on push/PR, which is what was asked for.

Deliberately not done, because they are gated decisions:

  • The release is NOT armed: the workflow is manual and dry-run by default and publishes nothing. A real publish needs a confirmed license/copyright holder (the manifest says MIT; no LICENSE file yet) and an NPM_TOKEN, and the first 0.1.0 should be published intentionally after a dry run.

Verified: bun run check (typecheck + test + lint + build) green; commitlint accepts conventional / rejects non-conventional; hooks install and fire; per-package tsconfig resolves cross-package imports.

…e skeleton

Pin @biomejs/biome to 2.4.16 and match biome.json $schema so local checks stop
printing the version mismatch. Add check (typecheck+test+lint+build) and
check:fast (typecheck+lint) scripts.

Add lefthook + commitlint: pre-commit runs check:fast (non-mutating), commit-msg
enforces Conventional Commits. prepare installs hooks locally, skipped in CI.

Add a minimal root-inherited tsconfig per package and apps/cli (apps/site keeps
its astro base). fallbacks build config now extends the root.

Add a minimal semantic-release config + manual, dry-run-default workflow that
releases only packages/fallbacks. Not armed: needs a confirmed license and an
NPM_TOKEN before it can publish.
… filter

semantic-release uses the default commit convention (no custom releaseRules);
the manual release workflow is the gate, so scope does not filter releases.
semantic-release verifies npm auth in verifyConditions (the package is public,
so npm whoami runs) before publish is skipped, so the dry run also needs a valid
NPM_TOKEN - the prior comment implied it was only needed for a real publish.
@caio-pizzol
caio-pizzol merged commit 2d61890 into main Jun 5, 2026
1 check 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