7.1 KiB
description
| description |
|---|
| Run complete quality gates workflow (craft → format → lint → type-check → test) |
Quality Gates
Execute the complete quality gates workflow to ensure code quality before committing.
What This Does
Runs the following sequence in order:
- Barrel Files (
bun run craft) - Generate/update barrel files - Format (
bun run format) - Format code with Biome + Prettier - Lint (
bun run lint) - Lint code with Biome - Type Check (
bun run type-check) - TypeScript type checking - Tests (
bun run test) - Run all tests
When to Use
Run quality gates:
- ✅ Before committing code
- ✅ After implementing a feature
- ✅ After fixing bugs
- ✅ Before creating a pull request
- ✅ After resolving merge conflicts
- ✅ Before pushing to remote
Instructions
-
Check current status:
git status -
Run quality gates:
bun run quality -
Review output:
- Each step will show its results
- Process stops on first failure
- Fix any issues reported
-
Fix issues if needed:
# Fix formatting issues bun run format # Fix linting issues (safe) bun run lint # Fix linting issues (aggressive) bun run lint:fix # Check TypeScript errors bun run type-check # Run tests bun run test -
Re-run quality gates:
bun run quality -
Commit when all pass:
git add . git commit -m "feat: your feature description"
Expected Output
✅ Success
→ Running quality gates...
[1/5] Generating barrel files...
✅ Generated 10 barrel file(s)
[2/5] Formatting code...
✅ Code formatted successfully
[3/5] Linting code...
✅ No lint errors found
[4/5] Type checking...
✅ No type errors found
[5/5] Running tests...
✅ All tests passed (15 passed, 15 total)
✅ Quality gates passed! Ready to commit.
❌ Failure Examples
Format Errors:
[2/5] Formatting code...
❌ Formatting issues found in:
- src/utils/helper.ts
- src/components/button.tsx
Fix with: bun run format
Lint Errors:
[3/5] Linting code...
❌ Lint errors found:
- src/services/api.ts:15:3 - Unused variable 'response'
- src/utils/validator.ts:42:1 - Missing return type
Fix with: bun run lint:fix
Type Errors:
[4/5] Type checking...
❌ TypeScript errors found:
src/models/user.ts:23:5 - Type 'string' is not assignable to type 'number'
src/services/auth.ts:45:12 - Property 'email' does not exist on type 'User'
Fix these errors manually, then run type-check again
Test Failures:
[5/5] Running tests...
❌ Tests failed:
✓ UserService > creates user (2ms)
✗ UserService > validates email (5ms)
Expected: true
Received: false
1 test failed, 14 passed (15 total)
Fix the failing tests and run: bun run test
Common Issues
Issue: Barrel files conflict
Problem:
Barrel file generation failed - conflicting index.ts found
Solution:
# Review and clean old barrel files
bun run craft:clean --dry-run
# If safe, clean them
bun run craft:clean
# Regenerate
bun run craft
Issue: Format and lint conflicts
Problem:
Format and lint producing different results
Solution:
# Run format first (always)
bun run format
# Then lint
bun run lint:fix
# Check again
bun run quality
Issue: Type errors after refactoring
Problem:
Multiple type errors after code changes
Solution:
# Run type check with details
bun run type-check
# Fix errors one by one
# Re-check after each fix
bun run type-check
Issue: Tests timing out
Problem:
Tests failing with timeout errors
Solution:
# Run tests with increased timeout
bun run test --test-timeout=30000
# Or update vitest.config.ts:
# test: {
# testTimeout: 30000
# }
Individual Commands
If you need to run steps individually:
# Step 1: Barrel files
bun run craft
# Step 2: Format
bun run format
# Step 3: Lint
bun run lint
# Step 4: Type check
bun run type-check
# Step 5: Tests
bun run test
Pre-commit Hook
Quality gates (format + lint-staged) run automatically on commit via Husky:
git commit -m "feat: new feature"
# Automatically runs:
# → Pre-commit: quality gates (format, lint-staged)
# ✓ Pre-commit: todas as verificações passaram
Note: Pre-commit runs a lighter version:
- ✅ Format
- ✅ Lint-staged (only staged files)
Full quality gates (including type-check and tests) should be run manually before pushing.
CI/CD Integration
Quality gates should also run in your CI/CD pipeline:
# .github/workflows/quality.yml
name: Quality Checks
on: [push, pull_request]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
- run: bun install
- run: bun run quality
Best Practices
-
Run before every commit:
- Catches issues early
- Prevents broken commits
- Maintains code quality
-
Fix issues immediately:
- Don't accumulate technical debt
- Small fixes are easier
- Keeps codebase clean
-
Use in development workflow:
# During development bun run format # Format as you go # Before commit bun run quality # Full check # Commit git commit -m "feat: feature name" -
Run after merges:
git merge dev bun run quality # Ensure no conflicts git push -
Keep scripts up to date:
- Review package.json scripts
- Update configurations
- Maintain documentation
Script Configuration
Ensure your package.json has these scripts:
{
"scripts": {
"craft": "barrel-craft",
"craft:clean": "barrel-craft clean --force",
"format": "biome format --write . && bun run format:md && bun run format:pkg",
"format:md": "prettier --write '**/*.md' --log-level error",
"format:pkg": "prettier-package-json --write package.json --log-level error",
"lint": "biome check --write .",
"lint:fix": "biome check --write . --unsafe",
"type-check": "tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
"quality": "bun run craft && bun run format && bun run lint && bun run type-check && bun run test"
}
}
Troubleshooting
Quality gates won't run
# Check if scripts exist
cat package.json | grep -A 1 '"quality"'
# Check if dependencies are installed
bun install
# Run with verbose output
bun run quality --verbose
Command not found errors
# Install missing tools
bun add -D @biomejs/biome prettier barrel-craft
# Install TypeScript if needed
bun add -D typescript
Permission issues
# Make sure node_modules/.bin is accessible
chmod +x node_modules/.bin/*
# Or use bunx
bunx barrel-craft
bunx biome check .
Summary
Quality gates ensure:
- ✅ Clean, organized imports (barrel files)
- ✅ Consistent code formatting
- ✅ No linting errors
- ✅ No type errors
- ✅ All tests passing
Run bun run quality before every commit to maintain high code quality standards!