diff options
| author | davidovski <david@davidovski.xyz> | 2022-05-04 22:31:44 +0100 | 
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2022-05-04 22:31:44 +0100 | 
| commit | c99ca14a05558b11bae20f2ab887e1c42aa921a7 (patch) | |
| tree | fc3bd87732317a5e05aca55d5bd2ab6bf19a4a3d /xibuild | |
| parent | f36a24225ac6935ec59d65e377946cbc26b960f5 (diff) | |
created new xibuild
Diffstat (limited to 'xibuild')
| -rwxr-xr-x | xibuild | 271 | 
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 | 
