Fix #1289: tar.xz contains symlinks that are wrong for plugins (2)
[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.\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 ## 1. Ensure that the main repo. is up to date
20 ## 2. cd to a working directory and create or update NEWS and org.geeqie.Geeqie.appdata.xml.in for the new release data.
21 ## 4. Run this script
22 ##
23 ## This script will:
24 ## 1. Clone geeqie to a unique directory in /tmp and cd to it
25 ## 2. Copy NEWS and org.geeqie.Geeqie.appdata.xml.in from the working
26 ## directory to the new clone dir
27 ## 3. Create the new release
28 ## 4. Rename the unique dir name to the form geeqie-<n.m>
29 ## 5. Create the source tar
30
31 version=
32 start=
33 patch=
34 push=
35 while getopts "v:s:p:hr" option
36 do
37         case $option in
38                 h)
39                         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"
40                         exit 0
41                         ;;
42                 v) version="$OPTARG" ;;
43                 s) start="$OPTARG" ;;
44                 p) patch="$OPTARG" ;;
45                 r) push=true ;;
46                 *) exit 1 ;;
47         esac
48 done
49
50 orig_dir=$PWD
51
52 if [ ! -f NEWS ]
53 then
54         printf '%s\n' "File NEWS does not exist"
55         exit 1
56 fi
57
58 if [ ! -f org.geeqie.Geeqie.appdata.xml.in ]
59 then
60         printf '%s\n' "File org.geeqie.Geeqie.appdata.xml.in does not exist"
61         exit 1
62 fi
63
64 if ! zenity --title="NEW RELEASE" --question --text "Have the following files been updated?\n\n$orig_dir/NEWS\n$orig_dir/org.geeqie.Geeqie.appdata.xml.in\n\nContinue?" --width=600
65 then
66         exit 1
67 fi
68
69 if [ "$push" = true ]
70 then
71         if ! zenity --title="NEW RELEASE" --question --text "Do you have write access to the repo.?\nDo you really want to push?\n\nContinue?" --width=600
72         then
73                 exit 1
74         fi
75 fi
76
77 tmp_dir=${TMPDIR:-/tmp}
78 working_dir=$(mktemp --directory "$tmp_dir/geeqie.XXXXXXXXXX")
79
80 git clone git://git.geeqie.org/geeqie.git "$working_dir"
81
82 cp "$orig_dir/NEWS" "$working_dir"
83 cp "$orig_dir/org.geeqie.Geeqie.appdata.xml.in" "$working_dir"
84
85 cd "$working_dir" || exit 1
86
87 if [ -n "$start" ] && [ -n "$patch" ]
88 then
89         printf '%s\n' "Cannot have start-hash and patch number together"
90         exit 1
91 fi
92
93 if [ "$(printf '%s\n' "$version" | awk -F"." '{print NF-1}')" -ne 1 ]
94 then
95         printf '%s\n' "Version major.minor $version is not valid"
96         exit 1
97 fi
98
99 if [ -n "$start" ]
100 then
101         if ! git branch master --contains "$start" > /dev/null 2>&1
102         then
103                 printf '%s\n' "Start hash is not in master branch"
104                 exit 1
105         fi
106 fi
107
108 if [ -n "$patch" ]
109 then
110         if ! git rev-parse stable/"$version" > /dev/null 2>&1
111         then
112                 printf '%s\n' "Version $version does not exist"
113                 exit 1
114         fi
115
116         if ! [ "$patch" -ge 0 ] 2> /dev/null
117         then
118                 printf '%s\n' "Patch $patch is not an integer"
119                 exit 1
120         fi
121 else
122         if git rev-parse stable/"$version" > /dev/null 2>&1
123         then
124                 printf '%s\n' "Version $version already exists"
125                 exit 1
126         fi
127 fi
128
129 if [ -z "$patch" ]
130 then
131         revision="$version"
132 else
133         revision="$version.$patch"
134 fi
135
136 if [ -z "$patch" ]
137 then
138         if [ -z "$start" ]
139         then
140                 git checkout -b stable/"$version"
141         else
142                 git checkout -b stable/"$version" "$start"
143         fi
144
145         if [ "$push" = true ]
146         then
147                 git push git@geeqie.org:geeqie stable/"$version"
148         fi
149 else
150         git checkout stable/"$version"
151 fi
152
153 # Regenerate to get the new version number in the man page
154 rm --recursive --force build
155 meson setup build
156 ninja -C build
157
158 if ! ./scripts/generate-man-page.sh
159 then
160         printf '%s\n' "generate-man-page.sh failed"
161         exit 1
162 fi
163 if ! ./doc/create-shortcuts-xml.sh
164 then
165         printf '%s\n' "create-shortcuts-xml.sh failed"
166         exit 1
167 fi
168
169 git add NEWS
170 git add org.geeqie.Geeqie.appdata.xml.in
171 git add geeqie.1
172 git add doc/docbook/CommandLineOptions.xml
173 git commit --message="Preparing for release v$revision"
174
175 if [ "$push" = true ]
176 then
177         git push git@geeqie.org:geeqie
178 fi
179
180 git tag --sign "v$revision" --message="Release v$revision"
181
182 if [ "$push" = true ]
183 then
184         git push git@geeqie.org:geeqie "v$revision"
185 fi
186
187 rm --recursive --force build
188
189 cd "$tmp_dir" || exit 1
190
191 rm --recursive --force "geeqie-$revision.tar.xz"
192 rm --recursive --force "geeqie-$revision.tar.xz.asc"
193 rm --recursive --force "geeqie-$revision"
194
195 mv "$working_dir" "geeqie-$revision"
196
197 tar --create --xz --file="$tmp_dir/geeqie-$revision.tar.xz" --exclude="AppImage*" --exclude=".git*" "geeqie-$revision"
198
199 gpg --armor --detach-sign --output "$tmp_dir/geeqie-$revision.tar.xz.asc" "$tmp_dir/geeqie-$revision.tar.xz"
200
201 cd "geeqie-$revision"
202
203 git checkout master
204
205 git checkout stable/"$version" NEWS
206 git checkout stable/"$version" geeqie.1
207 git checkout stable/"$version" doc/docbook/CommandLineOptions.xml
208 git checkout stable/"$version" org.geeqie.Geeqie.appdata.xml.in
209
210 git add NEWS
211 git add org.geeqie.Geeqie.appdata.xml.in
212 git add geeqie.1
213 git add doc/docbook/CommandLineOptions.xml
214 git commit --message="Release v$revision files"
215
216 if [ "$push" = true ]
217 then
218         git push git@geeqie.org:geeqie
219 fi
220
221 zenity --info --window-icon="info" --text="Upload files:\n\n$tmp_dir/geeqie-$revision.tar.xz\n$tmp_dir/geeqie-$revision.tar.xz.asc\n\nto https://github.com/BestImageViewer/geeqie/releases" --width=400