Skip to content

Commit 9b395fe

Browse files
committed
Fill in more missing sections and try to keep the ordering sane
1 parent dae5523 commit 9b395fe

File tree

1 file changed

+94
-96
lines changed

1 file changed

+94
-96
lines changed

CONTRIBUTING.md

Lines changed: 94 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,23 @@ All participants are expected to read and follow this code.
88
No changes, however trivial, are ever made to the contents of published specifications (the files in the `versions/` folder).
99
Exceptions may be made when links to external URLs have been changed by a 3rd party, in order to keep our documents accurate.
1010

11+
The specification is in the file `spec/oas.md`.
12+
1113
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).
1214

1315
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 |
26+
| 4.0.0 | [OAI/sig-moonwalk](https://github.com/OAI/sig-moonwalk) | [discussions only](https://github.com/OAI/sig-moonwalk/discussions) |
27+
1528

1629
## How to contribute
1730

@@ -85,87 +98,90 @@ Issues may be closed when:
8598
When issues are closed, a comment is added about why.
8699
Closing issues is a reversible action, and it is always acceptable to comment and explain (politely) why an issue should not have been closed.
87100

88-
## Development process
101+
### Labels
89102

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:
93105

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
95109

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)
98111

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)
100115

101-
### Branch roles
116+
### Milestones
102117

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.
107121

108-
### Using forks
122+
The milestones and items assigned to them are under constant review and subject to change.
109123

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
112125

113-
## Publishing
126+
The OpenAPI Initiative uses GitHub Projects to manage work _outside_ of the specification development process. There are currently two active projects:
114127

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).
128+
* [Contributor Guidance](https://github.com/orgs/OAI/projects/5/views/1)
129+
* [Automation & Infrastructure](https://github.com/orgs/OAI/projects/4/views/1)
116130

117-
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
118132

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.
120136
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.
122138

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.
124141

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.
126145

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 |
131-
| 4.0.0 | [OAI/sig-moonwalk](https://github.com/OAI/sig-moonwalk) | [discussions only](https://github.com/OAI/sig-moonwalk/discussions) |
146+
### Use a fork
132147

133-
## Style Guide
148+
All work **MUST be done on a fork** and be submitted as a pull request.
134149

135-
Contributions to this repository should follow the style guide as described in this section.
150+
### Target the earliest active `*-dev` branch
136151

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).
138155

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.
142157

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.
144160

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.
156163

157-
Plus some suggestions, rather than rules:
164+
## Reviewers
165+
166+
> ![NOTE]
167+
> See also the detailed team outlines in the [roles section](#roles).
158168
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.
162171

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.
164173

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.
169185

170186
## Release Process and Scope
171187

@@ -198,9 +214,22 @@ Changes in patch releases meet the following criteria:
198214

199215
Patch releases are created as often as there are changes to the specification worth releasing.
200216

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.
202223

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.
204233

205234
## Propose a Specification Change
206235

@@ -231,41 +260,6 @@ Bigger changes require a more formal process.
231260

232261
Questions are welcome on the process at any time. Use the discussions feature or find us in Slack.
233262

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:
248-
249-
* [Contributor Guidance](https://github.com/orgs/OAI/projects/5/views/1)
250-
* [Automation & Infrastructure](https://github.com/orgs/OAI/projects/4/views/1)
251-
252-
### Issues
253-
254-
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-
269263
## Roles
270264

271265
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
295289
- Start a [GitHub Discussion](https://github.com/OAI/OpenAPI-Specification/discussions/).
296290
- 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).
297291

298-
299-
300-
301292
### Appendix: Historical branch strategy
302293

303294
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).
304295

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+
305303
### Branching and merging (3.1.2, 3.2.0, and later)
306304

307305
Upon release:

0 commit comments

Comments
 (0)