#!/bin/bash # Get all files tracked by git git ls-files > /tmp/all_files.txt # Get files matched by CODEOWNERS while read -r line; do # Skip comments and empty lines [[ "$line" =~ ^#.*$ ]] && continue [[ -z "$line" ]] && continue # Extract the path pattern pattern=$(echo "$line" | awk '{print $1}') # Convert the pattern to a form git understands # Remove leading slash if present pattern=${pattern#/} # List files matching this pattern git ls-files "$pattern" 2>/dev/null >> /tmp/covered_files.txt done < .github/CODEOWNERS # Sort and get unique entries sort -u /tmp/covered_files.txt > /tmp/covered_files_unique.txt # Find files that are in all_files but not in covered_files comm -23 /tmp/all_files.txt /tmp/covered_files_unique.txt # Cleanup rm /tmp/all_files.txt /tmp/covered_files.txt /tmp/covered_files_unique.txt