opentelemetry-announcements: Bootstrap, Checks, and Destination Config

The OpenTelemetry project now runs a dedicated announcements repo: opentelemetry-announcements, a small tool that publishes project news to Bluesky, Mastodon, LinkedIn, Slack, and Google Groups from versioned YAML files. All three commits this window landed within three days, so this week is effectively the project taking shape. The headline change is a config.yaml that defines named destinations per channel and lets any announcement skip them.

The bootstrap itself

The initial bootstrap (#4) added the whole skeleton: announcement YAML files under announcements/, JSON schemas in schema/announcement.schema.json, and GitHub Actions workflows for checking and publishing. The publishing and checking logic lives in Python scripts:

  • .github/scripts/check_announcements.py validates files against the schema, checks channel length limits, verifies referenced images exist, rejects publish_at times in the past, and warns on links that do not return a 200 status.
  • .github/scripts/publish_announcements.py sends the posts to the configured channels.
  • .github/scripts/test_publish_announcements.py covers the publish script with tests.

Announcements can carry text per channel plus follow_ups for scheduled reminders. The workflow files, .github/workflows/publish-announcements.yml and check workflow, run these on pushes and pull requests.

Destinations and skip rules

The destination configuration change (#6) is the most interesting piece for anyone writing announcements. Destinations now live in config.yaml under a targets key, validated by a new schema/config.schema.json. An announcement can skip a whole channel or skip one named destination with an entry like slack/opentelemetry. The checker rejects skips that name a destination unknown to config.yaml.

The config loader also guards against two footguns:

  • Duplicate targets within a channel produce an error.
  • For scheduled channels routed through Buffer, the same Buffer ID cannot be reused across channels, so a mislabeled ID cannot route a post to the wrong network.

Better test data and file naming

The pipeline test announcement change (#5) added a test announcement in announcements/2026/ and switched file names to a date prefixed pattern. A realistic example, examples/otel-in-practice.yaml, shows the expected format with an image, channel texts, and follow ups. Good examples matter more than usual here, because announcement authors will copy them rather than read the schema. The README received updates across all three commits, so it now documents this workflow as well.

What to watch

  • The skip syntax accepts either a bare channel name or channel/destination. Expect more error message polish in the checker as real announcements exercise the paths.
  • The checker is growing quickly. The diff for the destination commit reworked how posts, channels, and destinations flow through the validation. If you contribute an announcement, run the check workflow locally first.
  • With the bootstrap only days old, publishing targets and schemas may still shift. If you plan to automate announcements for a SIG or working group, follow the repo before depending on the format.

← All updates