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: docs/CONTRIBUTING.md
+47
Original file line number
Diff line number
Diff line change
@@ -199,3 +199,50 @@ one or more reviewers making new comments every time, then waiting for an
199
199
updated change before reviewing again. All contributors, including those from
200
200
maintainers, are subject to the same review cycle; this process is not meant to
201
201
be applied selectively or to discourage anyone from contributing.
202
+
203
+
## Releases
204
+
205
+
Coder releases are initiated via [`./scripts/release.sh`](../scripts/release.sh) and automated via GitHub Actions. Specifically, the [`release.yaml`](../.github/workflows/release.yaml) workflow. They are created based on the current [`main`](https://github.com/coder/coder/tree/main) branch.
206
+
207
+
The release notes for a release are automatically generated from commit titles and metadata from PRs that are merged into `main`.
208
+
209
+
### Creating a release
210
+
211
+
The creation of a release is initiated via [`./scripts/release.sh`](../scripts/release.sh). This script will show a preview of the release that will be created, and if you choose to continue, create and push the tag which will trigger the creation of the release via GitHub Actions.
212
+
213
+
See `./scripts/release.sh --help` for more information.
214
+
215
+
### Creating a release (via workflow dispatch)
216
+
217
+
Typically the workflow dispatch is only used to test (dry-run) a release, meaning no actual release will take place. The workflow can be dispatched manually from [Actions: Release](https://github.com/coder/coder/actions/workflows/release.yaml). Simply press "Run workflow" and choose dry-run.
218
+
219
+
If a release has failed after the tag has been created and pushed, it can be retried by again, pressing "Run workflow", changing "Use workflow from" from "Branch: main" to "Tag: vX.X.X" and not selecting dry-run.
220
+
221
+
### Commit messages
222
+
223
+
Commit messages should follow the [Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/) specification.
224
+
225
+
Allowed commit types (`feat`, `fix`, etc.) are listed in [conventional-commit-types](https://github.com/commitizen/conventional-commit-types/blob/c3a9be4c73e47f2e8197de775f41d981701407fb/index.json). Note that these types are also used to automatically sort and organize the release notes.
226
+
227
+
A good commit message title uses the imperative, present tense and is ~50
228
+
characters long (no more than 72).
229
+
230
+
Examples:
231
+
232
+
- Good: `feat(api): Add feature X`
233
+
- Bad: `feat(api): Added feature X` (past tense)
234
+
235
+
A good rule of thumb for writing good commit messages is to recite: [If applied, this commit will ...](https://reflectoring.io/meaningful-commit-messages/).
236
+
237
+
**Note:** We lint PR titles to ensure they follow the Conventional Commits specification, however, it's still possible to merge PRs on GitHub with a badly formatted title. Take care when merging single-commit PRs as GitHub may prefer to use the original commit title instead of the PR title.
238
+
239
+
### Breaking changes
240
+
241
+
Breaking changes can be triggered in two ways:
242
+
243
+
- Add `!` to the commit message title, e.g. `feat(api)!: Remove deprecated endpoint /test`
244
+
- Add the [`release/breaking`](https://github.com/coder/coder/issues?q=sort%3Aupdated-desc+label%3Arelease%2Fbreaking) label to a PR that has, or will be, merged into `main`.
245
+
246
+
### Security
247
+
248
+
The [`security`](https://github.com/coder/coder/issues?q=sort%3Aupdated-desc+label%3Asecurity) label can be added to PRs that have, or will be, merged into `main`. Doing so will make sure the change stands out in the release notes.
0 commit comments