Over the previous a number of months, we’ve made vital modifications to Zebra’s steady integration and testing infrastructure. For these new to the mission, Zebra is the Zcash Basis’s full-node implementation written in Rust, offering an unbiased, memory-safe, and consensus-compatible different to zcashd.
These enhancements make it simpler for anybody to fork the repository, take a look at their modifications, and contribute to the mission—with out counting on exterior providers or particular permissions.
Why These Adjustments Matter
Beforehand, contributing to Zebra meant coping with a number of roadblocks:
- Forked repositories couldn’t run most CI checks as a result of they trusted Firebase, exterior Docker registries, and different providers that contributors didn’t have entry to
- Take a look at builds have been sluggish and typically rebuilt unnecessarily
- Complicated configuration made it laborious to know which checks have been operating and why
- Exterior dependencies added prices and made the CI fragile
We’ve systematically addressed every of those points.
What We’ve Improved
We now have made 5 notable enhancements:
1. CI Now Works on Forks
The most important change: in case you fork Zebra, the CI simply works. We eliminated all dependencies on exterior providers that required particular entry:
- Documentation now deploys to GitHub Pages as a substitute of Firebase
- All workflows run on commonplace GitHub infrastructure
- Docker photographs construct immediately in GitHub Actions, now not requiring Google Cloud Platform or Docker Construct Cloud
- Eliminated 19 patch information and a couple of,900 strains of configuration complexity
We additionally made Zebra’s inner workflows simpler to determine by including a zfnd- prefix, so it’s clear which workflows are particular to the Zcash Basis’s infrastructure and which of them will work in your fork.
See our CI/CD structure documentation →
2. Sooner, Extra Dependable Assessments with Nextest
We migrated Zebra’s total take a look at suite to make use of cargo-nextesta contemporary take a look at runner that provides a number of benefits:
- Sooner execution: Assessments run in parallel with smarter scheduling
- Higher reliability: Correct timeout dealing with prevents false failures
- Clearer configuration: All 17 take a look at profiles are outlined in .config/nextest.toml as a substitute of scattered throughout shell scripts
- Easier workflows: One NEXTEST_PROFILE variable replaces dozens of surroundings flags
This alteration eradicated pointless rebuilds attributable to function flag mismatches and streamlined how we run several types of checks (full sync, RPC checks, lightwalletd integration, and so on.).
See our nextest profiles and take a look at classes →
3. Eliminated Exterior Construct Dependencies
We used to depend on exterior providers to construct Docker photographs as a result of the builds have been resource-intensive. This created two issues:
- Contributors couldn’t construct photographs of their forks
- It incurred in vital prices
Now, Docker photographs construct totally inside GitHub Actions utilizing commonplace infrastructure. We made the builder configurable, so in case you fork Zebra, your photographs will construct routinely with none particular setup.
The workflow additionally adapts to your surroundings—it makes use of commonplace GitHub runners in forks and bigger runners in the principle repository, so contributors aren’t blocked by runner dimension limitations.
Be taught extra about our Docker setup →
4. Streamlined Testing and Deployment
We simplified how checks are organized and run:
- Single unified workflow: As a substitute of constructing Docker photographs a number of instances throughout totally different workflows, we construct as soon as and reuse it for all checks.
- Constant naming: Standardized take a look at names throughout GitHub workflows, surroundings variables, and Rust code makes it simpler to hint failures and perceive what’s being examined.
- Simplified GCP integration: For checks that do run on Google Cloud Platform (in the principle repository), we eliminated the intermediate container layer and use direct occasion creation, which improves reliability and logging.
See our workflow group →5. Higher Configuration Administration
We changed the legacy configuration system with a contemporary layered strategy:
- Configure Zebra utilizing ZEBRA_ prefixed surroundings variables while not having a generated config file
- Simplified Docker entrypoint that doesn’t have to generate TOML information
- Clearer separation between defaults, elective TOML information, and surroundings overrides
This makes it simpler to check totally different configurations and reduces the complexity of the Docker entrypoint script.
See the configuration documentation →
What This Means for You
Whether or not you’re a contributor, a neighborhood member operating your individual Zebra node, or a corporation constructing on high of Zebra:
- Fork and take a look at freely: You’ll be able to fork Zebra and run the total CI suite in your individual repository
- Sooner suggestions: Assessments run sooner and extra reliably, so that you get faster suggestions on modifications
- Simpler debugging: Clearer take a look at names and higher logging make it less complicated to know what went mistaken when a take a look at fails
- Decrease boundaries to entry: New contributors don’t want to know complicated exterior dependencies or request entry to particular providers
What’s Subsequent
We’re not performed but. The enhancements we’ve made to date lay the groundwork for much more vital modifications coming quickly:
Smarter Take a look at Choice
We’re re-architecting how checks are organized and run so you possibly can select precisely what to check based mostly in your wants:
- Run by take a look at kind: Choose simply unit checks, integration checks, or stateful checks (checks that require a cached blockchain state)
- Run by high quality degree: Select between fast smoke checks and complete take a look at suites
- Run what issues: In case you’re engaged on RPC performance, run simply the RPC checks. Engaged on sync logic? Run solely sync-related checks.
This may make the event cycle sooner—you received’t want to attend for all the take a look at suite once you’re solely altering a selected part.
Regtest for Sooner, Extra Dependable Testing
We’re contemplating a shift to utilizing regtest (regression take a look at mode—an area testing surroundings the place blocks might be generated on demand) as a substitute of counting on mainnet or testnet for complicated integration checks:
- No sync wait instances: Assessments received’t want to attend for lengthy mainnet syncs to finish earlier than operating
- Predictable take a look at environments: Create customized blockchain states on demand slightly than relying on community state
- Sooner iteration: Run complicated community interactions with out the overhead of full blockchain synchronization
This alteration would make our stateful checks considerably sooner and extra dependable, particularly for testing complicated interactions between Zebra and the community.
Workflow Modernization
We’re persevering with to refactor our remaining specialised workflows, simplifying our infra-related deployment workflows
These modifications will observe the identical rules: cut back complexity, take away exterior dependencies the place doable, and make every little thing work seamlessly in forks.
Steady Enchancment
The work we’ve accomplished over the previous few months demonstrates our dedication to creating Zebra simpler to work with. We’ll proceed to determine bottlenecks, simplify workflows, and enhance the contributor expertise.
Get Began!
All of those enhancements are already dwell in the principle department. In case you’ve been eager about contributing to Zebra, or in case you beforehand had bother operating checks in your fork, now is a superb time to offer it one other strive.
To get began:
Questions or suggestions? We’d love to listen to about your expertise with the brand new CI setup. Tell us in Discord or open a problem within the Zebra repository.
The Zcash Basis is dedicated to transparency and openness with the Zcash neighborhood. We’ll proceed sharing updates on our engineering work and welcome your suggestions and contributions.

