Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
84cb36b
fix(ci): Make `lychee` accept GitHub's rate limits (#10398)
upbqdn Mar 13, 2026
b6d6bae
fix(sync): Fix block propagation in regtest (#10403)
oxarbitrage Mar 17, 2026
aabb8b4
fix: Subtract Founders' Reward from block subsidy (#10338)
upbqdn Mar 19, 2026
5301d99
ci: Add workflow to trigger Z3 integration tests (#10372)
gustavovalverde Mar 20, 2026
413c2f6
Align integration test trigger with zcash/integration-tests. (#10399)
nuttycom Mar 20, 2026
60a7124
Network Sustainability Mechanism - 235 implementation (#10357)
judah-caruso Mar 23, 2026
385f713
chore: Release Zebra v4.3 (#10424)
upbqdn Mar 25, 2026
6184262
fix(chain): Cache parsed checkpoints (#10409)
upbqdn Mar 25, 2026
c1ad718
fix: Add `profiling` Cargo profile and use it in profiling docs (#10411)
upbqdn Mar 25, 2026
ad72e19
fix(ci): Migrate lints from `.cargo/config.toml` to `Cargo.toml` (#10…
upbqdn Mar 25, 2026
7279b76
chore: Update Mainnet checkpoints (#10418)
upbqdn Mar 25, 2026
9fa9bee
chore: Update Testnet checkpoints (#10420)
upbqdn Mar 25, 2026
2429f97
fix(consensus): Prevent automatic verification of V5 transactions bas…
arya2 Mar 25, 2026
8fc9ddf
fix(test): Check that transactions can be deserialized by librustzcas…
arya2 Mar 25, 2026
80dafad
fix: Add NU5 branch ID strategy and update V5 transaction generator (…
upbqdn Mar 25, 2026
92a4e55
release: Bump zebrad version (#10430)
arya2 Mar 25, 2026
e5531f6
fix: Update README to reference zebrad installation tag v4.3.0 (#10432)
upbqdn Mar 26, 2026
ebb7681
fix(chain): Fix arbitrary input data length range in proptests (#10431)
upbqdn Mar 26, 2026
29dfc83
docs: update changelogs with security advisories (#10433)
conradoplg Mar 28, 2026
5ab556b
build(deps): bump rustls-webpki from 0.103.9 to 0.103.10 (#10407)
dependabot[bot] Apr 6, 2026
a53c263
add: Dockerized mining setup (#10301)
upbqdn Apr 8, 2026
843330a
fix(ci): enforce conventional commit format on PR titles (#10456)
gustavovalverde Apr 9, 2026
29985bd
fix(ci): add advisory, license, and `cargo-vet` checks (#10455)
gustavovalverde Apr 9, 2026
3627152
docs: Update SECURITY.md with public encryption key (#10460)
mpguerra Apr 9, 2026
d89cd65
feat(ci): automate checkpoint updates and end-of-support height (#10459)
gustavovalverde Apr 10, 2026
a905fa1
feat(ci): Avoid compiling RocksDB (#9992)
upbqdn Apr 11, 2026
36e0559
fix(ci): rewrite checkpoint artifact upload to scp a pre-captured fil…
gustavovalverde Apr 14, 2026
adb8c00
fix(ci): re-run stateful tests on push while label is present (#10475)
gustavovalverde Apr 14, 2026
fe8630b
fix(ci): remove dead `gcr-cleaner` job from GCP cleanup workflow (#10…
gustavovalverde Apr 14, 2026
7e27fef
fix(ci): correct job-level permissions across workflows (#10471)
gustavovalverde Apr 14, 2026
4c8f0a4
fix(ci): Link RocksDB dynamically only in `tests` Docker stage (#10478)
upbqdn Apr 14, 2026
cc00fe3
docs: expose P2P port for inbound peer connections (#10464)
gustavovalverde Apr 14, 2026
c774199
refactor(ci): stable MIG per environment with branch-derived naming (…
gustavovalverde Apr 14, 2026
3f83bdb
refactor(ci): zonal MIG per (environment, branch, network, zone) (#10…
gustavovalverde Apr 14, 2026
58f010f
fix(ci): enable workflow_dispatch deploys to prod (#10487)
gustavovalverde Apr 15, 2026
dbb5684
fix(ci): harden pre-flight parse and idempotent health-check (#10488)
gustavovalverde Apr 15, 2026
03a5283
fix(ci): declare build job's dependency on set-matrix (#10489)
gustavovalverde Apr 15, 2026
75a1ff3
Merge commit from fork
upbqdn Apr 17, 2026
9f2ffcb
fix: CI fix after merge (#10493)
oxarbitrage Apr 17, 2026
1f605ec
fix(zebrad): apply combined security fixes (#10494)
arya2 Apr 17, 2026
aba329d
release: Zebra 4.3.1 (#10495)
arya2 Apr 17, 2026
83152f8
feat(zebrad): align Sentry CI metadata and environments (#10490)
gustavovalverde Apr 20, 2026
24417c3
feat(ci): add criterion benchmark suite and CI workflow (#10444)
oxarbitrage Apr 21, 2026
e209ad7
refactor(zebra-consensus): remove remaining groth16 abstractions aft…
oxarbitrage Apr 21, 2026
d715798
fix(ci): cargo-vet after release (#10504)
oxarbitrage Apr 22, 2026
59a7169
build(deps): bump the devops group across 1 directory with 26 updates…
dependabot[bot] Apr 23, 2026
c54c1be
feat(zebra-rpc): Add nTx field to getblock response (#10498)
daira Apr 23, 2026
f4618c1
fix(rpc): getrawtransaction confirmations bug (#10507)
oxarbitrage Apr 28, 2026
baa7ef1
docs: fix broken NetworkConstants link in custom-testnets (#10521)
alchemydc May 1, 2026
247decf
fix(zebra-rpc): fix 4 RPC security advisories (#10523)
upbqdn May 1, 2026
4aee839
Merge commit from fork
upbqdn May 1, 2026
1834baa
fix(script): Validate transparent input/output alignment before scrip…
arya2 May 1, 2026
5aec7f5
chore(deps): migrate librustzcash crates to 2026-04 release wave (#10…
schell May 1, 2026
fead158
fix(zebra-script): fix stale sighash issue (#10524)
upbqdn May 1, 2026
a638235
fix(chain): validate solution size before allocating (#10525)
upbqdn May 1, 2026
61c7105
fix(chain): validate coinbase data size before allocating (#10526)
upbqdn May 1, 2026
f4267ef
fix(chain): reject coinbase Sapling spends during deserialization (#1…
upbqdn May 1, 2026
85303ea
fix(network): Enforce 160-entry cap in `read_headers` (#10528)
upbqdn May 1, 2026
602c8b7
Merge commit from fork
arya2 May 1, 2026
a60ff83
test(state, rpc): handle coinbase Sapling spends in proptests broken …
upbqdn May 1, 2026
589d64b
chore: Release v4.4.0 (#10535)
upbqdn May 1, 2026
1ec1078
release: v4.4.1, reject v5 SIGHASH_SINGLE without a corresponding out…
conradoplg May 4, 2026
d4cd662
feat(zebrad): warn at startup if Linux TCP slow-start-after-idle is o…
evan-forbes May 7, 2026
a046716
refactor(zebra-chain): rename variables in relative_to_network for cl…
ValarDragon May 20, 2026
2342a20
ci(mergify): upgrade configuration to current format (#10450)
mergify[bot] May 21, 2026
b6e4f4c
fix(chain): cap upfront Vec reservation in zcash_deserialize_external…
dingledropper May 21, 2026
6b5692c
refactor(zebra-network): rename testnet_parameters in network config …
syszery May 21, 2026
c737f7f
build(deps): bump devops actions and fix advisory/deny-bans CI failur…
oxarbitrage May 22, 2026
b46207b
fix(network): guard most_recent_by_ip unwrap in address-book ban path…
zmanian May 23, 2026
8981a1b
fix(chain): cap block::Hash and CountedHeader preallocation at protoc…
dingledropper May 25, 2026
f2ec7e5
fix(chain): propagate transaction value-balance errors in chain_value…
zmanian May 25, 2026
f2abb65
feat: Support ZIP-213 (#10048)
upbqdn May 25, 2026
d5ccbbd
ci: disable link-check for now (#10631)
conradoplg May 25, 2026
00c8efc
test(rpc): reduce GBT snapshot mock timeout flake (#10634)
oxarbitrage May 26, 2026
f25cb9f
feat: Precompute coinbase tx and respond quickly on tip change (#10170)
upbqdn May 26, 2026
64f143d
fix(ci): grant `contents:read` on jobs that override workflow permiss…
andres-pcg May 28, 2026
cb2488a
fix(ci): solve Rust 1.97 beta clippy lints (#10644)
gustavovalverde May 28, 2026
1440b43
release: v4.5.0 (#10647)
conradoplg May 29, 2026
08a2089
fix(ci): advertise external IP on GCP-deployed nodes (#10655)
gustavovalverde May 29, 2026
76c440e
release: v4.5.1 (#10657)
conradoplg May 29, 2026
b9154d6
Temporarily disable Orchard actions
str4d May 31, 2026
0a4b3a1
wire config parsing for new option, adds tests
arya2 May 31, 2026
4434a6c
clears mempool before soft fork
arya2 Jun 1, 2026
af90402
Apply suggestions from code review
arya2 Jun 1, 2026
efca5e8
fix: add Network Orchard soft-fork accessors used by committed code
arya2 Jun 1, 2026
d5df83a
fix: set temporary Orchard-disabling soft-fork mainnet height to 3,36…
arya2 Jun 2, 2026
714c211
release: v4.5.3
arya2 Jun 2, 2026
8a45d21
release: v4.5.3 (#10665)
conradoplg Jun 2, 2026
dcfa063
fix: enforce canonical Orchard proof size from NU6.2
arya2 Jun 1, 2026
f601b69
feat: add NU6.2 network upgrade scaffolding
arya2 Jun 1, 2026
ed9ca0b
feat: wire NU6.2 fixed-circuit deps and Orchard verification
arya2 Jun 2, 2026
735abad
refactor: dedupe Orchard verifier construction
arya2 Jun 2, 2026
8265ec8
fix: bind ZFuture upgrade to fixed Orchard verifier explicitly
arya2 Jun 2, 2026
548672c
chore(nu6.2): address internal audit findings
arya2 Jun 2, 2026
af093c0
Update `orchard`
nuttycom Jun 2, 2026
95050e9
use version 170_150 for mainnet and testnet
conradoplg Jun 2, 2026
a1fdb49
Update to librustzcash/orchard release commits.
nuttycom Jun 2, 2026
9567907
set activation heights
conradoplg Jun 2, 2026
11c4bcf
bump versions and changelogs
conradoplg Jun 2, 2026
ba7d79e
update snapshots
conradoplg Jun 2, 2026
846c80d
fix proptests for Halo2Proofs
conradoplg Jun 2, 2026
1d983b5
fix more tests
conradoplg Jun 2, 2026
e6307b7
build(deps): de-vendor NU6.2 security-fix crates to crates.io releases
arya2 Jun 3, 2026
48381e7
docs: correct NU6.2 security advisory ID to GHSA-jfw5-j458-pfv6
arya2 Jun 3, 2026
41b332f
style: apply rustfmt to the v5.0.0 release branch
arya2 Jun 3, 2026
f1dd26a
fix(deps): restore minimal-delta Cargo.lock (v4.5.3 graph + crates.io…
arya2 Jun 3, 2026
6c68e40
chore(supply-chain): vet NU6.2 dependency bumps for cargo-vet
arya2 Jun 3, 2026
1e6519e
release: v5.0.0 (#10673)
mergify[bot] Jun 3, 2026
76a6bb0
fix(zebrad): fix mempool_cancel_downloads_after_network_upgrade
conradoplg Jun 3, 2026
d5ab886
fix(state): fix chain_tip_sender_is_updated test
conradoplg Jun 3, 2026
94c0936
fix(zebrad): fix mempool_reverifies_after_tip_change test
conradoplg Jun 4, 2026
6784f72
fix(zebrad): fix regtest_coinbase test
conradoplg Jun 4, 2026
40eddc7
bump LARGE_CHECKPOINT_TIMEOUT to try to make sync_large_checkpoints_m…
conradoplg Jun 5, 2026
8ead00c
fix(state,zebrad): fix tests (#10676)
mergify[bot] Jun 5, 2026
f5feadb
refactor: Remove deferred_pool_balance_change from ContextuallyVerifi…
judah-caruso Jun 5, 2026
616fa36
fix(rpc): avoid rebuilding mempool index per transaction in getrawmem…
syszery Jun 5, 2026
e889a95
fix(network,zebrad): cure genesis-to-tip sync stall (#5709) (#10679)
oxarbitrage Jun 8, 2026
0a2b87f
fix(state): correct dequeue_children by_height index handling (#10604)
syszery Jun 8, 2026
6928c95
feat(rpc): Extend `getpeerinfo` RPC (#10443)
upbqdn Jun 9, 2026
5b93eaf
fix(ci): unbreak main branch CI checks (#10700)
gustavovalverde Jun 9, 2026
854ed7a
fix(network): bump INITIAL_MIN_NETWORK_PROTOCOL_VERSION to Nu6_2 (#10…
oxarbitrage Jun 10, 2026
fc8e60e
fix(network): update peer set test mocks to Nu6_2 protocol version (#…
oxarbitrage Jun 10, 2026
383e3d6
fix(zebrad): retry block proposal on tip race in getblocktemplate tes…
oxarbitrage Jun 10, 2026
a71a1c5
fix(ci)!: stop required checks from passing before tests finish (#10637)
gustavovalverde Jun 10, 2026
94c297d
fix(ci): block Mergify queue on changes-requested and required-check …
andres-pcg Jun 10, 2026
80709f0
release: Zebra v5.1.0 (#10707)
oxarbitrage Jun 11, 2026
9f4439a
fix(zebrad): reduce end of support for NU7 network upgrade (#10710)
oxarbitrage Jun 11, 2026
5126cfa
release: Zebra v5.1.1 (#10711)
arya2 Jun 12, 2026
990dcb6
fix(ci): skip Trigger Integration Tests on fork PRs (#10712)
andres-pcg Jun 12, 2026
02f9648
fix(state): increase reorg window to 1000 blocks (#10650)
evan-forbes Jun 15, 2026
8767a91
fix: settle checkpoints past the 1000-block rollback window (#10719)
upbqdn Jun 16, 2026
965c146
feat(ci): allow on-demand dispatch of integration tests for fork PRs …
andres-pcg Jun 18, 2026
62e4a43
release: Zebra v5.2.0 (#10731)
oxarbitrage Jun 18, 2026
9ed02db
Merge branch 'zcash-v5.2.0' into sync-zcash-v5.2.0
dmidem Jul 28, 2026
5dea9a2
Fix compilation errors that appeared with tv_v6/nu7 flags disabled
dmidem Jul 28, 2026
b72bf5d
Correct Orchard fixture filtering in Halo2 era-split test to select p…
dmidem Jul 29, 2026
a22dda1
Fix typos in comments
dmidem Jul 30, 2026
a471df1
Fix verifier_for_routes_each_upgrade_to_the_correct_key test for NU7 …
dmidem Jul 30, 2026
e98522b
Temporarily add #[ignore] to check_orchard_zsa_workflow and a FIXME s…
dmidem Jul 31, 2026
33492d7
Fix benchmark error
dmidem Jul 31, 2026
4fefeca
Reuse OrchardZSA workflow coinbase in the V6 ENABLE_ZSA consensus test
dmidem Aug 4, 2026
954f5eb
Restore the canonical Orchard proof-size consensus check
dmidem Aug 4, 2026
db95c92
Update OrchardZSA workflow blocks
dmidem Aug 4, 2026
8630932
Re-enable the OrchardZSA workflow test
dmidem Aug 4, 2026
f6e9429
Document NU7 Orchard verifier selection
dmidem Aug 4, 2026
81587b1
Allow V6 transactions in NU7 property tests
dmidem Aug 4, 2026
3125c20
Add OrchardZSA assertions to the canonical proof-size test
dmidem Aug 4, 2026
2938cc3
Enable Orchard test dependencies in zebra-chain tests
dmidem Aug 4, 2026
fc0c4bc
Convert FIXME to comment: clarify that the Sapling ZcashSerialize imp…
dmidem Aug 4, 2026
0ddc3d4
Merge branch 'zsa1' into sync-zcash-v5.2.0
dmidem Aug 4, 2026
1793d31
Address remaining FIXME comments created during the last merge with u…
dmidem Aug 9, 2026
62b74e1
Try to fix CI failures
dmidem Aug 11, 2026
c34eed5
Don't retry unit tests in CI
dmidem Aug 11, 2026
d81ffd4
Try to fix another CI test failure
dmidem Aug 11, 2026
413517b
Try to fix another CI test failure (2)
dmidem Aug 11, 2026
84feaf0
Run the trusted_chain_sync_handles_forks_correctly test separately in…
dmidem Aug 11, 2026
5483842
CI: stabilise the basic checks test run
dmidem Aug 11, 2026
df16562
Try to optimize CI basic and nextest configuration changes
dmidem Aug 12, 2026
8d82530
Adopt upstream main's nextest CI settings instead of local ones
dmidem Aug 13, 2026
d0335e6
Count ZSA issuance logical actions in the ZIP-317 fee
dmidem Aug 13, 2026
599cd06
Serialize and retry the live Mainnet sync tests, as upstream main does
dmidem Aug 13, 2026
6ce2247
Skip the acceptance tests in basic CI
dmidem Aug 28, 2026
43e3171
ci: say why the acceptance tests are skipped in basic CI
dmidem Sep 4, 2026
df9c71b
Sync zcash v5.2.0 fixes (#165)
PaulLaux Sep 4, 2026
3ccfc37
ci: drop the QED-it acceptance-test block from the nextest config
dmidem Sep 4, 2026
c156a2a
Merge branch 'zsa1' into sync-zcash-v5.2.0
PaulLaux Sep 10, 2026
e030615
docs: use underscore emphasis in the EC2 README
PaulLaux Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
90 changes: 6 additions & 84 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,89 +1,10 @@
# Zebra cargo configuration

# Flags that apply to all Zebra crates and configurations
# TODO: Remove when ZSA is stable
[target.'cfg(all())']
rustflags = [
# Enable tx_v6 everywhere by default
"--cfg", 'feature="tx_v6"',

# TODO: Remove when ZSA is stable
"--cfg", "zcash_unstable=\"nu7\"",

# Zebra standard lints for Rust 1.65+

# High-risk code
"-Dunsafe_code",
"-Dnon_ascii_idents",

# Potential bugs
#
# If we deny these lints, we could be excluded from Crater builds:
# https://www.reddit.com/r/rust/comments/f5xpib/psa_denywarnings_is_actively_harmful/

# Compatibility
"-Wrust_2021_compatibility",
"-Wnonstandard_style",
"-Wfuture_incompatible",

# Async code
"-Wclippy::await_holding_lock",
"-Wclippy::await_holding_refcell_ref",

# Pointers
"-Wclippy::cast_ptr_alignment",
"-Wclippy::fn_to_numeric_cast_any",

# Integers
"-Wclippy::checked_conversions",
"-Wclippy::implicit_saturating_sub",
"-Wclippy::invalid_upcast_comparisons",
"-Wclippy::range_minus_one",
"-Wclippy::range_plus_one",
"-Wclippy::unnecessary_cast",

# Incomplete code
"-Wclippy::dbg_macro",
"-Wclippy::todo",

# Manual debugging output.
# Use tracing::trace!() or tracing::debug!() instead.
"-Wclippy::print_stdout",
"-Wclippy::print_stderr",
"-Wclippy::dbg_macro",

# Code styles we want to accept
"-Aclippy::try_err",

# Panics
"-Wclippy::fallible_impl_from",
"-Wclippy::unwrap_in_result",

# Documentation
"-Wmissing_docs",

# TODOs:
# Fix this lint eventually.
"-Aclippy::result_large_err",

# `cargo fix` might help do these fixes,
# or add a config.toml to sub-directories which should allow these lints,
# or try allowing the lint in the specific module (lib.rs doesn't seem to work in some cases)
#
# lint configs that don't work:
# - allowing these lints in lib.rs (command-line warn overrides allow in lib.rs?)
# - adding a [target.'cfg(not(test))'] rustflags config (it runs on test code anyway)

# fix code that triggers these lints,
# or disable the lint for that code (or for all test code)
#
#"-Wclippy::cast_lossless", # 30 non-test warnings, a few test warnings
#"-Wclippy::cast_possible_truncation", # 40 non-test warnings, 20 test warnings
#"-Wclippy::cast_possible_wrap", # 13 test warnings (fixed outside tests)
#"-Wclippy::cast_precision_loss", # 25 non-test warnings, 10 test warnings
#"-Wclippy::cast_sign_loss", # 6 non-test warnings, 15 test warnings

# fix hidden lifetime parameters
#"-Wrust_2018_idioms",
]

[build]
Expand All @@ -94,12 +15,13 @@ rustdocflags = [
# TODO: Remove when ZSA is stable
"--cfg", "zcash_unstable=\"nu7\"",

# The -A and -W settings must be the same as the `RUSTDOCFLAGS` in:
# https://github.com/ZcashFoundation/zebra/blob/main/.github/workflows/docs-deploy-firebase.yml#L68

# Links in public docs can point to private items.
"-Arustdoc::private_intra_doc_links",
]

[env]
RUST_BACKTRACE="1"
RUST_BACKTRACE = "1"

[profile.profiling]
inherits = "release"
debug = true
22 changes: 10 additions & 12 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@ filter = "not test(=trusted_chain_sync_handles_forks_correctly) and not test(=de
# TODO: We need a better test architecture to run all non-stateful
[profile.all-tests]
failure-output = "immediate"

# Keep going after a failure so one broken test does not hide the state of
# everything still queued, and log only retried and failed tests: "pass" buries
# real failures under ~1000 lines of output.
fail-fast = false
status-level = "retry"

# Hard cap for every test in this profile, so a test that hangs instead of
# failing cannot run until the workflow timeout and take the whole job down.
slow-timeout = { period = "5m", terminate-after = 4 }
default-filter = "not test(check_no_git_dependencies) and not test(=fully_synced_rpc_z_getsubtreesbyindex_snapshot_test) and not test(=lwd_rpc_test) and not test(=lwd_rpc_send_tx) and not test(=lwd_grpc_wallet) and not test(=lwd_integration) and not test(=lwd_sync_full) and not test(=lwd_sync_update) and not test(=lightwalletd_test_suite) and not test(=rpc_get_block_template) and not test(=rpc_submit_block) and not test(=get_peer_info) and not test(~generate_checkpoints_) and not test(=sync_update_mainnet) and not test(=activate_mempool_mainnet)"

# --- Individual Test Profiles ---
Expand Down Expand Up @@ -130,15 +140,3 @@ default-filter = 'package(zebrad) and test(=lightwalletd_test_suite)'
[profile.rpc-z-getsubtreesbyindex-snapshot]
slow-timeout = { period = "30m", terminate-after = 2 }
default-filter = 'package(zebrad) and test(=fully_synced_rpc_z_getsubtreesbyindex_snapshot_test)'

# --- QEDIT temporary retries ---

# TODO: Remove retries after investigating periodic random failures.
# Add more tests here only after confirming similar intermittent failures.
[[profile.default.overrides]]
filter = '''
test(=sync_large_checkpoints_mempool_mainnet)
or test(=get_peer_info)
or test(=activate_mempool_mainnet)
'''
retries = 3
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ This step can be skipped if there is a large pending dependency upgrade. (For ex
Here's how we make sure we got everything:

- [ ] Run `cargo update` on the latest `main` branch, and keep the output
- [ ] Until we bump the MSRV to 1.88 or higher, `home` must be downgraded manually: `cargo update home@0.5.12 --precise 0.5.11`
- [ ] Until we bump the workspace MSRV to 1.88 or higher, `home` must be downgraded manually: `cargo update home@0.5.12 --precise 0.5.11`
- [ ] If needed, [add duplicate dependency exceptions to deny.toml](https://github.com/ZcashFoundation/zebra/blob/main/book/src/dev/continuous-integration.md#fixing-duplicate-dependencies-in-check-denytoml-bans)
- [ ] If needed, remove resolved duplicate dependencies from `deny.toml`
- [ ] Open a separate PR with the changes
Expand Down
7 changes: 5 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE/release-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ This step can be skipped if there is a large pending dependency upgrade. (For ex
Here's how we make sure we got everything:

- [ ] Run `cargo update` on the latest `main` branch, and keep the output
- [ ] Until we bump the MSRV to 1.88 or higher, `home` must be downgraded manually: `cargo update home@0.5.12 --precise 0.5.11`
- [ ] Until we bump the workspace MSRV to 1.88 or higher, `home` must be downgraded manually: `cargo update home@0.5.12 --precise 0.5.11`
- [ ] If needed, [add duplicate dependency exceptions to deny.toml](https://github.com/ZcashFoundation/zebra/blob/main/book/src/dev/continuous-integration.md#fixing-duplicate-dependencies-in-check-denytoml-bans)
- [ ] If needed, remove resolved duplicate dependencies from `deny.toml`
- [ ] Open a separate PR with the changes
Expand Down Expand Up @@ -131,11 +131,14 @@ Check that the release will work:

```sh
cargo release version --verbose --execute --allow-branch '*' -p <crate> patch # [ major | minor ]
cargo release replace --verbose --execute --allow-branch '*' -p <crate>
# zebrad only
cargo release replace --verbose --execute --allow-branch '*' -p zebrad
```

- [ ] Commit and push the above version changes to the release branch.

- [ ] **Major (network upgrade) releases only:** Check that `INITIAL_MIN_NETWORK_PROTOCOL_VERSION` in [`zebra-network/src/constants.rs`](https://github.com/ZcashFoundation/zebra/blob/main/zebra-network/src/constants.rs) uses the latest activated network upgrade.

## Update End of Support

The end of support height is calculated from the current blockchain height:
Expand Down
17 changes: 12 additions & 5 deletions .github/actions/setup-zebra-build/action.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,27 @@
name: 'Setup Zebra Build Environment'
description: 'Install protoc as system library'
description: 'Install protoc and RocksDB as system libraries'
runs:
using: 'composite'
steps:
- name: Install protoc on Ubuntu
- name: Install protoc and librocksdb-dev on Ubuntu
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get -qq update
sudo apt-get -qq install -y --no-install-recommends protobuf-compiler
sudo apt-get -qq install -y --no-install-recommends protobuf-compiler librocksdb-dev
echo "ROCKSDB_LIB_DIR=/usr/lib/" >> $GITHUB_ENV

- name: Install protoc on macOS
- name: Install protoc and RocksDB on macOS
if: runner.os == 'macOS'
shell: bash
run: |
brew install protobuf
brew install protobuf rocksdb
# Set ROCKSDB_LIB_DIR for both Intel and Apple Silicon Macs
if [ -d "/opt/homebrew/lib" ]; then
echo "ROCKSDB_LIB_DIR=/opt/homebrew/lib" >> $GITHUB_ENV
else
echo "ROCKSDB_LIB_DIR=/usr/local/lib" >> $GITHUB_ENV
fi

- name: Install protoc on Windows
if: runner.os == 'Windows'
Expand Down
16 changes: 14 additions & 2 deletions .github/mergify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ defaults:
# and it does not create a draft PR if not needed
batch_max_wait_time: "10 minutes"
queue_conditions:
# Mergify automatically applies status check, approval, and conversation rules,
# which are the same as the GitHub main branch protection rules
# Mergify can auto-mirror classic branch protection, but not GitHub
# Rulesets. The conditions below restate the gates we actually rely on
# so PRs cannot be queued past failing required checks or unresolved
# change-requests.
# https://docs.mergify.com/conditions/#about-branch-protection
- base=main
# is not in draft
Expand All @@ -26,6 +28,14 @@ defaults:
- label!=do-not-merge
# has at least one approving reviewer
- "#approved-reviews-by >= 1"
# no reviewer has requested changes
- "#changes-requested-reviews-by = 0"
# The three required aggregator check runs must pass. After the
# `changes` + paths-filter refactor (#10637), each aggregator is
# produced by exactly one workflow, so the names below are stable.
- check-success=lint
- check-success=unit-tests
- check-success=test-crates


# Allows to define the rules that reign over our merge queues
Expand Down Expand Up @@ -65,3 +75,5 @@ priority_rules:
- 'label~=^P-(Optional|Low)'
allow_checks_interruption: true
priority: low
merge_protections_settings:
reporting_method: check-runs
76 changes: 76 additions & 0 deletions .github/path-filters.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Single source of truth for "what changed files trigger what workflow."
#
# Consumed by dorny/paths-filter in each required-check workflow's `changes` job.
# Each key maps 1:1 to a workflow basename; values are picomatch globs.
#
# Editing this file re-triggers every workflow on the next PR (the file is
# listed in every filter), which is the desired safety property when the
# triggering rules themselves change.

lint:
- "**/*.rs"
- "**/Cargo.toml"
- "**/Cargo.lock"
- ".cargo/config.toml"
- "**/clippy.toml"
- "deny.toml"
- "supply-chain/**"
- ".github/workflows/lint.yml"
- ".github/path-filters.yml"

unit_tests:
- "**/*.rs"
- "**/Cargo.toml"
- "**/Cargo.lock"
- ".config/nextest.toml"
- ".github/workflows/tests-unit.yml"
- ".github/path-filters.yml"

test_crates:
- "**/*.rs"
- "**/Cargo.toml"
- "**/Cargo.lock"
- ".cargo/config.toml"
- "**/clippy.toml"
- ".github/workflows/test-crates.yml"
- ".github/path-filters.yml"

test_docker:
- "**/*.rs"
- "**/Cargo.toml"
- "**/Cargo.lock"
- "docker/Dockerfile"
- "docker/entrypoint.sh"
- "docker/**/*.toml"
- "zebrad/tests/common/configs/**"
- ".github/workflows/test-docker.yml"
- ".github/path-filters.yml"

book:
- "book/**"
- "katex-header.html"
- "**/*.rs"
- "**/Cargo.toml"
- "**/Cargo.lock"
- ".cargo/config.toml"
- "**/clippy.toml"
- ".github/workflows/book.yml"
- ".github/path-filters.yml"

coverage:
- "**/*.rs"
- "**/Cargo.toml"
- "**/Cargo.lock"
- ".config/nextest.toml"
- "codecov.yml"
- ".github/workflows/coverage.yml"
- ".github/path-filters.yml"

docs_check:
- "**/*.md"
- "book/**"
- ".lychee.toml"
- ".codespellrc"
- ".trunk/configs/.markdownlint.yaml"
- ".github/workflows/docs-check.yml"
- ".github/path-filters.yml"
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@

### PR Checklist

- [ ] The PR name is suitable for the release notes.
- [ ] The PR title follows [conventional commits](https://www.conventionalcommits.org/) format: `type(scope): description`
- [ ] The PR follows the [contribution guidelines](https://github.com/ZcashFoundation/zebra/blob/main/CONTRIBUTING.md).
- [ ] This change was discussed in an issue or with the team beforehand.
- [ ] The solution is tested.
Expand Down
63 changes: 63 additions & 0 deletions .github/scripts/validate-checkpoints.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env bash
# validate-checkpoints.sh
#
# Validates checkpoint file format and structure in a single pass.
#
# Usage: .github/scripts/validate-checkpoints.sh <checkpoint-file>
#
# Exit codes:
# 0 - valid
# 1 - validation error (details printed to stderr)

set -euo pipefail

FILE="${1:?Usage: validate-checkpoints.sh <checkpoint-file>}"

if [ ! -f "$FILE" ]; then
echo "ERROR: File not found: $FILE" >&2
exit 1
fi

# Single-pass validation using awk
awk '
!/^[0-9]+ [0-9a-f]{64}$/ {
printf "ERROR: line %d: invalid format: %s\n", NR, $0 > "/dev/stderr"
errs++
next
}
NR == 1 && $1 != "0" {
printf "ERROR: file must start at height 0, found %s\n", $1 > "/dev/stderr"
errs++
}
NR > 1 && $1 <= prev_h {
printf "ERROR: line %d: height %d is not greater than previous %d\n", NR, $1, prev_h > "/dev/stderr"
errs++
}
NR > 1 && ($1 - prev_h) > 400 {
printf "ERROR: line %d: gap of %d blocks between %d and %d\n", NR, $1 - prev_h, prev_h, $1 > "/dev/stderr"
errs++
}
$1 in seen_h {
printf "ERROR: line %d: duplicate height %d\n", NR, $1 > "/dev/stderr"
errs++
}
$2 in seen_hash {
printf "ERROR: line %d: duplicate hash %s\n", NR, $2 > "/dev/stderr"
errs++
}
{
seen_h[$1] = 1
seen_hash[$2] = 1
prev_h = $1
last_h = $1
total++
}
END {
printf "Validated %d entries, last height: %d\n", total, last_h
if (errs > 0) {
printf "FAILED: %d validation errors\n", errs > "/dev/stderr"
exit 1
}
print "OK: All entries valid"
}
' "$FILE"
Loading
Loading