concurrency:
group: publish
+ cancel-in-progress: true
on:
workflow_dispatch:
GITHUB_REPOSITORY: ${{ vars.GITHUB_REPOSITORY }}
- name: Publish changelog (Discord)
+ continue-on-error: true
run: Tools/actions_changelogs_since_last_run.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DISCORD_WEBHOOK_URL: ${{ secrets.CHANGELOG_DISCORD_WEBHOOK }}
- name: Publish changelog (RSS)
+ continue-on-error: true
run: Tools/actions_changelog_rss.py
env:
CHANGELOG_RSS_KEY: ${{ secrets.CHANGELOG_RSS_KEY }}
import requests
import yaml
+import time
DEBUG = False
DEBUG_CHANGELOG_FILE_OLD = Path("Resources/Changelog/Old.yml")
def send_discord_webhook(lines: list[str]):
content = "".join(lines)
body = get_discord_body(content)
-
- response = requests.post(DISCORD_WEBHOOK_URL, json=body)
- response.raise_for_status()
+ retry_attempt = 0
+
+ try:
+ response = requests.post(DISCORD_WEBHOOK_URL, json=body, timeout=10)
+ while response.status_code == 429:
+ retry_attempt += 1
+ if retry_attempt > 20:
+ print("Too many retries on a single request despite following retry_after header... giving up")
+ exit(1)
+ retry_after = response.json().get("retry_after", 5)
+ print(f"Rate limited, retrying after {retry_after} seconds")
+ time.sleep(retry_after)
+ response = requests.post(DISCORD_WEBHOOK_URL, json=body, timeout=10)
+ response.raise_for_status()
+ except requests.exceptions.RequestException as e:
+ print(f"Failed to send message: {e}")
+ exit(1)
def changelog_entries_to_message_lines(entries: Iterable[ChangelogEntry]) -> list[str]: