mirror of
https://github.com/acedanger/finance.git
synced 2025-12-05 14:40:13 -08:00
feat: add Husky pre-commit hook for Biome checks - fixes #38
This commit is contained in:
6
.husky/pre-commit
Executable file
6
.husky/pre-commit
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
. "$(dirname -- "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
echo "Running Biome checks before commit..."
|
||||||
|
npm run check || exit 1
|
||||||
|
echo "Biome checks passed!"
|
||||||
89
CONTRIBUTING.md
Normal file
89
CONTRIBUTING.md
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
# Contributing to Finance App
|
||||||
|
|
||||||
|
This document outlines development practices and guidelines for this project.
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
### Git Hooks
|
||||||
|
|
||||||
|
This project uses Git hooks to ensure code quality:
|
||||||
|
|
||||||
|
- **Pre-commit hook**: Runs Biome checks before each commit
|
||||||
|
- All code must pass these checks to be committed
|
||||||
|
- See [HOOKS.md](./HOOKS.md) for detailed usage instructions
|
||||||
|
|
||||||
|
### Commit Message Format
|
||||||
|
|
||||||
|
Commit messages should be clear and descriptive:
|
||||||
|
```
|
||||||
|
<type>: <description>
|
||||||
|
|
||||||
|
[optional body]
|
||||||
|
```
|
||||||
|
|
||||||
|
Types:
|
||||||
|
- **feat**: New feature
|
||||||
|
- **fix**: Bug fix
|
||||||
|
- **docs**: Documentation changes
|
||||||
|
- **style**: Code style changes (formatting, etc.)
|
||||||
|
- **refactor**: Code changes that neither fix bugs nor add features
|
||||||
|
- **test**: Adding or modifying tests
|
||||||
|
- **chore**: Changes to build process or auxiliary tools
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
feat: add transaction filtering by date range
|
||||||
|
|
||||||
|
Implements the date range picker component and adds filtering logic
|
||||||
|
to the transaction table display. Updates the API to support date range filtering.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Branch Naming Conventions
|
||||||
|
|
||||||
|
- `feature/<feature-name>` - For new features
|
||||||
|
- `fix/<issue-name>` - For bug fixes
|
||||||
|
- `refactor/<component>` - For code refactoring
|
||||||
|
- `docs/<document-name>` - For documentation updates
|
||||||
|
|
||||||
|
Example: `feature/date-range-filter`
|
||||||
|
|
||||||
|
## Coding Standards
|
||||||
|
|
||||||
|
### TypeScript Guidelines
|
||||||
|
|
||||||
|
- Use TypeScript for all new files
|
||||||
|
- Add proper type annotations
|
||||||
|
- Avoid using `any` type
|
||||||
|
- Use optional chaining (`?.`) and nullish coalescing (`??`) where appropriate
|
||||||
|
|
||||||
|
### Path Aliases
|
||||||
|
|
||||||
|
Always use the project's configured path aliases instead of relative imports. See the README.md file for the complete list of configured path aliases.
|
||||||
|
|
||||||
|
### CSS Guidelines
|
||||||
|
|
||||||
|
- Maintain consistent naming conventions for CSS classes
|
||||||
|
- Use CSS variables for theming
|
||||||
|
- Consider responsive design for all UI components
|
||||||
|
- Test changes across multiple viewport sizes
|
||||||
|
|
||||||
|
### API Development
|
||||||
|
|
||||||
|
- Implement comprehensive input validation
|
||||||
|
- Use appropriate HTTP status codes
|
||||||
|
- Structure responses consistently
|
||||||
|
- Document API changes
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- Write tests for new features and bug fixes
|
||||||
|
- Ensure all tests pass before submitting changes
|
||||||
|
- Follow existing test patterns in the codebase
|
||||||
|
|
||||||
|
## Pull Request Process
|
||||||
|
|
||||||
|
1. Verify all tests pass locally
|
||||||
|
2. Update relevant documentation
|
||||||
|
3. Provide a clear description of the changes
|
||||||
|
4. Reference any related issues
|
||||||
|
5. Request review from appropriate team members
|
||||||
@@ -91,6 +91,55 @@ Both scripts perform the same functions:
|
|||||||
- Push to GitHub Container Registry
|
- Push to GitHub Container Registry
|
||||||
- Provide next steps for using the image
|
- Provide next steps for using the image
|
||||||
|
|
||||||
|
## Git Hooks
|
||||||
|
|
||||||
|
This project uses Git hooks via Husky to enforce code quality:
|
||||||
|
|
||||||
|
1. **Pre-commit Hook:**
|
||||||
|
- Automatically runs Biome checks before each commit
|
||||||
|
- Prevents committing code with linting or formatting errors
|
||||||
|
- See [HOOKS.md](./HOOKS.md) for more details and usage instructions
|
||||||
|
|
||||||
|
## Pre-commit Hooks
|
||||||
|
|
||||||
|
The project uses Git hooks to enforce code quality standards automatically when committing changes.
|
||||||
|
|
||||||
|
### Setup
|
||||||
|
|
||||||
|
Husky is used to manage Git hooks and is automatically installed and configured when you run `npm install`. No manual setup is required.
|
||||||
|
|
||||||
|
### Available Hooks
|
||||||
|
|
||||||
|
1. **pre-commit**: Runs before each commit to ensure code quality
|
||||||
|
- Runs Biome.js to check and auto-fix formatting and path alias usage
|
||||||
|
- Runs TypeScript type checking
|
||||||
|
- Auto-stages files fixed by Biome.js
|
||||||
|
|
||||||
|
### Bypassing Hooks
|
||||||
|
|
||||||
|
In rare cases, you may need to bypass the pre-commit hooks:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git commit --no-verify -m "Your commit message"
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ Note: Only bypass hooks when absolutely necessary and ensure code quality manually.
|
||||||
|
|
||||||
|
### Troubleshooting
|
||||||
|
|
||||||
|
If the pre-commit hook fails:
|
||||||
|
|
||||||
|
1. Review the error messages in the console
|
||||||
|
2. Fix the reported issues
|
||||||
|
3. Stage your changes again
|
||||||
|
4. Retry the commit
|
||||||
|
|
||||||
|
For hook execution issues:
|
||||||
|
```bash
|
||||||
|
# Reinstall husky hooks
|
||||||
|
npm run prepare
|
||||||
|
```
|
||||||
|
|
||||||
## Environment Files
|
## Environment Files
|
||||||
|
|
||||||
The project uses two separate environment files:
|
The project uses two separate environment files:
|
||||||
|
|||||||
38
HOOKS.md
Normal file
38
HOOKS.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Git Hooks
|
||||||
|
|
||||||
|
This project uses Git hooks to enforce code quality standards. The hooks are managed using [Husky](https://typicode.github.io/husky/).
|
||||||
|
|
||||||
|
## Pre-commit Hook
|
||||||
|
|
||||||
|
The pre-commit hook runs automatically before each commit and performs the following checks:
|
||||||
|
|
||||||
|
- Runs Biome checks (`npm run check`) to ensure code formatting and linting standards are met
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
The hook runs automatically when you commit changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Your commit message"
|
||||||
|
```
|
||||||
|
|
||||||
|
If the code doesn't pass the Biome checks, the commit will be rejected with an error message.
|
||||||
|
|
||||||
|
### Bypassing the Hooks
|
||||||
|
|
||||||
|
In rare cases when you need to bypass the pre-commit hooks (not recommended for regular use), you can use the `--no-verify` flag:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git commit -m "Your commit message" --no-verify
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Warning:** Bypassing hooks should be done only in exceptional circumstances. It's better to fix code quality issues than to bypass the checks.
|
||||||
|
|
||||||
|
## Adding New Hooks
|
||||||
|
|
||||||
|
To add additional Git hooks:
|
||||||
|
|
||||||
|
1. Create a new script in the `.husky` directory
|
||||||
|
2. Make it executable: `chmod +x .husky/your-hook-name`
|
||||||
|
3. Update this documentation to include information about the new hook
|
||||||
19
biome.json
19
biome.json
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://biomejs.dev/schemas/1.5.3/schema.json",
|
"$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
|
||||||
"organizeImports": {
|
"organizeImports": {
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
@@ -13,7 +13,14 @@
|
|||||||
"style": {
|
"style": {
|
||||||
"useTemplate": "error",
|
"useTemplate": "error",
|
||||||
"useConst": "error"
|
"useConst": "error"
|
||||||
}
|
},
|
||||||
|
"correctness": {
|
||||||
|
"noUnusedImports": "error"
|
||||||
|
},
|
||||||
|
"complexity": {
|
||||||
|
"noExcessiveCognitiveComplexity": "warn"
|
||||||
|
},
|
||||||
|
"nursery": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"formatter": {
|
"formatter": {
|
||||||
@@ -26,9 +33,17 @@
|
|||||||
"formatter": {
|
"formatter": {
|
||||||
"quoteStyle": "single",
|
"quoteStyle": "single",
|
||||||
"semicolons": "always"
|
"semicolons": "always"
|
||||||
|
},
|
||||||
|
"parser": {
|
||||||
|
"unsafeParameterDecoratorsEnabled": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"ignore": ["dist", "node_modules", ".astro", "coverage"]
|
"ignore": ["dist", "node_modules", ".astro", "coverage"]
|
||||||
|
},
|
||||||
|
"vcs": {
|
||||||
|
"enabled": true,
|
||||||
|
"clientKind": "git",
|
||||||
|
"useIgnoreFile": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1048
package-lock.json
generated
1048
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -17,7 +17,8 @@
|
|||||||
"db:migrate": "prisma migrate dev",
|
"db:migrate": "prisma migrate dev",
|
||||||
"db:push": "prisma db push",
|
"db:push": "prisma db push",
|
||||||
"db:seed": "node prisma/seed.js",
|
"db:seed": "node prisma/seed.js",
|
||||||
"db:studio": "prisma studio"
|
"db:studio": "prisma studio",
|
||||||
|
"prepare": "husky"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/cloudflare": "^12.5.1",
|
"@astrojs/cloudflare": "^12.5.1",
|
||||||
@@ -25,6 +26,11 @@
|
|||||||
"@astrojs/react": "^4.2.5",
|
"@astrojs/react": "^4.2.5",
|
||||||
"@nanostores/react": "^1.0.0",
|
"@nanostores/react": "^1.0.0",
|
||||||
"@prisma/client": "^6.7.0",
|
"@prisma/client": "^6.7.0",
|
||||||
|
"@radix-ui/react-dialog": "^1.1.13",
|
||||||
|
"@radix-ui/react-dropdown-menu": "^2.1.14",
|
||||||
|
"@radix-ui/react-form": "^0.1.6",
|
||||||
|
"@radix-ui/react-select": "^2.2.4",
|
||||||
|
"@radix-ui/react-toast": "^1.2.13",
|
||||||
"@types/react": "^19.1.2",
|
"@types/react": "^19.1.2",
|
||||||
"@types/react-dom": "^19.1.2",
|
"@types/react-dom": "^19.1.2",
|
||||||
"astro": "^5.7.5",
|
"astro": "^5.7.5",
|
||||||
@@ -41,6 +47,7 @@
|
|||||||
"@types/supertest": "^6.0.3",
|
"@types/supertest": "^6.0.3",
|
||||||
"@vitejs/plugin-react": "^4.4.1",
|
"@vitejs/plugin-react": "^4.4.1",
|
||||||
"@vitest/coverage-v8": "^3.1.3",
|
"@vitest/coverage-v8": "^3.1.3",
|
||||||
|
"husky": "^9.1.7",
|
||||||
"jsdom": "^26.1.0",
|
"jsdom": "^26.1.0",
|
||||||
"prisma": "^6.7.0",
|
"prisma": "^6.7.0",
|
||||||
"supertest": "^7.1.0",
|
"supertest": "^7.1.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user