# TeCI
##  Tezos Ecosystem CI
<!-- Put the link to this slide here so people can follow
slide: https://hackmd.io/p/template-Talk-slide
-->
---
## Problem
- Every ~2.5 months, new protocol on mainnet.

- Ecosystem software must adapt to breaking changes and new features.
- Not always easy to find out about breaking changes and features.
---
## [Hyrum's law](https://www.hyrumslaw.com/)
```code
With a sufficient number of users of an API,
it does not matter what you promise in the contract:
all observable behaviors of your system
will be depended on by somebody.
```
`CHANGES.md` is insufficient!
---
## Expensive
- Finding incompatibilities after-the-fact is expensive.
- Earlier detection reduces stress and enables planning.
- How to detect incompatibilities earlier?
---
## Testing?
- Testing with different protocols is cumbersome
- Requires devops expertise to setup Tezos networks
- Why have each project duplicate this effort?
---
## Public Testnets?
- Public: interference may induce flakiness
- Runs a fixed protocol, shells unknown.
- Updates weekly (only)
---
## Solution: TeCI
- Automatically tests ecosystem software against:
- `latest` / `master` Octez shell
- Activated / proposed / developed protocol
- Optionally: generates test traffic
- Synthesizes and reports failures
---
## Contents of a TeCI pipeline
```code
for each shell in { latest, master }:
for each protocol in { active, proposed, developed }:
for each ecosystem test suite:
Launch shell with protocol, expose RPC endpoint URL.
(Generate traffic).
Run ecosystem test suite against RPC endpoint URL.
Gather results.
```
---
## When?
Currently, TeCI runs daily. Could be configured to run on demand or
link with other CI systems.
---
## Simple Docker-based solution
- An ecosystem test suite is a Docker image
- On execution, runs in isolation against ephemeral test networks
- Results through exit code (+ [JUnit XML](https://www.ibm.com/docs/en/developer-for-zos/14.1?topic=formats-junit-xml-format))
---
## Conclusion
- Ecosystem/Core developers can detect breaking changes earlier.
- Reduce stress for everyone.
- Smoother amendments for everyone.
- To participate: write integration tests and package as Docker images.
🔗 [https://gitlab.com/tezos/teci/](https://gitlab.com/tezos/teci/)
{"metaMigratedAt":"2023-06-17T21:25:31.302Z","metaMigratedFrom":"YAML","title":"TeCI: Tezos Ecosystem CI","breaks":true,"description":"Presentation of TeCI","contributors":"[{\"id\":\"9921985b-ef8c-4d3a-bdb4-5fda7d357001\",\"add\":5777,\"del\":3172}]"}