source: SMSSender/deploy/ubuntu/deploy @ 424:21b6e6fc22ab

Last change on this file since 424:21b6e6fc22ab was 424:21b6e6fc22ab, checked in by Sämy Zehnder <saemy.zehnder@…>, 6 years ago
  • Changes the way we handle version strings (no more numeric representations of alpha, beta, ...).
  • Updates the ubuntu deployment script to follow the version changes.
  • Changes the version to 3.2.1
  • Property exe set to *
File size: 7.0 KB
Line 
1#!/bin/bash
2
3#REPO="ssh://hg@gorrion.ch:222/smssender"
4REPO=`hg root`
5
6warn() {
7        echo
8        echo "WARNING: "$1
9        echo
10}
11error() {
12        echo 
13        echo "ERROR: "$1
14        echo
15        exit 1
16}
17
18prepare() {
19        if [ -e $tmp_deploy_dir ]; then
20                echo "Content already exists. Not doing a clone."
21        else
22                # Clone the newest source
23                echo "Cloning into $tmp_dir"
24                hg clone --rev $rev $REPO . > /dev/null
25
26                # Check if successful
27                if [ $? -ne 0 ]; then
28                        error "Could not clone the repository!"
29                fi
30        fi
31
32        # Change into the deployment directory
33        cd $tmp_deploy_dir
34
35        # Patch the gateways.pri
36        sed -i -r -e '/DESTDIR = /d' $tmp_dir/gateways/gateways.pri
37
38        # Symlinking some files to the correct place
39        ln -s $tmp_dir/gateways/gateways.pri $tmp_dir/gateways.pri
40        for gtwy in $tmp_dir/gateways/*; do
41                if [ -d $gtwy ]; then
42                        ln -s $tmp_dir/copyright.txt $gtwy/copyright.txt
43                fi
44        done
45}
46
47packages=""
48which_packages() {
49        all=""
50
51        echo "Which packages should be processed? [all]"
52        for f in $tmp_deploy_dir/* ; do
53                if [ -d $f ]; then
54                        pkg=`basename $f`
55                        pkg=`echo $pkg | sed -e 's/smssender-gateway-//'` # Remove the "smssender-gateway-" part
56
57                        all=$all$pkg" "
58                        echo "  - "$pkg
59                fi
60        done
61       
62        read ans
63        if [ "$ans" = "all" ] || [ "$ans" = "" ] ; then
64                ans=$all
65        fi
66
67        packages=$ans
68}
69
70base_version=""
71get_base_version() {
72        pkg=$1
73
74        lower_case=`echo $pkg | tr "[[:upper:]]" "[[:lower:]]"`
75        if [ "$lower_case" = "smssender" ]; then
76                pro="smssender.pri"
77        else
78                get_data_dir $pkg
79                pro="$data_dir/$lower_case.pro"
80        fi
81
82        base_version=`egrep -o "^VERSION[[:space:]]*=[[:space:]]*[[:digit:].]+" $tmp_dir/$pro | sed -e 's/VERSION[[:space:]]*=[[:space:]]*//'`
83}
84
85development_version=""
86get_development_version() {
87        development_version=`egrep -o "^DEVELOPMENT_VERSION[[:space:]]*=[[:space:]]*[^[:space:]#]+" ../../smssender.pri | sed -e 's/DEVELOPMENT_VERSION[[:space:]]*=[[:space:]]*//' | sed -e 's/#.*//'`
88}
89
90data_dir=""
91get_data_dir() {
92        pkg=`echo $1 | tr "[[:upper:]]" "[[:lower:]]"`
93        case $pkg in
94                smssender) data_dir="" ;;
95                ethz) data_dir="/gateways/ETHZ" ;;
96                post) data_dir="/gateways/Post" ;;
97                orange) data_dir="/gateways/Orange" ;;
98                schoolnet) data_dir="/gateways/Schoolnet" ;;
99                smartphone) data_dir="/gateways/Smartphone" ;;
100                sunrise) data_dir="/gateways/Sunrise" ;;
101                *) return 1; ;;
102        esac
103        return 0
104}
105
106create_tarball() {
107        pkg=$1
108
109        pkg_long=$pkg
110        if [ "$pkg_long" != "smssender" ]; then
111                pkg_long="smssender-gateway-"$pkg
112        fi
113       
114        if [ -d $tmp_deploy_dir/$pkg_long ]; then
115                echo ""
116                echo "Processing $pkg... "
117               
118                # Get version
119                echo -n "  - Reading version... "
120                get_base_version $pkg
121        get_development_version
122        if [ "$development_version" == "" ]; then
123            version_suffix=""
124        else
125            version_suffix="~$development_version"
126        fi
127        pkg_with_version=${pkg_long}_$base_version$version_suffix
128                echo "$pkg_with_version."
129               
130                # Get data directory
131                get_data_dir $pkg
132               
133                # Create symlink (Directory name workaround)
134                link_dir=/tmp/$pkg_with_version
135                ln -s $tmp_dir/$data_dir /tmp/$pkg_with_version
136               
137                # Create tarball
138                echo -n "  - Creating tarball... "
139                tar_name=$pkg_with_version.orig.tar.gz
140                tar --create --dereference --hard-dereference \
141            --exclude "deploy*" --exclude "priv*" \
142                        --exclude "\.*" --exclude-vcs --exclude-caches-all \
143                        --exclude-backups --gzip \
144                        --file $deploy_dir/$tar_name --directory /tmp $pkg_with_version
145                rm $link_dir
146                echo "done."
147               
148                echo -n "  - Extracting tarball... "
149                # Delete old stuff in the destination
150                rm -rf $(find $deploy_dir/$pkg_long -mindepth 1 -maxdepth 1 | grep -v "debian$")
151                # Extract the tarball
152                tar --extract --gzip --file $deploy_dir/$tar_name \
153                        --directory $deploy_dir/$pkg_long \
154                        --strip-components=1
155                echo "done."
156
157                echo -n "  - Updating dependencies in debian/... "
158                get_base_version "smssender"
159
160        minVersion=$base_version$version_suffix
161        if [ "$development_version" == "" ]; then
162            # 3.1 -> 3.2
163            maxVersion=$(echo $base_version | awk -F. -v OFS=. 'NF==1{print ++$NF}; NF>1{$NF=sprintf("%0*d", length($NF), $NF+1); print}')
164        else
165            # ~rc4 -> ~rc5
166            maxVersion=$base_version$(echo $version_suffix | awk '{s=gensub(/[0-9]+$/, "", "g"); v=gensub(/^[^0-9]+/, "", "g"); print sprintf("%s%d", s, ++v)}')
167        fi
168                sed -r -i -e 's/smssender(-dev)?[[:space:]]?\(>= [^)]+\)/smssender\1 (>= '$minVersion')/g' \
169                        $deploy_dir/$pkg_long/debian/control
170                sed -r -i -e 's/smssender(-dev)?[[:space:]]?\(<< [^)]+\)/smssender\1 (<< '$maxVersion')/g' \
171                        $deploy_dir/$pkg_long/debian/control
172                echo "done."
173        fi
174}
175
176cleanup() {
177        # Remove the clone of the repo.
178        rm -Rf $tmp_dir
179}
180
181proceed() {
182        echo -en "$1 (y/n) [y]"
183        read ans
184
185        if [ "$ans" = "" ] || [ "$ans" = "y" ] || [ "$ans" = "Y" ] || [ "$ans" = "yes" ] || [ "$ans" = "Yes" ] || [ "$ans" = "YES" ]; then
186                return 0
187        else
188                cleanup
189                exit 1
190        fi
191}
192
193
194#### Alg starts here... ####
195
196# Read the input parameters
197rev=${1:-"tip"}
198if [ $rev = "tip" ]; then
199        rev=`hg summary | gawk 'match($0, "^parent: ([[:digit:]]+)", a) { print a[1] }'`
200        warn "No revision given. Using $rev."
201fi
202
203
204# Create the tmp directory
205#dir=`mktemp -d --tmpdir smssender-XXXXX`
206deploy_dir="$( cd "$( dirname "$0" )" && pwd )"
207tmp_dir="/tmp/smssender-deploy"
208tmp_deploy_dir="$tmp_dir/deploy/ubuntu"
209mkdir -p $tmp_dir
210cd $tmp_dir
211
212
213echo "***** Preparing the deployment *****"
214prepare
215
216# checking the differences
217#echo "***** Checking for differences ****"
218#changed=""
219#check_differences
220#if [ "$changed" = "" ]; then
221#       echo "We have nothing to do -> abort."
222#       cleanup
223#       exit 0
224#fi
225
226echo ""
227echo ""
228echo "***** Processing the packages *****"
229#which_packages
230packages=smssender
231for pkg in $packages ; do
232        create_tarball $pkg
233done
234
235echo ""
236echo ""
237echo "***** Cleaning up the temporary files *****"
238cleanup
239echo "Done."
240
241echo ""
242echo ""
243echo "Further steps: "
244echo "  - dch -i"
245echo "  - debuild -S"
246
247echo ""
248echo ""
249echo "Finished!"
250
251
252
253
254
255# returns
256#  0 <=> $1 < $2
257#  1 <=> $1 > $2
258#  2 <=> $1 = $2
259compare_versions() {
260        if [ $1 = "" ] || [ $1 = $2 ]; then
261                return 2; # They are "equal"
262        fi
263
264        $comp=`echo -e "$1\n$2" | sort -V | head -n1`
265        [  "$1" = "$comp" ]
266
267}
268get_version() {
269        different=false
270        for proFile in `find $tmp_dir | grep "\.pro$"`; do
271                $currVersion = `egrep -x -E "^VERSION\s?=\s?" $f | egrep -E "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"`
272
273                # Check if the matching was ok
274                if [ $? -ne 0 ]; then
275                        error "Could not determine the application version."
276                fi
277
278                # Compare the versions
279                compare_versions $version $currVersion
280                case $? in
281                        0)
282                                $different=true
283                                $version=$currVersion
284                        ;;
285                        1)
286                                $different=true
287                        ;;
288                        2)
289                                $version=$currVersion
290                        ;;
291                esac
292        done
293
294        if [ $different ]; then
295                warning "Versions in project files differ"
296        fi
297}
298
299#       d="$tmp_deploy_dir/*"
300#       for f in $d ; do
301#               if [ -d "$f" ]; then
302#                       changes=`hg status $f`
303#                       if [ "$changes" != "" ]; then
304#                               # Found some changes --> Add this package to the todo list
305#                               echo "Discovered `basename $f` has changed"
306#                               changed=$changed" "$f
307#                       else
308#                               # No changes detected (Already commited?)
309#                               proceed "Force `basename $f`?"
310#                               if [ "$?" = "1" ]; then
311#                                       changed=$changed" "$f
312#                               fi
313#                       fi
314#               fi
315#       done
316#}
Note: See TracBrowser for help on using the repository browser.