diff --git a/.github/workflows/check-duplicates.yml b/.github/workflows/check-duplicates.yml new file mode 100644 index 0000000..2a36b31 --- /dev/null +++ b/.github/workflows/check-duplicates.yml @@ -0,0 +1,22 @@ +name: Check Duplicates + +on: + pull_request: + branches: + - main + push: + branches: + - main + +jobs: + check-duplicates: + runs-on: ubuntu-latest + steps: + - name: Check Out Code + uses: actions/checkout@v2 + + - name: Run Check Duplicates Script + run: | + chmod +x scripts/check-dups.sh + ./scripts/check-dups.sh + working-directory: ${{ github.workspace }} diff --git a/scripts/check-dups.sh b/scripts/check-dups.sh index bab7ff9..6e50ca8 100755 --- a/scripts/check-dups.sh +++ b/scripts/check-dups.sh @@ -14,15 +14,23 @@ then readme="../README.md" fi -links=$(cat $readme | egrep "\- \[" | wc -l) +# Function to extract links from a section and check for duplicates +check_section() { + section=$1 + section_content=$(awk -v section="$section" '/^### / {p=0} {if(p)print} /^### '"$section"'/ {p=1}' "$readme") + duplicate_links=$(echo "$section_content" | grep -oP '\[.*?\]\(\K[^)]+' | sort | uniq -d) + if [[ -n $duplicate_links ]]; then + echo "[ ERR ] DUPLICATE LINKS FOUND" + echo "$duplicate_links" + exit 1 + fi +} -uniqlinks=$(cat $readme | egrep "\- \[" | uniq | wc -l) +# Get all unique section headings from the README file and handle spaces and slashes +sections=$(grep '^### ' "$readme" | sed 's/^### //' | sed 's/[\/&]/\\&/g') -if [[ $links -eq $uniqlinks ]]; -then - echo "[ OK! ] NO DUPLICATES FOUND." - echo "$links links in README." -else - echo "[ ERR ] DUPLICATES FOUND!" - cat $readme | egrep "\- \[" | uniq -c | egrep -iv "1 - [" -fi \ No newline at end of file +# Call the function for each section +for section in $sections; do + check_section "$section" +done +echo "[ OK! ] NO DUPLICATES FOUND." \ No newline at end of file