blob: df27a1f3e7d7a09ebe715accbf65ce02522752d4 [file] [log] [blame]
Joakim Bech6e53df72019-09-18 16:57:23 +02001.. _releases:
2
3Releases
4########
5
6.. _releases_cadance:
7
8Cadence
9*******
10New versions of OP-TEE are released four times a year, i.e., quarterly releases.
Joakim Bech6e53df72019-09-18 16:57:23 +020011
12.. _releases_changelog:
13
14Changelog
15*********
16The changelog is stored in the :ref:`optee_os` git (CHANGELOG.md_). There you
17can see what has been done between the different releases in terms of commits as
18well as pull requests.
19
20.. _releases_versioning_schema:
21
22Versioning schema
23*****************
24OP-TEE follows `Semantic Versioning 2.0.0`_. What that means in practice is well
25described at the link just shown.
26
27.. _releases_release_procedure:
28
29Release procedure
30*****************
31There are certain steps that needs to be done when making a release. This
32checklist here serves as guidance to the one in charge of making a new release.
33Roughly start with this 2-3 weeks before the targeted release date.
34
35tl;dr
36=====
37.. list-table:: Short version of the OP-TEE release procedure
38 :widths: 60 300 10
39 :header-rows: 1
40
41 * - When
42 (Tminus)
43 - Action
44 - Example
45
46 * - 3w
47 - Create release pull request
48 - `PR#3099`_
49
50 * - 3w
51 - Inform maintainers about upcoming release
52 -
53
54 * - 1w
Jerome Forissiera42d1c12019-10-15 09:45:34 +020055 - Increment the revision number in `mk/config.mk`_
56 - ``CFG_OPTEE_REVISION_MAJOR ?= 3`` ``CFG_OPTEE_REVISION_MINOR ?= x``
57
58 * - 1w
Joakim Bech6e53df72019-09-18 16:57:23 +020059 - Create release candidate tag in optee_* + build.git
60 - git tag -a 3.x.y-rc1 -m "3.x.y-rc1"
61
62 * - 1w
63 - Let maintainers know about the release candidate tag
64 -
65
66 * - 1w
67 - Test platform builds / devices
68 -
69
70 * - Release day
71 - Update CHANGELOG.md_
72 - `changelog example`_
73
74 * - Release day
75 - Collect/merge ``Tested-By`` tags
76 - `commit example`_
77
78 * - Release day
79 - Create release tag in optee_* + build.git
80 - git tag -a 3.x.y -m "3.x.y"
81
82 * - Release day
83 - Create release branch in :ref:`manifest`
84 - git checkout -b 3.x.y origin/master
85
86 * - Release day
87 - Update manifest XML-files
88 - `3.6.0 stable`_
89
90 * - Release day
91 - Inform maintainers and stakeholder that release has been completed.
92 -
93
94
95Long version
96============
97
98 1. Create a "release pull request" at GitHub ought to collect ``Tested-By``
99 tags from various maintainers. As an example, see `PR#3099`_.
100
101 2. Send email to all maintainers to let them know about the upcoming
102 release. The addresses to the maintainers can be found in the
103 MAINTAINERS_ file.
104
105 .. hint::
Jerome Forissier50685cf2020-02-20 08:39:35 +0100106 With this command you will get all email addresses
Joakim Bech6e53df72019-09-18 16:57:23 +0200107
108 .. code-block:: bash
109
Jerome Forissier50685cf2020-02-20 08:39:35 +0100110 $ scripts/get_maintainer.py --release-to
Joakim Bech6e53df72019-09-18 16:57:23 +0200111
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200112 3. Increment the revision number in `mk/config.mk`:
113 ``CFG_OPTEE_REVISION_MAJOR`` and ``CFG_OPTEE_REVISION_MINOR``. These
114 values are made available to TAs and to the Normal World driver at boot
115 time.
116
117 4. Create a release candidate (RC) tag (annotated tag, i.e., ``git tag -a
Joakim Bech6e53df72019-09-18 16:57:23 +0200118 3.x.y-rc1 -m "3.x.y-rc1"``) in the following gits
119 ``optee_*`` and ``build.git``. One way to do it is like this
120
121 .. code-block:: bash
122
123 $ export VER=3.x.y-rc1
124 $ for d in optee* build; do ( cd $d; git tag -a $VER -m $VER ); done
125 $ for d in optee* build; do ( cd $d; git push origin $VER ); done
126
127
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200128 5. Send a follow up email to all maintainers to let them know that there is
Joakim Bech6e53df72019-09-18 16:57:23 +0200129 a release tag ready to be tested on their devices for the platforms that
130 they are maintaining.
131
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200132 6. In case major regressions are found, then fix those and create a another
Joakim Bech6e53df72019-09-18 16:57:23 +0200133 release candidate tag (i.e., repeat step 3 and 4 until there are no
134 remaining issues left).
135
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200136 7. On release day: Update CHANGELOG.md_ see this `changelog example`_ to see
Joakim Bech6e53df72019-09-18 16:57:23 +0200137 how that should look like.
138
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200139 8. Collect all tags (``Tested-By`` etc) from maintainers and use those in
Joakim Bech6e53df72019-09-18 16:57:23 +0200140 the commit message, for an example see this `commit example`_.
141
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200142 9. Create a release tag (annotated tag, i.e., ``git tag -a 3.x.y -m
Joakim Bech6e53df72019-09-18 16:57:23 +0200143 "3.x.y"``) in the following gits ``optee_*`` and ``build.git``.
144
145 .. hint::
146
Jerome Forissierfe882612020-01-28 10:48:46 +0100147 You can use the same steps as in step 4, when creating the tags.
Joakim Bech6e53df72019-09-18 16:57:23 +0200148
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200149 10. Create a new branch in :ref:`manifest` from ``master`` where the name
150 corresponds to the release you are preparing. I.e., ``git checkout -b
151 3.x.y origin/master``.
Joakim Bech6e53df72019-09-18 16:57:23 +0200152
153
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200154 11. Update all :ref:`manifest` XML-files in the :ref:`manifest` git, so they
Joakim Bech6e53df72019-09-18 16:57:23 +0200155 refer to the tag in the release we are working with (see `3.6.0 stable`_
156 commit as an example). This can be done with the make_stable.sh_ script.
157 Now it is also time to push the new branch and tag it. Example:
158
159 .. code-block:: bash
160
161 $ export VER=3.x.y
162 $ cd manifest
163 $ ./make_stable.sh -o -r $VER
164 $ git diff # make sure everything looks good
165 $ git commit -a -m "OP-TEE $VER stable"
166 $ git remote add upstream git@github.com:OP-TEE/manifest
167 $ git push upstream
Jerome Forissierc8f60612020-01-28 10:51:27 +0100168 $ git tag -a $VER -m $VER
Joakim Bech6e53df72019-09-18 16:57:23 +0200169 $ git push upstream tag $VER
170
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200171 12. Send a last email to maintainers and other stakeholders telling that the
Joakim Bech6e53df72019-09-18 16:57:23 +0200172 release has been completed.
173
174
175.. _3.6.0 stable: https://github.com/OP-TEE/manifest/commit/f181e959c21baddce82552104daf81a25f8fd898
176.. _CHANGELOG.md: https://github.com/OP-TEE/optee_os/blob/master/CHANGELOG.md
177.. _changelog example: https://github.com/OP-TEE/optee_os/commit/f398d4923da875370149ffee45c963d7adb41495#diff-4ac32a78649ca5bdd8e0ba38b7006a1e
178.. _commit example: https://github.com/OP-TEE/optee_os/commit/f398d4923da875370149ffee45c963d7adb41495
179.. _MAINTAINERS: https://github.com/OP-TEE/optee_os/blob/master/MAINTAINERS
180.. _make_stable.sh: https://github.com/OP-TEE/manifest/blob/master/make_stable.sh
181.. _PR#3099: https://github.com/OP-TEE/optee_os/pull/3099
182.. _Semantic Versioning 2.0.0: https://semver.org
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200183.. _mk/config.mk: https://github.com/OP-TEE/optee_os/blob/master/mk/config.mk