You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+94-96Lines changed: 94 additions & 96 deletions
Original file line number
Diff line number
Diff line change
@@ -8,10 +8,23 @@ All participants are expected to read and follow this code.
8
8
No changes, however trivial, are ever made to the contents of published specifications (the files in the `versions/` folder).
9
9
Exceptions may be made when links to external URLs have been changed by a 3rd party, in order to keep our documents accurate.
10
10
11
+
The specification is in the file `spec/oas.md`.
12
+
11
13
The [spec site](https://spec.openapis.org) is the source of truth for the OpenAPI specification as it contains all the citations and author credits (the markdown in this repository was previously the authoritative version until 2024).
12
14
13
15
The OpenAPI project is almost entirely staffed by volunteers.
14
-
Please be patient with the people in this project, who all have other jobs and do this because they believe in it.
16
+
Please be patient with the people in this project, who all have other jobs and are active here because we believe this project has a positive impact in the world.
17
+
18
+
### Active branches
19
+
20
+
The current active specification releases are:
21
+
22
+
| Version | Branch | Notes |
23
+
| ------- | ------ | ----- |
24
+
| 3.1.2 |`v3.1-dev`| active patch release line |
25
+
| 3.2.0 |`v3.2-dev`| minor release in development |
When issues are closed, a comment is added about why.
86
99
Closing issues is a reversible action, and it is always acceptable to comment and explain (politely) why an issue should not have been closed.
87
100
88
-
##Development process
101
+
### Labels
89
102
90
-
> [!NOTE]
91
-
> Since the 3.0.4 and 3.1.1 releases (October 2024), the OAS is developed in the `src/oas.md` file.
92
-
> Check the [Branches](#branches) section for more information about the updated branching strategy.
103
+
We make extensive use of labels.
104
+
The main categories are:
93
105
94
-
Changes to the next version of the specification are welcome and can be proposed by anyone.
106
+
-[Housekeeping](https://github.com/OAI/OpenAPI-Specification/labels/Housekeeping) for meetings, project logistics, etc.
107
+
-[approved pr port](https://github.com/OAI/OpenAPI-Specification/labels/approved pr port) for pull requests that repeat a change from one version to another
108
+
- most other tags are used to group similar or related issues into topic areas; this list is ever-changing
95
109
96
-
For large changes that will need discussion, please use the [Proposal process](#propose-a-specification-change).
97
-
For other changes, we recommend [opening an issue](#issues) first, so that you can get some feedback and any extra input you need before spending a lot of time on something.
110
+
Labels related to [issue automation](#appendix-issue-automation)
98
111
99
-
Schema changes are made on the same branch, but can be released independently. When making a specification change for a new minor or major release that has a schema impact, including the schema change in the PR is preferred. Patch releases cannot contain changes that _require_ a schema update.
112
+
-[Needs attention](https://github.com/OAI/OpenAPI-Specification/labels/Needs attention) automated tag when an issue is updated
113
+
-[Needs author feedback](https://github.com/OAI/OpenAPI-Specification/labels/Needs author feedback) used to indicate that more information is needed from the issue creator
114
+
-[No recent activity](https://github.com/OAI/OpenAPI-Specification/labels/No recent activity) if no information is received, the issue is marked for closure (automatic after 30 days)
100
115
101
-
### Branch roles
116
+
### Milestones
102
117
103
-
*`main` is used to publish finished work and hold the authoritative versions of general documentation such as this document, which can be merged out to other branches as needed. The `src` tree is ***not*** present on `main`.
104
-
*`dev` is the primary branch for working with the `src` tree, which is kept up-to-date with the most recent release on the most recent minor (X.Y) release line, and serves as the base for each new minor release line. Development infrastructure that is not needed on `main` is maintained here, and can be merged out to other non-`main` branches as needed.
105
-
*`vX.Y-dev` is the minor release line development branch for X.Y, including both the initial X.Y.0 minor version and all subsequent X.Y.Z patch versions. All PRs are made to oldest active `vX.Y-dev` branch to which the change is relevant, and then merged forward as shown in the diagram further down in this document.
106
-
*`vX.Y.Z-rel` is the release branch for an X.Y.Z release (including when Z == 0). It exists primarily for `git mv`-ing `src/oas.md` to the appropriate `versions/X.Y.Z.md` ___location before merging back to `main`, and can also be used for any emergency post-release fixes that come up, such as when a 3rd party changes URLs in a way that breaks published links.
118
+
We use milestones in GitHub to plan what should be included in future releases.
119
+
Issues and pull requests should both be added to the milestone we expect they will be released in.
120
+
Any changes that aren't ready in time for release should be moved to the next milestone or untagged.
107
121
108
-
### Using forks
122
+
The milestones and items assigned to them are under constant review and subject to change.
109
123
110
-
All work **MUST be done on a fork**, using a branch from the _earliest relevant and [active](#active-branches)_`vX.Y-dev` branch, and then submitted as a PR to that `vX.Y-dev` branch.
111
-
For example, if a change in November 2024 apples to both 3.1 and 3.2, the PR would go to the `v3.1-dev` branch, which will be merged up to `v3.2-dev` before the next 3.2 release.
124
+
### Projects
112
125
113
-
## Publishing
126
+
The OpenAPI Initiative uses GitHub Projects to manage work _outside_ of the specification development process. There are currently two active projects:
114
127
115
-
The specification and schemas are published to the [spec site](https://spec.openapis.org) by creating an `vX.Y.Z-rel` branch where `src/oas.md` is renamed to the appropriate `versions/X.Y.Z.md` file and then merged to `main`. The HTML versions of the OAS are automatically generated from the `versions` directory on `main`. This renaming on the `vX.Y.Z-rel` branch preserves the commit history for the published file on `main` when using `git log --follow` (as is the case for all older published files).
The publishing process for schemas is still under discussion (see issues [#3715](https://github.com/OAI/OpenAPI-Specification/issues/3715) and [#3716](https://github.com/OAI/OpenAPI-Specification/issues/3716)), with the current proposal being to release them directly from the `vX.Y-dev` branch without merging to `main`, as the schemas in source control have placeholder identifiers and are not intended to be used as-is.
131
+
## Pull requests
118
132
119
-
#### Active branches
133
+
> [!NOTE]
134
+
> Since the 3.0.4 and 3.1.1 releases (October 2024), the OAS is developed in the `src/oas.md` file.
135
+
> Check the [Branches](#branches) section for more information about the updated branching strategy.
120
136
121
-
The first PR for a change should be against the oldest release line to which it applies. Changes can then be forward-ported as appropriate.
137
+
Changes to the next version of the specification are welcome and can be proposed by anyone.
122
138
123
-
The specification under development is `src/oas.md`, which _only_ exists on development branches, not on `main`.
139
+
For large changes that will need discussion, please use the [Proposal process](#propose-a-specification-change).
140
+
For other changes, we recommend [opening an issue](#issues) first, so that you can get some feedback and any extra input you need before spending a lot of time on something.
124
141
125
-
The current (20 October 2024) active specification releases are:
142
+
Schema changes are made on the same branch, but can be released independently.
143
+
When making a specification change for a new minor or major release that has a schema impact, including the schema change in the PR is preferred.
144
+
Patch releases cannot contain changes that _require_ a schema update.
126
145
127
-
| Version | Branch | Notes |
128
-
| ------- | ------ | ----- |
129
-
| 3.1.2 |`v3.1-dev`| active patch release line |
130
-
| 3.2.0 |`v3.2-dev`| minor release in development |
All work **MUST be done on a fork** and be submitted as a pull request.
134
149
135
-
Contributions to this repository should follow the style guide as described in this section.
150
+
### Target the earliest active `*-dev` branch
136
151
137
-
### Markdown
152
+
Branch from and submit pull requests to the a branch from the _earliest relevant and [active](#active-branches)_`vX.Y-dev` branch.
153
+
For example, if a change applies to both 3.1 and 3.2, the PR would go to the `v3.1-dev` branch, which will be merged up to `v3.2-dev` before the next 3.2 release.
154
+
All changes to the specification must conform to the [style guide](./style-guide.md).
138
155
139
-
Markdown files in this project should follow the style enforced by the [markdownlint tool](https://www.npmjs.com/package/markdownlint),
140
-
as configured by the `.markdownlint.yaml` file in the root of the project.
141
-
The `markdownlint` tool can also fix formatting, which can save time with tables in particular.
156
+
Both specification and schema changes follow this approach.
142
157
143
-
The following additional rules should be followed but currently are not enforced by tooling:
158
+
For changes to repository files that affect all versions, use the `main` branch.
159
+
This might apply to, for example, Markdown files, automation, and scripts.
144
160
145
-
1. The first mention of a normative reference or an OAS-defined Object in a (sub)*section is a link, additional mentions are not.
146
-
2. OAS-defined Objects such as Schema Objects are written in this style, and are not monospaced.
147
-
3. Use "example" instead of "sample" - this spec is not about statistics.
148
-
4. Use "OpenAPI Object" instead of "root".
149
-
5. Fixed fields are monospaced.
150
-
6. Field values are monospaced in JSON notation: `true`, `false`, `null`, `"header"` (with double-quotes around string values).
151
-
7. A combination of fixed field name with example value uses JS notation: `in: "header"`, combining rules 5 and 6.
152
-
8. An exception to 5-7 is colloquial use, for example "values of type `array` or `object`" - "type" is not monospaced, so the monospaced values aren't enclosed in double quotes.
153
-
9. Use Oxford commas, avoid Shatner commas.
154
-
10. Use `<span id="thing"></span>` for link anchors. The `<a name="thing"></a>` format has been deprecated.
155
-
11. Headings use [title case](https://en.wikipedia.org/wiki/Title_case) and are followed by a blank line.
161
+
For all pull requests, if they should not be merged yet for any reason (they depend on something else, you would like feedback from a specific reviewer), mark them as draft and they will not be merged while in that state.
162
+
Draft pull requests can still be reviewed while in draft state.
156
163
157
-
Plus some suggestions, rather than rules:
164
+
## Reviewers
165
+
166
+
> ![NOTE]
167
+
> See also the detailed team outlines in the [roles section](#roles).
158
168
159
-
* Use one sentence per line in paragraphs and bullet points, to make diffs and edits easier to compare and understand.
160
-
A blank line is needed to cause a paragraph break in Markdown.
161
-
* In examples, use realistic values rather than foo/bar.
169
+
All pull requests must be reviewed and approved by one member of the TSC or Maintainer teams.
170
+
Reviews from other contributors are always welcome.
162
171
163
-
### Use of "keyword", "field", "property", and "attribute"
172
+
Additionally, all pull requests that change the specification file `spec/oas.md` must be approved by 2 TSC members.
164
173
165
-
* JSON Schema keywords -> "keyword"
166
-
* OpenAPI fixed fields -> "field"
167
-
* property of a "plain" JSON object that is not an OpenAPI-defined Foo Object -> "property"
168
-
* "attribute" is only used in the XML context and means "XML attribute"
174
+
Reviews requesting changes should have their changes addressed regardless of how many other approvers there are.
175
+
176
+
## Publishing
177
+
178
+
The specification are published to the [spec site](https://spec.openapis.org) by creating an `vX.Y.Z-rel` branch where `src/oas.md` is renamed to the appropriate `versions/X.Y.Z.md` file and then merged to `main`.
179
+
The HTML versions of the OAS are automatically generated from the `versions` directory on `main`.
180
+
This renaming on the `vX.Y.Z-rel` branch preserves the commit history for the published file on `main` when using `git log --follow` (as is the case for all older published files).
181
+
182
+
The schemas are published [in the schema section on the spec site](https://spec.openapis.org/#openapi-specification-schemas).
183
+
As part of the publishing process, the `WORK-IN-PROGRESS` placeholders are replaced with dates as appropriate.
184
+
Schemas are published/updated independently from the specification releases.
169
185
170
186
## Release Process and Scope
171
187
@@ -198,9 +214,22 @@ Changes in patch releases meet the following criteria:
198
214
199
215
Patch releases are created as often as there are changes to the specification worth releasing.
200
216
201
-
## Branching and Versioning
217
+
### Release Process
218
+
219
+
A release requires a vote on the specification at a particular version and the associated release notes by TSC members within the voting period.
220
+
Major or minor release voting periods will be announced in the Slack channel and noted on the calendar at least 6 days in advance.
221
+
During this time, TSC members who have not yet voted must note their approval by leaving a comment on the GitHub pull request proposing the release; release notes should be included with the description.
222
+
TSC members are responsible for coordinating the information about the release to the outreach team as appropriate.
202
223
203
-
* Issue #3677: [Define and document branch strategy for the spec, both development and publishing](https://github.com/OAI/OpenAPI-Specification/issues/3677)
224
+
* Patch-level releases require majority approval by TSC members. (Max voting period 3 days)
225
+
226
+
* Minor: requires approval by 66% of TSC members. (Max voting period 7 days)
227
+
228
+
* Major: requires approval by 66% of TSC members. (Max voting period 14 days)
229
+
230
+
During the voting period, further changes should not be made to the specification being considered.
231
+
232
+
Once the threshold of approvals is met, the release can be performed by any TSC member.
204
233
205
234
## Propose a Specification Change
206
235
@@ -231,41 +260,6 @@ Bigger changes require a more formal process.
231
260
232
261
Questions are welcome on the process at any time. Use the discussions feature or find us in Slack.
233
262
234
-
## Working in GitHub
235
-
236
-
* Issue #3847: [Document milestone usage in DEVELOPMENT.md](https://github.com/OAI/OpenAPI-Specification/issues/3847)
237
-
* Issue #3848: [Define and add new process labels and document general label usage in DEVELOPMENT.md](https://github.com/OAI/OpenAPI-Specification/issues/3848)
238
-
239
-
### Roles and Permissions
240
-
241
-
* Issue #3582: [TOB info needs to be updated](https://github.com/OAI/OpenAPI-Specification/issues/3482)
242
-
* Issue #3523: [Define triage role criteria and process](https://github.com/OAI/OpenAPI-Specification/issues/3523)
243
-
* Issue #3524: [Define the maintainer role criteria and process](https://github.com/OAI/OpenAPI-Specification/issues/3524)
244
-
245
-
### Projects
246
-
247
-
The OpenAPI Initiative uses GitHub Projects to manage work _outside_ of the specification development process. There are currently two active projects:
As of mid-2024, we prefer to use issues for topics that have a clear associated action. However, many existing issues are more open-ended, as they predate GitHub's discussions features.
255
-
256
-
* Issue #3518: [Define criteria for filing/closing issues vs discussions](https://github.com/OAI/OpenAPI-Specification/issues/3518)
257
-
258
-
259
-
## Pull Requests
260
-
261
-
* Issue #3581: [Who and how many people need to sign-off on a PR, exactly?](https://github.com/OAI/OpenAPI-Specification/issues/3581)
262
-
* Issue #3802: [Define a policy using draft PRs when waiting on specific approvals](https://github.com/OAI/OpenAPI-Specification/issues/3802)
263
-
264
-
## Updating the Registries
265
-
266
-
* Issue #3598: [Minimum criteria for Namespace Registry](https://github.com/OAI/OpenAPI-Specification/issues/3598)
267
-
* Issue #3899: [Expert review criteria for registries (How exactly does x-twitter work?)](https://github.com/OAI/OpenAPI-Specification/issues/3899)
268
-
269
263
## Roles
270
264
271
265
The OpenAPI project has some key roles that are played by multiple people.
@@ -295,13 +289,17 @@ To get in touch with other people on the project, ask questions, or anything els
295
289
- Start a [GitHub Discussion](https://github.com/OAI/OpenAPI-Specification/discussions/).
296
290
- Join one of our weekly meetings by checking the [issues list for an upcoming meetings](https://github.com/OAI/OpenAPI-Specification/issues?q=is%3Aissue%20state%3Aopen%20label%3AHousekeeping).
297
291
298
-
299
-
300
-
301
292
### Appendix: Historical branch strategy
302
293
303
294
For information on the branch and release strategy for OAS 3.0.4 and 3.1.1 and earlier, see the comments in [issue #3677](https://github.com/OAI/OpenAPI-Specification/issues/3677).
304
295
296
+
### Branch roles
297
+
298
+
*`main` is used to publish finished work and hold the authoritative versions of general documentation such as this document, which can be merged out to other branches as needed. The `src` tree is ***not*** present on `main`.
299
+
*`dev` is the primary branch for working with the `src` tree, which is kept up-to-date with the most recent release on the most recent minor (X.Y) release line, and serves as the base for each new minor release line. Development infrastructure that is not needed on `main` is maintained here, and can be merged out to other non-`main` branches as needed.
300
+
*`vX.Y-dev` is the minor release line development branch for X.Y, including both the initial X.Y.0 minor version and all subsequent X.Y.Z patch versions. All PRs are made to oldest active `vX.Y-dev` branch to which the change is relevant, and then merged forward as shown in the diagram further down in this document.
301
+
*`vX.Y.Z-rel` is the release branch for an X.Y.Z release (including when Z == 0). It exists primarily for `git mv`-ing `src/oas.md` to the appropriate `versions/X.Y.Z.md` ___location before merging back to `main`, and can also be used for any emergency post-release fixes that come up, such as when a 3rd party changes URLs in a way that breaks published links.
302
+
305
303
### Branching and merging (3.1.2, 3.2.0, and later)
0 commit comments