import json import os import requests from typing import Optional RESPONSE_FILENAME = 'rc-response.json' METADATA_FILENAME = 'surfer.json' def get_current_version() -> Optional[str]: """Retrieve the current version from the metadata file.""" try: with open(METADATA_FILENAME) as f: metadata = json.load(f) return metadata['version']['candidate'] except (FileNotFoundError, json.JSONDecodeError) as e: print(f"Error reading current version: {e}") return None def get_rc_response() -> Optional[str]: """Get the release candidate response from the response file.""" try: with open(RESPONSE_FILENAME) as f: data = json.load(f) for tag_dict in data['tags']: tag = tag_dict['tag'] if (tag.startswith('FIREFOX') and tag.endswith('_BUILD1') and 'ESR' not in tag and 'b' not in tag): return tag.replace('FIREFOX_', '').replace('_BUILD1', '').replace('_', '.') except (FileNotFoundError, json.JSONDecodeError) as e: print(f"Error reading RC response: {e}") return None def get_pings() -> str: """Build a string of Discord user IDs for mentions.""" ping_ids = os.getenv('DISCORD_PING_IDS', '') return ' '.join(f"<@{ping.strip()}>" for ping in ping_ids.split(',') if ping.strip()) def send_webhook(rc: str) -> None: """Send a message to the Discord webhook.""" text = f"||{get_pings()}|| New Firefox RC version is available: **{rc}**" webhook_url = os.getenv('DISCORD_WEBHOOK_URL') if webhook_url: message = { "content": text, "username": "Firefox RC Checker", } try: response = requests.post(webhook_url, json=message) response.raise_for_status() # Raise an error for bad responses except requests.RequestException as e: print(f"Error sending webhook: {e}") else: print("Webhook URL not set.") if __name__ == "__main__": current_version = get_current_version() rc_response = get_rc_response() if rc_response and rc_response != current_version: send_webhook(rc_response)