Skip to content

Commit 2de55cc

Browse files
authored
Add documentation for Wasmtime's LTS releases (#10481)
* Add documentation for Wasmtime's LTS releases With Wasmtime's [LTS releases](bytecodealliance/rfcs#42) this commit documents the various process changes and updates to our release process. Additionally some improvements are made to the release documentation with respect to showing current versions. * Refactor some backport criteria docs * Review comments
1 parent ae69c92 commit 2de55cc

10 files changed

+2870
-19
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ Windows or otherwise interested users can download installers and
4040
binaries directly from the [GitHub
4141
Releases](https://github.com/bytecodealliance/wasmtime/releases) page.
4242

43+
Documentation on Wasmtime's currently supported versions can be found [in the
44+
online book
45+
documentation](https://docs.wasmtime.dev/stability-release.html#current-versions).
46+
4347
## Example
4448

4549
If you've got the [Rust compiler

crates/wasmtime/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,8 @@ Wasmtime can do for you or help answer your questions about Wasmtime. If you're
115115
curious in contributing to Wasmtime, [it can also help you do
116116
that][contributing]!
117117

118+
For information on supported versions of Wasmtime see [the corresponding online book
119+
documentation](https://docs.wasmtime.dev/stability-release.html#current-versions).
120+
118121
[contributing]: https://bytecodealliance.github.io/wasmtime/contributing.html
119122
[guide]: https://bytecodealliance.github.io/wasmtime

docs/book.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,7 @@ src = "."
55
title = "Wasmtime"
66

77
[output.html]
8+
additional-js = ["js/moment.min.2.30.1.js", "js/mermaid.min.11.6.0.js", "js/index.js"]
89
cname = "docs.wasmtime.dev"
10+
git-repository-url = "https://github.com/bytecodealliance/wasmtime"
11+
edit-url-template = "https://github.com/bytecodealliance/wasmtime/edit/main/docs/{path}"

docs/contributing-release-process.md

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,18 @@ carry on its way.
7373

7474
## Releasing a patch version
7575

76+
Wasmtime does not currently have a cadence for patch version nor a strict set
77+
of criteria. It's done on an as-needed basis. Two requirements, however are:
78+
79+
* All changes must land on `main` first (if applicable) and then get backported
80+
to an older branch. Release branches should already exist from the above
81+
major release steps.
82+
83+
* When a patch release is made it must be applied to [all supported
84+
versions](./stability-release.md#current-versions) that need the patch.
85+
Wasmtime will not release a patch release until all versions have been
86+
equally patched to ensure that releases remain consistent.
87+
7688
Making a patch release is somewhat more manual than a major version, but like
7789
before there's automation to help guide the process as well and take care of
7890
more mundane bits.
@@ -82,9 +94,6 @@ Like above human interaction is indicated with **bold** text in these steps.
8294

8395
1. **Necessary changes are backported to the `release-2.0.0` branch from
8496
`main`**
85-
* All changes must land on `main` first (if applicable) and then get
86-
backported to an older branch. Release branches should already exist from
87-
the above major release steps.
8897
* CI may not have been run in some time for release branches so it may be
8998
necessary to backport CI fixes and updates from `main` as well.
9099
* When merging backports maintainers need to double-check that the
@@ -132,3 +141,15 @@ the repository. Management of this file looks like:
132141
This means that `RELEASES.md` only has release notes for the release branch that
133142
it is on. Historical release notes can be found through links at the bottom to
134143
previous copies of `RELEASES.md`
144+
145+
## Keeping Old release branch CI up-to-date
146+
147+
Over time CI configuration goes out of date and may need to be updated. The
148+
Wasmtime repository has a cron job via GitHub Actions to run release CI on all
149+
supported release branches on a weekly basis to try to weed out these problems.
150+
If a release branch CI fails it'll open an issue and maintainers should resolve
151+
it expediently.
152+
153+
Where possible old release branch CI should not update software to fix CI. Try
154+
to pin to older versions if something wasn't pinned already for example.
155+
Sometimes though updates are inevitable and may be required.

docs/js/index.js

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
const WASMTIME_20 = moment.utc('2024-04-20');
2+
const DATE_FORMAT = 'MMMM D YYYY';
3+
4+
function releaseDate(version) {
5+
return WASMTIME_20.clone().add(version - 20, 'months');
6+
}
7+
8+
function eolDate(version) {
9+
const release = releaseDate(version);
10+
if (version % 12 == 0)
11+
return release.add(2, 'year');
12+
return release.add(2, 'months');
13+
}
14+
15+
function addReleases(table) {
16+
const today = moment.utc();
17+
const monthsSince20 = Math.floor(today.diff(WASMTIME_20, 'months'));
18+
const currentRelease = 20 + monthsSince20;
19+
20+
// Add in some relevant releases, such as the current one, one future one, and
21+
// two past ones.
22+
let channels = [];
23+
channels.push(currentRelease + 1);
24+
channels.push(currentRelease);
25+
channels.push(currentRelease - 1);
26+
channels.push(currentRelease - 2);
27+
28+
// Add in historical LTS channels. Start with the current release and go
29+
// backwards looking for two LTS channels.
30+
let lts = 0;
31+
let cur = currentRelease;
32+
for (let cur = currentRelease; cur > 20 && lts < 2; cur--) {
33+
if (cur % 12 == 0) {
34+
channels.push(cur);
35+
lts += 1;
36+
}
37+
}
38+
39+
// Add in a future LTS channel starting with the release after the current
40+
// one.
41+
for (let cur = currentRelease + 1; ; cur++) {
42+
if (cur % 12 == 0) {
43+
channels.push(cur);
44+
break;
45+
}
46+
}
47+
48+
// Deduplicate and sort everything.
49+
channels = [...new Set(channels)];
50+
channels.sort();
51+
52+
let mermaid = `
53+
gantt
54+
tickInterval 12month
55+
title Release Schedule
56+
dateFormat YYYY-MM
57+
`;
58+
59+
for (let channel of channels) {
60+
const row = document.createElement('tr');
61+
const date = releaseDate(channel);
62+
const eol = eolDate(channel);
63+
64+
if (date <= today && today <= eol)
65+
row.style.fontWeight = 'bold';
66+
67+
const version = document.createElement('td');
68+
version.innerText = channel + '.0.0';
69+
row.appendChild(version);
70+
71+
const lts = document.createElement('td');
72+
if (channel % 12 == 0)
73+
lts.innerText = '✅';
74+
row.appendChild(lts);
75+
76+
const branch = document.createElement('td');
77+
branch.innerText = date.clone().add(-15, 'days').format(DATE_FORMAT);
78+
row.appendChild(branch);
79+
80+
const release = document.createElement('td');
81+
release.innerText = date.format(DATE_FORMAT);
82+
row.appendChild(release);
83+
84+
const eolRow = document.createElement('td');
85+
eolRow.innerText = eol.format(DATE_FORMAT);
86+
row.appendChild(eolRow);
87+
88+
dur = eol.diff(date, 'days')
89+
mermaid += ` ${channel}.0.0 :a1, ${date.format('YYYY-MM-DD')}, ${dur}d\n`;
90+
91+
table.appendChild(row);
92+
}
93+
94+
const gantt = document.createElement('pre');
95+
gantt.classList.add('mermaid');
96+
gantt.innerHTML = mermaid;
97+
document.querySelector('#version-table').appendChild(gantt);
98+
}
99+
100+
const table = document.querySelector('#version-table table tbody');
101+
if (table) {
102+
addReleases(table);
103+
mermaid.initialize({ theme: 'dark' });
104+
}

docs/js/mermaid.min.11.6.0.js

Lines changed: 2607 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/js/moment.min.2.30.1.js

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/security-vulnerability-runbook.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ is created these steps are followed:
3737
developed and the vulnerability is better understood at this point the
3838
description of the advisory should be fully filled out and be made ready to
3939
go to the public. This is also when the incident manager should determine the
40-
number of versions of Wasmtime to patch. The latest two versions are
41-
required, and older versions are optional.
40+
number of versions of Wasmtime to patch. All [supported releases
41+
documented](./stability-release.md) must be patched, but the incident manager
42+
may also elect to patch more releases if desired.
4243

4344
5. **Request a CVE**. Use the Big Green Button on the advisory to request a CVE
4445
number from GitHub staff.

docs/security-what-is-considered-a-security-vulnerability.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,6 @@ Note that we still want to fix every bug mentioned above even if it is not a
7373
security vulnerability! We appreciate when issues are filed for
7474
non-vulnerability bugs, particularly when they come with test cases and steps to
7575
reproduce!
76+
77+
Backports for non-security related fixes is [documented
78+
here](./contributing-release-process.html#releasing-a-patch-version).

docs/stability-release.md

Lines changed: 104 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,51 @@
11
# Release Process
22

3-
Wasmtime's release process was [originally designed in an RFC][rfc4] and this
4-
page is intended to serve as documentation for the current process as-is today.
3+
Wasmtime's release process was [originally designed in an RFC][rfc4] and later
4+
amended with [an LTS process][rfc-lts] and this page is intended to serve as
5+
documentation for the current process as-is today.
6+
57
The high-level summary of Wasmtime's release process is:
68

7-
* A new major version of Wasmtime will be made available once a month.
8-
* Security bugs and correctness fixes will be backported to the latest two
9-
releases of Wasmtime and issued as patch releases.
9+
* A new major version of Wasmtime will be made available on the 20th of each
10+
month.
11+
* Each release that is a multiple of 12 is considered an LTS release and is
12+
supported for 24 months. Other releases are supported for 2 months.
13+
* Security bugs are guaranteed to be backported to all supported releases.
14+
* Bug fixes are backported on a volunteer basis.
15+
16+
[rfc-lts]: https://github.com/bytecodealliance/rfcs/pull/42
17+
18+
## Current Versions
19+
20+
<div id='version-table'>
21+
22+
This is a table of supported, recent, and some upcoming releases of Wasmtime
23+
along with the dates around their release process. Rows in **bold** are
24+
actively supported at this time.
25+
26+
| Version | LTS | Branch Date | Release Date | EOL Date |
27+
|------------|-----|-------------|--------------|----------|
28+
29+
<noscript>
30+
JavaScript is disabled so the table above is empty.
31+
</noscript>
32+
33+
In more visual form this is a gantt chart of the current release trains:
34+
35+
<noscript>
36+
JavaScript is disabled there is no gantt chart to show.
37+
</noscript>
38+
39+
</div>
40+
41+
42+
## New Versions
1043

1144
Once a month Wasmtime will issue a new major version. This will be issued with a
12-
semver-major version update, such as 4.0.0 to 5.0.0. The precise schedule of
13-
Wasmtime's release is currently an automated PR is sent to bump the version on
14-
the 5th of every month and a release is made when the PR is merged. The PR
15-
typically gets merged within a few days.
45+
semver-major version update, such as 4.0.0 to 5.0.0. Releases are created from
46+
main with a new `release-X.0.0` git branch on the 5th of every month. The
47+
release itself then happens on the 20th of the month, or shortly after if that
48+
happens to fall on a weekend.
1649

1750
Each major release of Wasmtime reserves the right to break both behavior and API
1851
backwards-compatibility. This is not expected to happen frequently, however, and
@@ -28,18 +61,75 @@ any breaking change will follow these criteria:
2861
feedback about embeddings. Release notes will clearly indicate if any major
2962
breaking changes through accepted RFCs are included in a release.
3063

64+
All releases will have an accompanying `RELEASES.md` on the release branch
65+
documenting major and minor changes made during development. Note that each
66+
branch only contains the release notes for that branch, but links are provided
67+
for older release notes.
68+
69+
For maintainers, performing a release is [documented
70+
here](./contributing-release-process.md#releasing-a-major-version).
71+
72+
## Version Support
73+
74+
Wasmtime major version releases are of one of two categories:
75+
76+
* LTS release - this happens every 12 releases of Wasmtime and the version
77+
number is always divisible by 12. LTS releases are supported for 24 months.
78+
For example Wasmtime 24.0.0 is supported for 2 years.
79+
80+
* Normal release - this is every release other than an LTS release. Normal
81+
releases are supported for 2 months. For example Wasmtime 31.0.0 is supported
82+
for 2 months.
83+
84+
At any one time Wasmtime has two supported LTS releases and up to two supported
85+
normal releases. Once a version of Wasmtime is release the project strives to
86+
maintain binary/version compatibility with dependencies and such throughout the
87+
lifetime of the release. For example the minimum supported version of Rust
88+
required to compile a version of Wasmtime will not increase. Exceptions may be
89+
made to LTS branches though if the versions of tooling to produce the LTS itself
90+
have fallen out-of-date. For example if an LTS was originally produced with a
91+
GitHub Actions runner that is no longer available then the oldest supported
92+
image will be used instead.
93+
94+
## Patch Versions
95+
3196
Patch releases of Wasmtime will only be issued for security and critical
32-
correctness issues for on-by-default behavior in the previous releases. If
33-
Wasmtime is currently at version 5.0.0 then 5.0.1 and 4.0.1 will be issued as
34-
patch releases if a bug is found. Patch releases are guaranteed to maintain API
35-
and behavior backwards-compatibility and are intended to be trivial for users to
36-
upgrade to.
97+
correctness issues for on-by-default behavior in supported releases. For example
98+
if the current version is 39.0.0 then a security issue would issue a new release
99+
for:
100+
101+
* 39.0.x - the current release
102+
* 38.0.x - the last release
103+
* 36.0.x - the current LTS release
104+
* 24.0.x - the last LTS release
105+
106+
Patch releases are guaranteed to maintain API and behavior
107+
backwards-compatibility and are intended to be trivial for users to upgrade to.
108+
109+
The Wasmtime project guarantees backports and patch releases will be made for
110+
any discovered security issue. Other bug fixes are done on a best-effort basis
111+
in accordance with volunteers able to do the backports (see below). The Wasmtime
112+
project does not support backporting new features to older releases, even if a
113+
volunteer performs a backport for the project.
37114

38115
Patch releases for Cranelift will be made for any miscompilations found by
39116
Cranelift, even those that Wasmtime itself may not exercise. Due to the current
40117
release process a patch release for Cranelift will issue a patch release for
41118
Wasmtime as well.
42119

120+
Patch releases do not have a set cadence and are done on an as-needed basis. For
121+
maintainers, performing a patch release is [documented
122+
here](./contributing-release-process.md#releasing-a-patch-version).
123+
124+
## Security Fixes
125+
126+
Security fixes will be issued as patch releases of Wasmtime. They follow the
127+
same process as normal backports except that they're coordinated in private
128+
prior to patch release day.
129+
130+
For maintainers, performing a security release is [documented
131+
here](./security-vulnerability-runbook.md).
132+
43133
## What's released?
44134

45135
At this time the release process of Wasmtime encompasses:

0 commit comments

Comments
 (0)