...

Text file src/github.com/opencontainers/runtime-spec/RELEASES.md

Documentation: github.com/opencontainers/runtime-spec

     1# Releases
     2
     3The release process hopes to encourage early, consistent consensus-building during project development.
     4The mechanisms used are regular community communication on the mailing list about progress, scheduled meetings for issue resolution and release triage, and regularly paced and communicated releases.
     5Releases are proposed and adopted or rejected using the usual [project governance](GOVERNANCE.md) rules and procedures.
     6
     7An anti-pattern that we want to avoid is heavy development or discussions "late cycle" around major releases.
     8We want to build a community that is involved and communicates consistently through all releases instead of relying on "silent periods" as a judge of stability.
     9
    10## Parallel releases
    11
    12A single project MAY consider several motions to release in parallel.
    13However each motion to release after the initial 0.1.0 MUST be based on a previous release that has already landed.
    14
    15For example, runtime-spec maintainers may propose a v1.0.0-rc2 on the 1st of the month and a v0.9.1 bugfix on the 2nd of the month.
    16They may not propose a v1.0.0-rc3 until the v1.0.0-rc2 is accepted (on the 7th if the vote initiated on the 1st passes).
    17
    18## Specifications
    19
    20The OCI maintains three categories of projects: specifications, applications, and conformance-testing tools.
    21However, specification releases have special restrictions in the [OCI charter][charter]:
    22
    23* They are the target of backwards compatibility (§7.g), and
    24* They are subject to the OFWa patent grant (§8.d and e).
    25
    26To avoid unfortunate side effects (onerous backwards compatibility requirements or Member resignations), the following additional procedures apply to specification releases:
    27
    28### Planning a release
    29
    30Every OCI specification project SHOULD hold meetings that involve maintainers reviewing pull requests, debating outstanding issues, and planning releases.
    31This meeting MUST be advertised on the project README and MAY happen on a phone call, video conference, or on IRC.
    32Maintainers MUST send updates to the dev@opencontainers.org with results of these meetings.
    33
    34Before the specification reaches v1.0.0, the meetings SHOULD be weekly.
    35Once a specification has reached v1.0.0, the maintainers may alter the cadence, but a meeting MUST be held within four weeks of the previous meeting.
    36
    37The release plans, corresponding milestones and estimated due dates MUST be published on GitHub (e.g. https://github.com/opencontainers/runtime-spec/milestones).
    38GitHub milestones and issues are only used for community organization and all releases MUST follow the [project governance](GOVERNANCE.md) rules and procedures.
    39
    40### Timelines
    41
    42Specifications have a variety of different timelines in their lifecycle.
    43
    44* Pre-v1.0.0 specifications SHOULD release on a monthly cadence to garner feedback.
    45* Major specification releases MUST release at least three release candidates spaced a minimum of one week apart.
    46    This means a major release like a v1.0.0 or v2.0.0 release will take 1 month at minimum: one week for rc1, one week for rc2, one week for rc3, and one week for the major release itself.
    47    Maintainers SHOULD strive to make zero breaking changes during this cycle of release candidates and SHOULD restart the three-candidate count when a breaking change is introduced.
    48    For example if a breaking change is introduced in v1.0.0-rc2 then the series would end with v1.0.0-rc4 and v1.0.0.
    49* Minor and patch releases SHOULD be made on an as-needed basis.
    50
    51[charter]: https://github.com/opencontainers/tob/blob/main/CHARTER.md
    52
    53## Checklist
    54
    55Releases usually follow a few steps:
    56
    57* [ ] prepare a pull-request for the release
    58  * [ ] a commit updating `./ChangeLog`
    59    * [ ] `git log --oneline --no-merges --decorate --name-status v1.0.1..HEAD | vim -`
    60    * [ ] `:% s/(pr\/\(\d*\))\(.*\)/\2 (#\1)/` to move the PR to the end of line and match previous formatting
    61    * [ ] review `(^M|^A|^D)` for impact of the commit
    62    * [ ] group commits to `Additions:`, `Minor fixes and documentation:`, `Breaking changes:`
    63    * [ ] delete the `(^M|^A|^D)` lines, `:%!grep -vE '(^M|^A|^D)'`
    64    * [ ] merge multi-commit PRs (so each line has a `(#num)` suffix)
    65    * [ ] drop hash and indent, `:'<,'> s/^\w*  /^I* /`
    66  * [ ] a commit bumping `./specs-go/version.go` to next version and empty the `VersionDev` variable
    67  * [ ] a commit adding back the "+dev" to `VersionDev`
    68* [ ] send email to dev@opencontainers.org
    69  * [ ] copy the exact commit hash for bumping the version from the pull-request (since master always stays as "-dev")
    70  * [ ] count the PRs since last release (that this version is tracking, in the cases of multiple branching), like `git log --pretty=oneline --no-merges --decorate $priorTag..$versionBumpCommit  | grep \(pr\/ | wc -l`
    71  * [ ] get the date for a week from now, like `TZ=UTC date --date='next week'`
    72  * [ ] OPTIONAL find a cute animal gif to attach to the email, and subsequently the release description
    73  * [ ] subject line like `[runtime-spec VOTE] tag $versionBumpCommit as $version (closes $dateWeekFromNowUTC)`
    74  * [ ] email body like
    75```
    76Hey everyone,
    77
    78There have been $numPRs PRs merged since $priorTag release (https://github.com/opencontainers/runtime-spec/compare/$priorTag...$versionBumpCommit).
    79
    80$linkToPullRequest
    81
    82Please respond LGTM or REJECT (with reasoning).
    83
    84$sig
    85```
    86* [ ] edit/update the pull-request to link to the VOTE thread, from https://groups.google.com/a/opencontainers.org/forum/#!forum/dev
    87* [ ] a week later, if the vote passes, merge the PR
    88  * [ ] `git tag -s $version $versionBumpCommit`
    89  * [ ] `git push --tags`
    90* [ ] produce release documents
    91  * [ ] git checkout the release tag, like `git checkout $version`
    92  * [ ] `make docs`
    93  * [ ] rename the output PDF and HTML file to include version, like `mv output/oci-runtime-spec.pdf output/oci-runtime-spec-$version.pdf``
    94  * [ ] attach these docs to the release on https://github.com/opencontainers/runtime-spec/releases
    95  * [ ] link to the the VOTE thread and include the passing vote count
    96  * [ ] link to the pull request that merged the release

View as plain text