Project

General

Profile

Make a new release » History » Version 34

msuraev, 08/28/2017 09:14 AM

1 22 msuraev
{{>toc}}
2
3 2 neels
h1. Make a new release
4 1 neels
5 13 msuraev
The efforts to automate the release process are tracked in https://projects.osmocom.org/issues/1861
6
7 17 msuraev
h2. When to make a new release
8 1 neels
9 16 msuraev
Various Osmocom projects depend on others.
10 1 neels
11 28 msuraev
*FIXME:* following part is disputable and should be fixed
12 29 msuraev
13 16 msuraev
As soon as a feature is added to one Osmocom project that is needed for another dependent project to compile, we should tag at least a minor-revision bump in the depended-upon project and require it in the depending project's configure.ac. To illustrate, let's look at this example:
14
15 1 neels
Among others, @openbsc@ depends on the libraries built from @libosmocore@, for example @libosmogsm@.
16
As soon as the @libosmogsm@ library gets a new feature used by @openbsc@, like something was added to
17
@gsm_utils.h@, we shall
18 6 neels
* tag a release in @libosmocore@; say if the previous version was 0.1.2, make it at least 0.1.3.
19 1 neels
* and in @openbsc@, require @libosmogsm@ >= 0.1.3 in @configure.ac@
20 16 msuraev
21 28 msuraev
*Proposed policy:*
22 16 msuraev
* master branch is expected to depend on latest master branches of depended-upon projects
23 24 msuraev
* make release of depended-upon projects if necessary before making non-library project release
24
* make sure that we have correct version dependencies before making non-library project release
25 1 neels
26 25 msuraev
Alternatively/additionally we can make timely releases (once per XX months? before every OsmoDevCon?) of non-library projects (and corresponding depended-upon libraries) to avoid batching too many changes together and to adhere to RERO better - see http://scalare.org/wp-content/uploads/2015/06/2015-Why-and-HowShould-OpenSource-ProjectsAdopt-Time-Based-Releases.pdf
27 20 msuraev
28 17 msuraev
h2. How to make a new release
29
30 33 msuraev
First we outline specific steps for different project types, than common part.
31 30 msuraev
32 17 msuraev
h3. Library release
33
34 30 msuraev
* modify @*_LIBVERSION@ in @Makefile.am@ as necessary according to TODO-RELEASE file
35 1 neels
36 34 msuraev
The release helper is trying to be smart about it and prevent making new library release with non-empty TODO-RELEASE file if @*_LIBVERSION@ is not adjusted beforehand.
37
38 1 neels
h3. Non-library release
39
40 30 msuraev
* nothing special is required ATM
41 1 neels
42 30 msuraev
h3. Common steps
43 1 neels
44 30 msuraev
Be default @make release@ prepares 'patch' release but you can manually specify any of 'major/minor/patch' as necessary - see http://semver.org/ for details.
45 1 neels
46 30 msuraev
* run @make REL=minor release@
47
* inspect the latest commit which was just created
48 32 msuraev
* adjust it if necessary and re-sign (see [[Make_a_new_release#How-to-retag-a-new-release|Re-tag new release]])
49 30 msuraev
* push commit for review using @git review -f@ (see [[Gerrit]] for alternatives)
50
* push the release tag by @git push gerrit --tags@
51 1 neels
52 30 msuraev
h3. How to (re)tag a new release
53 1 neels
54 30 msuraev
* run @git tag -s 0.4.0 -f -m "Release v0.4.0 on 2017-08-25."@
55
56
This will automatically (re)sign the latest commit. You can specify which commit to sign explicitly.
57 3 neels
58 1 neels
Say, for example, the git hash is @012342abcdefg@ and the next open version is 0.1.3:
59 9 neels
<pre>
60 1 neels
git tag -s 0.1.3 012342abcdefg -m "release 0.1.3"
61
</pre>
62 8 neels
63 1 neels
(If @gpg@ complains, see [[Make a new release#GPG-Have-a-matching-user-id|GPG: Have a matching user id]].)
64 4 neels
65 1 neels
Verify that git picks up the new version tag:
66
<pre>
67
$ git describe
68
0.1.3-3-g1f95179
69
</pre>
70 11 neels
71
*For your local build, _nothing will change_ until you delete the @.version@ file
72
and completely rebuild:*
73 1 neels
74
<pre>
75 10 neels
rm .version
76
autoreconf -fi
77 1 neels
./configure
78
make
79
cat .version
80
</pre>
81
82
This should show the same as @git describe@.
83
84
When you're convinced that all is in order, push the new tag:
85
86
<pre>
87
git push origin 0.1.3
88
</pre>
89 14 neels
90 1 neels
If anything went wrong, you can delete the tag (locally) by
91 15 msuraev
<pre>
92 14 neels
git tag -d 0.1.3
93
</pre>
94
and, if you've already pushed it, by
95
<pre>
96
git push --delete origin 0.1.3
97 1 neels
</pre>
98 26 msuraev
99
h2. Deprecation policy
100 27 msuraev
101 26 msuraev
Functions/interfaces marked as deprecated for X releases of type Y can be removed in next Z release.
102 27 msuraev
103 26 msuraev
TBD: what's appropriate value for X? which Y and Z (from major/minor/patch) should we use?
104 1 neels
105
h2. GPG: Have a matching user id
106
107
By default, @git tag -s@ takes your author information to lookup the secret GPG key to sign a tag with.
108
If the author+email do not exactly match one of the key's @uid@s, you will get this error:
109
110
<pre>
111
gpg: signing failed: secret key not available
112
</pre>
113
114
Verify: say, your author+email info in your git config says "John Doe <john@doe.net>", try
115
<pre>
116
gpg --list-secret-keys "John Doe <john@doe.net>"
117
</pre>
118
If this fails, GPG won't find the right key automatically.
119
120
Ways to resolve:
121
122
* Use @git tag -u <key-id>@
123
* Edit your secret key to add a uid that matches your author information
124
<pre>
125
gpg --edit-key john@doe.net
126
gpg> adduid
127
# enter details to match the git author
128
gpg> save
129
</pre>
Add picture from clipboard (Maximum size: 48.8 MB)