diff options
| author | davidovski <david@davidovski.xyz> | 2021-10-02 23:21:53 +0100 | 
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2021-10-02 23:21:53 +0100 | 
| commit | 16e799786f34721e646e14a2b7e7ab3816137f1a (patch) | |
| tree | 82c05b6b1d5fc9d33cd864b27bfb1e3af3f01536 /psibuild | |
| parent | c4e0c314e6eac6964328c9c3daeaa232ea06e965 (diff) | |
added packages
Diffstat (limited to 'psibuild')
| -rwxr-xr-x | psibuild | 164 | 
1 files changed, 120 insertions, 44 deletions
| @@ -1,68 +1,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  } -BUILD_FILE=${@: -1} +psibuild () { +    BUILD_FILE=${@: -1} -[[ $# = 0 ]] && usage && epsit 1 -[ -f "$FILE" ] && echo "$BUILD_FILE not found" && epsit 1 +    cd $PSI_ROOT -source $BUILD_FILE +    [[ $# = 0 ]] && usage && exit 1 +    [ ! -f "$BUILD_FILE" ] && echo "$BUILD_FILE not found" && exit 1 -PKG_NAME=$(basename $BUILD_FILE .psibuild) +    clean () { +        # clean up +        rm -rf $PKG_BUILD_DIR +        rmdir $PSI_ROOT/tmp > /dev/null 2>&1 +    } -PSI_ROOT=$(pwd) -PKGS_OUTPUT=$PSI_ROOT/psipkgs +    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 -PKG_BUILD_DIR=$PSI_ROOT/tmp/$PKG_NAME -PKG_DEST=$PKG_BUILD_DIR/package +    date > $LOGFILE +    echo "Build log for $PKG_NAME from $BUILD_FILE\n" >> $LOGFILE +    printf "\033[0;36m====> $PKG_NAME.ppkg\n" | tee -a $LOGFILE -# make the directories -mkdir -p $PKG_DEST -cd $PKG_BUILD_DIR +    cd $PKG_BUILD_DIR -# fetch, build then package the package -fetch -build -package +    # fetch, build then package the package +    ############ +    # try get the commit hash for the package +    VER_HASH=$(git ls-remote $SOURCE HEAD | awk '{ print $1 }') -# go back to root, make things easier -cd $PSI_ROOT +    # 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=//") -# bundle the package to a targz in the output dir -mkdir -p $PKGS_OUTPUT +        echo "Comparing $EXISTING_HASH to $VER_HASH" >> $LOGFILE -PKG_FILE=$PKGS_OUTPUT/$PKG_NAME.psipkg +        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 -tar -C $PKG_BUILD_DIR/package -czf $PKG_FILE ./ +    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" -# create info file -PKG_INFO=$PKGS_OUTPUT/$PKG_NAME.psipkg.info +    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 +} -echo "" > $PKG_INFO -echo "NAME=$PKG_NAME" >> $PKG_INFO -echo "PKG_FILE=$PKG_NAME.psipkg" >> $PKG_INFO -echo "CHECKSUM=$(md5sum $PKG_FILE | awk '{ print $1 }')" >> $PKG_INFO -echo "DATE=$(date)" >> $PKG_INFO -echo "DEPS=(${DEPS[*]})" >> $PKG_INFO -# sign the package -PRIV_KEY=$PSI_ROOT/keychain/psi.pem -PUB_KEY=$PSI_ROOT/keychain/psi.pub +FILES=$@ -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 echo "WARNING! no private key: unsigned packages!" -fi -# clean up -rm -rf $PKG_BUILD_DIR -rmdir $PSI_ROOT/tmp +for BUILD_FILE in $FILES; do +    psibuild $BUILD_FILE +done | 
