Bug fix: new release script
[geeqie.git] / scripts / new-release.sh
1 #!/bin/sh
2
3 ## @file
4 ## @brief Create a new release
5 ##
6 ## new-release.sh [option]...\n
7 ## Where:\n
8 ## -v \<a.b\> is a major.minor version number\n
9 ## -s \<c\> is the start hash number for a new major.minor release - if omitted, HEAD is used\n
10 ## -p \<d\> is the patch version if a major.minor.patch release is being created\n
11 ## -r Push the release to the repo. If omitted a test run is made (run from a temp. clone folder)\n
12 ## -h Print Help
13 ##
14 ## Will create a new release off the master branch, or will create a new
15 ## patch version off an existing major.minor release branch.
16 ##
17 ## It is expected that the first line of NEWS is in the form "Geeqie \<a.b[.d]\>
18 ##
19
20 version=
21 start=
22 patch=
23 push=
24 while getopts "v:s:p:hr" option
25 do
26         case $option in
27                 h)
28                         printf '%s\n%s\n%s\n%s\n%s\n' "-v <a.b> release major.minor e.g 1.9" "-s <c> start hash e.g. 728172681 (optional)" "-p <d> release patch version e.g. 2 for 1.6.2" "-r push to repo." "-h help"
29                         exit 0
30                         ;;
31                 v) version="$OPTARG" ;;
32                 s) start="$OPTARG" ;;
33                 p) patch="$OPTARG" ;;
34                 r) push=true ;;
35                 *) exit 1 ;;
36         esac
37 done
38
39 if [ ! -d .git ]
40 then
41         printf '%s\n' "Directory .git does not exist"
42         exit 1
43 fi
44
45 if ! zenity --title="NEW RELEASE" --question --text "Edit the following files before running\n this  script:\n\nNEWS\norg.geeqie.Geeqie.appdata.xml.in\n\nContinue?" --width=300
46 then
47         exit 0
48 fi
49
50 if [ -n "$start" ] && [ -n "$patch" ]
51 then
52         printf '%s\n' "Cannot have start-hash and patch number together"
53         exit 1
54 fi
55
56 if [ "$(printf '%s\n' "$version" | awk -F"." '{print NF-1}')" -ne 1 ]
57 then
58         printf '%s\n' "Version major.minor $version is not valid"
59         exit 1
60 fi
61
62 if [ -n "$start" ]
63 then
64         if ! git branch master --contains "$start" > /dev/null 2>&1
65         then
66                 printf '%s\n' "Start hash is not in master branch"
67                 exit 1
68         fi
69 fi
70
71 if [ -n "$patch" ]
72 then
73         if ! git rev-parse stable/"$version" > /dev/null 2>&1
74         then
75                 printf '%s\n' "Version $version does not exist"
76                 exit 1
77         fi
78
79         if ! [ "$patch" -ge 0 ] 2> /dev/null
80         then
81                 printf '%s\n' "Patch $patch is not an integer"
82                 exit 1
83         fi
84 else
85         if git rev-parse stable/"$version" > /dev/null 2>&1
86         then
87                 printf '%s\n' "Version $version already exists"
88                 exit 1
89         fi
90 fi
91
92 if [ -z "$patch" ]
93 then
94         revision="$version"
95 else
96         revision="$version.$patch"
97 fi
98
99 if [ -z "$patch" ]
100 then
101         if [ -z "$start" ]
102         then
103                 git checkout -b stable/"$version"
104         else
105                 git checkout -b stable/"$version" "$start"
106         fi
107
108         if [ "$push" = true ]
109         then
110                 git push git@geeqie.org:geeqie stable/"$version"
111         fi
112 else
113         git checkout stable/"$version"
114 fi
115
116 sudo make maintainer-clean
117 ./autogen.sh
118 make -j
119 ./scripts/generate-man-page.sh
120
121 git add NEWS
122 git add org.geeqie.Geeqie.appdata.xml.in
123 git add geeqie.1
124 git add doc/docbook/CommandLineOptions.xml
125 git commit --message="Preparing for release v$revision"
126
127 if [ "$push" = true ]
128 then
129         git push git@geeqie.org:geeqie
130 fi
131
132 git tag --sign "v$revision" --message="Release v$revision"
133
134 if [ "$push" = true ]
135 then
136         git push git@geeqie.org:geeqie "v$revision"
137 fi
138
139 sudo make maintainer-clean
140 ./gen_changelog.sh
141
142 rm -rf /tmp/geeqie-"$revision".tar.xz
143 rm -rf /tmp/geeqie-"$revision".tar.xz.asc
144
145 # shellcheck disable=SC2140
146 tar --create --xz --file=/tmp/geeqie-"$revision".tar.xz --exclude=".git" --exclude="configure" --exclude="web" --transform s/"\bgeeqie\b"/"geeqie-$revision"/ ../geeqie
147 gpg --armor --detach-sign --output /tmp/geeqie-"$revision".tar.xz.asc /tmp/geeqie-"$revision".tar.xz
148
149 git checkout master
150
151 git checkout stable/"$version" NEWS
152 git checkout stable/"$version" geeqie.1
153 git checkout stable/"$version" doc/docbook/CommandLineOptions.xml
154 git checkout stable/"$version" org.geeqie.Geeqie.appdata.xml.in
155
156 git add NEWS
157 git add org.geeqie.Geeqie.appdata.xml.in
158 git add geeqie.1
159 git add doc/docbook/CommandLineOptions.xml
160 git commit --message="Release v$revision files"
161
162 if [ "$push" = true ]
163 then
164         git push git@geeqie.org:geeqie
165 fi
166
167 zenity --info --window-icon="info" --text="Upload files:\n\n/tmp/geeqie-$revision.tar.xz\n/tmp/geeqie-$revision.tar.xz.asc\n\nto https://github.com/BestImageViewer/geeqie/releases" --width=400