summaryrefslogtreecommitdiff
path: root/xibuild
diff options
context:
space:
mode:
Diffstat (limited to 'xibuild')
-rwxr-xr-xxibuild271
1 files changed, 0 insertions, 271 deletions
diff --git a/xibuild b/xibuild
deleted file mode 100755
index af3ea88..0000000
--- a/xibuild
+++ /dev/null
@@ -1,271 +0,0 @@
-#!/bin/bash
-
-XI_ROOT=$(pwd)
-PKGS_OUTPUT=$XI_ROOT/xipkgs
-PRIV_KEY=$XI_ROOT/keychain/xi.pem
-
-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"
-
-extract () {
- FILE=$1
- echo extracting $FILE
- case "${FILE#*.}" in
- "tar.gz" )
- tar -zxf $FILE
- ;;
- "tar.lz" )
- tar --lzip -xf "$FILE"
- ;;
- "zip" )
- unzip $FILE
- ;;
- * )
- tar -xf $FILE
- ;;
- esac
-}
-
-pkgname () {
- echo $(basename $1 .xibuild)
-}
-
-xibuild () {
- BUILD_FILE=${@: -1}
- BUILD_HASH=$(md5sum $BUILD_FILE | cut -f1 -d" ")
-
- cd $XI_ROOT
-
- [[ $# = 0 ]] && usage && return 1
- [ ! -f "$BUILD_FILE" ] && echo "$BUILD_FILE not found" && return 1
-
- BUILD_FILE_PATH=$(realpath $BUILD_FILE)
-
- clean () {
- # clean up
- rm -rf $PKG_BUILD_DIR
- rmdir $XI_ROOT/tmp > /dev/null 2>&1
- }
-
- prepare () {
- echo "Passing missing prepare stage"
- }
- build () {
- printf "\tpassing missing build stage..."
- }
- check () {
- echo "Passing missing check stage"
- }
- package () {
- echo "Passing missing package stage"
- }
-
- BRANCH=HEAD
-
- source $BUILD_FILE
-
- PKG_NAME=$(pkgname $BUILD_FILE)
-
- LOGFILE=$XI_ROOT/logs/$PKG_NAME.log
- PKG_FILE=$PKGS_OUTPUT/$PKG_NAME.xipkg
-
- PKG_BUILD_DIR=$XI_ROOT/tmp/$PKG_NAME
- PKG_DEST=$XI_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 $XI_ROOT/logs
-
- date > $LOGFILE
- echo "Build log for $PKG_NAME from $BUILD_FILE\n" >> $LOGFILE
- printf "\033[0;36m====> $PKG_NAME.xipkg$RESET\n" | tee -a $LOGFILE
-
- cd $PKG_BUILD_DIR
-
- # fetch, build then package the package
- ############
-
- if [ ! -z ${SOURCE+x} ]; then
- # try get the commit hash for the package
- if git ls-remote -q $SOURCE &> /dev/null; then
- VER_HASH=$(git ls-remote $SOURCE $BRANCH )
- elif hg identify $SOURCE &> /dev/null; then
- VER_HASH=$(hg identify $SOURCE)
- else
- VER_HASH=$(curl -Ls $SOURCE | md5sum)
- fi
-
- VER_HASH=$(echo $VER_HASH | 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...";
-
- EXISTING_BUILD_HASH=$(md5sum $PKGS_OUTPUT/$PKG_NAME.xibuild | cut -f1 -d" ")
- if [ "$EXISTING_HASH" = "$VER_HASH" ] && [ "$EXISTING_BUILD_HASH" = "$BUILD_HASH" ]; then
- printf "$NEUTRAL package exists$RESET\n"
- echo "exists $PKG_NAME $DESC" >> $REPORT_LOG
- rm $LOGFILE
- return;
- else
- printf "$NEUTRAL package outdated\n"
- fi
- fi
-
- printf "$INFO\tfetching package...";
- if git ls-remote -q $SOURCE $BRANCH &> /dev/null; then
- git clone $SOURCE . >> $LOGFILE 2>&1 && printf "$PASS fetched $(du -sh $PKG_BUILD_DIR | awk '{ print $1 }') source\n" || return 1;
- git checkout $BRANCH >> $LOGFILE 2>&1
-
- elif hg identify $SOURCE &> /dev/null; then
- hg clone $SOURCE . >> $LOGFILE 2>&1 && printf "$PASS fetched $(du -sh $PKG_BUILD_DIR | awk '{ print $1 }') source\n" || return 1;
- else
- DOWNLOADED=$(basename $SOURCE)
- curl -Ls $SOURCE > $DOWNLOADED
- extract $DOWNLOADED >> $LOGFILE 2>&1 && printf "$PASS fetched $(du -sh $PKG_BUILD_DIR | awk '{ print $1 }') source\n" || return 1;
- cd $(ls -d */)
- fi
- else
- SOURCE="none"
- fi
-
- printf "\033[0;34m\tpreparing package...\033[0m";
- prepare >> $LOGFILE 2>&1 && printf "$PASS prepared\n" || return 1;
-
- printf "$INFO\tbuilding package...";
- build >> $LOGFILE 2>&1 && printf "$PASS built\n" || return 1;
-
- printf "\033[0;34m\ttesting package...\033[0m";
- check >> $LOGFILE 2>&1 && printf "$PASS checked\n" || return 1;
-
- printf "\033[0;34m\tpackaging package...\033[0m";
- package >> $LOGFILE 2>&1 && printf "$PASS packaged\n" || return 1;
-
- # add postinstall script
- if command -v postinstall > /dev/null; then
- POSTINSTALL=$(type postinstall | sed '1,3d;$d')
- if [ ${#POSTINSTALL} != 0 ]; then
- POST_DIR=$PKG_DEST/var/lib/xipkg/postinstall
- mkdir -p $POST_DIR
- echo "#!/bin/sh" > $POST_DIR/$PKG_NAME.sh
- echo $POSTINSTALL >> $POST_DIR/$PKG_NAME.sh
- fi
- fi
-
- # go back to root, make things easier
- cd $XI_ROOT
-
- if [ -z "$(ls -A $PKG_DEST)" ] && [ ! $SOURCE = "none" ]; then
- printf "$FAIL!!!Package is empty!!!$RESET\n"
- return 1;
- fi
-
- printf "$INFO\tarchiving package...";
- tar -C $PKG_DEST -cvzf $PKG_FILE ./ >> $LOGFILE 2>&1 && printf "$PASS archived to $(du -sh $PKG_FILE | awk '{ print $1 }')\n" || return 1;
-
-
- # create info file
- printf "$INFO\tcreating xipkg.info...";
- PKG_INFO=$PKGS_OUTPUT/$PKG_NAME.xipkg.info
-
- cp $BUILD_FILE $PKGS_OUTPUT/$PKG_NAME.xibuild
-
- echo "" > $PKG_INFO
- echo "NAME=$PKG_NAME" >> $PKG_INFO
- echo "DESCRIPTION=$DESC" >> $PKG_INFO
- echo "PKG_FILE=$PKG_NAME.xipkg" >> $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
-
- 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"
-
- clean
-
- echo "new $PKG_NAME $DESC" >> $REPORT_LOG
-
- unset SOURCE DESC DEPS install package check
- return 0
-}
-
-usage () {
- cat << EOF
-usage: $0 [-h] [-o output-dir] [-r working_root] [-k private_key.pem] build_file.xibuild
- -h display this help message
- -o set the output dir for the xipkg files (default: $PWD/xipkgs)
- -r set the working root for all log and tmp files (default: $PWD)
- -k set the private key used to sign packages (default: $PWD/keychain/xi.pem)
-EOF
-}
-
-build-all () {
- FILES=$@
-
- while test $# -gt 0; do
- case "$1" in
- "-o" )
- shift
- PKGS_OUTPUT=$PWD/$1
- ;;
- "-r" )
- shift
- XI_ROOT=$PWD/$1
- ;;
- "-k" )
- shift
- PRIV_KEY=$PWD/$1
- ;;
- "-h" )
- usage
- ;;
- * )
- REPORT_LOG=$XI_ROOT/xibuild.report.log
- BUILD_FILE=$1
- if xibuild $BUILD_FILE; then
- printf "$RESET"
- else
- printf "$ERROR error! See log$RESET\n"
- echo "fail $PKG_NAME $DESC" >> $REPORT_LOG
- fi
- cd $XI_ROOT
- ;;
- esac
-
- shift
- done
-}
-if [ $# -gt 0 ]; then
- build-all $@ | tee -a xibuild.log
-else
- usage; return 1
-fi