# Developer Tooling
What we have so far?
## CI
### What We Have
- All tests are currently run
- Unit Test
- Integration tests
- End to end tests
- E2E is run on _all_ platforms (MacOS, Windows, Linux)
- No Test Covergae
- End to End/Integration testing looks like :
- Build JITX
- Install the build
- Run all integration/tests
- Currently sequential
- Parallelize these things
- smoke tests
- Other Tests split into two parts :
- Unit tests that can be compiled/run indepedently
- Integration tests that require compiling the "JITX plugin" that requires compiling a few targets besides the tests
- CI on PRs is 30-40 minutes
- Releases
- Tag release candidate on develop branch
- Triggers release infrastructure
- Build & Test
- Spit test back up to
## What we want
### Goals
- Fewer developer interrupts when things go right
- Better output/tools when tests fail
- Speed of everything
- Code coverage
- Quicker PR turnaround times
- Automated changelog
- Handle Breaking Changes
- One giant integration test that covers the entire public API
- If not in the integration test, not part of the API
### Examples
- Break out into fewer integration tests per PR
- More parallelism
- Run integration tests on merge
- Code coverage tool!
- Only run relevent tests
- Run test suites based on modifications
- Dependency tracking between tests
- Bring down CI times!
- Sequencing of PRs is not well defined
- Ideal world where hosting costs is negligible :
- There is a full set of integration, end to end, unit tests run on every commit. Takes hours.
- At any point of time, see where we're at. See some set of tests.
- In meantime do some unit tests
- Feel good about the PR, merge to staging branch.
- Bot that runs CI then on staging branch on merge of develop/staging branch. Auto merge to develop when passes.
- Way to visualize test results
- Feature flags are good
- Each time merge into develop, run CI on develop.
- Notifications :
- When your run fails, ping you on slack/email
- When nightly fails notify
- Better incremental compilation
- Stanza has incremental compilation
- Verify numbers, see how much we can improve
- Talk to Scott, Jonathon about this
- Minimize developer interruptions
- GTest for Stanza!
## Questions
- Do we want to have a staging branch
- Add things into staging branch w/o CI passing, or partial CI passes
- Only run integration tests on staging branches
- Perhaps start using feature branches
- Branch for each sprint?
- Merge into branches into
- Releases and feature flags?
- Release process to cut a release candidate
---