Add ignored domains via env statement
All checks were successful
Deploy DNS Configuration / deploy (push) Successful in 1m37s

This commit is contained in:
Kirill Kodanev 2025-09-19 18:17:25 +03:00
parent 8a0924c36c
commit 594320b601
3 changed files with 43 additions and 1 deletions

View file

@ -29,6 +29,8 @@ jobs:
# Имя контейнера Pi-hole # Имя контейнера Pi-hole
DOCKER_CONTAINER: pihole DOCKER_CONTAINER: pihole
IGNORE_PARTS: "doubleclick google yandex"
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v3

View file

@ -17,6 +17,7 @@ jobs:
API_URL: http://10.100.1.2:3000/domains?domain= API_URL: http://10.100.1.2:3000/domains?domain=
TARGET_DIR: /opt/appdata/pihole/etc/dnsmasq.d TARGET_DIR: /opt/appdata/pihole/etc/dnsmasq.d
DOCKER_CONTAINER: pihole DOCKER_CONTAINER: pihole
IGNORE_PARTS: "doubleclick google yandex"
steps: steps:
- name: Checkout repository - name: Checkout repository

View file

@ -12,6 +12,9 @@ RESOLVE_CONF="${RESOLVE_CONF:-/tmp/92-resolve-bbrkn.conf}"
API_URL="${CHROME_SERVER:-http://127.0.0.1:3000}/domains?domain=" API_URL="${CHROME_SERVER:-http://127.0.0.1:3000}/domains?domain="
DNS_SERVER="${DNS_SERVER:-8.8.8.8}" DNS_SERVER="${DNS_SERVER:-8.8.8.8}"
# Игнорируемые части доменов (разделитель — пробел)
IGNORE_PARTS="${IGNORE_PARTS:-}"
# Debug knobs # Debug knobs
DEBUG="${DEBUG:-0}" DEBUG="${DEBUG:-0}"
DEBUG_LOG="${DEBUG_LOG:-/tmp/generate-configs.debug.log}" DEBUG_LOG="${DEBUG_LOG:-/tmp/generate-configs.debug.log}"
@ -32,7 +35,7 @@ if ! command -v jq >/dev/null 2>&1; then err "jq is required"; exit 2; fi
if [ "$DEBUG" != "0" ]; then : > "$DEBUG_LOG"; dbg "Debugging enabled"; fi if [ "$DEBUG" != "0" ]; then : > "$DEBUG_LOG"; dbg "Debugging enabled"; fi
log "Starting generate-configs.sh" log "Starting generate-configs.sh"
dbg "ENV: INPUT_FILE=$INPUT_FILE IPSET_CONF=$IPSET_CONF RESOLVE_CONF=$RESOLVE_CONF API_URL=$API_URL DNS_SERVER=$DNS_SERVER DRY_RUN=$DRY_RUN" dbg "ENV: INPUT_FILE=$INPUT_FILE IPSET_CONF=$IPSET_CONF RESOLVE_CONF=$RESOLVE_CONF API_URL=$API_URL DNS_SERVER=$DNS_SERVER IGNORE_PARTS='$IGNORE_PARTS' DRY_RUN=$DRY_RUN"
if ! $DRY_RUN; then if ! $DRY_RUN; then
: > "$IPSET_CONF" : > "$IPSET_CONF"
@ -45,12 +48,16 @@ declare -A SOURCES
declare -A ERRORS declare -A ERRORS
declare -A VALID_SITES declare -A VALID_SITES
# для отчёта по игнорируемым доменам
declare -A IGNORED_DOMAINS
total_lines=0 total_lines=0
normalized_ok=0 normalized_ok=0
normalized_skip=0 normalized_skip=0
api_success=0 api_success=0
api_error=0 api_error=0
related_total=0 related_total=0
ignored_total=0
normalize_domain() { normalize_domain() {
local raw="$1" local raw="$1"
@ -64,6 +71,18 @@ normalize_domain() {
return 0 return 0
} }
should_ignore_domain() {
local dom="$1"
for part in $IGNORE_PARTS; do
if [[ "$dom" == *"$part"* ]]; then
dbg " -> IGNORE domain '$dom' (matched '$part')"
IGNORED_DOMAINS["$dom"]="$part"
return 0
fi
done
return 1
}
if [ ! -f "$INPUT_FILE" ]; then if [ ! -f "$INPUT_FILE" ]; then
err "Input file not found: $INPUT_FILE" err "Input file not found: $INPUT_FILE"
exit 3 exit 3
@ -87,6 +106,12 @@ while IFS= read -r line || [ -n "$line" ]; do
normalized_ok=$((normalized_ok+1)) normalized_ok=$((normalized_ok+1))
dbg " -> NORMALIZED: $dom_norm" dbg " -> NORMALIZED: $dom_norm"
# Игнорируем по подстрокам
if should_ignore_domain "$dom_norm"; then
ignored_total=$((ignored_total+1))
continue
fi
max_attempts=5 max_attempts=5
attempt=0 attempt=0
resp="" resp=""
@ -155,6 +180,12 @@ while IFS= read -r line || [ -n "$line" ]; do
for s in "${subs[@]}"; do for s in "${subs[@]}"; do
nd="$(normalize_domain "$s" || true)" nd="$(normalize_domain "$s" || true)"
[ -z "$nd" ] && continue [ -z "$nd" ] && continue
if should_ignore_domain "$nd"; then
ignored_total=$((ignored_total+1))
continue
fi
EXPANDED["$nd"]=1 EXPANDED["$nd"]=1
[ -z "${SOURCES[$nd]:-}" ] && SOURCES["$nd"]="related" [ -z "${SOURCES[$nd]:-}" ] && SOURCES["$nd"]="related"
related_total=$((related_total+1)) related_total=$((related_total+1))
@ -177,6 +208,7 @@ echo "Raw input lines: $raw_total_lines"
echo "Processed lines: $total_lines" echo "Processed lines: $total_lines"
echo "Normalized OK: $normalized_ok" echo "Normalized OK: $normalized_ok"
echo "Normalized skipped: $normalized_skip" echo "Normalized skipped: $normalized_skip"
echo "Ignored (by IGNORE_PARTS): $ignored_total"
echo echo
echo "API success (sites): $api_success" echo "API success (sites): $api_success"
echo "API error/ignored: $api_error" echo "API error/ignored: $api_error"
@ -185,6 +217,13 @@ echo "Final unique domains: ${#ALL_DOMAINS[@]}"
echo echo
echo "---- VALID BASE SITES ----" echo "---- VALID BASE SITES ----"
printf '%s\n' "${!VALID_SITES[@]}" | sort printf '%s\n' "${!VALID_SITES[@]}" | sort
echo
if [ "$ignored_total" -gt 0 ]; then
echo "---- IGNORED DOMAINS ----"
for d in $(printf '%s\n' "${!IGNORED_DOMAINS[@]}" | sort); do
printf '%s (matched: %s)\n' "$d" "${IGNORED_DOMAINS[$d]}"
done
fi
echo "===== END DEBUG REPORT =====" echo "===== END DEBUG REPORT ====="
if [ "$DEBUG" != "0" ]; then if [ "$DEBUG" != "0" ]; then