@@ -2,10 +2,12 @@ Read and follow @AGENTS.md.
22
33# Merge / Publish / Deploy runbook
44
5- Contract change chain: edit source → ** deploy** the new bytecode to its new
6- CREATE2 address → ** merge** . Publishing to soldeer is a separate manual tag
7- release (below), never a side effect of merging. All of it is routine and
8- pre-authorized; don't stop to ask about address/codehash churn.
5+ Deploy repo: a source change regenerates ` src/generated/candidate/ ` and merges
6+ without deploying. Deploying and publishing happen together at a release
7+ (below). ` LibRaindexDeploy ` is the candidate. The start-block, ` networks.json `
8+ and ` subgraph.yaml ` tests read the released RaindexV6 from the newest entry of
9+ the generated ` LibRaindexV6Released ` . Address/codehash churn is routine; don't
10+ stop to ask about it.
911
1012## Merging a PR
1113
@@ -28,41 +30,29 @@ pre-authorized; don't stop to ask about address/codehash churn.
2830 workflow re-runs and history rewrites are hook-blocked — these are the allowed
2931 equivalents; don't spell the blocked forms out or you'll trip those hooks.)
3032
31- ## Deploying a contract (the bytecode cascade)
33+ ## Source changes
3234
33- Any source change to a CREATE2/zoltu-deployed contract moves its on-chain
34- address + codehash. Do the whole cascade without asking:
35+ Regenerate artifacts — run the ` rainix-copy-artifacts ` step sequence (see that
36+ workflow) in ` nix develop github:rainlanguage/rainix#sol-shell ` . Stage ALL
37+ changed artifacts or ` git-clean ` drifts red. Nothing is deployed.
3538
36- 1 . Regenerate artifacts — run the ` rainix-copy-artifacts ` step sequence (see
37- that workflow) in ` nix develop github:rainlanguage/rainix#sol-shell ` . Stage
38- ALL changed artifacts or ` git-clean ` drifts red.
39- 2 . Deploy each changed suite:
40- ` gh workflow run manual-sol-artifacts.yaml --ref <branch> -f suite=<x> ` . One
41- dispatch deploys all seven chains. ** Never run two deploys concurrently** —
42- they share one deployer EOA and race the nonce, leaving a partial deploy;
43- serialize dispatches. A ` completed/failure ` run still deployed if the log has
44- ` ONCHAIN EXECUTION COMPLETE & SUCCESSFUL ` — only etherscan ` --verify ` failed
45- (cosmetic).
46- 3 . If RaindexV6 moved, run ` script/build-start-blocks.sh ` — rewrites the
47- ` RAINDEX_START_BLOCK_* ` constants, ` subgraph/networks.json ` and
48- ` subgraph/subgraph.yaml ` (else ` testIsStartBlock* ` / ` testNetworksJson* ` /
49- ` testSubgraphYamlAddress ` red). Uses foundry ` rpc_endpoints ` env vars,
50- falling back to public archive RPCs.
51- 4 . ` testProdDeploy* ` fork tests stay red until the new addresses have code
52- on-chain; re-trigger PR CI with an empty commit after deploying.
53-
54- ## Publishing to soldeer (tag release)
39+ ## Releasing (deploy + publish)
5540
56- - Manual tag release via rainix ` rainix-tag-release.yaml@main `
57- (` package-release.yaml ` , ` sol-v* ` tags). Merges to main do NOT publish.
58- - To cut a release: deploy changed suites first, then one PR that runs
59- ` forge script ./script/Build.sol --sig 'cutRelease()' ` — freezing the
60- candidate pins as ` src/generated/<tag>/ ` — and bumps
61- ` foundry.toml [external.package].version ` to match. Merge, then push tag
62- ` sol-v<version> ` .
63- - The tag re-runs the fork suite and ` release-guard ` (version == tag, frozen dir
64- present and byte-identical to ` candidate/ ` , clean tree after regeneration, no
65- later tag frozen), then publishes ` raindex~<version> ` and cuts the GitHub
66- release.
67- - ` src/generated/<tag>/ ` snapshots are append-only — the
68- ` frozen-snapshots-append-only ` gate reds any PR that edits or deletes one.
41+ 1 . Deploy each changed suite:
42+ ` gh workflow run manual-sol-artifacts.yaml --ref main -f suite=<x> ` . One
43+ dispatch deploys all seven chains. ** Never run two deploys concurrently** —
44+ they share one deployer EOA and race the nonce; serialize dispatches. A
45+ ` completed/failure ` run still deployed if the log has
46+ ` ONCHAIN EXECUTION COMPLETE & SUCCESSFUL ` (only ` --verify ` failed).
47+ 2 . One PR: bump ` foundry.toml [external.package].version ` , run
48+ ` forge script ./script/Build.sol --sig 'cutRelease()' ` (freezes ` candidate/ `
49+ as ` src/generated/<tag>/ ` ), and if RaindexV6 moved run
50+ ` script/build-start-blocks.sh ` (` LibRaindexV6StartBlock ` , ` networks.json ` ,
51+ ` subgraph.yaml ` ).
52+ 3 . Merge, then push tag ` sol-v<version> ` . Via rainix ` rainix-tag-release.yaml `
53+ (` package-release.yaml ` ) it re-runs the fork suite and ` release-guard `
54+ (version == tag, frozen dir byte-identical to ` candidate/ ` , clean tree, no
55+ later tag frozen), then publishes ` raindex-deploy~<version> ` .
56+
57+ ` src/generated/<tag>/ ` snapshots are append-only — the
58+ ` frozen-snapshots-append-only ` gate reds any PR that edits or deletes one.
0 commit comments