1#!/bin/bash -x
2# scripts for nightly builds in OS/X
3#
4# 1 checkout for new HEAD in git repository
5# 2 build and upload generated DMG files up to 10 DMGs at sf.net
6# 3 compute checksums, and upload README.md
7
8if [ ! $(expr $(date -u +%H)) == 3 ]
9then
10	exit 0
11fi
12
13#nightly librecad build
14
15TOP_DIR=~/hd2
16SF_URL='dongxuli@frs.sf.net:/home/frs/project/librecad/OSX/NightlyBuilds/'
17#log dir
18LOG_DIR=$TOP_DIR/log-nightly
19[[ -d $LOG_DIR ]] || mkdir -p $LOG_DIR
20LOG_ERR=$LOG_DIR/err.log
21LOG_MSG=$LOG_DIR/msg.log
22#local repository
23LC_DIR=$TOP_DIR/LibreCAD
24if [ ! -d $LC_DIR ]
25then
26	echo "Error: LibreCAD source repository $LC_DIR does not exist" >> $LOG_MSG
27	exit 1
28fi
29
30#file keeping current HEAD commit number
31LC_HEAD=$LOG_DIR/lc_HEAD_number.tmp
32#git HEAD
33LC_GIT_HEAD=$LC_DIR/.git/refs/heads/master
34#dmg built
35LC_DMG=$LC_DIR/LibreCAD.dmg
36#folder holding dmg files
37LC_SF_NIGHTLY=$TOP_DIR/sf-OSX-Nightly
38[[ -d $LC_SF_NIGHTLY ]] || mkdir -p $LC_SF_NIGHTLY
39
40cd $LC_DIR
41
42#update git
43git fetch origin
44git reset --hard origin/master
45echo "$(date): repository updated" >> $LOG_MSG
46
47#detect git updates
48if [ -f $LC_HEAD ]
49then
50	if cmp $LC_HEAD $LC_GIT_HEAD
51	then
52		echo "$(date): No git update, exiting" >> $LOG_ERR
53		exit 0
54	fi
55fi
56
57#save git HEAD
58cp -v $LC_GIT_HEAD $LC_HEAD
59#dmg to save to
60LC_HEAD_NUM=$(cat $LC_HEAD)
61DATE_STR="$(date -u '+%F')"
62COMMIT_STR=${LC_HEAD_NUM:0:8}
63LC_DMG_SF=LibreCAD-${DATE_STR}-${COMMIT_STR}.dmg
64echo $LC_DMG_SF
65
66#remove existing DMG
67rm -f $LC_DMG
68#build DMG
69./scripts/build-osx.sh -p="" -q="" 2>&1 >> $LOG_ERR
70if ! [ -f $LC_DMG ]
71then
72	echo "$(date): building failed, exiting" >> $LOG_ERR
73	exit 1
74fi
75
76#copy to local folder
77mkdir -p $LC_SF_NIGHTLY
78pushd $LC_SF_NIGHTLY
79for f in $(ls -rv|sed -e '1,9 d')
80do
81	rm -f $f
82done
83
84popd
85cp -v $LC_DMG $LC_SF_NIGHTLY/$LC_DMG_SF
86
87#copy to sf.net
88rsync -e ssh --delete -Pac $LC_SF_NIGHTLY/ "$SF_URL"
89if [ $? -ne 0 ]
90then
91	echo "$(date): failed to upload $LC_DMG_SF" >> $LOG_ERR
92	exit -1
93fi
94
95#README.md
96cd ..
97README_FILE=$TOP_DIR/README.md
98cp $TOP_DIR/README.md.template $README_FILE
99cat $TOP_DIR/README.md.template | \
100sed -e "s:DATE_PLACE_HOLDER:${DATE_STR}:g" \
101-e "s:COMMIT_PLACE_HOLDER:${COMMIT_STR}:g" \
102> $README_FILE
103
104pushd $LC_SF_NIGHTLY
105for dfile in *.dmg
106do
107echo -e "- - -\n[$dfile](http://sourceforge.net/projects/librecad/files/OSX/Nightly/$dfile/download/)" >> $README_FILE
108echo -e "\nMD5: $(md5 -r $dfile|awk '{print $1}')">> $README_FILE
109echo -e "\nSHA1: $(shasum $dfile|awk '{print $1}')">> $README_FILE
110echo -e "\nSHA256: $(shasum -a 256 $dfile|awk '{print $1}')">> $README_FILE
111done
112popd
113
114rsync -e ssh -Pac $README_FILE "$SF_URL"
115
116echo "$(date): $LC_DMG_SF uploaded" >> $LOG_MSG
117
118