diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..c8e8072 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,19 @@ +name: Validate + +on: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Validate Languages + run: ./scripts/validateLanguages.sh + + - name: Validate Qualities + run: ./scripts/validateQualities.sh + if: always() diff --git a/schema/1.languages.sql b/schema/1.languages.sql new file mode 100644 index 0000000..f262d82 --- /dev/null +++ b/schema/1.languages.sql @@ -0,0 +1,65 @@ +-- Languages +INSERT INTO languages (name) VALUES +('Unknown'), +('English'), +('French'), +('Spanish'), +('German'), +('Italian'), +('Danish'), +('Dutch'), +('Japanese'), +('Icelandic'), +('Chinese'), +('Russian'), +('Polish'), +('Vietnamese'), +('Swedish'), +('Norwegian'), +('Finnish'), +('Turkish'), +('Portuguese'), +('Flemish'), +('Greek'), +('Korean'), +('Hungarian'), +('Hebrew'), +('Lithuanian'), +('Czech'), +('Hindi'), +('Romanian'), +('Thai'), +('Bulgarian'), +('Portuguese (Brazil)'), +('Arabic'), +('Ukrainian'), +('Persian'), +('Bengali'), +('Slovak'), +('Latvian'), +('Spanish (Latino)'), +('Catalan'), +('Croatian'), +('Serbian'), +('Bosnian'), +('Estonian'), +('Tamil'), +('Indonesian'), +('Telugu'), +('Macedonian'), +('Slovenian'), +('Malayalam'), +('Kannada'), +('Albanian'), +('Afrikaans'), +('Marathi'), +('Tagalog'), +('Urdu'), +('Romansh'), +('Mongolian'), +('Georgian'), +('Azerbaijani'), +('Uzbek'), +('Malay'), +('Any'), +('Original'); \ No newline at end of file diff --git a/schema/2.qualities.sql b/schema/2.qualities.sql new file mode 100644 index 0000000..d2f586f --- /dev/null +++ b/schema/2.qualities.sql @@ -0,0 +1,33 @@ +-- Qualities +INSERT INTO qualities (name) VALUES +('Unknown'), +('WORKPRINT'), +('CAM'), +('TELESYNC'), +('TELECINE'), +('DVDSCR'), +('REGIONAL'), +('SDTV'), +('DVD'), +('DVD-R'), +('HDTV-480p'), +('HDTV-720p'), +('HDTV-1080p'), +('HDTV-2160p'), +('WEBDL-480p'), +('WEBDL-720p'), +('WEBDL-1080p'), +('WEBDL-2160p'), +('WEBRip-480p'), +('WEBRip-720p'), +('WEBRip-1080p'), +('WEBRip-2160p'), +('Bluray-480p'), +('Bluray-576p'), +('Bluray-720p'), +('Bluray-1080p'), +('Bluray-2160p'), +('Remux-1080p'), +('Remux-2160p'), +('BR-DISK'), +('Raw-HD'); \ No newline at end of file diff --git a/scripts/validateLanguage.sh b/scripts/validateLanguage.sh new file mode 100755 index 0000000..8490dd6 --- /dev/null +++ b/scripts/validateLanguage.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# validateLanguages.sh - Validates languages against Radarr and Sonarr source + +set -e + +RADARR_URL="https://raw.githubusercontent.com/Radarr/Radarr/develop/src/NzbDrone.Core/Languages/Language.cs" +SONARR_URL="https://raw.githubusercontent.com/Sonarr/Sonarr/develop/src/NzbDrone.Core/Languages/Language.cs" +LANG_FILE="schema/1.languages.sql" + +echo "Fetching Radarr languages..." +RADARR_LANGS=$(curl -s "$RADARR_URL" | grep "public static Language" | grep -oP '=> new Language\(-?\d+, "\K[^"]+' | sort -u) +echo "Found Radarr languages:" +echo "$RADARR_LANGS" +echo "" + +echo "Fetching Sonarr languages..." +SONARR_LANGS=$(curl -s "$SONARR_URL" | grep "public static Language" | grep -oP '=> new Language\(-?\d+, "\K[^"]+' | sort -u) +echo "Found Sonarr languages:" +echo "$SONARR_LANGS" +echo "" + +echo "Extracting languages from schema..." +SCHEMA_LANGS=$(grep -oP "(?<=\(')[^']+(?='\))" "$LANG_FILE" | sort -u) + +echo "" +echo "=== Radarr Validation ===" +RADARR_MISSING=$(comm -23 <(echo "$RADARR_LANGS") <(echo "$SCHEMA_LANGS")) +if [ -n "$RADARR_MISSING" ]; then + echo "✗ Missing Radarr languages:" + echo "$RADARR_MISSING" + exit 1 +else + echo "✓ All Radarr languages present ($(echo "$RADARR_LANGS" | wc -l))" +fi + +echo "" +echo "=== Sonarr Validation ===" +SONARR_MISSING=$(comm -23 <(echo "$SONARR_LANGS") <(echo "$SCHEMA_LANGS")) +if [ -n "$SONARR_MISSING" ]; then + echo "✗ Missing Sonarr languages:" + echo "$SONARR_MISSING" + exit 1 +else + echo "✓ All Sonarr languages present ($(echo "$SONARR_LANGS" | wc -l))" +fi + +echo "" +echo "Total unique languages in schema: $(echo "$SCHEMA_LANGS" | wc -l)" \ No newline at end of file diff --git a/scripts/validateQualities.sh b/scripts/validateQualities.sh new file mode 100755 index 0000000..929de04 --- /dev/null +++ b/scripts/validateQualities.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# validateQualities.sh - Validates qualities against Radarr and Sonarr source + +set -e + +RADARR_URL="https://raw.githubusercontent.com/Radarr/Radarr/develop/src/NzbDrone.Core/Qualities/Quality.cs" +SONARR_URL="https://raw.githubusercontent.com/Sonarr/Sonarr/develop/src/NzbDrone.Core/Qualities/Quality.cs" +QUAL_FILE="schema/2.qualities.sql" + +echo "Fetching Radarr qualities..." +RADARR_QUALS=$(curl -s "$RADARR_URL" | grep -oP 'public static Quality \w+ => new Quality\(\d+, "\K[^"]+' | sort -u) +echo "Found Radarr qualities:" +echo "$RADARR_QUALS" +echo "" + +echo "Fetching Sonarr qualities..." +# Sonarr has both => and getter patterns +SONARR_CONTENT=$(curl -s "$SONARR_URL") +SONARR_ARROW=$(echo "$SONARR_CONTENT" | grep -oP 'public static Quality \w+ => new Quality\(\d+, +"?\K[^",]+') +SONARR_GETTER=$(echo "$SONARR_CONTENT" | grep -oP 'return new Quality\(\d+, "\K[^"]+') +SONARR_QUALS=$(echo -e "$SONARR_ARROW\n$SONARR_GETTER" | grep -v '^$' | sort -u) + +echo "Found Sonarr qualities:" +echo "$SONARR_QUALS" +echo "" + +# Map Sonarr's remux naming to Radarr's +SONARR_QUALS=$(echo "$SONARR_QUALS" | sed 's/Bluray-1080p Remux/Remux-1080p/' | sed 's/Bluray-2160p Remux/Remux-2160p/' | sort -u) + +echo "Extracting qualities from schema..." +SCHEMA_QUALS=$(grep -oP "(?<=\(')[^']+(?='\))" "$QUAL_FILE" | sort -u) + +echo "" +echo "=== Radarr Validation ===" +RADARR_MISSING=$(comm -23 <(echo "$RADARR_QUALS") <(echo "$SCHEMA_QUALS")) +if [ -n "$RADARR_MISSING" ]; then + echo "✗ Missing Radarr qualities:" + echo "$RADARR_MISSING" + exit 1 +else + echo "✓ All Radarr qualities present ($(echo "$RADARR_QUALS" | wc -l))" +fi + +echo "" +echo "=== Sonarr Validation ===" +SONARR_MISSING=$(comm -23 <(echo "$SONARR_QUALS") <(echo "$SCHEMA_QUALS")) +if [ -n "$SONARR_MISSING" ]; then + echo "✗ Missing Sonarr qualities:" + echo "$SONARR_MISSING" + exit 1 +else + echo "✓ All Sonarr qualities present ($(echo "$SONARR_QUALS" | wc -l))" +fi + +echo "" +echo "Total unique qualities in schema: $(echo "$SCHEMA_QUALS" | wc -l)" \ No newline at end of file