4 ## @brief Create a new release
6 ## new-release.sh [option]...\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
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.
17 ## It is expected that the first line of NEWS is in the form "Geeqie \<a.b[.d]\>
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.
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
35 while getopts "v:s:p:hr" option
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"
42 v) version="$OPTARG" ;;
54 printf '%s\n' "File NEWS does not exist"
58 if [ ! -f org.geeqie.Geeqie.appdata.xml.in ]
60 printf '%s\n' "File org.geeqie.Geeqie.appdata.xml.in does not exist"
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
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
77 tmp_dir=${TMPDIR:-/tmp}
78 working_dir=$(mktemp --directory "$tmp_dir/geeqie.XXXXXXXXXX")
80 git clone git://git.geeqie.org/geeqie.git "$working_dir"
82 cp "$orig_dir/NEWS" "$working_dir"
83 cp "$orig_dir/org.geeqie.Geeqie.appdata.xml.in" "$working_dir"
85 cd "$working_dir" || exit 1
87 if [ -n "$start" ] && [ -n "$patch" ]
89 printf '%s\n' "Cannot have start-hash and patch number together"
93 if [ "$(printf '%s\n' "$version" | awk -F"." '{print NF-1}')" -ne 1 ]
95 printf '%s\n' "Version major.minor $version is not valid"
101 if ! git branch master --contains "$start" > /dev/null 2>&1
103 printf '%s\n' "Start hash is not in master branch"
110 if ! git rev-parse stable/"$version" > /dev/null 2>&1
112 printf '%s\n' "Version $version does not exist"
116 if ! [ "$patch" -ge 0 ] 2> /dev/null
118 printf '%s\n' "Patch $patch is not an integer"
122 if git rev-parse stable/"$version" > /dev/null 2>&1
124 printf '%s\n' "Version $version already exists"
133 revision="$version.$patch"
140 git checkout -b stable/"$version"
142 git checkout -b stable/"$version" "$start"
145 if [ "$push" = true ]
147 git push git@geeqie.org:geeqie stable/"$version"
150 git checkout stable/"$version"
153 # Regenerate to get the new version number in the man page
154 rm --recursive --force build
158 if ! ./scripts/generate-man-page.sh
160 printf '%s\n' "generate-man-page.sh failed"
163 if ! ./doc/create-shortcuts-xml.sh
165 printf '%s\n' "create-shortcuts-xml.sh failed"
170 git add org.geeqie.Geeqie.appdata.xml.in
172 git add doc/docbook/CommandLineOptions.xml
173 git commit --message="Preparing for release v$revision"
175 if [ "$push" = true ]
177 git push git@geeqie.org:geeqie
180 git tag --sign "v$revision" --message="Release v$revision"
182 if [ "$push" = true ]
184 git push git@geeqie.org:geeqie "v$revision"
187 rm --recursive --force build
189 cd "$tmp_dir" || exit 1
191 rm --recursive --force "geeqie-$revision.tar.xz"
192 rm --recursive --force "geeqie-$revision.tar.xz.asc"
193 rm --recursive --force "geeqie-$revision"
195 mv "$working_dir" "geeqie-$revision"
197 tar --create --xz --file="$tmp_dir/geeqie-$revision.tar.xz" --exclude="AppImage*" --exclude=".git*" "geeqie-$revision"
199 gpg --armor --detach-sign --output "$tmp_dir/geeqie-$revision.tar.xz.asc" "$tmp_dir/geeqie-$revision.tar.xz"
201 cd "geeqie-$revision"
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
211 git add org.geeqie.Geeqie.appdata.xml.in
213 git add doc/docbook/CommandLineOptions.xml
214 git commit --message="Release v$revision files"
216 if [ "$push" = true ]
218 git push git@geeqie.org:geeqie
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