checks - Replace npm commands with bun/bunx in scripts, docs, and CI - Add enhanced pre-commit checks with parallel execution - Document pre-commit hook behavior in PRE_COMMIT_HOOKS.md - Update .gitignore/.dockerignore for bun-debug.log - Refine ESLint config for bun and Prettier integration - Add scripts/type-check-staged.sh for fast staged type checks - Improve developer workflow and code quality automation
134 lines
4.9 KiB
Bash
Executable File
134 lines
4.9 KiB
Bash
Executable File
# Run lint-staged for file-specific checks
|
|
bunx lint-staged
|
|
|
|
# Run type checking (doesn't need file filtering)
|
|
bun run type-check
|
|
|
|
# Check for large files (similar to pre-commit check-added-large-files)
|
|
git diff --cached --name-only | while IFS= read -r file; do
|
|
if [ -f "$file" ]; then
|
|
size=$(stat -c%s "$file" 2>/dev/null || stat -f%z "$file" 2>/dev/null || echo 0)
|
|
if [ "$size" -gt 500000 ]; then # 500KB limit
|
|
echo "Error: Large file detected: $file ($(echo $size | awk '{print int($1/1024)}')KB)"
|
|
echo "Consider using Git LFS for large files."
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Check for merge conflict markers
|
|
if git diff --cached | grep -E "^[<>=]{7}" >/dev/null; then
|
|
echo "Error: Merge conflict markers detected"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for private keys (basic check)
|
|
if git diff --cached --name-only | xargs grep -l "BEGIN.*PRIVATE KEY" 2>/dev/null; then
|
|
echo "Error: Private key detected in staged files"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ Pre-commit checks passed!"
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}Setting up NodeJS-native pre-commit hooks and code formatters...${NC}"
|
|
|
|
# Check if we're in a git repository
|
|
if [ ! -d ".git" ]; then
|
|
echo -e "${RED}Error: Not a git repository. Please run this script from the project root.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Install dependencies
|
|
echo -e "${YELLOW}Installing dependencies...${NC}"
|
|
if command -v bun &> /dev/null; then
|
|
bun install
|
|
elif command -v npm &> /dev/null; then
|
|
npm install
|
|
else
|
|
echo -e "${RED}Error: Neither bun nor npm found. Please install one of them first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Initialize Husky (NodeJS-native git hooks)
|
|
echo -e "${YELLOW}Setting up Husky git hooks...${NC}"
|
|
if command -v bun &> /dev/null; then
|
|
bunx husky init
|
|
elif command -v npm &> /dev/null; then
|
|
npx husky init
|
|
fi
|
|
|
|
# Make pre-commit hook executable
|
|
chmod +x .husky/pre-commit
|
|
|
|
# Run initial formatting
|
|
echo -e "${YELLOW}Running initial code formatting...${NC}"
|
|
if command -v bun &> /dev/null; then
|
|
bun run format
|
|
elif command -v npm &> /dev/null; then
|
|
bun run format
|
|
fi
|
|
|
|
# Run initial linting
|
|
echo -e "${YELLOW}Running initial linting...${NC}"
|
|
if command -v bun &> /dev/null; then
|
|
bun run lint:fix
|
|
elif command -v npm &> /dev/null; then
|
|
bun run lint:fix
|
|
fi
|
|
|
|
# Run initial markdown linting
|
|
echo -e "${YELLOW}Running initial markdown linting...${NC}"
|
|
if command -v bun &> /dev/null; then
|
|
bun run lint:markdown:fix || echo "Markdown linting completed with warnings"
|
|
elif command -v npm &> /dev/null; then
|
|
bun run lint:markdown:fix || echo "Markdown linting completed with warnings"
|
|
fi
|
|
|
|
# Fix EditorConfig issues
|
|
echo -e "${YELLOW}Fixing EditorConfig issues...${NC}"
|
|
if command -v bun &> /dev/null; then
|
|
bun run fix:editorconfig || echo "EditorConfig fixes completed"
|
|
elif command -v npm &> /dev/null; then
|
|
bun run fix:editorconfig || echo "EditorConfig fixes completed"
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ NodeJS-native pre-commit hooks and code formatters have been set up successfully!${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}What was configured:${NC}"
|
|
echo " ✓ Husky git hooks (.husky/pre-commit)"
|
|
echo " ✓ Prettier code formatter (.prettierrc)"
|
|
echo " ✓ ESLint configuration (eslint.config.cjs)"
|
|
echo " ✓ EditorConfig (.editorconfig)"
|
|
echo " ✓ Markdownlint configuration (.markdownlint.json)"
|
|
echo " ✓ Secretlint configuration (.secretlintrc.json)"
|
|
echo " ✓ Lint-staged for efficient pre-commit formatting"
|
|
echo " ✓ Dockerfilelint for Docker file validation"
|
|
echo ""
|
|
echo -e "${YELLOW}Available commands:${NC}"
|
|
echo " • bun run format - Format all files with Prettier"
|
|
echo " • bun run lint - Run ESLint on TypeScript/JavaScript files"
|
|
echo " • bun run lint:fix - Run ESLint with auto-fix"
|
|
echo " • bun run lint:markdown - Check Markdown files"
|
|
echo " • bun run lint:markdown:fix - Fix Markdown files"
|
|
echo " • bun run lint:docker - Check Dockerfile"
|
|
echo " • bun run check:secrets - Check for secrets in files"
|
|
echo " • bun run check:editorconfig - Check EditorConfig compliance"
|
|
echo " • bun run fix:editorconfig - Fix EditorConfig issues"
|
|
echo " • bun run type-check - Run TypeScript type checking"
|
|
echo ""
|
|
echo -e "${YELLOW}What happens on commit:${NC}"
|
|
echo " 1. Lint-staged runs on changed files:"
|
|
echo " • ESLint auto-fix + Prettier formatting for JS/TS files"
|
|
echo " • Prettier formatting for JSON/YAML/MD/CSS files"
|
|
echo " • Markdownlint auto-fix for Markdown files"
|
|
echo " • Dockerfilelint for Dockerfile"
|
|
echo " • EditorConfig fixes for all files"
|
|
echo " 2. TypeScript type checking on entire project"
|
|
echo " 3. Large file detection (>500KB)"
|
|
echo " 4. Merge conflict marker detection"
|
|
echo " 5. Basic private key detection"
|
|
echo ""
|
|
echo -e "${GREEN}All commits will now be automatically checked and formatted! 🎉${NC}"
|
|
echo -e "${GREEN}This setup is 100% NodeJS-native - no Python dependencies required! 🚀${NC}"
|