Reporting für die Stadt Zug #947
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Reporting für die Stadt Zug | |
| on: | |
| workflow_run: | |
| workflows: ["Get data from Overpass"] | |
| types: [completed] | |
| workflow_dispatch: | |
| jobs: | |
| diff-and-mail: | |
| if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write # notwendig, um den Merker zu committen | |
| steps: | |
| - name: Checkout latest main | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: main | |
| fetch-depth: 2 | |
| - name: Check if this HEAD was already processed | |
| run: | | |
| set -euo pipefail | |
| mkdir -p .reporting | |
| HEAD_SHA="$(git rev-parse HEAD)" | |
| echo "HEAD_SHA=$HEAD_SHA" >> $GITHUB_ENV | |
| FILE=".reporting/last_processed_sha_zg-city.txt" | |
| if [ -f "$FILE" ]; then | |
| LAST="$(cat "$FILE" | tr -d '[:space:]')" | |
| else | |
| LAST="" | |
| fi | |
| if [ "$HEAD_SHA" = "$LAST" ]; then | |
| echo "ALREADY_PROCESSED=true" >> $GITHUB_ENV | |
| else | |
| echo "ALREADY_PROCESSED=false" >> $GITHUB_ENV | |
| fi | |
| - name: Stop early if already processed | |
| if: env.ALREADY_PROCESSED == 'true' | |
| run: | | |
| echo "Already processed this commit; skipping mail." | |
| exit 0 | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| - name: Check if GeoJSON changed in latest commit | |
| run: | | |
| set -euo pipefail | |
| # falls kein Parent existiert (sehr unwahrscheinlich) | |
| if ! git rev-parse HEAD^ >/dev/null 2>&1; then | |
| echo "CHANGED=false" >> $GITHUB_ENV | |
| exit 0 | |
| fi | |
| if git diff --quiet HEAD^..HEAD -- data/json/defis_stadt_zug.geojson; then | |
| echo "CHANGED=false" >> $GITHUB_ENV | |
| else | |
| echo "CHANGED=true" >> $GITHUB_ENV | |
| fi | |
| - name: Create diff HTML | |
| if: env.CHANGED == 'true' | |
| run: | | |
| set -euo pipefail | |
| python scripts/geojson_diff.py \ | |
| <(git show HEAD^:data/json/defis_stadt_zug.geojson) \ | |
| data/json/defis_stadt_zug.geojson | |
| - name: Check diff.html exists | |
| run: | | |
| if [ -f diff.html ]; then | |
| echo "DIFF_EXISTS=true" >> $GITHUB_ENV | |
| else | |
| echo "DIFF_EXISTS=false" >> $GITHUB_ENV | |
| fi | |
| - name: Mail versenden | |
| if: env.DIFF_EXISTS == 'true' | |
| uses: dawidd6/action-send-mail@v3 | |
| with: | |
| server_address: asmtp.mail.hostpoint.ch | |
| server_port: 587 | |
| secure: false | |
| username: ${{ secrets.MAIL_USER }} | |
| password: ${{ secrets.MAIL_PASS }} | |
| subject: "Änderungen an Defis in der Stadt Zug" | |
| html_body: file://diff.html | |
| to: ${{ secrets.MAIL_RECIPIENT_ZG }} | |
| cc: ${{ secrets.MAIL_COPY }} | |
| from: defikarte.ch Reports | |
| - name: Update last processed SHA | |
| run: | | |
| set -euo pipefail | |
| mkdir -p .reporting | |
| FILE=".reporting/last_processed_sha_zg_city.txt" | |
| echo "$HEAD_SHA" > "$FILE" | |
| git config user.name "defikarte.ch Reporting Bot" | |
| git config user.email "chrigi@chnuessli.ch" | |
| git add .reporting/last_processed_sha_zg_city.txt | |
| git commit -m "update last processed sha for _zg_city" || exit 0 | |
| # robust push | |
| for i in 1 2 3; do | |
| git pull --rebase origin main && git push origin HEAD:main && break | |
| echo "Push failed, retry $i..." | |
| sleep 2 | |
| done | |