name: Update Laws from RSS on: schedule: # Täglich um 02:00 UTC (03:00 MEZ / 04:00 MESZ) - cron: '0 2 * * *' # Manueller Trigger für Tests workflow_dispatch: jobs: update: runs-on: ubuntu-latest steps: - name: Configure Git run: | git config --global user.name 'LawGit Bot' git config --global user.email 'bot@git.coded.law' git config --global init.defaultBranch main git config --global http.postBuffer 524288000 git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 0 - name: Checkout repository run: | git clone --depth=1 https://git.coded.law/${{ github.repository }}.git . git remote set-url origin https://git.coded.law/${{ github.repository }}.git git fetch --unshallow || true - name: Set up Python run: | python3 --version # Create virtual environment python3 -m venv venv source venv/bin/activate # Upgrade pip in venv pip install --upgrade pip # Make venv available for all steps echo 'source venv/bin/activate' >> $GITHUB_ENV - name: Install dependencies run: | source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt - name: Run update script run: | source venv/bin/activate # Erstelle laws Verzeichnis falls es nicht existiert mkdir -p laws python update_laws.py continue-on-error: true # Weiterlaufen auch bei Fehlern - name: Convert XML to Markdown if: success() || failure() # Immer ausführen, auch wenn Update fehlschlug run: | source venv/bin/activate # Erstelle laws Verzeichnis falls es nicht existiert mkdir -p laws # Prüfe ob laws Verzeichnis existiert und nicht leer ist if [ -d "laws" ] && [ "$(ls -A laws 2>/dev/null)" ]; then python xml_to_markdown.py --prod || echo "Konvertierung fehlgeschlagen oder keine Änderungen" else echo "Info: laws Verzeichnis ist leer oder existiert nicht, überspringe Konvertierung" fi continue-on-error: true - name: Check for changes id: check_changes run: | git add -A if git diff --staged --quiet; then echo "changed=false" >> $GITHUB_OUTPUT echo "Keine Änderungen gefunden" else echo "changed=true" >> $GITHUB_OUTPUT echo "Änderungen gefunden" git status fi - name: Commit and push changes if: steps.check_changes.outputs.changed == 'true' run: | git commit -m "Update laws from RSS - $(date +'%Y-%m-%d %H:%M:%S UTC')" || exit 0 # Push with timeout (10 minutes max) and progress output timeout 600 git push --progress origin main 2>&1 || echo "Push fehlgeschlagen oder Timeout" - name: Summary if: always() run: | echo "## Update-Zusammenfassung" echo "- Workflow ausgeführt: $(date)" if [ "${{ steps.check_changes.outputs.changed }}" == "true" ]; then echo "- OK: Änderungen wurden committed und auf main gepusht" else echo "- Info: Keine Änderungen gefunden" fi