name: Deploy DNS Configuration on: push: branches: [ main ] paths: [ 'domains.txt' ] jobs: deploy: runs-on: self-hosted # Используем self-hosted runner на шлюзе env: # ==== Конфигурация проекта ==== INPUT_FILE: domains.txt # Временные конфиги (куда пишутся generate-configs.sh) IPSET_CONF: /tmp/91-ipset-bbrkn.conf RESOLVE_CONF: /tmp/92-resolve-bbrkn.conf # DNS-сервер для резолвинга DNS_SERVER: 8.8.8.8 # Адрес сервиса Chromium API_URL: http://10.100.1.2:3000/domains?domain= # Директория конфигов на шлюзе TARGET_DIR: /opt/appdata/pihole/etc/dnsmasq.d # Имя контейнера Pi-hole DOCKER_CONTAINER: pihole steps: - name: Checkout repository uses: actions/checkout@v3 - name: Validate domains file run: | if [ ! -f domains.txt ]; then echo "Error: domains.txt not found" exit 1 fi # Проверка синтаксиса доменов grep -v '^#' domains.txt | grep -v '^$' | while read domain; do if ! echo "$domain" | grep -qE '^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'; then echo "Error: Invalid domain format: $domain" exit 1 fi done - name: Prepare Makefile run: | chmod +x scripts/generate-configs.sh chmod +x scripts/deploy-to-gateway.sh - name: Run workflow (clean → all) run: | make clean make all - name: Upload configs as artifacts uses: actions/upload-artifact@v3 with: name: dnsmasq-configs path: | ${{ env.IPSET_CONF }} ${{ env.RESOLVE_CONF }}