botcoder254/Workers Release Promoter
Promote Cloudflare Workers from GitHub Releases with staged rollout, smoke tests, rollback, and release annotations.
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit May 1, 2026
- License
- MIT
Pinned Snippet
uses: botcoder254/cloudflare-promoter@0c55dcf6b3fcc8d9756f13f5043717f4e8f8593f # v1.0.5tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| cloudflare-api-token | Cloudflare API token with Workers deployment permissions. Can also be set via CLOUDFLARE_API_TOKEN env var. | no | — |
| cloudflare-account-id | Cloudflare account ID. Can also be set via CLOUDFLARE_ACCOUNT_ID env var. | no | — |
| worker-name | Name of the Cloudflare Worker to deploy. If omitted, resolved from wrangler config in working directory. | no | — |
| working-directory | Working directory for the Worker project (where wrangler config lives). Defaults to repository root. | no | . |
| environment | Wrangler environment to deploy to (e.g., "production", "staging"). | no | production |
| promotion-strategy | Promotion strategy: "immediate" (deploy and promote to 100%), "gradual" (incremental rollout), or "staging-only" (deploy and verify without promoting to production). | no | immediate |
| gradual-steps | Comma-separated rollout percentages for gradual deployment (e.g., "10,50,100"). Only used when promotion-strategy is "gradual". | no | 10,50,100 |
| gradual-step-wait-seconds | Seconds to wait between gradual rollout steps before verification. | no | 5 |
| post-step-smoke-tests | Whether to run smoke tests after each gradual step (true/false). | no | true |
| rollout-percentage | Deprecated alias for gradual-steps. Comma-separated rollout percentages. Use "100" for immediate full rollout. | no | 100 |
| smoke-test-url | URL to hit for post-deploy smoke test. If omitted, smoke testing is skipped. | no | — |
| smoke-test-paths | Comma-separated additional paths to check relative to smoke-test-url (e.g., "/health,/api/status"). | no | — |
| smoke-test-expected-status | Expected HTTP status code from smoke test URL. | no | 200 |
| smoke-test-expected-body-contains | String that the smoke test response body must contain. | no | — |
| smoke-test-timeout | Timeout in milliseconds for each smoke test request. | no | 10000 |
| smoke-test-retries | Number of retry attempts for each smoke check before failing. | no | 3 |
| smoke-test-retry-interval | Interval in milliseconds between smoke test retry attempts. | no | 2000 |
| smoke-test-deadline | Total deadline in milliseconds for all smoke tests to complete. | no | 120000 |
| smoke-test-command | Custom shell command to run as an additional smoke test. Runs after fetch-based checks. | no | — |
| smoke-test-required | If false, smoke test failures produce warnings but do not block promotion. | no | true |
| auto-rollback | If true (default), automatically rollback to the previous stable version on promotion failure. Set to false to disable automatic rollback. | no | true |
| dry-run | If true, validate inputs and print the promotion plan without deploying. | no | false |
| github-token | GitHub token for updating release notes and creating deployment statuses. Defaults to the automatic GITHUB_TOKEN. | no | ${{ github.token }} |
| release-note-mode | How to update the GitHub Release deployment section: "append" adds a new block every run, "replace-section" keeps a single idempotent section. | no | replace-section |
| deployment-section-heading | Markdown heading text used for the deployment section in the release body. | no | Workers Production Promotion |
Outputs
| name | description |
|---|---|
| release-tag | Git tag of the release that triggered this deployment. |
| release-id | GitHub Release ID. |
| release-url | HTML URL of the GitHub Release page. |
| workflow-run-url | URL of the GitHub Actions workflow run that executed this deployment. |
| environment | Target deployment environment. |
| promotion-strategy | Promotion strategy requested by inputs (immediate, gradual, staging-only). |
| worker-name | Cloudflare Worker name used for deployment. |
| deployment-id | Cloudflare deployment ID of the promoted version. |
| worker-version-id | Cloudflare Worker version ID that was deployed. |
| candidate-version-id | Candidate Worker version ID (alias of worker-version-id for release-note clarity). |
| version-id | Backward-compat alias for worker-version-id. |
| staging-url | Staging URL (workers.dev) of the deployed Worker. |
| production-url | Production URL (custom domain) of the deployed Worker, if known. |
| deployment-url | Best available URL of the deployed Worker. |
| previous-stable-version-id | Version ID recorded as stable before this deployment started. |
| smoke-test-status | Smoke test outcome: "passed", "failed", or "skipped". |
| smoke-test-passed | Whether smoke tests passed (true/false). Empty if skipped. |
| promotion-status | Granular promotion status: "success", "staging-only", "dry-run", "failed-no-rollback", "failed-rollback-succeeded", "failed-rollback-failed", or "failed-rollback-disabled". |
| promotion-result | Alias for promotion-status (backward compat). |
| rollback-triggered | Whether an automatic rollback was attempted (true/false). |
| rollback-version-id | Version ID that was rolled back to, if rollback occurred. |
| rollback-succeeded | Whether the rollback succeeded (true/false). Empty if no rollback attempted. |
| post-rollback-healthy | Whether post-rollback health check passed (true/false). Empty if not checked. |