Skip to content

Commit c6ec537

Browse files
committed
Add release testing documentation
Add docs/dev/release-testing.md with comprehensive guide for testing before minor releases, including automated test suites (CI, Jepsen, e2e verification runner), manual testing categories (upgrades, rolling upgrades, backward compatibility, rollback, cluster operations), and a template for creating release testing issues.
1 parent 406d282 commit c6ec537

File tree

2 files changed

+184
-0
lines changed

2 files changed

+184
-0
lines changed

docs/dev/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ This directory contains documentation relevant for Restate developers.
1414

1515
[release.md](release.md) contains explanation for how to release the runtime.
1616

17+
[release-testing.md](release-testing.md) contains the release testing checklist and process for testing before a minor release.
18+
1719
[bilrost-migration-guidelines](bilrost-migration-guidelines.md) guidelines on how to create bilrost messages and how to migrate current serde messages to bilrost without breaking compatibility

docs/dev/release-testing.md

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
# Release Testing Guide
2+
3+
This document describes the testing tasks that should be performed before releasing a new minor version of Restate.
4+
5+
## Overview
6+
7+
**Purpose:** Ensure quality, stability, and compatibility before releasing.
8+
9+
**When to start:** Only begin testing tasks once the release has been frozen, except for well-isolated features that can be tested independently.
10+
11+
**Documentation check:** When testing new features, always verify that the documentation is up-to-date and that you can navigate the feature easily. If not, update the documentation before release.
12+
13+
## Automated Test Suites
14+
15+
### CI Pipeline
16+
17+
The CI pipeline ([`.github/workflows/ci.yml`](../../.github/workflows/ci.yml)) runs automatically on PRs and pushes to main/release branches. It includes:
18+
19+
- **Build and unit tests** - Core functionality verification
20+
- **SDK integration tests** - Java, Python, Go, TypeScript, and Rust SDKs
21+
- **E2E tests**
22+
- **Jepsen tests** - Consistency and fault tolerance (runs on main branch)
23+
- **Long-running load tests** - Ensuring that the system does not degrade with time
24+
25+
Verify all CI checks and the external test suites are passing before release.
26+
27+
### External Test Suites
28+
29+
#### Jepsen Tests
30+
31+
Repository: https://github.com/restatedev/jepsen
32+
33+
Jepsen tests validate Restate's consistency guarantees under various failure scenarios (network partitions, node failures, etc.).
34+
The tests run against Restate's main branch.
35+
Monitor the [Jepsen Actions](https://github.com/restatedev/jepsen/actions) page for results.
36+
37+
#### E2E Verification Runner
38+
39+
Repository: https://github.com/restatedev/e2e-verification-runner
40+
41+
The verification runner performs extended validation of Restate functionality.
42+
This includes backward and forward compatibility checks.
43+
The tests run against `ghcr.io/restatedev/restate:main`.
44+
Check the [Actions page](https://github.com/restatedev/e2e-verification-runner/actions) for test results.
45+
46+
[!IMPORTANT]
47+
Make sure that the [`RESTATE_RELEASED_CONTAINER_IMAGE`](https://github.com/restatedev/e2e-verification-runner/blob/main/scripts/run-verification.sh#L8) is pointing to the latest released version of the previous minor release.
48+
49+
### Long-lived Load Tests
50+
51+
Follow the [instructions](https://github.com/restatedev/internal/blob/main/labs/lab-environment-long-lived-ec2/README.md) for how to update the Restate version for the long-lived load test.
52+
53+
- Update load test configurations for the new version
54+
- Run load tests and verify performance metrics
55+
- Compare results with previous release baselines
56+
57+
## Manual Testing Categories
58+
59+
The following categories might require manual testing before each minor release.
60+
61+
[!IMPORTANT]
62+
Automating manual tests, if possible, will save us time with every future release.
63+
So whenever you test something manually think very hard whether there is a way to automate it.
64+
A good place for adding new e2e tests is https://github.com/restatedev/e2e.
65+
66+
### 1. Upgrade and Migration Testing
67+
68+
Test upgrading from the previous minor version (N-1) to the new release:
69+
70+
- Upgrade single-node deployments
71+
- Upgrade cluster deployments
72+
- Verify storage format compatibility
73+
- Test that in-flight invocations complete correctly after upgrade
74+
75+
### 2. Rolling Upgrades (Mixed-Version Clusters)
76+
77+
Test rolling upgrade scenarios with mixed-version clusters:
78+
79+
- Start a cluster running the previous version (N-1)
80+
- Upgrade nodes one at a time to the new version
81+
- Verify cluster remains operational during the upgrade
82+
- Verify requests are handled correctly with mixed versions
83+
- Complete the upgrade and verify full functionality
84+
85+
### 3. Backward Compatibility Testing
86+
87+
Verify that older components work with the new server:
88+
89+
- Test older SDK versions against the new server
90+
- Verify protocol version negotiation works correctly
91+
- Ensure existing deployments continue to function
92+
- [Test restoring a Cloud control plane snapshot](https://github.com/restatedev/restate-cloud/blob/main/scripts/restate-upgrade-test/README.md)
93+
94+
### 4. Rollback Testing
95+
96+
Verify that rolling back to the previous version (N-1) is possible:
97+
98+
- Start a cluster with the new version
99+
- Put load on the cluster
100+
- Roll back to the previous version
101+
- Verify the cluster remains operational after rollback
102+
- Verify no data corruption or loss occurred
103+
104+
### 5. Cluster Operations
105+
106+
Test cluster management operations:
107+
108+
- Expanding from single node to multi-node cluster
109+
- Adding and removing nodes
110+
- Failover and recovery scenarios
111+
- Snapshot and restore operations
112+
113+
### 6. Feature-Specific Testing
114+
115+
Test new or significantly changed features for this release:
116+
117+
- UI functionality and new features
118+
- Experimental features being promoted to stable
119+
- New configuration options
120+
- CLI/restatectl changes
121+
122+
### 7. Cloud Deployment Testing (if applicable)
123+
124+
If deploying to Restate Cloud:
125+
126+
- Test the release candidate in a cloud environment
127+
- Verify UI functionality in cloud context
128+
- Run load and introspection queries
129+
130+
### 8. Documentation Review
131+
132+
Before release, verify documentation accuracy:
133+
134+
- New features are documented
135+
- Upgrade guides are accurate
136+
- Configuration changes are documented
137+
- Breaking changes are clearly communicated
138+
139+
## Creating a Release Testing Issue
140+
141+
### Process
142+
143+
1. Create an umbrella issue titled "Testing Restate X.Y"
144+
2. Link it to the release milestone
145+
3. Create sub-issues for each testing category above
146+
4. Assign owners to each sub-issue
147+
5. Track progress and ensure all items are completed before release
148+
149+
### Issue Template
150+
151+
Use the following template for the umbrella issue:
152+
153+
```markdown
154+
Umbrella issue for tracking release testing tasks for vX.Y.
155+
156+
**Important:** Only start testing tasks once the release has been frozen
157+
(except for well-isolated features).
158+
159+
When testing new features, always verify that documentation is up-to-date.
160+
161+
Whenever possible, try to automate manual tests to save us time for future releases.
162+
163+
### Sub-issues
164+
165+
<!-- Create and link sub-issues for each category -->
166+
167+
- [ ] Upgrade and migration testing
168+
- [ ] Rolling upgrades (mixed-version clusters)
169+
- [ ] Backward compatibility testing
170+
- [ ] Rollback testing
171+
- [ ] Cluster operations testing
172+
- [ ] Feature-specific testing (list features)
173+
- [ ] Cloud deployment testing
174+
- [ ] Documentation review
175+
- [ ] Jepsen tests passing
176+
- [ ] E2E verification runner passing
177+
- [ ] Load tests completed
178+
```
179+
180+
## See Also
181+
182+
- [Release Process](release.md) - How to perform the actual release

0 commit comments

Comments
 (0)