aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJorge Manuel B. S. Vicetto (jmbsvicetto) <jmbsvicetto@gentoo.org>2012-07-09 17:47:42 +0000
committerJorge Manuel B. S. Vicetto (jmbsvicetto) <jmbsvicetto@gentoo.org>2012-07-09 17:48:44 +0000
commit498f935c119b4b8093b2abeb1f29916aab67232f (patch)
treef86f5be46564924c5449e63edbe0804d66824d4e /scripts/copy_buildsync.sh
parentFix whitespace. (diff)
downloadreleng-498f935c119b4b8093b2abeb1f29916aab67232f.tar.gz
releng-498f935c119b4b8093b2abeb1f29916aab67232f.tar.bz2
releng-498f935c119b4b8093b2abeb1f29916aab67232f.zip
Add releng scripts to the repository.
Diffstat (limited to 'scripts/copy_buildsync.sh')
-rwxr-xr-xscripts/copy_buildsync.sh127
1 files changed, 127 insertions, 0 deletions
diff --git a/scripts/copy_buildsync.sh b/scripts/copy_buildsync.sh
new file mode 100755
index 00000000..729ff383
--- /dev/null
+++ b/scripts/copy_buildsync.sh
@@ -0,0 +1,127 @@
+#!/bin/bash
+
+ARCHES="alpha amd64 arm hppa ia64 ppc sparc x86 sh s390"
+ #alpha amd64 arm hppa ia64 mips ppc s390 sh sparc x86
+#ARCHES="s390"
+RSYNC_OPTS="-aO --delay-updates"
+DEBUG=
+VERBOSE=
+
+OUT_STAGE3="latest-stage3.txt"
+OUT_ISO="latest-iso.txt"
+
+# Nothing to edit beyond this point
+
+DEBUGP=
+VERBOSEP=
+[ -n "$DEBUG" ] && DEBUGP=echo
+[ -n "$DEBUG" ] && RSYNC_OPTS="${RSYNC_OPTS} -n"
+[ -n "$VERBOSE" ] && RSYNC_OPTS="${RSYNC_OPTS} -v"
+[ -n "$VERBOSEP" ] && VERBOSEP="-v"
+
+for ARCH in $ARCHES; do
+ rc=0
+ fail=0
+
+ indir=/home/buildsync/builds/${ARCH}
+ outdir=/release/weekly/${ARCH}
+ tmpdir=/release/tmp/buildsync/partial/${ARCH}
+
+ mkdir -p ${tmpdir} 2>/dev/null
+ # Copying
+ if [ -d "${indir}" ]; then
+ for i in $(find ${indir} -type f | grep -- '-20[0123][0-9]\{5\}' | sed -e 's:^.*-\(20[^.]\+\).*$:\1:' | sort -ur); do
+ #echo "Doing $i"
+ t="${outdir}/${i}"
+ mkdir -p ${t} 2>/dev/null
+ rsync ${RSYNC_OPTS} --temp-dir=${tmpdir} --partial-dir=${tmpdir} ${indir}/ --filter "S *${i}*" --filter 'S **/' --filter 'H *' ${t}
+ rc=$?
+ if [ $rc -eq 0 ]; then
+ find ${indir} -type f -name "*${i}*" -print0 | xargs -0 --no-run-if-empty $DEBUGP rm $VERBOSEP -f
+ else
+ echo "Not deleting ${indir}/*${i}*, rsync failed!" 1>&2
+ fail=1
+ fi
+ done
+ find ${outdir} -mindepth 1 -type d \
+ | egrep -v current \
+ | sort -r \
+ | tr '\n' '\0' \
+ |xargs -0 --no-run-if-empty rmdir --ignore-fail-on-non-empty
+ fi
+
+ # ================================================================
+ # Build data for revealing latest:
+ # *.iso
+ # stage3*bz2
+ cd "${outdir}"
+ # %T@
+
+ iso_list="$(find 20* -name '*.iso' -printf '%h %f %h/%f\n' |grep -v hardened | sort -n)"
+ stage3_list="$(find 20* -name 'stage3*bz2' -printf '%h %f %h/%f\n' |grep -v hardened | sort -n)"
+ latest_iso_date="$(echo -e "${iso_list}" |awk '{print $1}' |cut -d/ -f1 | tail -n1)"
+ latest_stage3_date="$(echo -e "${stage3_list}" |awk '{print $1}' |cut -d/ -f1 | tail -n1)"
+ header="$(echo -e "# Latest as of $(date -uR)\n# ts=$(date -u +%s)")"
+
+ # Do not remove this
+ [ -z "${latest_iso_date}" ] && latest_iso_date="NONE-FOUND"
+ [ -z "${latest_stage3_date}" ] && latest_stage3_date="NONE-FOUND"
+
+ if [ -n "${iso_list}" ]; then
+ echo -e "${header}" >"${OUT_ISO}"
+ echo -e "${iso_list}" |awk '{print $3}' | grep "$latest_iso_date" >>${OUT_ISO}
+ rm -f current-iso
+ ln -sf "$latest_iso_date" current-iso
+ fi
+ if [ -n "${stage3_list}" ]; then
+ echo -e "${header}" >"${OUT_STAGE3}"
+ echo -e "${stage3_list}" |awk '{print $3}' |grep "$latest_stage3_date" >>${OUT_STAGE3}
+ rm -f current-stage3
+ # The "latest stage3" concept doesn't apply to the arm variants
+ # that are pushed on different days of the week.
+ if [[ ! $(echo ${outdir} | grep arm) ]]; then
+ ln -sf "$latest_stage3_date" current-stage3
+ fi
+ fi
+
+ # new variant preserve code
+ variants="$(find 20* \( -iname '*.iso' -o -iname '*.tar.bz2' \) -printf '%f\n' |sed -e 's,-20[012][0-9]\{5\}.*,,g' -r | sort | uniq)"
+ echo -n '' >"${tmpdir}"/.keep.${ARCH}.txt
+ for v in $variants ; do
+ #date_variant=$(find 20* -iname "${v}*" \( -name '*.tar.bz2' -o -iname '*.iso' \) -printf '%h\n' | sed -e "s,.*/$a/autobuilds/,,g" -e 's,/.*,,g' |sort -n | tail -n1 )
+ variant_path=$(find 20* -iname "${v}*" \( -name '*.tar.bz2' -o -iname '*.iso' \) -print | sed -e "s,.*/$a/autobuilds/,,g" | sort -k1,1 -t/ | tail -n1 )
+ f="latest-${v}.txt"
+ echo -e "${header}" >"${f}"
+ echo -e "${variant_path}" >>${f}
+ rm -f "current-$v"
+ ln -sf "${variant_path%/*}" "current-$v"
+ echo "${variant_path}" | sed -e 's,/.*,,g' -e 's,^,/,g' -e 's,$,$,g' >>"${tmpdir}"/.keep.${ARCH}.txt
+ done
+ #echo "$date_variant" \
+ #| sort | uniq | sed -e 's,^,/,g' -e 's,$,$,g' >"${tmpdir}"/.keep.${ARCH}.txt
+
+ # ================================================================
+ # Cleanup
+ if [ $fail -eq 0 ]; then
+ # Clean up all but latest 4 from mirror dir
+ cd "${outdir}"
+ #echo regex "/${latest_iso_date}\$|/${latest_stage3_date}\$"
+ for i in $(find -regextype posix-basic -mindepth 1 -maxdepth 1 -type d -regex '.*20[012][0-9]\{5\}.*' \
+ | sed -e 's:^.*-\(20[^.]\+\).*$:\1:' \
+ | sort -ur \
+ | egrep -v "/${latest_iso_date}\$|/${latest_stage3_date}\$" \
+ | egrep -v -f "${tmpdir}"/.keep.${ARCH}.txt \
+ | tail -n +5); do
+
+ $DEBUGP rm $VERBOSEP -rf $(pwd)/${i}
+ done
+
+ $DEBUGP rm $VERBOSEP -rf ${tmpdir}
+
+ else
+ echo "There was some failure for $ARCH during the weekly sync. Not doing cleanup for fear of dataloss." 1>&2
+ fi
+
+done
+
+# vim:ts=2 sw=2 noet ft=sh: