1df9cf5f9a26f492a8c40db9206c7a534e198933
[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 if [ ! -d .git ]
21 then
22         printf '%s\n' "Directory .git does not exist"
23         exit 1
24 fi
25
26 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
27 then
28         exit 0
29 fi
30
31 version=
32 start=
33 patch=
34 push=
35 while getopts "v:s:p:hr" option; do
36         case $option in
37         h)
38                 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"
39                 exit 0
40                 ;;
41         v) version="$OPTARG" ;;
42         s) start="$OPTARG" ;;
43         p) patch="$OPTARG" ;;
44         r) push=true ;;
45         *) exit 1 ;;
46         esac
47 done
48
49 if [ "$start" ] && [ "$patch" ]
50 then
51         printf '%s\n' "Cannot have start-hash and patch number together"
52         exit 1
53 fi
54
55 if [ "$(printf '%s\n' "$version" | awk -F"." '{print NF-1}')" -ne 1 ]
56 then
57         printf '%s\n' "Version major.minor $version is not valid"
58         exit 1
59 fi
60
61 if [ "$start" ]
62 then
63         if ! git branch master --contains "$start" > /dev/null 2>&1
64         then
65                 printf '%s\n' "Start hash is not in master branch"
66                 exit 1
67         fi
68 fi
69
70 if [ "$patch" ]
71 then
72         if ! git rev-parse "v$version" > /dev/null 2>&1
73         then
74                 printf '%s\n' "Version $version does not exist"
75                 exit 1
76         fi
77
78         if ! [ "$patch" -ge 0 ] 2>/dev/null
79         then
80                 printf '%s\n' "Patch $patch is not an integer"
81                 exit 1
82         fi
83 else
84         if git rev-parse "v$version" > /dev/null 2>&1
85         then
86                 printf '%s\n' "Version $version already exists"
87                 exit 1
88         fi
89 fi
90
91 if [ ! "$patch" ]
92 then
93         revision="$version"
94 else
95         revision="$version.$patch"
96 fi
97
98 if [ ! "$patch" ]
99 then
100         if [ -z "$start" ]
101         then
102                 git checkout -b stable/"$version"
103         else
104                 git checkout -b stable/"$version" "$start"
105         fi
106
107         if [ "$push" ]
108         then
109                 git push git@geeqie.org:geeqie stable/"$version"
110         fi
111 else
112         git checkout stable/"$version"
113 fi
114
115 sudo make maintainer-clean
116 ./autogen.sh
117 make -j
118 ./scripts/generate-man-page.sh
119
120 git add NEWS
121 git add org.geeqie.Geeqie.appdata.xml.in
122 git add geeqie.1
123 git add doc/docbook/CommandLineOptions.xml
124 git commit --message="Preparing for release v$revision"
125
126 if [ "$push" ]
127 then
128         git push git@geeqie.org:geeqie
129 fi
130
131 git tag --sign "v$revision" --message="Release v$revision"
132
133 if [ "$push" ]
134 then
135         git push git@geeqie.org:geeqie "v$revision"
136 fi
137
138 sudo make maintainer-clean
139 ./gen_changelog.sh
140
141 rm -rf /tmp/geeqie-"$revision".tar.xz
142 rm -rf /tmp/geeqie-"$revision".tar.xz.asc
143
144 # shellcheck disable=SC2140
145 tar --create --xz --file=/tmp/geeqie-"$revision".tar.xz --exclude=".git" --exclude="configure" --exclude="web" --transform s/"\bgeeqie\b"/"geeqie-$revision"/ ../geeqie
146 gpg --armor --detach-sign --output /tmp/geeqie-"$revision".tar.xz.asc  /tmp/geeqie-"$revision".tar.xz
147
148 git checkout master
149
150 git checkout stable/"$version" NEWS
151 git checkout stable/"$version" geeqie.1
152 git checkout stable/"$version" doc/docbook/CommandLineOptions.xml
153 git checkout stable/"$version" org.geeqie.Geeqie.appdata.xml.in
154
155 git add NEWS
156 git add org.geeqie.Geeqie.appdata.xml.in
157 git add geeqie.1
158 git add doc/docbook/CommandLineOptions.xml
159 git commit --message="Release v$revision files"
160
161 if [ "$push" ]
162 then
163         git push git@geeqie.org:geeqie
164 fi
165
166 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