when: event: [push, pull_request] steps: check-branch: image: alpine/git commands: - BRANCH=$(git rev-parse --abbrev-ref HEAD) - | echo "Branch: $BRANCH" if [ "$BRANCH" = "main" ]; then echo "✓ Production branch (protected)" elif [ "$BRANCH" = "dev" ]; then echo "✓ Development branch (protected)" elif echo "$BRANCH" | grep -qE "^feature/"; then echo "✓ Feature branch" elif echo "$BRANCH" | grep -qE "^(fix|hotfix|release)/"; then echo "✓ Special branch" else echo "⚠️ Unusual branch name: $BRANCH" echo " Recommended: feature/, fix/" fi check-commit-message: image: alpine/git commands: - MSG=$(git log -1 --pretty=%s) - | echo "Last commit: $MSG" if echo "$MSG" | grep -qE "^(feat|fix|docs|style|refactor|test|chore): [a-z]"; then echo "✓ Commit message follows convention" else echo "❌ Invalid commit message format" echo " Expected: : " echo " Types: feat, fix, docs, style, refactor, test, chore" exit 1 fi check-cache-files: image: python:3.13 commands: - | CACHE_FILES=$(git diff --name-only HEAD~1 | grep -E "__pycache__|\.pyc$" || true) if [ -n "$CACHE_FILES" ]; then echo "❌ Cache files in commit:" echo "$CACHE_FILES" exit 1 fi - echo "✓ No cache files in commit"