summaryrefslogtreecommitdiff
path: root/bin/return-assignment
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2018-01-24 16:15:40 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2018-01-24 16:15:40 +0100
commitff768f012bfef1bf264d06214aead70a58c0ff90 (patch)
tree00fae2f78283cf61698b2b8fd2474a1f6a5802c8 /bin/return-assignment
parentd5280828118b27372c5ea9be1c0cd8e55c818ff0 (diff)
parentcb4eedcdca4fc5f58e83abe2aadc9abb59b4918c (diff)
downloadbuilder-ff768f012bfef1bf264d06214aead70a58c0ff90.tar.xz
Merge branch 'master' into opcodes
Diffstat (limited to 'bin/return-assignment')
-rwxr-xr-xbin/return-assignment115
1 files changed, 100 insertions, 15 deletions
diff --git a/bin/return-assignment b/bin/return-assignment
index ebaa73a..cd6d30e 100755
--- a/bin/return-assignment
+++ b/bin/return-assignment
@@ -60,12 +60,14 @@ if [ "$5" = 'ERROR' ]; then
fi
# save sent build logs
- tar -x \
- -C "${build_log_directory}/error" \
- --wildcards \
- --no-wildcards-match-slash \
- --transform="s|^|$1.$2.$3.$4.|" \
- '*.build-log.gz'
+ saved_build_logs=$(
+ tar -vx \
+ -C "${build_log_directory}/error" \
+ --wildcards \
+ --no-wildcards-match-slash \
+ --transform="s|^|$1.$2.$3.$4.|" \
+ '*.build-log.gz'
+ )
if [ -f "${work_dir}/package-states/$1.$2.$3.$4.broken" ]; then
was_broken_before=true
@@ -76,20 +78,76 @@ if [ "$5" = 'ERROR' ]; then
# shellcheck disable=SC2154
echo "${slave}" >> \
"${work_dir}/package-states/$1.$2.$3.$4.broken"
- ${mysql_command} -e "$(
- # shellcheck disable=SC2016
+ # shellcheck disable=SC2016
+ {
+ if [ -n "${saved_build_logs}" ]; then
+ printf 'CREATE TEMPORARY TABLE `failures` ('
+ printf '`%s` %s,' \
+ 'date' 'DATETIME' \
+ 'reason' 'SMALLINT' \
+ 'log_file' 'VARCHAR(512)' | \
+ sed 's/,$//'
+ printf ');\n'
+ printf 'INSERT INTO `failures` (`date`,`reason`,`log_file`) VALUES'
+ fail_reason_identifiers=$(
+ {
+ printf 'SELECT `fail_reasons`.`id`,replace(to_base64(`fail_reasons`.`identifier`),"\\n","")'
+ printf ' FROM `fail_reasons` ORDER BY `fail_reasons`.`severity`'
+ } | \
+ ${mysql_command} --raw --batch | \
+ sed '1d'
+ )
+ for saved_build_log in ${saved_build_logs}; do
+ printf '%s' "${fail_reason_identifiers}" | \
+ while read -r reason_id identifier; do
+ if zgrep -q "^$(
+ printf '%s' "${identifier}" | \
+ base64 -d
+ )\$" \
+ "${build_log_directory}/error/$1.$2.$3.$4.${saved_build_log}"; then
+
+ printf ' (from_base64("%s"),%s,from_base64("%s")),' \
+ "$(
+ printf '%s' "${saved_build_log}" | \
+ sed 's|\.build-log\.gz$||;s|^.*\.||' | \
+ base64 -w0
+ )" \
+ "${reason_id}" \
+ "$(
+ printf '%s' "$1.$2.$3.$4.${saved_build_log}" | \
+ base64 -w0
+ )"
+ break
+ fi
+ done
+ done | \
+ sed 's/,$//'
+ printf ';\n'
+ printf 'INSERT INTO `failed_builds` (`build_slave`,`build_assignment`,`date`,`reason`,`log_file`)'
+ printf ' SELECT '
+ printf '`build_slaves`.`%s`,' \
+ 'id' 'currently_building'
+ printf '`failures`.`%s`,' \
+ 'date' 'reason' 'log_file' | \
+ sed 's/,$//'
+ printf ' FROM `build_slaves` JOIN `failures`'
+ printf ' WHERE `build_slaves`.`name`=from_base64("%s");\n' \
+ "$(
+ printf '%s' "${slave}" | \
+ base64 -w0
+ )"
+ printf 'DROP TABLE `failures`;\n'
+ fi
printf 'UPDATE `build_assignments`'
- # shellcheck disable=SC2016
printf ' JOIN `build_slaves` ON `build_slaves`.`currently_building`=`build_assignments`.`id`'
- # shellcheck disable=SC2016
printf ' SET `build_assignments`.`is_broken`=1, `build_slaves`.`currently_building`=NULL'
- # shellcheck disable=SC2016
printf ' WHERE `build_slaves`.`name`=from_base64("%s");\n' \
"$(
printf '%s' "${slave}" | \
base64 -w0
)"
- )"
+ } | \
+ ${mysql_command}
# shellcheck disable=SC2154
sed -i '
@@ -163,9 +221,8 @@ if [ "$5" = 'ERROR' ]; then
sed 's/,$/./'
fi
printf '\n'
- } | tee /dev/stderr > \
- "${irc_dir}/#archlinux-ports/in"
- # why do we need tee there in order for the redirection to work???
+ } | \
+ sponge "${irc_dir}/#archlinux-ports/in"
fi
fi
@@ -368,6 +425,34 @@ if ! [ "${destination}" = 'build-support' ]; then
printf '%s\n' ${packages} > \
"${work_dir}/package-states/$1.$2.$3.$4.done"
fi
+# shellcheck disable=SC2016
+{
+ printf 'UPDATE `build_assignments`'
+ printf ' JOIN `build_slaves` ON `build_slaves`.`currently_building`=`build_assignments`.`id`'
+ printf ' JOIN `binary_packages` ON `binary_packages`.`build_assignment`=`build_assignments`.`id`'
+ printf ' SET'
+ printf ' `build_assignments`.`is_broken`=0,'
+ printf ' `binary_packages`.`repository`=(SELECT `repositories`.`id` FROM `repositories` WHERE `repositories`.`name`=from_base64("%s")),' \
+ "$(
+ printf '%s' "${destination}" | \
+ base64 -w0
+ )"
+ printf ' `binary_packages`.`has_issues`=0,'
+ printf ' `binary_packages`.`is_tested`=0'
+ printf ' WHERE `build_slaves`.`name`=from_base64("%s");\n' \
+ "$(
+ printf '%s' "${slave}" | \
+ base64 -w0
+ )"
+ printf 'UPDATE `build_slaves` SET'
+ printf ' `build_slaves`.`currently_building`=NULL'
+ printf ' WHERE `build_slaves`.`name`=from_base64("%s");\n' \
+ "$(
+ printf '%s' "${slave}" | \
+ base64 -w0
+ )"
+} | \
+ ${mysql_command}
rm -f \
"${work_dir}/package-states/$1.$2.$3.$4.locked" \
"${work_dir}/package-states/$1.$2.$3.$4.broken"