Skip to content

tag-release: drop the deploy job; deploys stay manual - #282

Merged
thedavidmeister merged 1 commit into
mainfrom
tag-release-no-deploy
Jul 24, 2026
Merged

tag-release: drop the deploy job; deploys stay manual#282
thedavidmeister merged 1 commit into
mainfrom
tag-release-no-deploy

Conversation

@thedavidmeister

Copy link
Copy Markdown
Contributor

Follow-up to #280. Decouples the on-chain deploy from the tag publish.

Why

A deploy is flaky by nature — per-network, funds-dependent, and at the mercy of RPC archive/fork behaviour. A retry-prone operation like that must not gate a one-shot tag publish: a single transient RPC failure blocks the entire release.

This isn't hypothetical — it's what happened on the first real run. Cutting sol-v0.1.6 on rain.factory.deploy failed in the folded-in deploy job:

VM::createSelectFork("arbitrum") → HTTP 400
{"error":{"message":"Unknown state. First available state is 1","code":27}}

The deploy forked Arbitrum against a load-balanced RPC and got routed to a backend without the state — and took the whole release down with it, even though nothing was wrong with the code or the publish. (The fork tests passed on the same endpoint minutes earlier; load-balanced routing is nondeterministic.)

The change

The deploy goes back to being the repo's own human-driven rainix-manual-sol-artifacts dispatch, run before tagging. This workflow no longer broadcasts — it attests:

  • guardrelease (the deploy job is gone; release now needs: guard).
  • The verify step (the repo's fork suite) checks prod exists at the freshly regenerated pins. That is the confirmation the manual deploy landed. If the pins don't resolve on-chain, verify fails and nothing publishes.
  • A transient fork/RPC failure in verify just fails the release — retry the tag. It's a read-only check, not a broadcast, so it ships nothing and can't leave a partial deploy.

Removes the deploy job, the deploy-suites/deploy-script/deploy-verify inputs, and the deploy-only secrets (PRIVATE_KEY, EXPLORER_VERIFICATION_KEY, CI_DEPLOY_* etherscan keys). The fork-RPC secrets stay — verify still forks.

Consumer follow-up

rain.factory.deploy's package-release.yaml passes deploy-suites, which this removes — a companion one-line edit drops that input. (Separate push; that repo's next release tag uses the manual-deploy-then-tag flow.)

Validation

  • YAML valid; jobs are guardrelease (needs: guard); no deploy job, no deploy inputs/secrets; fork-RPC secrets retained.
  • rainix pre-commit clean (yamlfmt).

The deploy/library split principle is unchanged — this only moves the deploy half of a deploy repo's release out of the one-shot and back to the human, where a flaky broadcast belongs.

🤖 Generated with Claude Code

A deploy is flaky by nature — per-network, funds-dependent, at the mercy of RPC
archive/fork behaviour — and a retry-prone operation must not gate a one-shot tag
publish, where a single transient RPC failure blocks the whole release. Observed
live: the folded-in deploy failed on `createSelectFork` against a load-balanced
RPC ("Unknown state") and took the release down with it.

So the deploy goes back to the repo's own human-driven rainix-manual-sol-artifacts
dispatch, run before tagging. This workflow no longer broadcasts; it attests: the
`verify` step (the fork suite) checks prod exists at the freshly regenerated pins,
and a release whose pins don't resolve on-chain fails there and publishes nothing.
A transient verify failure is just a retry of the tag — it ships nothing.

Removes the `deploy` job, the deploy-suites/deploy-script/deploy-verify inputs, and
the deploy-only secrets (PRIVATE_KEY, EXPLORER_VERIFICATION_KEY, CI_DEPLOY_* etherscan
keys). `release` now `needs: guard` directly. The fork-RPC secrets stay for verify.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Jul 24, 2026
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@thedavidmeister, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f3512b89-f3b0-46f7-8642-f6a0988e4c63

📥 Commits

Reviewing files that changed from the base of the PR and between 06fa7b6 and 74a1114.

📒 Files selected for processing (1)
  • .github/workflows/rainix-tag-release.yaml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch tag-release-no-deploy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

Reviewed 74a1114: approve

CodeRabbit is rate-limited (its only comment here is the rate-limit notice, no review), so this is my own adversarial review, and the change is a pure deletion — lower risk than #280's additions.

Verified: the deploy job and its deploy-suites/deploy-script/deploy-verify inputs and deploy-only secrets (PRIVATE_KEY, EXPLORER_VERIFICATION_KEY, CI_DEPLOY_* etherscan) are fully removed; release now needs: guard directly; the fork-RPC secrets, SOLDEER_API_TOKEN, CACHIX_AUTH_TOKEN, PUBLISH_PRIVATE_KEY and CI_GIT_* are retained (verify + publish + commit-back still need them). No dangling reference to the removed job/inputs/secrets. YAML valid, yamlfmt clean, all rainix checks green.

The one red — rainix-sol-artifacts — is inherited: it fails identically on main (06fa7b6, 1086e28) with Connection refused … /test/fixture/, a rainix-CI fixture issue unrelated to this reusable-YAML change.

The companion caller edit (drop deploy-suites from rain.factory.deploy's package-release.yaml) lands immediately after this.

@thedavidmeister
thedavidmeister merged commit 8583c77 into main Jul 24, 2026
12 of 13 checks passed
thedavidmeister pushed a commit to rainlanguage/rain.factory.deploy that referenced this pull request Jul 24, 2026
rainix-tag-release no longer runs the deploy (rainlanguage/rainix#282) — the
deploy stays a manual rainix-manual-sol-artifacts dispatch run before tagging.
The tag now verifies prod exists + publishes + snapshots.
@github-actions

Copy link
Copy Markdown

@coderabbitai assess this PR size classification for the totality of the PR with the following criterias and report it in your comment:

S/M/L PR Classification Guidelines:

This guide helps classify merged pull requests by effort and complexity rather than just line count. The goal is to assess the difficulty and scope of changes after they have been completed.

Small (S)

Characteristics:

  • Simple bug fixes, typos, or minor refactoring
  • Single-purpose changes affecting 1-2 files
  • Documentation updates
  • Configuration tweaks
  • Changes that require minimal context to review

Review Effort: Would have taken 5-10 minutes

Examples:

  • Fix typo in variable name
  • Update README with new instructions
  • Adjust configuration values
  • Simple one-line bug fixes
  • Import statement cleanup

Medium (M)

Characteristics:

  • Feature additions or enhancements
  • Refactoring that touches multiple files but maintains existing behavior
  • Breaking changes with backward compatibility
  • Changes requiring some domain knowledge to review

Review Effort: Would have taken 15-30 minutes

Examples:

  • Add new feature or component
  • Refactor common utility functions
  • Update dependencies with minor breaking changes
  • Add new component with tests
  • Performance optimizations
  • More complex bug fixes

Large (L)

Characteristics:

  • Major feature implementations
  • Breaking changes or API redesigns
  • Complex refactoring across multiple modules
  • New architectural patterns or significant design changes
  • Changes requiring deep context and multiple review rounds

Review Effort: Would have taken 45+ minutes

Examples:

  • Complete new feature with frontend/backend changes
  • Protocol upgrades or breaking changes
  • Major architectural refactoring
  • Framework or technology upgrades

Additional Factors to Consider

When deciding between sizes, also consider:

  • Test coverage impact: More comprehensive test changes lean toward larger classification
  • Risk level: Changes to critical systems bump up a size category
  • Team familiarity: Novel patterns or technologies increase complexity

Notes:

  • the assessment must be for the totality of the PR, that means comparing the base branch to the last commit of the PR
  • the assessment output must be exactly one of: S, M or L (single-line comment) in format of: SIZE={S/M/L}
  • do not include any additional text, only the size classification
  • your assessment comment must not include tips or additional sections
  • do NOT tag me or anyone else on your comment

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