blob: 3b26fed5fac8dfe95d09827326e7bad2352f6e20 (
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
#!/bin/bash
PSI_ROOT=$(pwd)
ERROR="\033[0;31m"
INFO="\033[0;34m"
PASS="\033[0;32m"
NEUTRAL="\033[0;33m"
RESET="\033[0m"
MAKEFLAGS="-j11"
alias make="make $MAKEFLAGS"
usage () {
cat << EOF
usage: $0 PSIBUILD
EOF
}
psibuild () {
BUILD_FILE=${@: -1}
cd $PSI_ROOT
[[ $# = 0 ]] && usage && exit 1
[ ! -f "$BUILD_FILE" ] && echo "$BUILD_FILE not found" && exit 1
clean () {
# clean up
rm -rf $PKG_BUILD_DIR
rmdir $PSI_ROOT/tmp > /dev/null 2>&1
}
build () {
printf "\tpassing missing build stage..."
}
package () {
echo "Passing missing package stage"
}
source $BUILD_FILE
PKG_NAME=$(basename $BUILD_FILE .psibuild)
LOGFILE=$PSI_ROOT/logs/$PKG_NAME.log
PKGS_OUTPUT=$PSI_ROOT/ppkgs
PKG_FILE=$PKGS_OUTPUT/$PKG_NAME.ppkg
PKG_BUILD_DIR=$PSI_ROOT/tmp/$PKG_NAME
PKG_DEST=$PKG_PSI_ROOT/tmp/$PKG_NAME.package
# make sure build dir is clean before starting
rm -rf $PKG_BUILD_DIR
# make the directories
mkdir -p $PKG_BUILD_DIR
mkdir -p $PKG_DEST
mkdir -p $PKGS_OUTPUT
mkdir -p $PSI_ROOT/logs
date > $LOGFILE
echo "Build log for $PKG_NAME from $BUILD_FILE\n" >> $LOGFILE
printf "\033[0;36m====> $PKG_NAME.ppkg\n" | tee -a $LOGFILE
cd $PKG_BUILD_DIR
# fetch, build then package the package
############
# try get the commit hash for the package
VER_HASH=$(git ls-remote $SOURCE HEAD | awk '{ print $1 }')
# If we already have this package, don't waste our time
if [ -f "$PKG_FILE.info" ] && [ -f "$PKG_FILE" ]; then
EXISTING_HASH=$(grep -a "VER_HASH" $PKG_FILE.info | sed "s/VER_HASH=//")
echo "Comparing $EXISTING_HASH to $VER_HASH" >> $LOGFILE
printf "$INFO\tvalidating commit hash...";
if [ "$EXISTING_HASH" == "$VER_HASH" ]; then
printf "$NEUTRAL package exists\n"
return 0;
else
printf "$NEUTRAL package outdated\n"
fi
fi
printf "$INFO\tfetching package...";
git clone $SOURCE . >> $LOGFILE 2>&1 && printf "$PASS fetched $(du -sh $PKG_BUILD_DIR | awk '{ print $1 }') source\n" || printf "$ERROR error! See log\n"
printf "$INFO\tbuilding package...";
build >> $LOGFILE 2>&1 && printf "$PASS built\n" || printf "$ERROR error! See log\n";
printf "\033[0;34m\tpackaging package...\033[0m";
package >> $LOGFILE 2>&1 && printf "$PASS packaged\n" || printf "$ERROR error! See log\n"
# go back to root, make things easier
cd $PSI_ROOT
printf "$INFO\tarchiving package...";
tar -C $PKG_DEST -czf $PKG_FILE ./ >> $LOGFILE 2>&1 && printf "$PASS archived to $(du -sh $PKG_FILE | awk '{ print $1 }')\n" || printf "$ERROR error! See log\n"
# create info file
printf "$INFO\tcreating ppkg.info...";
PKG_INFO=$PKGS_OUTPUT/$PKG_NAME.ppkg.info
echo "" > $PKG_INFO
echo "NAME=$PKG_NAME" >> $PKG_INFO
echo "PKG_FILE=$PKG_NAME.ppkg" >> $PKG_INFO
echo "CHECKSUM=$(md5sum $PKG_FILE | awk '{ print $1 }')" >> $PKG_INFO
echo "VER_HASH=$VER_HASH" >> $PKG_INFO
echo "SOURCE=$SOURCE" >> $PKG_INFO
echo "DATE=$(date)" >> $PKG_INFO
echo "DEPS=(${DEPS[*]})" >> $PKG_INFO
printf "$INFOsigning...";
# sign the package
PRIV_KEY=$PSI_ROOT/keychain/psi.pem
PUB_KEY=$PSI_ROOT/keychain/psi.pub
if [ -f "$PRIV_KEY" ]; then
echo "SIGNATURE=" >> $PKG_INFO
openssl dgst -sign $PRIV_KEY $PKG_FILE >> $PKG_INFO
else
echo "SIGNATURE=">> $PKG_INFO
echo "unsigned">> $PKG_INFO
>&2 printf "$ERROR WARNING! No private key: unsigned packages!\n"
fi
printf "$PASS signed\n";
printf "$PASS successfully built $PKG_NAME to $(basename $PKG_FILE)$RESET\n\n"
clean
}
FILES=$@
for BUILD_FILE in $FILES; do
psibuild $BUILD_FILE
done
|