summaryrefslogtreecommitdiff
path: root/pkg/linux/build_bundle.sh
blob: 60151a80538c59a6cc7d12ceb05774653ec5bf09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
#
# USAGE NOTES:
#
# This script is meant to be used as follows:
#   user@host ~ $ ./build_bundle.sh ~/tmp 0.3.2 ~/tmp/0.3.1/Bitmask-linux64-0.3.1/ /media/Shared/CHANGELOG ~/tmp/bundle_out/
#
# So we would have:
#    REPOS_ROOT      -> ~/tmp
#    VERSION         -> 0.3.2
#    TEMPLATE_BUNDLE -> ~/tmp/0.3.1/Bitmask-linux64-0.3.1/
#    JOINT_CHANGELOG -> /media/Shared/CHANGELOG
#    DEST            -> ~/tmp/bundle_out/
#
# We need to set different PATHs in order to use a specific version of PySide,
# supposing that we have our compiled pyside in '~/pyside/sandbox', the above command would be:
#   user@host ~ $ PYTHONPATH=~/pyside/sandbox/lib/python2.7/site-packages/ LD_LIBRARY_PATH=~/pyside/sandbox/lib/ PATH=$PATH:~/pyside/sandbox/bin/ ./build_bundle.sh ~/tmp 0.3.2 ~/tmp/0.3.1/Bitmask-linux64-0.3.1/ /media/sf_Shared/CHANGELOG ~/tmp/bundle_out/


# Required arguments
REPOS_ROOT=$1       # Root path for all the needed repositories
VERSION=$2          # Version number that we are building
TEMPLATE_BUNDLE=$3  # A template used to create the new bundle
JOINT_CHANGELOG=$4  # Joint changelog for all the repositories
DEST=$5             # Destination folder for the bundle

# Helper variables
REPOSITORIES="bitmask_client leap_pycommon soledad keymanager leap_mail"
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')

# Bundle structure
LEAP_LIB=$TEMPLATE_BUNDLE/lib/leap/
BITMASK_BIN=$TEMPLATE_BUNDLE/bitmask
BUNDLE_NAME=Bitmask-linux$ARCH-$VERSION

# clean template
rm -f $TEMPLATE_BUNDLE/CHANGELOG
rm -f $TEMPLATE_BUNDLE/relnotes.txt
rm -rf $TEMPLATE_BUNDLE/apps/leap
rm -rf $TEMPLATE_BUNDLE/lib/leap/{common,keymanager,soledad,mail}

# checkout the latest tag in all repos
for repo in $REPOSITORIES; do
    cd $REPOS_ROOT/$repo
    git checkout master
    git pull --ff-only origin master && git fetch
    git reset --hard origin/master  # this avoids problems if you are in a commit far in the past
    # checkout to the closest annotated tag, supress 'detached head' warning
    git checkout --quiet `git describe --abbrev=0`
done

# make: compile ui and resources in client
cd $REPOS_ROOT/bitmask_client
make

# copy the latest client code to the template
cp -r $REPOS_ROOT/bitmask_client/src/leap $TEMPLATE_BUNDLE/apps/leap

# setup sdist client
cd $REPOS_ROOT/bitmask_client
python setup.py sdist

# extract $VERSION and copy _version.py to TEMPLATE_BUNDLE/Bitmask.app/Contents/MacOS/apps/leap/bitmask/_version.py
# copy _version.py (versioneer) and reqs.txt (requirements) to the bundle template
cd dist
rm -rf leap.bitmask-$VERSION
tar xzf leap.bitmask-$VERSION.tar.gz
cp leap.bitmask-$VERSION/src/leap/bitmask/_version.py $TEMPLATE_BUNDLE/apps/leap/bitmask/_version.py
cp leap.bitmask-$VERSION/src/leap/bitmask/util/reqs.txt $TEMPLATE_BUNDLE/apps/leap/bitmask/util/reqs.txt

# add the other needed projects to $LEAP_LIB
# e.g. TEMPLATE_BUNDLE/Bitmask.app/Contents/MacOS/lib/leap/
cp -r $REPOS_ROOT/leap_pycommon/src/leap/common $LEAP_LIB
cp -r $REPOS_ROOT/soledad/common/src/leap/soledad $LEAP_LIB
cp -r $REPOS_ROOT/soledad/client/src/leap/soledad/client $LEAP_LIB/soledad
cp -r $REPOS_ROOT/leap_mail/src/leap/mail $LEAP_LIB
cp -r $REPOS_ROOT/keymanager/src/leap/keymanager $LEAP_LIB

# copy bitmask launcher to the bundle template 
# e.g. TEMPLATE_BUNDLE/Bitmask.app/Contents/MacOS/Bitmask
cd $REPOS_ROOT/bitmask_launcher/build/
make
cp src/launcher $BITMASK_BIN

# copy launcher.py to template bundle
# e.g. TEMPLATE_BUNDLE/Bitmask.app/Contents/MacOS/apps/
cd $REPOS_ROOT/bitmask_launcher/src/
cp launcher.py $TEMPLATE_BUNDLE/apps/

# copy relnotes, joint changelog and LICENSE to TEMPLATE_BUNDLE
cp $REPOS_ROOT/bitmask_client/relnotes.txt $TEMPLATE_BUNDLE
cp $JOINT_CHANGELOG $TEMPLATE_BUNDLE/CHANGELOG
cp $REPOS_ROOT/bitmask_client/LICENSE $TEMPLATE_BUNDLE/LICENSE

# clean *.pyc files
cd $TEMPLATE_BUNDLE
find . -name "*.pyc" -delete

# remove execution flags (because vbox fs) and set read permissions for all
chmod 644 CHANGELOG LICENSE README

# create tarball
TMP=/tmp/$BUNDLE_NAME

rm -rf $TMP && mkdir -p $TMP  # clean temp dir
cp -R $TEMPLATE_BUNDLE/* $TMP
cd /tmp
tar cjf $DEST/$BUNDLE_NAME.tar.bz2 $BUNDLE_NAME
cd
rm -rf $TMP

# go back to develop in all repos
for repo in $REPOSITORIES; do
    cd $REPOS_ROOT/$repo
    git checkout develop
done