automaint: new tool for automatic (cron based) maintainance
This commit is contained in:
parent
1815ade013
commit
77cfdacce8
1
Makefile
1
Makefile
@ -69,6 +69,7 @@ install-programs:
|
||||
@$(INSTALL_SCRIPT) autodist $(DESTDIR)$(bindir)/autodist
|
||||
@$(INSTALL_SCRIPT) autodist-tool $(DESTDIR)$(bindir)/autodist-tool
|
||||
@$(INSTALL_SCRIPT) autoport $(DESTDIR)$(bindir)/autoport
|
||||
@$(INSTALL_SCRIPT) automaint $(DESTDIR)$(sbindir)/automaint
|
||||
@$(INSTALL_SCRIPT) autoport-chroot $(DESTDIR)$(sbindir)/autoport-chroot
|
||||
@$(INSTALL_SCRIPT) autodist-upstream-updates $(DESTDIR)$(sbindir)/autodist-upstream-updates
|
||||
@$(INSTALL_SCRIPT) autoport-fix-environment $(DESTDIR)$(bindir)/autoport-fix-environment
|
||||
|
211
automaint
Executable file
211
automaint
Executable file
@ -0,0 +1,211 @@
|
||||
#!/bin/bash
|
||||
# automaint -- batch automatic maintainance tool of the autodist suite
|
||||
# Copyright (C) 2013 by Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||
#
|
||||
# Released under the terms of the GNU GPL release 3 license
|
||||
#
|
||||
VERSION=0.9.7
|
||||
# First in vector is base arch
|
||||
ARCHS=(i586 arm x86_64)
|
||||
|
||||
. /etc/autodist/config
|
||||
|
||||
me=(${0##*/} $VERSION "Sat Mar 20 2011")
|
||||
|
||||
function usage() {
|
||||
echo "\
|
||||
${me[0]} ${me[1]}
|
||||
"$"Copyright (C) 2013 Silvan Calarco <silvan.calarco@mambasoft.it>""
|
||||
"$"Released under the terms of the GNU GPL v3 license"
|
||||
echo "
|
||||
"$"Batch automatic maintainance tool of the autodist suite.""
|
||||
|
||||
"$"Usage"":
|
||||
$me [-s repository -d repository ] [-p repository] [-h]
|
||||
|
||||
-s repository "$"Automatic/Staging builds source repository
|
||||
-d repository "$"Main destination repository
|
||||
-p repository "$"Port repository
|
||||
-h "$"Show this help and exit
|
||||
"
|
||||
|
||||
}
|
||||
|
||||
# for webbuild message
|
||||
function cgi_encodevar() {
|
||||
local string="${1}"
|
||||
local strlen=${#string}
|
||||
local encoded=""
|
||||
|
||||
for (( pos=0 ; pos<strlen ; pos++ )); do
|
||||
c=${string:$pos:1}
|
||||
case "$c" in
|
||||
[-_.~a-zA-Z0-9] ) o="${c}" ;;
|
||||
* ) printf -v o '%%%02x' "'$c"
|
||||
esac
|
||||
encoded+="${o}"
|
||||
done
|
||||
echo "${encoded}" # You can either set a return variable (FASTER)
|
||||
# REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p
|
||||
}
|
||||
|
||||
# get_pkg_buildinfo - uses distromatic generated build file for
|
||||
# getting information on the repository
|
||||
#
|
||||
# $1: distromatic files base url for repository
|
||||
# $2: architecture
|
||||
# $3: pkg name
|
||||
function get_pkg_buildinfo() {
|
||||
|
||||
local pkg i a local_arch local_distromatic
|
||||
|
||||
[ $1 ] && local_distromatic=$1 || exit 1
|
||||
[ $2 ] && local_arch=$2 || exit 1
|
||||
[ $3 ] && pkg=$3
|
||||
|
||||
if [ ! "$pkg" ]; then
|
||||
[ -e $local_distromatic/builds-${local_arch}.sh ] && . $local_distromatic/builds-${local_arch}.sh
|
||||
return 0
|
||||
fi
|
||||
|
||||
pkg_archs=();
|
||||
for a in ${archs[*]}; do
|
||||
[ "$a" = "${local_arch}" ] && continue
|
||||
pkg_header=();
|
||||
DISTROMATIC_BUILD_FILE=$local_distromatic/builds-$a.sh
|
||||
[ -e $DISTROMATIC_BUILD_FILE ] && . $DISTROMATIC_BUILD_FILE
|
||||
[ ${pkg_header[0]} ] && pkg_archs=(${pkg_archs[*]} $a)
|
||||
done
|
||||
|
||||
pkg_header=();
|
||||
pkg_builds=();
|
||||
pkg_obsoletes=();
|
||||
pkg_list=();
|
||||
|
||||
DISTROMATIC_BUILD_FILE=$local_distromatic/builds-${local_arch}.sh
|
||||
[ -e $DISTROMATIC_BUILD_FILE ] && . $DISTROMATIC_BUILD_FILE
|
||||
[ ${pkg_header[0]} ] && pkg_archs=(${pkg_archs[*]} ${local_arch})
|
||||
|
||||
# {
|
||||
# echo "Error: missing distromatic generated file $DISTROMATIC_BUILD_FILE; aborting."
|
||||
# return;
|
||||
# }
|
||||
# . $DISTROMATIC_BUILD_FILE
|
||||
|
||||
for i in ${pkg_list[*]}; do
|
||||
if [ "$i" == "${pkg_header[0]}" ]; then
|
||||
pkg_name=${pkg_header[0]};
|
||||
# Note: pkg_arch reported in builds file is just last arch source was
|
||||
# built for, so we use repository arch instead
|
||||
pkg_arch=${pkg_header[1]};
|
||||
[ "$pkg_arch" = "noarch" ] || pkg_arch=${local_arch}
|
||||
pkg_version=${pkg_header[2]};
|
||||
pkg_release=${pkg_header[3]};
|
||||
pkg_group=${pkg_header[4]};
|
||||
pkg_license=${pkg_header[5]};
|
||||
pkg_size=${pkg_header[6]};
|
||||
pkg_buildtime=${pkg_header[7]};
|
||||
pkg_altrep=${pkg_header[8]};
|
||||
pkg_repository=${pkg_header[9]};
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
unset pkg_name pkg_arch pkg_version pkg_release \
|
||||
pkg_group pkg_license pkg_size pkg_buildtime pkg_altrep pkg_repository
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
[ $# -gt 0 ] || { usage ; exit 1; }
|
||||
|
||||
for ((i=1; i<=$#; i++)); do
|
||||
case ${!i} in
|
||||
-s) shift
|
||||
SOURCE_REPOSITORY="${!i}"
|
||||
;;
|
||||
-d) shift
|
||||
DEST_REPOSITORY="${!i}"
|
||||
;;
|
||||
-p) shift
|
||||
PORT_REPOSITORY="${!i}"
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[ "$SOURCE_REPOSITORY" -a "$DEST_REPOSITORY" ] || { usage; exit 1; }
|
||||
|
||||
[ "$SOURCE_REPOSITORY" = "$DEST_REPOSITORY" ] && {
|
||||
echo "ERROR: source and destination repository cannot be the same; aborting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
for a in `seq 1 ${#ARCHS[*]}`; do
|
||||
. $LOCAL_REPS_BASE_DIR/distromatic/$SOURCE_REPOSITORY/builds-${ARCHS[$a-1]}.sh
|
||||
pkglist[$a-1]="${pkg_list[*]}"
|
||||
warningslist[$a-1]="${warnings_list[*]}"
|
||||
needportlist[$a-1]="${needport_list[*]}"
|
||||
done
|
||||
|
||||
for p in ${pkglist[0]}; do
|
||||
pkgcontinue=
|
||||
needsport=
|
||||
for w in ${warningslist[*]}; do
|
||||
[ "$p" = "$w" ] && { pkgcontinue=1; break; }
|
||||
done
|
||||
[ "$pkgcontinue" ] && continue
|
||||
|
||||
get_pkg_buildinfo $LOCAL_REPS_BASE_DIR/distromatic/$SOURCE_REPOSITORY ${ARCHS[0]} $p
|
||||
|
||||
for o in ${needportlist[*]}; do
|
||||
[ "$p" = "$o" ] && { needsport=1; break; }
|
||||
done
|
||||
[ "$needsport" -a ! "$PORT_REPOSITORY" ] && continue
|
||||
|
||||
spkg_version=$pkg_version
|
||||
spkg_release=$pkg_release
|
||||
get_pkg_buildinfo $LOCAL_REPS_BASE_DIR/distromatic/$DEST_REPOSITORY ${ARCHS[0]} $p
|
||||
|
||||
if [ "$pkg_version" = "$spkg_version" ]; then
|
||||
update_type="release"
|
||||
else
|
||||
OIFS=$IFS
|
||||
IFS='.'
|
||||
read -ra SVER <<< "$spkg_version"
|
||||
read -ra VER <<< "$pkg_version"
|
||||
IFS=$OIFS
|
||||
for i in `seq 1 ${#SVER[*]}`; do
|
||||
[ "${SVER[i-1]}" != "${VER[i-1]}" ] && break
|
||||
done
|
||||
if [ "$i" = "${#SVER[*]}" ]; then
|
||||
if [[ 64#${SVER[i-1]} -gt 64#89 && 64#${VER[i-1]} -lt 64#80 ]]; then
|
||||
echo "$p: dubious beta upgrade from ${VER[i-1]} to ${SVER[i-1]}"
|
||||
continue
|
||||
fi
|
||||
update_type="minor"
|
||||
else
|
||||
#echo "$p: dubios not-minor version update $i/${#SVER[*]}: ${SVER[i-1]} != ${VER[i-1]}"
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
if [ "$needsport" ]; then
|
||||
echo "$p: importing from $SOURCE_REPOSITORY to $PORT_REPOSITORY ($spkg_version-$spkg_release -> $pkg_version-$pkg_release)"
|
||||
openmamba-repository import $SOURCE_REPOSITORY $p -d $PORT_REPOSITORY -y >/dev/null
|
||||
if [ $? -eq 0 -a "$WEBBUILD_URL" -a "$WEBBUILD_USER" ]; then
|
||||
curl -s "$WEBBUILD_URL?REQUEST=message&USER=$WEBBUILD_USER&SECRET=${WEBBUILD_SECRET}&USER_EMAIL=$WEBBUILD_EMAIL&\
|
||||
MESSAGE=`cgi_encodevar \"imported <b>$p</b> from <b>$SOURCE_REPOSITORY</b> to <b>$PORT_REPOSITORY</b> for porting\"`" >/dev/null
|
||||
fi
|
||||
else
|
||||
echo "$p: importing from $SOURCE_REPOSITORY to $DEST_REPOSITORY ($spkg_version-$spkg_release -> $pkg_version-$pkg_release; update type: $update_type)"
|
||||
openmamba-repository import $SOURCE_REPOSITORY $p -d $DEST_REPOSITORY -y >/dev/null
|
||||
if [ $? -eq 0 -a "$WEBBUILD_URL" -a "$WEBBUILD_USER" ]; then
|
||||
curl -s "$WEBBUILD_URL?REQUEST=message&USER=$WEBBUILD_USER&SECRET=${WEBBUILD_SECRET}&USER_EMAIL=$WEBBUILD_EMAIL&\
|
||||
MESSAGE=`cgi_encodevar \"imported <b>$p</b> from <b>$SOURCE_REPOSITORY</b> to <b>$DEST_REPOSITORY</b>\"`" >/dev/null
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user