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

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