Over the previous a number of months, we’ve made important adjustments to Zebra’s steady integration and testing infrastructure. For these new to the undertaking, Zebra is the Zcash Basis’s full-node implementation written in Rust, offering an unbiased, memory-safe, and consensus-compatible various to zcashd.
These enhancements make it simpler for anybody to fork the repository, take a look at their adjustments, and contribute to the undertaking—with out counting on exterior providers or particular permissions.
Why These Modifications 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
- Check builds had been sluggish and typically rebuilt unnecessarily
- Complicated configuration made it onerous to grasp which checks had 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 have now 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 an alternative of Firebase
- All workflows run on normal GitHub infrastructure
- Docker pictures construct immediately in GitHub Actions, not requiring Google Cloud Platform or Docker Construct Cloud
- Eliminated 19 patch information and a pair of,900 strains of configuration complexity
We additionally made Zebra’s inside workflows simpler to establish 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 complete take a look at suite to make use of cargo-nextest, a contemporary take a look at runner that gives 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 an alternative of scattered throughout shell scripts
- Easier workflows: One NEXTEST_PROFILE variable replaces dozens of surroundings flags
This modification eradicated pointless rebuilds brought on by characteristic flag mismatches and streamlined how we run various kinds of checks (full sync, RPC checks, lightwalletd integration, and so forth.).
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 pictures as a result of the builds had been resource-intensive. This created two issues:
- Contributors couldn’t construct pictures of their forks
- It incurred in important prices
Now, Docker pictures construct completely inside GitHub Actions utilizing normal infrastructure. We made the builder configurable, so in case you fork Zebra, your pictures will construct mechanically with none particular setup.
The workflow additionally adapts to your surroundings—it makes use of normal GitHub runners in forks and bigger runners in the principle repository, so contributors aren’t blocked by runner dimension limitations.
Study 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 pictures a number of occasions 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 without having a generated config file
- Simplified Docker entrypoint that doesn’t must 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 group member operating your individual Zebra node, or a corporation constructing on high of Zebra:
- Fork and take a look at freely: You possibly can fork Zebra and run the complete CI suite in your individual repository
- Sooner suggestions: Assessments run sooner and extra reliably, so that you get faster suggestions on adjustments
- Simpler debugging: Clearer take a look at names and higher logging make it less complicated to grasp what went mistaken when a take a look at fails
- Decrease obstacles to entry: New contributors don’t want to grasp complicated exterior dependencies or request entry to particular providers
What’s Subsequent
We’re not performed but. The enhancements we’ve made to this point lay the groundwork for much more important adjustments coming quickly:
Smarter Check 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 stage: Select between fast smoke checks and complete take a look at suites
- Run what issues: In the event you’re engaged on RPC performance, run simply the RPC checks. Engaged on sync logic? Run solely sync-related checks.
It will make the event cycle sooner—you gained’t want to attend for the complete take a look at suite once you’re solely altering a particular 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 an alternative of counting on mainnet or testnet for complicated integration checks:
- No sync wait occasions: Assessments gained’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 reasonably than relying on community state
- Sooner iteration: Run complicated community interactions with out the overhead of full blockchain synchronization
This modification 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 adjustments will observe the identical ideas: cut back complexity, take away exterior dependencies the place attainable, and make every 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 establish bottlenecks, simplify workflows, and enhance the contributor expertise.
Get Began!
All of those enhancements are already dwell in the principle department. In the event you’ve been excited about contributing to Zebra, or in case you beforehand had hassle operating checks in your fork, now is a superb time to present it one other attempt.
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 group. We’ll proceed sharing updates on our engineering work and welcome your suggestions and contributions.


