source: trunk/FACT++/erfa/RELEASE.rst@ 18614

Last change on this file since 18614 was 18348, checked in by tbretz, 9 years ago
File size: 7.6 KB
Line 
1Instructions for releasing ERFA
2===============================
3
4* Clone the ERFA repository from github (if you haven't already done so),
5 and change to the ERFA directory.
6
7* Make sure you are on the "master" branch from the "liberfa" github
8 repository and have the latest version (if you have a fresh clone, this
9 should already be the case).
10
11* If a new version of SOFA exists, run `sofa_deriver.py` from the `erfa-fetch
12 repository`_ in its own directory. That will create a directory called `erfa`
13 inside the `erfa-fetch` directory, and you should copy its contents to the
14 `src` directory of `erfa`. Use ``git diff`` in `erfa` to inspect the changes,
15 and then commit and push them to github.
16
17* Update the version number in the `AC_INIT` macro of `configure.ac` to
18 the version number you are about to release, and also update the version
19 mentioned in `README.rst`. Follow the instructions in
20 `Version numbering` below.
21
22* Update the version info of the shared library in the `ERFA_LIB_VERSION_INFO`
23 macro of `configure.ac`. Follow the instructions in `Version numbering` below.
24
25* Commit these changes using ``git commit``, with a commit message like
26 ``Preparing release v0.0.1``.
27
28* Run `./bootstrap.sh`: you need `automake`, `autoconf` and `libtool`
29 installed. If no errors appear, this will create a new `./configure`
30 file.
31
32* Run ``./configure``, which should create a `Makefile` in the top level
33 directory and in ./src
34
35* Run ``make check``, which will build the library and run the tests -
36 make sure they pass before proceeding.
37
38* Run ``make distcheck``: this creates the distribution tarball,
39 unpackages it and runs the check inside the untarred directory.
40 The resulting tarball will be named e.g., `erfa-0.0.1.tar.gz` and
41 will be placed in the working directory.
42
43* Tag the current commit with the version number. A signed tag is preferred if you have an a signing key (e.g., do ``git tag -s v0.0.1``).
44
45* Push up your changes and the new tag to github:
46 ``git push --tags origin master``. (The command here assumes the git remote
47 "origin" points to the "liberfa/erfa" repository. If not, substitute the
48 appropriate name.)
49
50* Go to the "liberfa/erfa" repository for the github page, and click on the
51 "releases" button, and then the release corresponding to the tag you just
52 made.
53
54* Click on the "Draft release notes or downloads" button (or it might be "Edit release"). Put the version number as
55 the title (e.g., ``v0.0.1``)and for the description put
56 ``See `README.rst` for release notes.``
57
58* Upload the tarball you created (e.g., `erfa-0.0.1.tar.gz`) by dropping it
59 in the area that says "Attach binaries for this release by dropping them
60 here."
61
62* Click the "Publish release" button.
63
64* Update the release listing on Github Pages to include this release:
65 Do ``git checkout gh-pages``, add a new ``<li>...</li>`` entry for the
66 release in `index.html`, do ``git commit``, and then
67 ``git push origin gh-pages``.
68
69Version numbering
70=================
71
72ERFA needs to provide two different version numbers. You need to update both.
73The first is the
74**package version number** or **version number** proper. ERFA uses
75`semantic versioning <http://semver.org/>`_ to create this number.
76For more on this choice, see
77`liberfa/erfa#6 <https://github.com/liberfa/erfa/issues/6>`_.
78
79The second number is `shared library version info`. When a program has been
80linked with the ERFA shared library, the dynamic linker checks the version
81info of the library requested by the program with those of the libraries
82present if the system. This version info is important to binary distributions
83(such as Linux distributions). ERFA uses `libtool versioning <http://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html>`_.
84
85
86Package version number
87----------------------
88
89Semantic versioning dictates how to change the version number according to
90changes to the API of the library. In the case of ERFA the API is:
91
92 * The public C macros defined in erfam.h
93 * The names, return types, number of arguments and types of the functions in erfa.h
94
95To update the package version, the release manager has to check the relevant
96information about the release, such as:
97
98 * upstream SOFA documentation in http://www.iausofa.org/current_changes.html
99 * relevant bug reports in the github project page
100
101If the version is given in the form MAJOR.MINOR.PATCH, then
102
103 * if there is a backwards incompatible change (function removed, types of
104 arguments altered, macros renamed...) then increase MAJOR by one and set
105 the others to zero.
106 * else if there is backwards compatible change (new function added or
107 new macro added) then do not change MAJOR, increase MINOR by one and
108 set PATCH to zero.
109 * else
110 you are either fixing a bug or making other improvements. Increase
111 patch by one and do not change the others.
112
113Change the version number in the `AC_INIT` macro and in `README.rst`
114
115Shared library version info
116---------------------------
117
118For the shared library version info, we are only interested in a subset of
119the API, the **interfaces of the shared library**. As the C macros are
120interpolated away at compile time, the interfaces in the ERFA
121shared library are:
122
123 * The names, return types, number of arguments and types of the functions
124
125Again, the release manager has to review the relevant information:
126
127 * upstream SOFA documentation in http://www.iausofa.org/current_changes.html
128 * relevant bug reports in the github project page
129
130The shared library version info is stored in three numbers called *current*, *revision* and *age*. These numbers appear in the macro `ERFA_LIB_VERSION_INFO` in
131the mentioned order.
132
133If the version is given in the form CURRENT,REVISION,AGE then
134
135 * if there is a backwards incompatible change (function removed, types of
136 arguments altered...) then increase CURRENT by one and set
137 the others to zero (c,r,a -> c+1,0,0).
138 * else if there is backwards compatible change (new function added)
139 then increase both CURRENT and AGE by one, set REVISON to zero
140 (c,r,a -> c+1,0,a+1).
141 * else if the library code has been modified at all
142 then increase REVISION by one (c,r,a -> c,r+1,a)
143 * else
144 do not change the version info (c,r,a -> c,r,a)
145
146Change the verion info in `ERFA_LIB_VERSION_INFO`
147
148Examples
149---------
150We start with ERFA version 1.0.0 and library version info 0,0,0
151
152* SOFA makes a new release. A function is added and two functions change their
153 arguments. This is a backawars incompatible change, so the new package will
154 have version 2.0.0 and the shared library version info will be 1,0,0
155
156* We forgot to add README.rst to the release. We make a new one. The change
157 is a bugfix (no API changes), the new release will be 2.0.1. The shared
158 library version is not modified (no changes in the library source code).
159
160* SOFA makes a new release. They just add a new function. The new package
161 version will be 2.1.0. The shared library info will be 2,0,1 (both current
162 and age are incremented).
163
164* SOFA makes a new relase fixing some bugs in the code without changing the
165 API. New package version is 2.1.1. The shared library version is 2,1,1
166
167* A contributor finds a bug in ERFA. The fix doesn't change the API. New
168 package version is 2.1.2. The shared library version is 2,2,1
169
170* SOFA makes a new release incorporating the bug fix and adding new functions.
171 The new package version is 2.2.0. The shared library version is 3,0,2
172
173* SOFA makes a new release removing functions. This is a backawars
174 incompatible change, so the new package will
175 have version 3.0.0 and the shared library version info will be 4,0,0
176
177.. _erfa-fetch repository: https://github.com/liberfa/erfa-fetch
Note: See TracBrowser for help on using the repository browser.