blob: fc0e4ea8da62857c552cec6774da09460f07f9e8 [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
Jerome Forissier3bf08722020-07-01 17:29:30 +020079 - Create release tag in optee_* + build.git + linux.git
80 - | git tag -a 3.x.y -m "3.x.y"
81 | git tag -a optee-3.x.y -m "optee-3.x.y" # (Linux)
Joakim Bech6e53df72019-09-18 16:57:23 +020082
83 * - Release day
84 - Create release branch in :ref:`manifest`
85 - git checkout -b 3.x.y origin/master
86
87 * - Release day
88 - Update manifest XML-files
89 - `3.6.0 stable`_
90
91 * - Release day
92 - Inform maintainers and stakeholder that release has been completed.
93 -
94
95
96Long version
97============
98
99 1. Create a "release pull request" at GitHub ought to collect ``Tested-By``
100 tags from various maintainers. As an example, see `PR#3099`_.
101
102 2. Send email to all maintainers to let them know about the upcoming
103 release. The addresses to the maintainers can be found in the
104 MAINTAINERS_ file.
105
106 .. hint::
Jerome Forissier50685cf2020-02-20 08:39:35 +0100107 With this command you will get all email addresses
Joakim Bech6e53df72019-09-18 16:57:23 +0200108
109 .. code-block:: bash
110
Jerome Forissier50685cf2020-02-20 08:39:35 +0100111 $ scripts/get_maintainer.py --release-to
Joakim Bech6e53df72019-09-18 16:57:23 +0200112
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200113 3. Increment the revision number in `mk/config.mk`:
114 ``CFG_OPTEE_REVISION_MAJOR`` and ``CFG_OPTEE_REVISION_MINOR``. These
115 values are made available to TAs and to the Normal World driver at boot
116 time.
117
118 4. Create a release candidate (RC) tag (annotated tag, i.e., ``git tag -a
Joakim Bech6e53df72019-09-18 16:57:23 +0200119 3.x.y-rc1 -m "3.x.y-rc1"``) in the following gits
120 ``optee_*`` and ``build.git``. One way to do it is like this
121
122 .. code-block:: bash
123
124 $ export VER=3.x.y-rc1
125 $ for d in optee* build; do ( cd $d; git tag -a $VER -m $VER ); done
126 $ for d in optee* build; do ( cd $d; git push origin $VER ); done
127
128
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200129 5. Send a follow up email to all maintainers to let them know that there is
Joakim Bech6e53df72019-09-18 16:57:23 +0200130 a release tag ready to be tested on their devices for the platforms that
131 they are maintaining.
132
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200133 6. In case major regressions are found, then fix those and create a another
Joakim Bech6e53df72019-09-18 16:57:23 +0200134 release candidate tag (i.e., repeat step 3 and 4 until there are no
135 remaining issues left).
136
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200137 7. On release day: Update CHANGELOG.md_ see this `changelog example`_ to see
Joakim Bech6e53df72019-09-18 16:57:23 +0200138 how that should look like.
139
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200140 8. Collect all tags (``Tested-By`` etc) from maintainers and use those in
Joakim Bech6e53df72019-09-18 16:57:23 +0200141 the commit message, for an example see this `commit example`_.
142
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200143 9. Create a release tag (annotated tag, i.e., ``git tag -a 3.x.y -m
Jerome Forissier3bf08722020-07-01 17:29:30 +0200144 "3.x.y"``) in the following gits ``optee_*`` and ``build.git``. Tag the
145 tip of the ``optee`` branch in ``linux.git``, the name of the tag has
146 to be prefixed with ``optee-`` to avoid confusions. For instance:
147 ``git tag -a optee-3.x.y -m "optee-3.x.y"``.
Joakim Bech6e53df72019-09-18 16:57:23 +0200148
149 .. hint::
150
Jerome Forissierfe882612020-01-28 10:48:46 +0100151 You can use the same steps as in step 4, when creating the tags.
Joakim Bech6e53df72019-09-18 16:57:23 +0200152
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200153 10. Create a new branch in :ref:`manifest` from ``master`` where the name
154 corresponds to the release you are preparing. I.e., ``git checkout -b
155 3.x.y origin/master``.
Joakim Bech6e53df72019-09-18 16:57:23 +0200156
157
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200158 11. Update all :ref:`manifest` XML-files in the :ref:`manifest` git, so they
Joakim Bech6e53df72019-09-18 16:57:23 +0200159 refer to the tag in the release we are working with (see `3.6.0 stable`_
160 commit as an example). This can be done with the make_stable.sh_ script.
161 Now it is also time to push the new branch and tag it. Example:
162
163 .. code-block:: bash
164
165 $ export VER=3.x.y
166 $ cd manifest
167 $ ./make_stable.sh -o -r $VER
168 $ git diff # make sure everything looks good
169 $ git commit -a -m "OP-TEE $VER stable"
170 $ git remote add upstream git@github.com:OP-TEE/manifest
171 $ git push upstream
Jerome Forissierc8f60612020-01-28 10:51:27 +0100172 $ git tag -a $VER -m $VER
Joakim Bech6e53df72019-09-18 16:57:23 +0200173 $ git push upstream tag $VER
174
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200175 12. Send a last email to maintainers and other stakeholders telling that the
Joakim Bech6e53df72019-09-18 16:57:23 +0200176 release has been completed.
177
178
179.. _3.6.0 stable: https://github.com/OP-TEE/manifest/commit/f181e959c21baddce82552104daf81a25f8fd898
180.. _CHANGELOG.md: https://github.com/OP-TEE/optee_os/blob/master/CHANGELOG.md
181.. _changelog example: https://github.com/OP-TEE/optee_os/commit/f398d4923da875370149ffee45c963d7adb41495#diff-4ac32a78649ca5bdd8e0ba38b7006a1e
182.. _commit example: https://github.com/OP-TEE/optee_os/commit/f398d4923da875370149ffee45c963d7adb41495
183.. _MAINTAINERS: https://github.com/OP-TEE/optee_os/blob/master/MAINTAINERS
184.. _make_stable.sh: https://github.com/OP-TEE/manifest/blob/master/make_stable.sh
185.. _PR#3099: https://github.com/OP-TEE/optee_os/pull/3099
186.. _Semantic Versioning 2.0.0: https://semver.org
Jerome Forissiera42d1c12019-10-15 09:45:34 +0200187.. _mk/config.mk: https://github.com/OP-TEE/optee_os/blob/master/mk/config.mk