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
|
||||
- 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
|
||||
|
||||
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": {
|
||||
"enabled": true
|
||||
},
|
||||
@@ -13,7 +13,14 @@
|
||||
"style": {
|
||||
"useTemplate": "error",
|
||||
"useConst": "error"
|
||||
}
|
||||
},
|
||||
"correctness": {
|
||||
"noUnusedImports": "error"
|
||||
},
|
||||
"complexity": {
|
||||
"noExcessiveCognitiveComplexity": "warn"
|
||||
},
|
||||
"nursery": {}
|
||||
}
|
||||
},
|
||||
"formatter": {
|
||||
@@ -26,9 +33,17 @@
|
||||
"formatter": {
|
||||
"quoteStyle": "single",
|
||||
"semicolons": "always"
|
||||
},
|
||||
"parser": {
|
||||
"unsafeParameterDecoratorsEnabled": true
|
||||
}
|
||||
},
|
||||
"files": {
|
||||
"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:push": "prisma db push",
|
||||
"db:seed": "node prisma/seed.js",
|
||||
"db:studio": "prisma studio"
|
||||
"db:studio": "prisma studio",
|
||||
"prepare": "husky"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/cloudflare": "^12.5.1",
|
||||
@@ -25,6 +26,11 @@
|
||||
"@astrojs/react": "^4.2.5",
|
||||
"@nanostores/react": "^1.0.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-dom": "^19.1.2",
|
||||
"astro": "^5.7.5",
|
||||
@@ -41,6 +47,7 @@
|
||||
"@types/supertest": "^6.0.3",
|
||||
"@vitejs/plugin-react": "^4.4.1",
|
||||
"@vitest/coverage-v8": "^3.1.3",
|
||||
"husky": "^9.1.7",
|
||||
"jsdom": "^26.1.0",
|
||||
"prisma": "^6.7.0",
|
||||
"supertest": "^7.1.0",
|
||||
|
||||
Reference in New Issue
Block a user