1LTP Release Procedure
2=====================
3
41. Release preparations
5-----------------------
6
7The release procedure generally takes a few weeks. In the first week or two,
8patches that should go into the release are reviewed and possibly merged. These
9patches are either fixes or patches pointed out by the community.
10
11Patch review, when finished, is followed by a git freeze, which is a period
12where only fixes are pushed to the git. During that period community is
13expected to run a LTP pre-release tests, reports problems, and/or send fixes to
14the mailing list. In this period we are especially making sure that there are
15no regressions in the test results on a wide range of distributions and
16architectures.
17
18Once the stabilization period has ended the time has finally come to proceed
19with the release.
20
212. Prepare the release notes
22----------------------------
23
24Part of the preparation is also to write the release notes, which are then
25added to the GitHub release and also sent as announcement to various mailing
26lists (see below).
27
28Have a look at https://lore.kernel.org/ltp/ZGNiQ1sMGvPU_ETp@yuki/ to get the
29idea how it should look.
30
313. Tag the git and push changes to github
32-----------------------------------------
33
34[source,sh]
35--------------------------------------------------------------------
36cd ltp
37echo YYYYMMDD > VERSION
38git commit -S -s -m 'LTP YYYYMMDD' VERSION
39git tag -s -a YYYYMMDD -m 'LTP YYYYMMDD'
40git push origin master:master
41git push origin YYYYMMDD
42--------------------------------------------------------------------
43
44NOTE: The string YYYYMMDD should be substituted to the current date.
45
46NOTE: You can use './tools/tag-release.sh' script to have the above automated.
47      It allows you to verify the tag before pushing it and does other checks.
48
49[source,sh]
50--------------------------------------------------------------------
51$ ./tools/tag-release.sh
52===== git push =====
53new tag: 'YYYYMMDD', previous tag: '20230127'
54tag YYYYMMDD
55Tagger: Person-who-released LTP <foo@example.com>
56Date:   ...
57
58LTP YYYYMMDD
59-----BEGIN PGP SIGNATURE-----
60...
61-----END PGP SIGNATURE-----
62
63commit 3ebc2dfa85c2445bb68d8c0d66e33c4da1e1b3a7
64gpg:                using RSA key ...
65...
66Primary key fingerprint: ...
67Author: Person-who-released LTP <foo@example.com>
68Date:   ...
69
70    LTP YYYYMMDD
71
72    Signed-off-by: Person-who-released LTP <foo@example.com>
73
74diff --git a/VERSION b/VERSION
75index af4c41fec..ae488c0e7 100644
76--- a/VERSION
77+++ b/VERSION
78@@ -1 +1 @@
79-20230127
80+YYYYMMDD
81
82Please check tag and signature. Proceed? [N/y]: y
83Pushing changes to upstream git. Proceed? [N/y]: y
84...
85To github.com:linux-test-project/ltp.git
86 * [new tag]             YYYYMMDD -> YYYYMMDD
87--------------------------------------------------------------------
88
894. Prepare tarballs and metadata documentation
90----------------------------------------------
91
92[source,sh]
93--------------------------------------------------------------------
94# clone already clonned git repository to new folder
95cd ..
96git clone ltp ltp-full-YYYYMMDD
97cd ltp-full-YYYYMMDD
98
99# update all submodules
100git submodule update --init
101
102# Generate configure script
103make autotools
104
105# Generate tarballs
106cd ..
107tar -cjf ltp-full-YYYYMMDD.tar.bz2 ltp-full-YYYYMMDD --exclude .git
108tar -cJf ltp-full-YYYYMMDD.tar.xz ltp-full-YYYYMMDD --exclude .git
109
110# Generate checksums
111md5 ltp-full-YYYYMMDD.tar.xz > ltp-full-YYYYMMDD.tar.xz.md5
112sha1 ltp-full-YYYYMMDD.tar.xz > ltp-full-YYYYMMDD.tar.xz.sha1
113sha256sum ltp-full-YYYYMMDD.tar.xz > ltp-full-YYYYMMDD.tar.xz.sha256
114
115# Generate metadata documentation
116./configure --with-metadata-generator=asciidoctor
117make -C metadata
118cp -v docparse/metadata.html ../metadata.YYYYMMDD.html
119--------------------------------------------------------------------
120
121NOTE: You can use './tools/create-tarballs-metadata.sh' script to have the
122	  above automated. All generated files are placed in ltp-release-YYYYMMDD
123	  directory.
124
125[source,sh]
126--------------------------------------------------------------------
127$ ./tools/create-tarballs-metadata.sh
128===== git clone =====
129Cloning into 'ltp-full-YYYYMMDD'...
130done.
131===== Update submodules =====
132Submodule 'tools/kirk' (https://github.com/linux-test-project/kirk.git) registered for path 'tools/kirk'
133...
134===== Generate configure script =====
135sed -n '1{s:LTP-:m4_define([LTP_VERSION],[:;s:$:]):;p;q}' VERSION > m4/ltp-version.m4
136aclocal -I m4
137...
138===== Generate tarballs =====
139===== Generate checksums =====
140===== Generate metadata documentation =====
141checking for a BSD-compatible install... /usr/bin/install -c
142...
143'docparse/metadata.html' -> '/home/foo/ltp-release-YYYYMMDD/metadata.YYYYMMDD.html'
144Generated files are in '/home/foo/ltp-release-YYYYMMDD', upload them to github
145--------------------------------------------------------------------
146
1475. Upload the generated files to GitHub
148---------------------------------------
149
150Click on https://github.com/linux-test-project/ltp/releases['Releases'] then
151switch to https://github.com/linux-test-project/ltp/tags['Tags'], then click on
152'Add release notes'.  There should be 'Attach binaries ...' link at the
153bottom of the page.
154
155Don't forget to upload checksums for the tarballs and metadata documentation as well.
156
1575. Send release announcement
158----------------------------
159
160The announcement is sent to:
161
162* ltp at lists.linux.it
163* linux-kernel at vger.kernel.org
164* libc-alpha at sourceware.org
165
166CCed to:
167
168* lwn at lwn.net
169* akpm at linux-foundation.org
170* torvalds at linux-foundation.org
171