ci: dispatchable explorer verification for a deployment that already exists - #128
Conversation
…exists Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 47 minutes Limit details: You’ve used all 1 included review currently available under your plan. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
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. Comment |
|
Reviewed 0b3d8e4: ready. Read the diff. One new The header states the reason this exists, and it is the thing established empirically today: The CI: One residual, not blocking: the Note this pins |
Adds
Manual sol verify: aworkflow_dispatchthat submits the source of a registry that is already on chain to every supported explorer.Blocked by rainlanguage/rainix#312 — this is the caller; the reusable it pins at
@mainlands there first.Why this exists separately from the deploy
manual-sol-artifacts.yamlsubmits source only for what its own run broadcast, and the broadcast is idempotent by construction:LibRainDeploy.deployToNetworksskips any network that already has code at the expected address. So once a deploy has landed, re-dispatching it broadcasts nothing,--verifyhas nothing to submit, and the run is green having verified nothing — a false success, not a repair.That is the state this repo was in. Both registries broadcast to all five networks on 2026-08-15 and then died on the first explorer with
Invalid API Key (#err2): https://github.com/rainlanguage/rain.deploy/actions/runs/31874483065 and https://github.com/rainlanguage/rain.deploy/actions/runs/31874687768. base, base_sepolia, flare and polygon were never attempted at all.Confirmed the re-dispatch route is a dead end rather than assuming it:
script/Deploy.sol:Deployrun against all five networks now logs- Code already exists at expected address, skipping deploymenton every one and records no transactions.Shape
contractandaddressare dispatch inputs rather than asuitechoice with the values baked in, because the addresses and artifact paths already have exactly one home — the candidate declarations inRegistryDeploySuitesand the generated snapshots they read — and a second copy in a workflow is a pin that can go stale silently. The deploy prints the pair it wants on itsmanual verification command:line for every network, whether it deployed there or skipped it, so the values come from a run rather than from memory.networksdefaults toLibRainDeploy.supportedNetworks()in foundry's spelling. Foundry's chain names are not the[rpc_endpoints]aliases:base-sepoliais a chain name andbase_sepoliais rejected outright byforge verify-contract --chain, which is worth knowing because themanual verification command:line the deploy prints uses the alias and is therefore not directly runnable for that one network.It never broadcasts and never reads
DEPLOYMENT_KEY.QA
uses:/with:/secrets: inheritcall this file makes, over both registries and all five networks. Result:AddressRegistryandMigrationRegistryverified on arbiscan, basescan, sepolia.basescan, flare-explorer and polygonscan.suitechoice was tried first and rejected because it can only work by copying the deployed addresses into the workflow, giving this repo's most load-bearing constants a second home.https://flare-explorer.flare.network/api?module=contract&action=getsourcecode— and the--watchresponses quoted in the run are the explorer's own words.Invalid API Key; it is the repair path for any contract that is on chain and unverified, including a network added after a deploy, an explorer that was down, and a rate-limited submission.