]> arthur.barton.de Git - Autobuilder.git/blobdiff - bin/autobuilder
Implement KEEP_ARCHIVES & ARCHIVE_PATTERN job settings
[Autobuilder.git] / bin / autobuilder
index 153e6430be7459c198f1045076297a1861af49b0..3ff9b67de3a5292a1b9dc3e36e386b4f8c8048c2 100755 (executable)
@@ -1,14 +1,16 @@
-#!/bin/bash
+#!/bin/sh
 #
 # 2012-01-22, alex@barton.de
 #
 
-MYNAME="`basename "$0"`"
+MYNAME=$(basename "$0")
 
 # options
 FORCE=""
 QUIETCMD=">/dev/null"
 
+export LC_ALL=C
+
 while [ $# -gt 0 ]; do
        case "$1" in
          "-f"|"--force")
@@ -31,15 +33,15 @@ MSG_PREFIX=" * "
 ERR_PREFIX=" ! "
 
 msg() {
-       echo "$MSG_PREFIX[`date +%H:%M:%S`] $MYNAME: $*"
+       echo "$MSG_PREFIX[$(date +%H:%M:%S)] $MYNAME: $*"
 }
 
 err() {
-       echo "$ERR_PREFIX[`date +%H:%M:%S`] $MYNAME: $*" >&2
+       echo "$ERR_PREFIX[$(date +%H:%M:%S)] $MYNAME: $*" >&2
 }
 
 prepare_git() {
-       cd "$BASE_DIR"
+       cd "$BASE_DIR" || return 1
        if [ ! -d ".git" ]; then
                git clone "$REPOSITORY" .
        else
@@ -52,50 +54,61 @@ prepare_git() {
 
 build() {
        msg "Building \"$NAME\" ..."
-       cd "$BASE_DIR"
+       cd "$BASE_DIR" || return 1
        date >"$BASE_DIR/.$MYNAME.dirty" || return 1
 
        if [ -x "./autogen.sh" ]; then
-               eval make $MAKE_ARGS_MAINTAINERCLEAN $QUIETCMD 2>&1
-               eval ./autogen.sh $QUIETCMD
+               eval "make $MAKE_ARGS_MAINTAINERCLEAN $QUIETCMD 2>&1"
+               eval "./autogen.sh $QUIETCMD"
        fi
        if [ -x "./configure" ]; then
-               eval ./configure $QUIETCMD
+               eval "./configure $QUIETCMD"
        fi
-       eval make $MAKE_ARGS_BUILD $QUIETCMD
+       eval "make $MAKE_ARGS_BUILD $QUIETCMD"
        return $?
 }
 
 check() {
        msg "Checking \"$NAME\" ..."
-       cd "$BASE_DIR"
+       cd "$BASE_DIR" || return 1
 
-       eval make $MAKE_ARGS_CHECK $QUIETCMD
+       eval "make $MAKE_ARGS_CHECK $QUIETCMD"
 }
 
 archive() {
        msg "Archiving \"$NAME\" ..."
-       cd "$BASE_DIR"
+       cd "$BASE_DIR" || return 1
 
-       eval make $MAKE_ARGS_DIST $QUIETCMD
+       eval "make $MAKE_ARGS_DIST $QUIETCMD"
 }
 
 publish() {
        msg "Publishing \"$NAME\" ..."
-       cd "$BASE_DIR"
+       cd "$BASE_DIR" || return 1
 
-       archive=`ls -1rt *.tar.gz | tail -n 1`
+       archive=$(ls -1rt -- *.tar.gz | tail -n 1)
        if [ -z "$archive" ]; then
                err "No distribution archive found!?"
                return 1
        fi
 
        mv "$archive" "$DEST_DIR"/ || return 1
-       chmod a+rX "$DEST_DIR/`basename "$archive"`"
+       chmod a+rX "$DEST_DIR/$(basename "$archive")"
        rm -f "$archive" "$BASE_DIR/.$MYNAME.dirty"
 
-       msg "New \"$NAME\" archive: \"`basename "$archive"`\""
+       msg "New \"$NAME\" archive: \"$(basename "$archive")\""
 
+       clean_up
+}
+
+clean_up() {
+       [ -n "$KEEP_ARCHIVES" ] || return 0
+       [ -n "$ARCHIVE_PATTERN" ] || return 0
+
+       msg "Removing outdated archives, keeping $KEEP_ARCHIVES ..."
+       cd "$DEST_DIR" || return 1
+
+       eval "ls -1t $ARCHIVE_PATTERN | sed -n '$((KEEP_ARCHIVES + 1)),9999p' | xargs -r rm"
 }
 
 # read in configuration
@@ -106,7 +119,7 @@ publish() {
 
 # read in and process projects in autobuild.d directory
 for file in "$AUTOBUILDER_D_DIR"/*; do
-       file_name="`basename "$file"`"
+       file_name="$(basename "$file")"
 
        # defaults
        NAME=""
@@ -155,10 +168,11 @@ for file in "$AUTOBUILDER_D_DIR"/*; do
        case "$TYPE" in
          "git")
                prepare_git
-               [ $? -eq 9 \
-                 -a -z "$FORCE" \
-                 -a ! -e "$BASE_DIR/.$MYNAME.dirty" ] \
-                       && continue
+               if [ $? -eq 9 ] \
+                && [ -z "$FORCE" ] \
+                && [ ! -e "$BASE_DIR/.$MYNAME.dirty" ]; then
+                       continue
+               fi
                ;;
        esac