Fix multi-leg promotions
[xboard.git] / doc-maint / make-xboard-release
1 #!/bin/bash
2
3 # the script will check out the correct branch, run "make distcheck",
4 # tag git, and upload the files to the GNU server.
5
6 # you need to have your GPG key registered with the GNU people for the upload to work!
7
8 # the script includes some minimal error checking and tries to automate the following:
9 #  * check if the commit is already tagged
10 #  * if version number includes a date like 20120304 (to be exact *20??????), 
11 #    it will create a developer release otherwise a normal release
12 #  * if you have local tags that you don't want to upload, you need to add them further down to git tag -d ...
13
14 # you need to set the following to reasonable value for the script to work
15
16 # the script at the moment also only works for master and branches called v4*, easy to change in the script though
17 GITDIR=/home/arun/src/Prog/xboard
18 UPLOADDIR=/home/arun/tmp/xboard-upload
19 GPGKEYID="F51BC536"
20
21 # default: make a release from master
22 BRANCH="master"
23
24 function usage () {
25     echo >&2 "usage: $0 [-b branch]"
26     }
27
28 # check if we want to make a release from another branch
29 while getopts b: opt
30 do
31     case "$opt" in
32       b)  BRANCH="$OPTARG";;
33       \?) # unknown flag
34           usage 
35           exit 1;;
36     esac
37 done
38 shift `expr $OPTIND - 1`
39
40 if [ $# -gt 0 ] ; then
41     usage
42     exit 1
43 fi
44
45 # output information to the user and ask for confirmation
46 echo " Tagging and uploading new xboard release to GNU"
47 echo "   branch: $BRANCH"
48 echo ""
49
50 # go into a tmp directory, clone xboard, check out branch
51
52 cd $GITDIR
53
54 TEX=tex
55
56 git checkout $BRANCH
57
58 read -n 1 -p "Should be on correct branch now. Continue?" REPLY
59
60 # get version information
61
62 VERSION=`grep AC_INIT configure.ac | sed -e 's/^.*\[.*\],\[\(.*\)\],.*$/\1/' `
63
64 #make sure we don't do things too often
65 RESULT=`git tag | grep "^$VERSION\$"`
66 if [ "$RESULT" != "" ] ; then
67     echo "this version is already tagged... exiting."
68     exit 1
69 fi
70
71 #################
72
73 # output some summary information and have user confirm it
74
75 if [[ $BRANCH == v4* ]] ; then
76     TAGNAME=v$VERSION
77 else
78     TAGNAME=$VERSION
79 fi
80
81 FTPSERVER="ftp-upload.gnu.org"
82 if [[ $VERSION == *20?????? ]] ; then
83     TAGMESSAGE="new developer release"
84     FTPDIR="incoming/alpha"
85 else
86     TAGMESSAGE="new release of version $VERSION"
87     FTPDIR="incoming/ftp"
88 fi
89
90 # ask for confirmation from user
91 echo " make sure that you are on the right commit (should be the one that changes the version number)!"
92 echo "  version will be tagged as:  $TAGNAME"
93 echo "  tar ball will be named:   xboard-${VERSION}.tar.gz "
94 echo "  tag message: $TAGMESSAGE"
95 echo ""
96 read -n 1 -p "Continue (y/N)?" REPLY
97 echo ""
98
99 if [ "x$REPLY" != "xy" ];  then 
100     echo " exiting now!"
101     exit 2
102 fi
103
104 echo "cleaning up tags"
105 # git tag -d <add tag name here, for more than one, add more lines like this one>
106
107
108 echo "tagging commit"
109 git tag -u $GPGKEYID -m "$TAGMESSAGE" $TAGNAME
110
111 echo "create tar ball"
112 ./autogen.sh
113 ./configure
114 TEX=tex make distcheck
115
116 if [ -s xboard-${VERSION}.tar.gz ] ; then
117     echo ""
118     echo " make distcheck seems to be ok"
119     echo ""
120 else
121     echo ""
122     echo " problem with make distcheck"
123     echo ""
124     exit 3
125 fi
126
127 echo "move tar ball to upload directory"
128 mv xboard-${VERSION}.tar.gz $UPLOADDIR
129
130 echo "cd into upload directory"
131 cd $UPLOADDIR 
132
133 # create files necessary for upload to GNU
134 echo "creating directive"
135 echo "version: 1.1
136 directory: xboard
137 filename: xboard-${VERSION}.tar.gz
138 comment: $TAGMESSAGE " > xboard-${VERSION}.tar.gz.directive
139
140 echo "signing packages"
141 gpg -b xboard-${VERSION}.tar.gz
142 gpg --clearsign xboard-${VERSION}.tar.gz.directive
143
144 echo "uploading..."
145
146 echo "
147 The files can be found in $UPLOADDIR. Go and test them :)
148
149 Will do the following in a second followed by a git push
150
151 ftp -n -v $FTPSERVER <<EOT
152 user anonymous
153 cd $FTPDIR
154 put xboard-${VERSION}.tar.gz
155 put xboard-${VERSION}.tar.gz.sig
156 put xboard-${VERSION}.tar.gz.directive.asc
157 EOT
158 "
159
160 read -n 1 -p "Will upload and push tags now. Continue? (y/N)" REPLY
161
162 if [ "x$REPLY" != "xy" ];  then 
163     echo " exiting now!"
164     exit 3
165 fi
166
167 # upload to GNU
168 ftp -n -v $FTPSERVER <<EOT
169 user anonymous
170 cd $FTPDIR
171 put xboard-${VERSION}.tar.gz
172 put xboard-${VERSION}.tar.gz.sig
173 put xboard-${VERSION}.tar.gz.directive.asc
174 EOT
175
176 # push tags
177 cd $GITDIR
178 echo "pushing tags and commits"
179 git push
180 git push --tags 
181
182 #possible to add other git repos here too
183 #git push github
184 #git push --tags github
185
186 echo "done...have a nice day!"