This repository forwards GitHub Discussions announcements to the tensor4all community channels.
GitHub Discussions in the Announcements category are treated as the source of truth.
A GitHub Actions workflow polls for unsent announcements and forwards them to:
- Matrix
- Google Groups
- Bluesky (
tensor4all.bsky.social)
After all enabled deliveries succeed, the workflow updates state/sent-announcements.json.
- Create a post in GitHub Discussions under
Announcements. - GitHub Actions runs on schedule or via
workflow_dispatch. - Eligible unsent announcements are forwarded to downstream channels.
- The sent-state file is committed back to this repository.
scripts/announcements.py: polling, filtering, formatting, and delivery logic.github/workflows/forward-announcements.yml: scheduled/manual workflowstate/sent-announcements.json: sent-state tracked in gittests/test_announcements.py: regression tests for eligibility, formatting, and orchestration
MATRIX_HOMESERVER_URLMATRIX_ACCESS_TOKENMATRIX_ROOM_ID
GOOGLE_GROUPS_SMTP_HOSTGOOGLE_GROUPS_SMTP_PORTGOOGLE_GROUPS_SMTP_USERNAMEGOOGLE_GROUPS_SMTP_APP_PASSWORDGOOGLE_GROUPS_TO_ADDRESS
BLUESKY_IDENTIFIERBLUESKY_APP_PASSWORD
Optional:
BLUESKY_SERVICE_URL
Run the test suite:
python3 -m unittest discover -s tests -vRun the forwarder in dry-run mode:
python3 scripts/announcements.py --dry-runYou can also point the script at fixture data with GITHUB_DISCUSSIONS_FIXTURE=/path/to/discussions.json.
- Only posts in the
Announcementscategory are forwarded. - A post is marked as sent only after all enabled destinations succeed.
- If any enabled destination fails, the post remains pending and will be retried later.
- Downstream messages always include the original GitHub Discussions URL.
- Secret values must not be committed to the repository.
This project is licensed under the MIT License. See LICENSE.