Skip to content

chore: drop beta channel — trunk-based only (#450) - #454

Merged
olegbrok merged 1 commit into
mainfrom
chore/drop-beta-channel
May 11, 2026
Merged

chore: drop beta channel — trunk-based only (#450)#454
olegbrok merged 1 commit into
mainfrom
chore/drop-beta-channel

Conversation

@olegbrok

Copy link
Copy Markdown
Collaborator

Summary

Final cleanup PR for Phase 1 of the trunk-based migration (#450). With beta and main now converged and tag 26.05.070 cut, this PR removes the beta channel from the codebase.

Changes

src/pinky_daemon/api.py — channel cleanup

  • GET /admin/channel: always returns {channel: "stable", branch: "main"}. Legacy PINKYBOT_CHANNEL=beta env is logged + coerced to stable.
  • POST /admin/channel: only "stable" accepted; other values → 400.
  • POST /admin/update: rejects branch=beta (or any non-main value) with 400. Empty branch defaults to main. use_release_tags is now unconditionally True — production always pulls the latest release tag.

.github/workflows/release.yml — NEW manual release workflow

  • workflow_dispatch with version input (calver YY.MM.NNN, e.g. 26.05.071) + optional release notes.
  • Validates format + branch (must be main).
  • Creates annotated tag, auto-generates release notes from commits since prior tag, publishes GitHub Release.
  • Existing docker-publish.yml already triggers on 26.* tags → no change needed there for tag publishing.

CI workflows — drop beta branch filters

  • ci.yml, codeql.yml, docker-publish.yml: removed beta from branches: filters (no more beta branch to test).

CLAUDE.md — Deploy section updated

  • Single-channel doc + reference to the manual Release workflow.

Tests

TestTrunkBasedChannel class added to tests/test_admin_update.py:

  • branch=beta → 400
  • arbitrary branch → 400
  • empty branch → defaults to main (release tags)
  • PINKYBOT_CHANNEL=beta env → coerced to stable, still pulls main
  • GET /admin/channel always returns stable/main regardless of env
  • POST /admin/channel?channel=beta → 400

All 28 admin-update tests pass locally (pytest tests/test_admin_update.py). Lint clean.

After merge

  • Tag 26.05.070 is already on main (cut earlier from Release: beta → main (Phase 1 trunk-based migration + watchdog + federation) #453 merge).
  • Next release: trigger the Release workflow with version 26.05.071 (or whatever's next).
  • The beta branch on GitHub can be archived or deleted at Brad's leisure — nothing in CI references it anymore.
  • Production hosts running PINKYBOT_CHANNEL=stable (the only channel) keep working transparently. Any host that somehow has PINKYBOT_CHANNEL=beta will log a deprecation warning and behave as stable.

Test plan

  • CI green
  • Verify the Release workflow appears in the Actions tab post-merge (workflow_dispatch only)
  • First post-merge release dry-run: trigger Release workflow with a test version on a feature branch (will fail the "must run from main" guard — expected)

🤖 Opened by Barsik

Phase 1 finale of the trunk-based migration. The beta channel and branch
are retired; production now follows the latest GitHub Release tag on main.

api.py:
- /admin/channel: GET always returns {channel:stable, branch:main}; POST
  rejects anything except "stable" with 400. Legacy PINKYBOT_CHANNEL=beta
  env is logged + silently coerced to stable.
- /admin/update: rejects branch="beta" (or any non-main value) with 400.
  Empty branch defaults to main. Always resolves to latest release tag
  (use_release_tags is unconditionally True now).

.github/workflows/release.yml: NEW — workflow_dispatch with version input,
creates annotated tag + draft release. Validates calver YY.MM.NNN format
and that it runs from main. Auto-generates release notes from commits
since prior tag.

CI: ci.yml, codeql.yml, docker-publish.yml — drop "beta" from branch
filters (no more beta branch to test).

docker-publish.yml: tag pattern `26.*` already matches our calver tags,
so :latest publishing on releases needs no change.

CLAUDE.md: update Deploy section — single channel + release-workflow doc.

Tests: TestTrunkBasedChannel class covers rejection of beta/arbitrary
branches, default-to-main, legacy env coercion, and channel endpoints.
All 28 admin-update tests pass.

🤖 Opened by Barsik

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant