Skip to content

Conversation

@AbirAbbas
Copy link
Contributor

Summary

Implements automatic staging releases and manual production releases as per the staging release strategy plan.

Changes

  • Automatic staging on push to main - Every merge to main that touches control-plane/, sdk/, VERSION, or the release workflow triggers a staging release
  • Manual production releases - Workflow dispatch defaults to production environment
  • Split publishing destinations:
    • Staging: TestPyPI, npm @next, Docker staging-X.Y.Z-rc.N
    • Production: PyPI, npm @latest, Docker vX.Y.Z + latest
  • New install-staging.sh - Installs to ~/.agentfield-staging/bin with af-staging symlink
  • Updated RELEASE.md - Complete documentation for two-tier release process

Version Flow

Current production: 0.1.18

Development cycle:
  -> PR merged to main    -> Auto: 0.1.19-rc.1  (TestPyPI, npm @next)
  -> Bug fix merged       -> Auto: 0.1.19-rc.2
  -> Manual trigger       -> Prod: 0.1.19       (PyPI, npm @latest)

Prerequisites

  • Add TEST_PYPI_API_TOKEN secret to GitHub repository settings

Test plan

  • Merge this PR → verify staging release triggers automatically
  • Check GitHub release is marked as "Pre-release" with v0.1.19-rc.1
  • Verify TestPyPI publish (if token configured)
  • Verify npm @next tag: npm view @agentfield/sdk@next
  • Verify Docker tag: ghcr.io/agent-field/agentfield-control-plane:staging-0.1.19-rc.1
  • Test staging install: curl -fsSL https://raw.githubusercontent.com/Agent-Field/agentfield/main/scripts/install-staging.sh | bash

🤖 Generated with Claude Code

AbirAbbas and others added 2 commits December 4, 2025 13:06
Implement automatic staging releases and manual production releases:

- Staging: Automatic on push to main (TestPyPI, npm @next, staging-* Docker)
- Production: Manual workflow dispatch (PyPI, npm @latest, vX.Y.Z + latest Docker)

Changes:
- Add push trigger with path filters for automatic staging
- Replace release_channel with release_environment input
- Split PyPI publishing: TestPyPI (staging) vs PyPI (production)
- Split npm publishing: @next tag (staging) vs @latest (production)
- Conditional Docker tagging: staging-X.Y.Z vs vX.Y.Z + latest
- Add install-staging.sh for testing prerelease binaries
- Update RELEASE.md with two-tier documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…staging flag

Instead of separate install.sh and install-staging.sh scripts:
- Single install.sh handles both production and staging
- Use --staging flag or STAGING=1 env var for prerelease installs
- Eliminates code drift between scripts

Usage:
  Production: curl -fsSL .../install.sh | bash
  Staging:    curl -fsSL .../install.sh | bash -s -- --staging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@AbirAbbas AbirAbbas merged commit 3bd748d into main Dec 4, 2025
9 checks passed
@AbirAbbas AbirAbbas deleted the feat/staging-release-strategy branch December 4, 2025 18:32
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.

2 participants