release: checkVersionIncrementing: optionally allow equal versions
[olsrd.git] / release / release.bash
1 #!/bin/bash
2
3 set -e
4 set -u
5
6
7 # ##############################################################################
8 # # Settings
9 # ##############################################################################
10
11 declare MODE_BRANCH="branch"
12 declare MODE_RELEASE="release"
13
14 declare MODE_BRANCH_TXT="Branch"
15 declare MODE_BRANCH_TXT_LOWER="branch"
16 declare MODE_RELEASE_TXT="Release"
17 declare MODE_RELEASE_TXT_LOWER="release"
18
19 declare MODE_TXT=""
20 declare MODE_TXT_LOWER=""
21
22
23 # The digit representation of a basic version can be in the format 0.6.4
24 declare versionRegexDigitsBasic="([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+)"
25
26 # The digit representation of a release branch version can be in the format
27 # 0.6.4 or 0.6.4.1
28 declare versionRegexDigits="${versionRegexDigitsBasic}(\.[[:digit:]]+)?"
29
30 # The version for source code can be in the format:
31 # - 0.6.4 or 0.6.4.1 or pre-0.6.4 or pre-0.6.4.1
32 declare versionRegexSources="(|pre-)(${versionRegexDigits})"
33
34 # The version for a release tag is in the format v0.6.4 or v0.6.4.1
35 declare versionRegexReleaseTag="v(${versionRegexDigits})"
36
37 # A release branch is in the format release-0.6.4 or release-0.6.4.1
38 declare relBranchRegex="release-(${versionRegexDigits})"
39
40
41
42
43 # ##############################################################################
44 # # Functions
45 # ##############################################################################
46
47 #
48 # Print script usage
49 #
50 function usage() {
51   echo ""
52   echo "  $(basename "${script}") ${MODE_BRANCH} 0.6.4"
53   echo "    - create the release branch for version 0.6.4"
54   echo "  $(basename "${script}") ${MODE_RELEASE}"
55   echo "    - release the (checked-out) release branch"
56 }
57
58
59 #
60 # Trim a string: remove spaces from the beginning and end of the string
61 #
62 # 1=string to trim
63 # return=trimmed string
64 function stringTrim() {
65   if [[ -z "${1}" ]]; then
66     return
67   fi
68
69   # remove leading whitespace characters
70   local var="${1#${1%%[![:space:]]*}}"
71
72   # remove trailing whitespace characters
73   echo "${var%${var##*[![:space:]]}}"
74 }
75
76
77 #
78 # Get the canonical path of a file or directory
79 # This is the physical path without any links
80 #
81 # 1=the file or directory
82 function pathCanonicalPath() {
83   local src="$(stringTrim "${1}")"
84
85   if [[ -h "${src}" ]] && [[ -d "${src}" ]]; then
86     # src is a link to a directory
87     pushd . &> /dev/null
88     cd -P "${src}" &> /dev/null
89     pwd -P
90     popd &> /dev/null
91     return
92   fi
93
94   # we're not dealing with a directory here
95   while [[ -h "${src}" ]]; do
96     # keep getting the link target while src is a link
97     src="$(ls -la "${src}" | \
98            sed -r 's#^.*?[[:space:]]+->[[:space:]]+(.*)$#\1#')"
99   done
100   # src is no longer a link here
101
102   pushd . &> /dev/null
103   cd -P "$(dirname "${src}")" &> /dev/null
104   echo "$(pwd -P)/$(basename "${src}")"
105   popd &> /dev/null
106 }
107
108
109 #
110 # Determine whether a given directory is a git repository directory
111 #
112 # 1=directory
113 # return=0 not a git dir, 1 a git dir
114 function gitIsGitDirectory() {
115   local place="$(stringTrim "${1}")"
116
117   local -i result=1
118   if [[ -d "${place}" ]]; then
119     pushd "${place}" &> /dev/null
120     set +e
121     git rev-parse --git-dir &> /dev/null
122     result=${?}
123     set -e
124     popd &> /dev/null
125   fi
126
127   if [[ ${result} -ne 0 ]]; then
128     echo "0"
129   else
130     echo "1"
131   fi
132 }
133
134
135 #
136 # Go into the root of the checkout and check some key files
137 #
138 function checkIsOlsrdGitCheckout() {
139   if [[ "$(gitIsGitDirectory ".")" == "0" ]] || \
140      [[ ! -r ./Makefile.inc ]] || \
141      [[ ! -r ./files/olsrd.conf.default.full ]]; then
142     echo "* You do not appear to be running the script from an olsrd git checkout"
143     exit 1
144   fi
145 }
146
147
148 #
149 # Check that a signing key is configured
150 #
151 function checkGitSigningKeyIsConfigured() {
152   local gpgKeyId="$(git config --get user.signingkey)"
153   if [[ -z "${gpgKeyId}" ]]; then
154     cat >&1 << EOF
155 * No signing key is setup for git, please run
156     git config --global user.signingkey <key ID>
157
158   You can get keys and IDs by running 'gpg --list-keys'
159 EOF
160     exit 1
161   fi
162
163   #
164   # Check that the signing key is present
165   #
166         set +e
167         gpg --list-key "${gpgKeyId}" &> /dev/null
168         local -i gpgKeyIdPresentResult=${?}
169         set -e
170         if [[ ${gpgKeyIdPresentResult} -ne 0 ]]; then
171           cat >&1 << EOF
172 * Your signing key with ID ${gpgKeyId} is not found, please run
173     git config --global user.signingkey <key ID>
174   to setup a valid key ID.
175
176   You can get keys and IDs by running 'gpg --list-keys'
177 EOF
178           exit 1
179         fi
180 }
181
182
183 #
184 # Get the version digits from a release tag version
185 #
186 # 1=release tag version
187 # return=version digits
188 function getVersionDigitsFromReleaseTag() {
189   echo "$(stringTrim "${1}")" | sed -r "s/${versionRegexReleaseTag}/\1/"
190 }
191
192
193 #
194 # Get the previous release tag and check
195 #
196 declare prevRelTagVersion=""
197 function getPrevRelTag() {
198   set +e
199   prevRelTagVersion="$(git describe --abbrev=0 | \
200                        grep -E "^${versionRegexReleaseTag}$")"
201   set -e
202   if [[ -z "${prevRelTagVersion}" ]]; then
203     echo "* Could not find the previous release tag"
204     exit 1
205   fi
206 }
207
208
209 #
210 # Get the next version digits by incrementing the micro digit
211 #
212 # 1=version in format 0.6.4 or 0.6.4.1
213 # return=incremented version in format 0.6.5
214 function getNextVersionDigitsMicro() {
215   local version="$(stringTrim "${1}")"
216   local -a versionDigits=( ${version//\./ } )
217   local -i versionMicroNext=$(( ${versionDigits[2]} + 1 ))
218   echo "${versionDigits[0]}.${versionDigits[1]}.${versionMicroNext}"
219 }
220
221
222 #
223 # Get the next version digits by incrementing the patchlevel digit
224 #
225 # 1=version in format 0.6.4 or 0.6.4.0
226 # return=incremented version in format 0.6.4.1
227 function getNextVersionDigitsPatchLevel() {
228   local version="$(stringTrim "${1}")"
229   local -a versionDigits=( ${version//\./ } )
230   local -i versionPatchLevelNext=1
231   if [[ ${#versionDigits[*]} -ne 3 ]]; then
232     versionPatchLevelNext=$(( ${versionDigits[3]} + 1 ))
233   fi
234   echo "${versionDigits[0]}.${versionDigits[1]}.${versionDigits[2]}.${versionPatchLevelNext}"
235 }
236
237
238 #
239 # Adjust the branch name so that we can release 0.6.4.x from the
240 # release-0.6.4 branch
241 #
242 # prevTagVersionDigits  relBranchVersionDigits  relBranchVersionDigits (adjusted)
243 #       0.6.4                   0.6.4                   0.6.4.1
244 #       0.6.4                   0.6.5                   -
245 #       0.6.4                   0.6.4.5                 -
246 #       0.6.4                   0.6.5.5                 -
247 #       0.6.4.5                 0.6.4                   0.6.4.6
248 #       0.6.4.5                 0.6.5                   -
249 #       0.6.4.5                 0.6.4.6                 -
250 #       0.6.4.5                 0.6.5.6                 -
251 function adjustBranchName() {
252   local -a prevTagVersionDigitsArray=( ${prevTagVersionDigits//\./ } )
253   local -a relBranchVersionDigitsArray=( ${relBranchVersionDigits//\./ } )
254   local -i prevTagVersionDigitsCount=${#prevTagVersionDigitsArray[*]}
255   local -i relBranchVersionDigitsCount=${#relBranchVersionDigitsArray[*]}
256   local prevTagVersionTrain="$(echo "$(stringTrim "${prevTagVersionDigits}")" | \
257                                sed -r "s/${versionRegexDigits}/\1/")"
258
259   if  [[ "${prevTagVersionDigits}" == "${relBranchVersionDigits}" ]] || \
260      ([[ "${prevTagVersionTrain}"  == "${relBranchVersionDigits}" ]] && \
261       [[ ${prevTagVersionDigitsCount}   -eq 4 ]] && \
262       [[ ${relBranchVersionDigitsCount} -eq 3 ]]); then
263     relBranchVersionDigits="$(getNextVersionDigitsPatchLevel "${prevTagVersionDigits}")"
264   fi
265 }
266
267
268 #
269 # Check that the new version is incrementing
270 #
271 # 1=last version
272 # 2=new version
273 # 3= 0 to disallow equal versions as ok
274 # return (in checkVersionIncrementingResult) = 0 when new version > last version,
275 #                                              1 otherwise
276 declare -i checkVersionIncrementingResult=0
277 function checkVersionIncrementing() {
278   checkVersionIncrementingResult=0
279   local lastVersion="$(stringTrim "${1}")"
280   local newVersion="$(stringTrim "${2}")"
281   local -i allowEqualVersions=${3}
282
283   local -a lastVersionDigits=( ${lastVersion//\./ } )
284   local -a newVersionDigits=( ${newVersion//\./ } )
285
286   # if the last version is in the format 0.6.4 then assume 0.6.4.0
287   if [[ ${#lastVersionDigits[*]} -ne 4 ]]; then
288     lastVersionDigits[3]=0
289   fi
290
291   # if the new version is in the format 0.6.4 then assume 0.6.4.0
292   if [[ ${#newVersionDigits[*]} -ne 4 ]]; then
293     newVersionDigits[3]=0
294   fi
295
296   # major
297   if [[ ${newVersionDigits[0]} -lt ${lastVersionDigits[0]} ]]; then
298     checkVersionIncrementingResult=1
299     return
300   fi
301   if [[ ${newVersionDigits[0]} -gt ${lastVersionDigits[0]} ]]; then
302     return
303   fi
304
305   # minor
306   if [[ ${newVersionDigits[1]} -lt ${lastVersionDigits[1]} ]]; then
307     checkVersionIncrementingResult=1
308     return
309   fi
310   if [[ ${newVersionDigits[1]} -gt ${lastVersionDigits[1]} ]]; then
311     return
312   fi
313
314   # micro
315   if [[ ${newVersionDigits[2]} -lt ${lastVersionDigits[2]} ]]; then
316     checkVersionIncrementingResult=1
317     return
318   fi
319   if [[ ${newVersionDigits[2]} -gt ${lastVersionDigits[2]} ]]; then
320     return
321   fi
322
323   # patch level
324   if [[ ${newVersionDigits[3]} -lt ${lastVersionDigits[3]} ]]; then
325     checkVersionIncrementingResult=1
326     return
327   fi
328   if [[ ${newVersionDigits[3]} -gt ${lastVersionDigits[3]} ]]; then
329     return
330   fi
331
332   # everything is equal
333   if [[ ${allowEqualVersions} -eq 0 ]]; then
334     checkVersionIncrementingResult=1
335   fi
336   return
337 }
338
339
340 #
341 # Commit the current changes, allow an empty commit, or amend (when the commit
342 # message is the same as that of the last commit)
343 #
344 # 1=non-zero to allow an empty commit
345 # 2=commit message
346 function commitChanges() {
347   local -i allowEmpty=${1}
348   local msg="$(stringTrim "${2}")"
349
350   local lastMsg="$(git log -1 --format="%s")"
351   lastMsg="$(stringTrim "${lastMsg}")"
352   local extra=""
353   if [[ ${allowEmpty} -ne 0 ]]; then
354     extra="${extra} --allow-empty"
355   fi
356   if [[ "${msg}" == "${lastMsg}" ]]; then
357     extra="${extra} --amend"
358   fi
359   set +e
360   git commit -s -q ${extra} -m "${msg}" &> /dev/null
361   set -e
362 }
363
364
365 #
366 # Get the version from the Makefile
367 #
368 function getVersionFromMakefile() {
369   local src="Makefile"
370   local regex="([[:space:]]*VERS[[:space:]]*=[[:space:]]*)${versionRegexSources}[[:space:]]*"
371   grep -E "^${regex}\$" "${src}" | sed -r "s/^${regex}\$/\3/"
372 }
373
374
375 #
376 # Update the version in all relevant files
377 #
378 # 1=the new version (in the format of versionRegexSources)
379 function updateVersions() {
380   local newVersion="$(stringTrim "${1}")"
381
382   #
383   # Adjust debug settings in Makefile.inc
384   #
385   local src="Makefile.inc"
386   sed -ri \
387    -e 's/^[[:space:]]*DEBUG[[:space:]]*?=.*$/DEBUG ?= 1/' \
388    -e 's/^[[:space:]]*NO_DEBUG_MESSAGES[[:space:]]*?=.*$/NO_DEBUG_MESSAGES ?= 0/' \
389    "${src}"
390   set +e
391   git add "${src}"
392   set -e
393
394
395   #
396   # Adjust version in Makefile
397   #
398   local src="Makefile"
399   sed -ri "s/^([[:space:]]*VERS[[:space:]]*=[[:space:]]*)${versionRegexSources}[[:space:]]*\$/\1${newVersion}/" "${src}"
400   set +e
401   git add "${src}"
402   set -e
403
404
405   #
406   # Adjust version in win32 gui installer
407   #
408   local src="gui/win32/Inst/installer.nsi"
409   local grepStr="^([[:space:]]*MessageBox[[:space:]]+MB_YESNO[[:space:]]+\".+?[[:space:]]+olsr\.org[[:space:]]+)${versionRegexSources}([[:space:]]+.+?\"[[:space:]]+IDYES[[:space:]]+NoAbort)[[:space:]]*$"
410   local replStr="\1${newVersion}\6"
411   sed -ri "s/${grepStr}/${replStr}/" "${src}"
412   set +e
413   git add "${src}"
414   set -e
415
416
417   #
418   # Adjust version in win32 gui front-end
419   #
420   local src="gui/win32/Main/Frontend.rc"
421   local grepStr="^([[:space:]]*CAPTION[[:space:]]+\"olsr\.org[[:space:]]+Switch[[:space:]]+)${versionRegexSources}([[:space:]]*\")[[:space:]]*\$"
422   local replStr="\1${newVersion}\6"
423   sed -ri "s/${grepStr}/${replStr}/" "${src}"
424   set +e
425   git add "${src}"
426   set -e
427 }
428
429
430 #
431 # Sign a text file
432 #
433 # 1=the text file
434 function signTextFile() {
435   local txtFile="$(stringTrim "${1}")"
436   gpg -u "$(git config --get user.name)" --clearsign "${txtFile}"
437   mv "${txtFile}.asc" "${txtFile}"
438 }
439
440
441
442
443 # ##############################################################################
444 # # Main
445 # ##############################################################################
446
447 declare script="$(pathCanonicalPath "${0}")"
448 declare scriptDir="$(dirname "${script}")"
449 declare baseDir="$(dirname "${scriptDir}")"
450
451 cd "${baseDir}"
452
453 declare -i masterWasUpdated=0
454
455 #
456 # Check the number of arguments
457 #
458 if [[ ${#} -lt 1 ]]; then
459   echo "* Need at least 1 argument:"
460   usage
461   exit 1
462 fi
463
464
465 #
466 # Get the mode and check it
467 #
468 declare mode="$(stringTrim "${1}")"
469 shift 1
470 if [[ ! "${mode}" == "${MODE_BRANCH}" ]] && \
471    [[ ! "${mode}" == "${MODE_RELEASE}" ]]; then
472   echo "* Wrong mode: ${mode}"
473   usage
474   exit 1
475 fi
476
477
478 #
479 # Further mode/argument parsing
480 #
481 declare branchVersion=""
482 if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
483   MODE_TXT="${MODE_BRANCH_TXT}"
484   MODE_TXT_LOWER="${MODE_BRANCH_TXT_LOWER}"
485
486   #
487   # Get the branch version to create
488   #
489   if [[ ${#} -ne 1 ]]; then
490     echo "* Need the version to branch:"
491     usage
492     exit 1
493   fi
494   branchVersion="$(stringTrim "${1}")"
495   shift 1
496
497   #
498   # Check branch version
499   #
500   if [[ -z "$(echo "${branchVersion}" | grep -E "^${versionRegexDigitsBasic}\$")" ]]; then
501     echo "* Version to branch ${branchVersion} has invalid format"
502     echo "  Expected format is: 0.6.4"
503     exit 1
504   fi
505 else
506   MODE_TXT="${MODE_RELEASE_TXT}"
507   MODE_TXT_LOWER="${MODE_RELEASE_TXT_LOWER}"
508
509   if [[ ${#} -ne 0 ]]; then
510     echo "* Need no additional arguments."
511     usage
512     exit 1
513   fi
514 fi
515
516
517 checkIsOlsrdGitCheckout
518
519 if [[ "${mode}" == "${MODE_RELEASE}" ]]; then
520   checkGitSigningKeyIsConfigured
521 fi
522
523 getPrevRelTag
524 declare prevTagVersionDigits="$(getVersionDigitsFromReleaseTag "${prevRelTagVersion}")"
525
526
527 #
528 # Get the current branch and check that we're on a release branch (for the
529 # release mode) or on the master branch (for the branch mode)
530 #
531 declare relBranch="$(git rev-parse --abbrev-ref HEAD)"
532 declare relBranch="$(stringTrim "${relBranch}")"
533 if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
534   if [[ -z "$(echo "${relBranch}" | grep -E "^master\$")" ]]; then
535     echo "* You are not on the master branch"
536     exit 1
537   fi
538   relBranch="release-${branchVersion}"
539
540   # check that the branch does not yet exist
541   declare -i branchTestResult=0
542   set +e
543   git rev-parse --abbrev-ref "${relBranch}" &> /dev/null
544   branchTestResult=${?}
545   set -e
546   if [[ ${branchTestResult} -eq 0 ]]; then
547     echo "* Branch ${relBranch} already exists"
548     exit 1
549   fi
550 else
551   if [[ -z "$(echo "${relBranch}" | grep -E "^${relBranchRegex}\$")" ]]; then
552     echo "* You are not on a release branch (format: release-0.6.4 or release-0.6.4.1)"
553     exit 1
554   fi
555 fi
556
557
558 #
559 # Get the version to release from the current branch
560 #
561 declare relBranchVersionDigits=""
562 if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
563   relBranchVersionDigits="${branchVersion}"
564 else
565   relBranchVersionDigits="$(echo "${relBranch}" | \
566                             sed -r "s/${relBranchRegex}/\1/")"
567   adjustBranchName
568 fi
569
570 declare relTagVersion="v${relBranchVersionDigits}"
571 declare relBranchVersionDigitsNextMicro="$(getNextVersionDigitsMicro "${relBranchVersionDigits}")"
572 declare relBranchVersionDigitsNextPatchLevel="$(getNextVersionDigitsPatchLevel "${relBranchVersionDigits}")"
573
574
575 #
576 # Check that the version is incrementing
577 #
578 checkVersionIncrementing "${prevTagVersionDigits}" "${relBranchVersionDigits}" 0
579 if [[ ${checkVersionIncrementingResult} -ne 0 ]]; then
580   echo "* The new version ${relBranchVersionDigits} is not greater than the previous version ${prevTagVersionDigits}"
581   exit 1
582 fi
583
584
585 #
586 # Confirm the branch/release
587 #
588 cat >&1 << EOF
589
590
591 * All checks pass, ready to ${MODE_TXT_LOWER} ${relBranchVersionDigits}.
592
593   * The previous version found is: ${prevTagVersionDigits}
594     Note: If this is not the version you were expecting, then maybe that
595           version wasn't merged into this branch.
596   * Continuing will DESTROY any modifications you currently have in your tree!
597
598 EOF
599 read -p "Press [enter] to continue or CTRL-C to exit..."
600 echo ""
601 echo ""
602
603
604 #
605 # Clean up the checkout
606 #
607 echo "Cleaning the git checkout..."
608 git clean -fdq
609 git reset -q --hard
610
611
612 if [[ "${mode}" == "${MODE_BRANCH}" ]]; then
613   #
614   # Update the versions for branch
615   #
616   echo "Updating the version to pre-${relBranchVersionDigits}..."
617   updateVersions "pre-${relBranchVersionDigits}"
618   commitChanges 1 "${MODE_TXT} ${relTagVersion}"
619   masterWasUpdated=1
620
621   # create release branch
622   echo "Creating the release branch ${relBranch}..."
623   git branch "${relBranch}"
624
625
626   #
627   # Update the version to the next release
628   #
629   echo "Updating the version to pre-${relBranchVersionDigitsNextMicro}..."
630   updateVersions "pre-${relBranchVersionDigitsNextMicro}"
631   commitChanges 0 "Update version after ${MODE_TXT_LOWER} of ${relTagVersion}"
632 else
633   #
634   # Update the versions for release
635   #
636   echo "Updating the version to ${relBranchVersionDigits}..."
637   updateVersions "${relBranchVersionDigits}"
638   commitChanges 1 "${MODE_TXT} ${relTagVersion}"
639
640
641   #
642   # Generate the changelog
643   #
644   echo "Generating the changelog..."
645   declare src="CHANGELOG"
646   declare dst="mktemp -q -p . -t "${src}.XXXXXXXXXX""
647   cat > "${dst}" << EOF
648 ${relBranchVersionDigits} -------------------------------------------------------------------
649
650 EOF
651   git rev-list --pretty=short "${prevRelTagVersion}..HEAD" | \
652     git shortlog -w80 -- >> "${dst}"
653   cat "${src}" >> "${dst}"
654   mv "${dst}" "${src}"
655   set +e
656   git add "${src}"
657   set -e
658   commitChanges 1 "${MODE_TXT} ${relTagVersion}"
659
660
661   #
662   # Tag the release
663   #
664   echo "Tagging ${relTagVersion}..."
665   set +e
666   git tag -d "${relTagVersion}" &> /dev/null
667   set -e
668   git tag -s -m "OLSRd release ${relBranchVersionDigits}" "${relTagVersion}"
669
670
671   #
672   # Update the version to the next release
673   #
674   echo "Updating the version to pre-${relBranchVersionDigitsNextPatchLevel}..."
675   updateVersions "pre-${relBranchVersionDigitsNextPatchLevel}"
676   commitChanges 1 "Update version after ${MODE_TXT_LOWER} of ${relTagVersion}"
677
678
679   #
680   # Update the version (on the master branch) to the next release
681   #
682   echo "Updating the version to pre-${relBranchVersionDigitsNextMicro} on the master branch..."
683   git checkout -q master
684   git clean -fdq
685   git reset -q --hard
686
687   declare oldMasterVersion="$(getVersionFromMakefile)"
688   declare newMasterVersion="${relBranchVersionDigitsNextMicro}"
689   checkVersionIncrementing "${oldMasterVersion}" "${newMasterVersion}" 0
690   if [[ ${checkVersionIncrementingResult} -ne 0 ]]; then
691     echo "* Skipped updating the version on the master branch:"
692     echo "  The new version ${newMasterVersion} is not greater than the previous version ${oldMasterVersion}"
693   else
694     updateVersions "pre-${relBranchVersionDigitsNextMicro}"
695     commitChanges 0 "Update version after ${MODE_TXT_LOWER} of ${relTagVersion}"
696     masterWasUpdated=1
697   fi
698
699   git checkout -q "${relBranch}"
700   git clean -fdq
701   git reset -q --hard
702
703
704   #
705   # Make the release tarballs
706   #
707   echo "Generating the release tarballs..."
708   declare tarFile="${scriptDir}/olsrd-${relBranchVersionDigits}.tar"
709   declare tarGzFile="${tarFile}.gz"
710   declare tarBz2File="${tarFile}.bz2"
711   git archive --format=tar --prefix="olsrd-${relBranchVersionDigits}/" --output="${tarFile}" "${relTagVersion}"
712   gzip   -c "${tarFile}" > "${tarGzFile}"
713   bzip2  -c "${tarFile}" > "${tarBz2File}"
714   rm -f "${tarFile}"
715   echo "Generating the release tarball checksums..."
716   declare md5File="${scriptDir}/MD5SUM-${relBranchVersionDigits}"
717   declare sha256File="${scriptDir}/SHA256SUM-${relBranchVersionDigits}"
718   md5sum    "${tarGzFile}" "${tarBz2File}" > "${md5File}"
719   sha256sum "${tarGzFile}" "${tarBz2File}" > "${sha256File}"
720   echo "Signing the release tarball checksums..."
721   signTextFile "${md5File}"
722   signTextFile "${sha256File}"
723 fi
724
725
726 echo "Done."
727
728
729 echo ""
730 echo ""
731 echo "==================="
732 echo "=   Git Updates   ="
733 echo "==================="
734 if [[ ${masterWasUpdated} -ne 0 ]]; then
735   echo "Branch : master"
736 fi
737 echo "Branch : ${relBranch}"
738 if [[ "${mode}" == "${MODE_RELEASE}" ]]; then
739   echo "Tag    : ${relTagVersion}"
740   echo ""
741   echo ""
742
743
744   echo "==================="
745   echo "= Generated Files ="
746   echo "==================="
747   cat >&1 << EOF
748 ${tarGzFile}
749 ${tarBz2File}
750 ${md5File}
751 ${sha256File}"
752 EOF
753 fi
754
755
756 echo ""
757 echo ""
758 echo "==================="
759 echo "= Manual Actions  ="
760 echo "==================="
761 if [[ "${mode}" == "${MODE_RELEASE}" ]]; then
762   echo "1. Check that everything is in order. For example, run:"
763   if [[ ${masterWasUpdated} -ne 0 ]]; then
764     echo "     gitk master ${relBranch} ${relTagVersion}"
765   else
766     echo "     gitk ${relBranch} ${relTagVersion}"
767   fi
768   echo "2. Push. For example, run:"
769   if [[ ${masterWasUpdated} -ne 0 ]]; then
770     echo "     git push origin master ${relBranch} ${relTagVersion}"
771   else
772     echo "     git push origin ${relBranch} ${relTagVersion}"
773   fi
774   echo "3. Upload the generated files to"
775   echo "     http://www.olsr.org/releases/${relBranchVersionDigits}"
776   echo "4. Add a release article on olsr.org."
777   echo ""
778 else
779   echo "1. Check that everything is in order. For example, run:"
780   if [[ ${masterWasUpdated} -ne 0 ]]; then
781     echo "     gitk master ${relBranch}"
782   else
783     echo "     gitk ${relBranch}"
784   fi
785   echo "2. Push. For example, run:"
786   if [[ ${masterWasUpdated} -ne 0 ]]; then
787     echo "     git push origin master ${relBranch}"
788   else
789     echo "     git push origin ${relBranch}"
790   fi
791   echo "3. Send a 'release branch created' email to olsr-dev@lists.olsr.org."
792   echo ""
793 fi
794