Atlas / scripts /utilities /validate_gitignore.py
findEthics
Complete codebase cleanup and project structure validation
f0b765c
Raw
History Blame Contribute Delete
2.63 kB
#!/usr/bin/env python3
"""
Validation script to ensure no sensitive files are tracked in git
and that .gitignore rules are working properly.
"""
import re
import subprocess
import sys
def run_command(cmd):
"""Run a shell command and return output."""
try:
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
return result.stdout.strip(), result.returncode
except Exception as e:
print(f"Error running command '{cmd}': {e}")
return "", 1
def check_sensitive_files():
"""Check if any sensitive files are currently tracked."""
print("Checking for sensitive files in git...")
# Patterns for sensitive files
sensitive_patterns = [
r'\.env$',
r'\.key$',
r'\.pem$',
r'api_keys',
r'credentials',
r'secrets',
r'\.log$',
r'__pycache__',
r'\.pyc$'
]
# Get all tracked files
tracked_files, _ = run_command("git ls-files")
issues = []
for file in tracked_files.split('\n'):
if file:
for pattern in sensitive_patterns:
if re.search(pattern, file):
issues.append(f"Sensitive file tracked: {file}")
return issues
def check_gitignore_effectiveness():
"""Check that .gitignore is properly ignoring expected files."""
print("Checking .gitignore effectiveness...")
# Check if cache directories would be ignored
test_cases = [
"__pycache__/test.pyc",
".env.local",
"temp.log",
".DS_Store",
".vscode/settings.json"
]
issues = []
for test_file in test_cases:
output, code = run_command(f"git check-ignore {test_file}")
if code != 0:
issues.append(f"File should be ignored but isn't: {test_file}")
return issues
def main():
"""Main validation function."""
print("=== Git Ignore Validation ===\n")
all_issues = []
# Check for sensitive files
sensitive_issues = check_sensitive_files()
all_issues.extend(sensitive_issues)
# Check gitignore effectiveness
gitignore_issues = check_gitignore_effectiveness()
all_issues.extend(gitignore_issues)
# Report results
if all_issues:
print("❌ Issues found:")
for issue in all_issues:
print(f" - {issue}")
sys.exit(1)
else:
print("✅ All checks passed!")
print(" - No sensitive files are tracked")
print(" - .gitignore rules are working properly")
sys.exit(0)
if __name__ == "__main__":
main()