mb/google/rex: Enable ACPI and add ACPI table
[coreboot.git] / Documentation / releases / checklist.md
blob80f59b76a29a4cb0f339adc0b57c6fe7a718ec40
1 ```eval_rst
2 :orphan:
3 ```
5 # coreboot Release Process
7 This document describes our release process and all prerequisites to implement
8 it successfully.
10 ## Purpose of coreboot releases
11 Our releases aren't primarily a vehicle for code that is stable across all
12 boards: The logistics of testing the more than 100 boards that are spread out
13 all continents (except Antarctica, probably) on a given tree state are
14 prohibitive for project of our size.
16 Instead, the releases are regular breakpoints that serve multiple purposes:
17 They support cooperation between multiple groups (corporations or otherwise)
18 in that it's easier to keep source trees synchronized based on a limited set
19 of commits. They allow a quick assessment of the age of any given build or
20 source tree based on its git version (4.8-1234 was merged into master a few
21 months after 4.8, which came out in April 2018. 4.0-21718's age is harder to
22 guess).
24 And finally we use releases to as points in time where we remove old code:
25 Once we decide that a certain part of coreboot gets in the way of future
26 development, we announce on the next release that we intend to remove that
27 part - and everything that depends on it - after the following release.
28 So removing feature FOO will be announced in release X for release
29 X+1. The first commit after X+1 is fair game for such removal.
31 Together with our 6 months release horizon, this provides time to plan
32 any migrations necessary to keep older boards in the tree by bringing
33 them up to current standards.
35 ## Needed credentials & authorizations
36 * Website access is required to post the release files to the website.
37 * IRC admin access is required to update the topic.
38 * Git access rights are needed to post the tag.
39 * Blog post access is needed to do the blog post.
40 * A PGP key is required to sign the release tarballs and git tag.
42 This set of required credentials implies that releases can only be done
43 by a coreboot admin.
45 ## When to release
46 Releases are done roughly on a 6-month schedule, ideally around end
47 of April and end of October (can be a bit earlier or delay into May
48 or November).
50 We initially followed a 3 month release schedule, but we found that to
51 be more frequent than was needed, so we scaled it back to twice a year.
53 ## Checklist
54 ### ~2 weeks prior to release
55 - [ ] Announce upcoming release to mailing list, ask people to test and
56       to update release notes.
58 ### ~1 week prior to release
59 - [ ] Send reminder email to mailing list, ask for people to test,
60       and to update the release notes.
61 - [ ] Update the topic in the IRC channel with the date of the upcoming
62       release.
63 - [ ] If there are any deprecations announced for the following release,
64       make sure that a list of currently affected boards and chipsets is
65       part of the release notes.
66 - [ ] Finalize release notes as much as possible
67 - [ ] Prepare release notes template for following release
68 - [ ] Update `Documentation/releases/index.md`
69 - [ ] Run `util/vboot_list/vboot_list.sh` script to update the list of
70       boards supported by vboot.
72 ### Day of release
73 - [ ] Select a commit ID to base the release upon, announce to IRC,
74       ask for testing.
75 - [ ] Test the commit selected for release.
76 - [ ] Submit release notes
77 - [ ] Create new release notes doc template for the next version.
78 - [ ] Fill in the release date, remove "Upcoming release" and other filler
79       from the current release notes.
80 - [ ] Run release script.
81 - [ ] Test the release from the actual release tarballs.
82 - [ ] Push signed Tag to repo.
83 - [ ] Announce that the release tag is done on IRC.
84 - [ ] Upload release files to web server.
85 - [ ] Also extract the release notes and place them on the web server.
86 - [ ] Upload crossgcc sources to web server.
87 - [ ] Update download page to point to files, push to repo.
88 - [ ] Write and publish blog post with release notes.
89 - [ ] Update the topic in the IRC channel that the release is done.
90 - [ ] Announce the release to the mailing list.
92 ## Pre-Release tasks
93 Announce the upcoming release to the mailing list release 2 weeks ahead
94 of the planned release date.
96 The announcement should state the planned release date, point to the
97 release notes that are in the making and ask people to test the hardware
98 they have to make sure it's working with the current master branch,
99 from which the release will ultimately be derived from.
101 People should be encouraged to provide additions to the release notes.
103 The final release notes will reside in coreboot's Documentation/releases
104 directory, so asking for additions to that through the regular Gerrit
105 process works as well. Note that git requires lots of conflict resolution
106 on heavily edited text files though.
108 Frequently, we will want to wait until particular things are in the
109 release.  Once those are in, you can select the commit ID that you want
110 to use for your release.  For the 4.6 release, we waited until we had
111 time to do the release, then pulled in a few patches that we wanted
112 to have in the release.  The release was based on the final of those
113 patches to be pulled in.
115 When a release candidate has been selected, announce the commit ID to
116 the #coreboot IRC channel, and request that it get some testing, just
117 to make sure that everything is sane.
119 ## Generate the release
120 After the commit for the release has been selected and verified, run the
121 release script - util/release/build-release.  This will download a new
122 tree, checkout the commit that you specified, download the submodules,
123 create a tag, then generate and sign the tarballs.
125 Be prepared to type in your PGP key’s passphrase.
127 ````
128 usage: util/release/build-release <version> [commit id] [username] [gpg key id]
129 Tags a new coreboot version and creates a tar archive
131 version:    New version name to tag the tree with
132 commit id:  check out this commit-id after cloning the coreboot tree
133 username:   clone the tree using ssh://USERNAME - defaults to https://
134 gpg key id: used to tag the version, and generate a gpg signature
135 ````
137 After running the script, you should have a new directory for the release,
138 along with 4 files - 2 tarballs, and 2 signature files.
140 ````
141 drwxr-xr-x   9 martin martin      4096 Apr 30 19:57 coreboot-4.6
142 -rw-r--r--   1 martin martin  29156788 Apr 30 19:58 coreboot-4.6.tar.xz
143 -rw-r--r--   1 martin martin       836 Apr 30 19:58 coreboot-4.6.tar.xz.sig
144 -rw-r--r--   1 martin martin   5902076 Apr 30 19:58 coreboot-blobs-4.6.tar.xz
145 -rw-r--r--   1 martin martin       836 Apr 30 19:58 coreboot-blobs-4.6.tar.xz.sig
146 ````
148 Here’s the command that was used to generate the 4.6 release:
149 ````
150 % util/release/build-release 4.6 db508565 Gaumless 3E4F7DF7
151 ````
153 ## Test the release from the tarballs
154 * Run “make what-jenkins-does” and verify that everything is building.
155 * Build and test qemu
156   ````
157   cp configs/config.emulation_qemu_x86_i440fx .config; make olddefconfig; make
158   qemu-system-x86_64 -bios build/coreboot.rom -serial stdio
159   ````
160 * Build and test any other platforms you can.
161 * Compare the directory from the tarballs to the coreboot repo to make sure nothing went wrong.
162 * Push the tag to git
164 A good tag will look like this:
165 ````
166 % git show 4.6
167 tag 4.6
168 Tagger: Martin Roth <martinroth@google.com>
169 Date:   Sun Apr 30 19:48:38 2017 -0600
171 coreboot version 4.6
172 -----BEGIN PGP SIGNATURE-----
173 Version: GnuPG v1
175 iQIcBAABCQAGBQJZBpP2AAoJEBl5bCs+T333xfgQAKhilfDTzqlr3MLJC4VChbmr
177 678e0NzyWsyqU1Vx2rdFdLANx6hghH1R7E5ybzHHUQrhb55BoEsnQMU1oS0npnT4
178 dwfLho1afk0ZLPUU1JFW
179 =25y8
180 -----END PGP SIGNATURE-----
182 commit db508565d2483394b709654c57533e55eebace51 (HEAD, tag: 4.6, origin/master, origin/HEAD)
184 ````
186 When you used the script to generate the release, a signed tag was generated in the
187 tree that was downloaded. From the coreboot-X.Y tree, just run: `git push origin X.Y`.
188 In case you pushed the wrong tag already, you have to force push the new one.
190 You will need write access for tags to the coreboot git repo to do this.
192 ## After the release is tagged in git
193 Announce that the release has been tagged - this lets people know that
194 they should update their trees to grab the new tag.  Until they do this,
195 the version number in build.h will still be based on the previous tag.
197 Copy the tarballs and .sig files generated by the script to
198 the coreboot server, and put them in the release directory at
199 `/srv/docker/www.coreboot.org-staticfiles/releases/`
201 ````
202 % sha256sum -b coreboot-*.tar.xz > sha256suma.txt # Update the sha256sum file
203 % diff sha256sum.txt sha256suma.txt # make sure that the two new files are present (and that nothing else has changed)
204 % mv sha256suma.txt sha256sum.txt
205 ````
207 People can now see the release tarballs on the website at
208 <https://www.coreboot.org/releases/>
210 The downloads page is the official place to download the releases from, and it needs to be updated with links to the new release tarballs and .sig files. It can be found at <https://review.coreboot.org/cgit/homepage.git/tree/downloads.html>
212 Here is an example commit to change it: <https://review.coreboot.org/c/homepage/+/19515>
214 ## Upload crossgcc sources
215 Sometimes the source files for older revisions of
216 crossgcc disappear. To deal with that we maintain a mirror at
217 <https://www.coreboot.org/releases/crossgcc-sources/> where we host the
218 sources used by the crossgcc scripts that are part of coreboot releases.
222 ````
223 % util/crossgcc/buildgcc -u
224 ````
226 This will output the set of URLs that the script uses to download the
227 sources. Download them yourself and copy them into the crossgcc-sources
228 directory on the server.
230 ## After the release is complete
231 Post the release notes on <https://blogs.coreboot.org>
233 ## Making a branch
234 At times we will need to create a branch, generally for patch fixes.
235 When making a branch, do NOT name it the same as the release tag: X.Y - this creates trouble when trying to check it out, as git can’t tell whether you want the tag or the branch.
236 Instead, name it X.Y\_branch: `git checkout 4.8; git checkout -b 4.8_branch; git push origin 4.8_branch`
238 You can then cherry-pick changes and push them up to the branch:
239 ````
240 git cherry-pick c6d134988c856d0025153fb885045d995bc8c397
241 git push origin HEAD:refs/for/4.8_branch
242 ````