Skip to content

Commit dd24e83

Browse files
authored
Update GEP process docs with more details (#4109)
This commit updates the GEP process documentation with some more information on what is required to move between GEP states. Also updates the GEP template to match the documented requirements for shifting levels. Signed-off-by: Nick Young <[email protected]>
1 parent 530c1ee commit dd24e83

File tree

4 files changed

+161
-57
lines changed

4 files changed

+161
-57
lines changed

geps/gep-696/index.md

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77

88
## TLDR
99

10+
[required_in]: # (Provisional status and above)
11+
1012
(1-2 sentence summary of the proposal)
1113

1214
## Goals
1315

16+
[required_in]: # (Provisional status and above)
17+
1418
(Primary goals of this proposal.)
1519

1620
## Longer Term Goals (optional)
@@ -19,10 +23,14 @@
1923

2024
## Non-Goals
2125

26+
[required_in]: # (Provisional status and above)
27+
2228
(What is out of scope for this proposal.)
2329

2430
## Introduction/Overview
2531

32+
[required_in]: # (Provisional status and above)
33+
2634
(Can link to external doc -- but we should bias towards copying
2735
the content into the GEP as online documents are easier to lose
2836
-- e.g. owner messes up the permissions, accidental deletion)
@@ -31,10 +39,15 @@ Write here "What" we want to do. What is the proposal aiming to do?
3139

3240
## Purpose (Why and Who)
3341

42+
[required_in]: # (Provisional status and above)
43+
3444
Write here "Why" we want to do it. What problems are being solved? What personas are
3545
the target of this proposal, and why will this proposal will make their lives better?
3646

3747
## API
48+
49+
[required_in]: # (Implementable status and above)
50+
3851
(... details, can point to PR with changes)
3952

4053
### Gateway for Ingress (North/South)
@@ -56,10 +69,14 @@ Example of a flow description:
5669

5770
## Conformance Details
5871

72+
[required_in]: # (Provisional status and above)
73+
5974
(from https://github.com/kubernetes-sigs/gateway-api/blob/main/geps/gep-2162/index.md#standardize-features-and-conformance-tests-names)
6075

6176
#### Feature Names
6277

78+
[required_in]: # (Experimental status and above)
79+
6380
(Does it require separate feature(s) for mesh? Please add them if necessary)
6481

6582
Every feature should:
@@ -71,7 +88,36 @@ Every feature should:
7188

7289
GEPs cannot move to Experimental without a Feature Name.
7390

74-
### Conformance tests
91+
### Conformance test scenarios
92+
93+
This section records the scenarios that Conformance tests will check.
94+
95+
It _does not_ need to include code, although code _may_ be used to illustrate the scenarios
96+
if required. Tables are also acceptable for describing complex interactions.
97+
98+
Scenarios _should_ be able to be summarized without code.
99+
100+
These scenario summaries can then be used to determine the names of the tests and their files.
101+
102+
#### Example test scenario 1, please remove: HTTPRoute Simple, Same Namespace
103+
104+
A HTTPRoute with a basic routing configuration, in the same namespace as its
105+
parent Gateway, should route traffic to the specified backend.
106+
107+
#### Example test scenario 2, please remove: HTTPRoute Path Rewrite
108+
109+
A HTTPRoute with a Path Rewrite filter should rewrite the path according to
110+
the specification, routing traffic to the backend.
111+
112+
* A Match of `/prefix/one` with a `ReplacePrefixMatch` of `/one` should route requests
113+
to `/prefix/one/two` to `/one/two` instead.
114+
* A Match of `/strip-prefix` with a `ReplacePrefixMatch` of `/` should route requests to
115+
`/strip-prefix/three` to `/three` instead.
116+
* A Match of `/full/one` with a `ReplaceFullPath` of `/one` should route requests to
117+
`/full/one/two` to `/one` instead.
118+
* ... and so on.
119+
120+
#### Conformance test file names
75121

76122
Conformance tests file names should try to follow the `pascal-case-name.go` format.
77123
For example for `HTTPRoutePortRedirect` - the test file would be `httproute-port-redirect.go`.
@@ -82,10 +128,21 @@ In any case, the conformance tests file names should be meaningful and easy to u
82128

83129
(Make sure to also include conformance tests that cover mesh)
84130

85-
When describing the new feature, write down some conformance test scenarios the feature should manage,
86-
to guarantee that future implementors understand what "Conformance" means and what will be tested.
87131

88-
At least _some_ tests should be added at each phase, starting with Provisional.
132+
## `Standard` Graduation Criteria
133+
134+
( This section outlines the criteria required for graduation to Standard. It MUST
135+
contain at least the items in the template, but more MAY be added if necessary. )
136+
137+
( Required for Experimental status and above)
138+
139+
* At least one Feature Name must be listed.
140+
* The `Conformance Details` must be filled out, with conformance test scenarios listed.
141+
* Conformance tests must be implemented that test all the listed test scenarios.
142+
* At least three (3) implementations must have submitted conformance reports that pass
143+
those conformance tests.
144+
* At least six months must have passed from when the GEP moved to `Experimental`.
145+
89146

90147
## Alternatives
91148

geps/overview.md

Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ This diagram shows the state diagram of the GEP process at a high level, but the
2121
flowchart TD
2222
D([Discuss with<br />the community]) --> C
2323
C([Issue Created]) -------> Memorandum
24-
C([Issue Created]) --> Provisional
25-
Provisional -->|If practical <br /> work needed| Prototyping
26-
Provisional -->|GEP Doc PR<br />done| Implementable
27-
Prototyping -->|GEP Doc PR<br />done| Implementable
28-
Implementable -->|Gateway API<br />work completed| Experimental
24+
C([Issue Created]) -->|GEP PR with Who/What/Why merged| Provisional
25+
Provisional -->|GEP Doc PR with _proposed_ API details merged| Prototyping
26+
Provisional -->|GEP Doc PR with agreed API details merged| Implementable
27+
Prototyping -->|GEP Doc PR with agreed API details merged| Implementable
28+
Implementable -->|API Changes implemented in Go types and YAML| Experimental
2929
Experimental -->|Supported in<br />multiple implementations<br />+ Conformance tests| Standard
3030
Standard -->|Entire change is GA or implemented| Completed
3131
@@ -111,22 +111,38 @@ Please default to GitHub discussions: they work a lot like GitHub issues which
111111
makes them easy to search.
112112

113113
### 2. Create an Issue
114+
114115
[Create a GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/new?assignees=&labels=kind%2Ffeature&template=enhancement.md) in the repo describing your change.
115116
At this point, you should copy the outcome of any other conversations or documents
116117
into this document.
117118

118-
### 3. Agree on the Goals
119+
### 3. `Provisional` - Agree on the Goals
120+
119121
Although it can be tempting to start writing out all the details of your
120122
proposal, it's important to first ensure we all agree on the goals.
121123

122124
For API GEPs, the first version of your GEP should aim for a "Provisional"
123125
status and leave out any implementation details, focusing primarily on
124-
"Goals" and "Non-Goals".
126+
"Goals" and "Non-Goals", and documenting "Who" the GEP is for, "What" the
127+
GEP will do, and "Why" it is needed. For this reason, the `Provisional`
128+
state is also sometimes called the "Who/What/Why" stage.
125129

126130
For Memorandum GEPs, the first version of your GEP will be the only one, as
127131
Memorandums have only a single stage - `Accepted`.
128132

129-
### 3. Document Implementation Details
133+
The `Provisional` state is different to other states (aside from `Memorandum`),
134+
in that iteration on it can occur outside of the usual Gateway API release process.
135+
To put this another way, until we have agreement on the "Who/What/Why",
136+
then the PR does not fall into the regular release process.
137+
138+
GEPs entering the `Provisional` phase need the following to have occurred:
139+
140+
* A GEP PR using the template in GEP-696 merged into the `geps/` directory,
141+
describing the "Who", "What", and "Why" of the proposal, along with Goals
142+
and Non-Goals.
143+
144+
### 3. `Implementable` - Document Implementation Details
145+
130146
Now that everyone agrees on the goals, it is time to start writing out your
131147
proposed implementation details. These implementation details should be very
132148
thorough, including the proposed API spec, and covering any relevant edge cases.
@@ -138,7 +154,29 @@ alternatives. Be sure to document all of these in the GEP, and why we decided
138154
against them. At this stage, the GEP should be targeting the "Implementable"
139155
stage.
140156

141-
### 4. Implement the GEP as "Experimental"
157+
For a GEP to enter the `Implementable` phase, there are some additional
158+
requirements:
159+
160+
* One or more Gateway API maintainers must agree that the GEP is in-scope
161+
for the project.
162+
* At least two (2) implementations must agree that they are interested in
163+
implementing the feature within six (6) months of it reaching `Experimental`.
164+
This is to ensure that there's community interest outside of the GEP owner.
165+
* At least one "shepherd" who will help with navigating the GEP through the
166+
rest of the process. This shepherd can be any community member, but someone
167+
with experience of the GEP process will be the most helpful. The shepherd
168+
for that GEP will be responsible for initial review, as well as to be
169+
available to answer questions for the GEP owner about the process. Being
170+
a GEP Shepherd is a reasonably significant time commitment, with the
171+
time required scaling up sharply as a GEP becomes more complex and/or
172+
controversial. This shepherd should be recorded on the GEP issue.
173+
* A GEP PR that updates the existing `Provisional` documentation with details
174+
that will be required to actually make the changes. This must include any
175+
API changes, as well as an initial set of test scenarios for implementations
176+
and conformance tests to target. Note that, at this stage, _only_ changes to
177+
GEP document must be included.
178+
179+
### 4. `Experimental` - Make the API changes
142180

143181
With the GEP marked as "Implementable", it is time to actually make those
144182
proposed changes in our API. In some cases, these changes will be documentation
@@ -150,10 +188,13 @@ use the `experimental` Golang build tag to denote experimental functionality.
150188

151189
Some other requirements must be met before marking a GEP `Experimental`:
152190

153-
- the graduation criteria to reach `Standard` MUST be filled out
154-
- the GEP must have at least one Feature Name for features described inside that
191+
* Any API changes must be made to the Go types.
192+
* The graduation criteria to reach `Standard` MUST be filled out. Note that this
193+
must include sufficient conformance testing at a minimum, and should include
194+
any other relevant criteria for that GEP.
195+
* The GEP must have at least one Feature Name for features described inside that
155196
will need to be tested by conformance tests.
156-
- a proposed probationary period (see next section) must be included in the GEP
197+
* A proposed probationary period (see next section) must be included in the GEP
157198
and approved by maintainers.
158199

159200
Before changes are released they MUST be documented. GEPs that have not been
@@ -184,26 +225,28 @@ new strategy for achieving their graduation criteria can be established. Any
184225
such plan to take a GEP "off the shelf" must be reviewed and accepted by the
185226
maintainers.
186227

187-
> **Warning**: It is extremely important** that projects which implement
228+
> **Warning**: It is **extremely important** that projects which implement
188229
> `Experimental` features clearly document that these features may be removed in
189230
> future releases.
190231
191-
### 5. Graduate the GEP to "Standard"
232+
### 5. `Standard` - Graduate the GEP
192233

193234
Once this feature has met the [graduation criteria](../concepts/versioning.md#graduation-criteria), it is
194-
time to graduate it to the "Standard" channel of the API. Depending on the feature, this may include
195-
any of the following:
235+
time to graduate it to the "Standard" channel of the API. Depending on the feature, this will usually
236+
include one or more of the following:
196237

197-
1. Graduating the resource to beta
198-
2. Graduating fields to "standard" by removing `<gateway:experimental>` tags
199-
3. Graduating a concept to "standard" by updating documentation
238+
* Graduating the resource to `v1`, and ensuring it is included in the Standard channel API Group and
239+
YAML install files.
240+
* Graduating fields to "standard" by removing `<gateway:experimental>` tags.
241+
* Graduating a concept to "standard" by updating documentation.
200242

201243
### 6. Close out the GEP issue
202244

203-
The GEP issue should only be closed once the feature has:
204-
- Moved to the standard channel for distribution (if necessary)
205-
- Moved to a "v1" `apiVersion` for CRDs
206-
- been completely implemented and has wide acceptance (for process changes).
245+
The GEP issue should only be closed once the feature has been:
246+
247+
* Moved to the standard channel for distribution (if necessary).
248+
* Moved to a "v1" `apiVersion` for CRDs.
249+
* Completely implemented and has wide acceptance (for process changes).
207250

208251
In short, the GEP issue should only be closed when the work is "done" (whatever
209252
that means for that GEP).

0 commit comments

Comments
 (0)