1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
|
# Developer notes on creating releases
Since the move to git, the old process we followed to push development
snapshots and stable releases to SourceForge is no longer possible,
nor especially helpful. With git and github, we are doing away with
the concept of development snapshots, because one can always just
download a tarball of the current repo state from github. We are also
simplifying the stable release process, doing away with the difference
between building a tarball release and building from a git clone.
## Development snapshots
Xastir migrated to git and github instead of cvs and sourceforge, and
therefore creating "development snapshots" isn't necessary, because
every commit is essentially a development snapshot that can be checked
out by referencing its SHA-1 hash. Furthermore, github allows users
to download code as a tarball directly without needing to clone, so we
need not make a duplicate process for it.
## Stable Releases
Stable releases are the enduring, numbered releases that tend to make
it into official package repositories (eventually). It is necessary
to do more for these releases than just tag a repository state,
because most package management systems require that a stable version
of the code be downloadable, and don't support pulling
versions-of-the-day out of source code management systems.
Beginning with release 2.1.8 we stopped providing "configure" scripts
and all the droppings from "bootstrap.sh" in release tarballs, and all
users must now use "bootstrap.sh" as a first step in building Xastir.
### Stable release process in a nutshell
- Get master ready for a release.
- Update version number.
- Test everything.
- Tag the repo.
- Push the repo and the tag to Github.
- Define a release on github and associate it with the tag.
- Email interested parties that there has been a release.
- Go back and update the version number on master and move on.
### Stable release in gory detail
- Make sure the current state of the master branch is what you want to
release. This should include all documentation updates and help
file updates. Only when the master branch is really ready to
release do you perform the following steps. Let's assume we're
creating release X.Y.Z, and that our Xastir clone and working
directory is in ~/XASTIR/Xastir.
- By our long-standing convention, stable releases are always even
numbers in the last field of the release number, and odd numbers
mean "this is a development version." So whatever version number
appears in configure.ac on the master branch is going to be odd at
the moment, and you're going to pick X.Y.Z so that the new Z is
even.
- Change the version number in configure.ac to X.Y.Z. Grep around the
code and remember to fix any other places where the old version
string appears (there should, at this point, not be any). Commit
this change:
git add configure.ac
git commit
Mention why you're doing this in the commit message (e.g., "Update
release version number"). Follow our commit log message guidance in
CONTRIBUTING.md
- Run bootstrap.sh or "autoreconf -i"
- Make sure the program builds, and do so in a fresh build directory,
just as a first-time user would have to do:
mkdir build-release-check
cd build-release-check
../configure [options]
make
cd ..
If the code builds you should be in good shape, and you should also
try querying the binary it produced to have it print its version:
build-release-check/src/xastir -V
Confirm that it is reporting the version you expect it to. It will
have additional decorations indicating stuff about git, ignore those.
For safety's sake, you should remove the build directory now, too.
rm -rf build-release-check
- You now have a working directory that should look like what we want
to distribute to users. Check that there are no uncommitted
changes:
git status
should tell you you're on master, and that you're one commit ahead
of "origin/master", with nothing to commit and a clean working tree.
If it says anything else, figure out why and get the current working
tree to the right state, with all important changes committed
properly.
- Create an annotated tag marking the current state of the repo as
your new release:
git tag -a -m "Xastir Release X.Y.Z" Release-X.Y.Z
- At this point, you are almost done, but all of your changes are only
in your local repository clone. Double check that it really works
by creating a tar file of your code from the tagged state, then try
to build it somewhere other than in your git checkout directory:
git archive --format=tar.gz --prefix=Xastir-Release-X.Y.Z/ Release-X.Y.Z > ~/src/Xastir-Release-X.Y.Z.tar.gz
This process will exactly reproduce what Github will be doing when
we're finished and actually create the release. Now make sure it builds:
cd ~/src
tar xzf Xastir-Release-X.Y.Z.tar.gz
cd Xastir-Release-X.Y.Z
./bootstrap.sh # You could also use "autoreconf -i"
mkdir build
cd build
../configure [options]
make
- If the sanity check above worked, you can throw away the testing
tarball and unpacked code:
cd ~/src
rm -rf Xastir-Release-X.Y.Z Xastir-Release-X.Y.Z.tar.gz
- If the sanity check did NOT work, then you need to go back to
your original working directory and fix any problems you found.
Commit your changes, and then MOVE THE TAG so it points to your
NEW proposed release:
git tag -d Release-X.Y.Z
git tag -a -m "Xastir Release X.Y.Z" Release-X.Y.Z
Now go back and redo the sanity check. Repeat until the tarball
you created actually produces a working Xastir.
- Now go back to your working directory and finish up by pushing the
code and tag to Github:
cd ~/XASTIR/Xastir
git push origin master
git push origin Release-X.Y.Z
- Log in to github and go to the Xastir project releases page at
http://github.com/Xastir/Xastir/releases. Click the "Draft a new
release" button. Put your tag name (Release-X.Y.Z) into the
dialog box that says "Tag version" and Github will display a note
that it found a matching, existing tag. Fill in the rest of the
form:
- Give the release a name ("Xastir Release X.Y.Z") that will
appear prominently above it in the releases list.
- Enter some release notes in the large text box below the title
where it says "Describe this release." Ideally, you should list
release highlights (new features, bug fixes, etc.). Use
Markdown to pretty up the text, using the Preview tab to render
the markdown until it looks the way you want it to.
- Click "Publish Release."
- You have finished releasing the code as far as Github is concerned.
This new release will now appear on the "Releases" page, along with
links to tar and zip files for the source code and the release notes
you just created. The fixed URL
https://github.com/Xastir/Xastir/releases/latest will always point
to the most recent release. The source code download link will be
https://github.com/Xastir/Xastir/archive/Release-X.Y.Z/Xastir-Release-X.Y.Z.tar.gz
with the obvious change for the zip version.
- The last step here is to announce the new release in all the usual
places. These days it is probably enough to announce it on the
xastir mailing list, and possibly the aprssig and linux-hams groups.
No need to spam every ham radio mailing list. On the other hand,
the Xastir wiki does recommend sending notification of all releases
(both development and stable) to:
- xastir at xastir.org
- nwaprssig at nwaprs.info
- aprssig at tapr.org
- aprsnews at tapr.org
- macaprs at yahoogroups.com
- aprs at yahoogroups.com
and stable releases to:
- SAR_APRS at yahoogroups.com
- CSAR at yahoogroups.com
- aprs at mailman.qth.net
- linux-hams at vger.kernel.org
- linux at tapr.org
- linux-hams-using-ax25 at yahoogroups.com
This list is probably excessive nowadays, and probably contains a
lot of groups that are long gone.
#### Getting master ready to move on
All of this work got the X.Y.Z release done, which has now been
finished and pushed to github. Now we need to change the version
number on the master branch so that development versions show a
different version than releases.
- Make sure you're still in your master branch in your main clone:
cd ~/src/Xastir
git checkout master
- Edit configure.ac and change the version number to be one higher than the
release you just did. So if you just pushed release 2.1.8, set the
version to 2.1.9.
- Commit this change and push it to github.
git add configure.ac
git commit
git push
The release is done, and now the repo is ready for further development.
|