-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbuild_spk.sh
executable file
·135 lines (111 loc) · 4.24 KB
/
build_spk.sh
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/bash
#----------------------------------------------------------------------------------------
# Scriptaufruf:
#----------------------------------------------------------------------------------------
# erstellt das SPK aus dem aktuellen master-branch vom Server:
# sh ./build_spk.sh
#
# erstellt das SPK aus dem als Parameter übergebenen Release vom Server:
# sh ./build_spk.sh 4.0.7
#
#----------------------------------------------------------------------------------------
# Ordnerstruktur:
#----------------------------------------------------------------------------------------
# ./APP --> Arbeitsumgebung (erstellen/editieren/verschieben)
# ./PKG --> Archivordner zum Aufbau des SPK (Startscripte etc.)
#
set -euo pipefail
IFS=$'\n\t'
function finish {
git worktree remove --force "$build_tmp" || true # do not fail here, workaround for travis
rm -rf "$build_tmp"
}
trap finish EXIT
#######
project="kopano4s"
#######
if ! [ -x "$(command -v git)" ]; then
echo 'Error: git is not installed.' >&2
exit 1
fi
if ! [ -x "$(command -v fakeroot)" ]; then
echo 'Fakeroot is not installed; using sudo, you might need to give pwd at initial call when archive wil be build..' >&2
FAKEROOT="sudo"
else
FAKEROOT=$(command -v fakeroot)
fi
# Arbeitsverzeichnis auslesen und hineinwechseln:
# ---------------------------------------------------------------------
# shellcheck disable=SC2086
APPDIR=$(cd "$(dirname $0)";pwd)
cd "${APPDIR}"
build_tmp=$(mktemp -d -t tmp.XXXXXXXXXX)
buildversion=${1:-latest}
taggedversions=$(git tag)
echo " - INFO: Erstelle den temporären Buildordner und kopiere Sourcen hinein ..."
git worktree add --force "$build_tmp" "$(git rev-parse --abbrev-ref HEAD)"
pushd "$build_tmp"
set_spk_version="$(date +%Y.%m.%d)-$(git log -1 --format="%h")"
if echo "$taggedversions" | grep -q "$buildversion"; then
echo "git checkout zu $buildversion"
git checkout "$buildversion"
set_spk_version="$buildversion"
else
echo "ACHTUNG: Die gewünschte Version wurde im Repository nicht gefunden!"
echo "Die $(git rev-parse --abbrev-ref HEAD)-branch wird verwendet!"
fi
# fallback to old pkg and app dirs
if [ -d "$build_tmp"/PKG ]; then
PKG=PKG
else
PKG=SPK-PKG
fi
if [ -d "$build_tmp"/APP ]; then
APP=APP
else
APP=SPK-APP
fi
build_version=$(grep version "$build_tmp/$PKG/INFO" | awk -F '"' '{print $2}')
#set_spk_version=$build_version
echo " - INFO: Es wird foldende Version geladen und gebaut: $set_spk_version - BUILD-Version (INFO-File): $build_version"
# Ausführung: Erstellen des SPK
echo ""
echo "-----------------------------------------------------------------------------------"
echo " SPK wird erstellt..."
echo "-----------------------------------------------------------------------------------"
# Falls versteckter Ordners /.helptoc vorhanden, diesen nach /helptoc umbenennen
if test -d "${build_tmp}/.helptoc"; then
echo ""
echo " - INFO: Versteckter Ordner /.helptoc wurde lokalisiert und nach /helptoc umbenannt"
mv "${build_tmp}/.helptoc" "${build_tmp}/helptoc"
fi
# Packen und Ablegen der aktuellen Installation in den entsprechenden /Pack - Ordner
echo ""
echo " - INFO: Das Archiv package.tgz wird erstellt..."
# in non-fakeroot sudo mode change to root owner
if [ "$FAKEROOT" = 'sudo' ] ; then sudo chown -R root.root "${build_tmp}"/"$APP" ; fi
cd "${build_tmp}"/"$APP"
$FAKEROOT tar -C "${build_tmp}"/"$APP" -czf "${build_tmp}"/"$PKG"/package.tgz .
#"$FAKEROOT" tar -cfvz "${build_tmp}"/"$PKG"/package.tgz *
# Wechsel in den Ablageort von package.tgz bezüglich Aufbau des SPK's
if [ "$FAKEROOT" = 'sudo' ] ; then sudo chown -R root.root "${build_tmp}"/"$PKG" ; fi
cd "${build_tmp}"/"$PKG"
# Erstellen des eigentlichen SPK's
echo ""
echo " - INFO: Das SPK wird erstellt..."
$FAKEROOT tar -cf "${project}"_"$set_spk_version".spk *
# in non-fakeroot sudo mode change back ownership
if [ "$FAKEROOT" = 'sudo' ]
then
USR=$(whoami)
sudo chown -R "$USR".users "${build_tmp}"
fi
cp -f "${project}"_"$set_spk_version".spk "${APPDIR}"
echo ""
echo "-----------------------------------------------------------------------------------"
echo " Das SPK wurde erstellt und befindet sich unter..."
echo "-----------------------------------------------------------------------------------"
echo ""
echo " ${APPDIR}/${project}_$set_spk_version.spk"
echo ""
exit 0