summaryrefslogtreecommitdiff
path: root/util/board_status
diff options
context:
space:
mode:
authorDavid Hendricks <dhendrix@chromium.org>2013-11-11 18:44:05 -0800
committerDavid Hendricks <dhendrix@chromium.org>2013-11-17 10:31:17 +0100
commit1b6e7a67489138848edfc641522297b0263b739c (patch)
tree1f70fa00d0753b59d1e3db71ab09357d45baacec /util/board_status
parent0dde01cad1c0b1422c845fc201733be559004fb7 (diff)
Updates to the board status script
This is the first major re-work for the board status script. Summary: - Added a command to the getrevision.sh script to retrieve tagged revision. - Results are placed in a dynamically generated temporary location. This makes it easy to do multiple trial runs and avoids polluting the coreboot directory. - Results are stored in a directory with the following form: <vendor>/<mainboard>/<tagged_revision>/<timestamp>/ Vendor and mainboard are obtained from CONFIG_MAINBOARD_DIR so that hierarchy is consistent between coreboot and board-status. - The results directory is used as the commit message. - board-status repository is checked out automatically if results are to be uploaded. TODO: - Add ability to run commands which may fail. Currently we assume any failure should terminate the script, but some commands can be made optional. Successfully uploaded first result to board-status repository. See http://review.coreboot.org/gitweb?p=board-status.git;a=summary . Change-Id: Icba41ccad4e6e6ee829b8092a2459c2d72a3365b Signed-off-by: David Hendricks <dhendrix@chromium.org> Reviewed-on: http://review.coreboot.org/4039 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'util/board_status')
-rw-r--r--util/board_status/board_status.sh103
-rwxr-xr-xutil/board_status/getrevision.sh20
2 files changed, 98 insertions, 25 deletions
diff --git a/util/board_status/board_status.sh b/util/board_status/board_status.sh
index d2955e0d63..12d1ecddf4 100644
--- a/util/board_status/board_status.sh
+++ b/util/board_status/board_status.sh
@@ -7,13 +7,17 @@
EXIT_SUCCESS=0
EXIT_FAILURE=1
-OUTDIR="status"
# Stuff from command-line switches
REMOTE_HOST=""
CLOBBER_OUTPUT=0
UPLOAD_RESULTS=0
+# Used to specify whether a command should always be run locally or
+# if command should be run remoteley when a remote host is specified.
+LOCAL=0
+REMOTE=1
+
show_help() {
echo "Usage:
${0} <option>
@@ -22,7 +26,7 @@ Options
-h
Show this message.
-c
- Clobber output when finished.
+ Clobber temporary output when finished. Useful when not uploading.
-r <host>
Obtain machine information from remote host (using ssh).
-u
@@ -42,7 +46,7 @@ test_cmd()
return
fi
- if [[ $1 -eq 1 && "$REMOTE_HOST" ]]; then
+ if [[ $1 -eq $REMOTE && -n "$REMOTE_HOST" ]]; then
ssh root@${REMOTE_HOST} which "$2" >/dev/null
rc=$?
else
@@ -68,7 +72,7 @@ cmd()
return
fi
- if [[ $1 -eq 1 && -n "$REMOTE_HOST" ]]; then
+ if [[ $1 -eq $REMOTE && -n "$REMOTE_HOST" ]]; then
ssh root@${REMOTE_HOST} "$2"
else
$2
@@ -100,38 +104,87 @@ while getopts "chr:u" opt; do
esac
done
-if [ -e "$OUTDIR" ]; then
- echo "Output directory exists, aborting."
+grep -rH 'coreboot.org' .git/config >/dev/null 2>&1
+if [ $? -ne 0 ]; then
+ echo "Script must be run from root of coreboot directory"
exit $EXIT_FAILURE
fi
-mkdir "$OUTDIR"
+# Results will be placed in a temporary location until we're ready to upload.
+# If the user does not wish to upload, results will remain in /tmp.
+tmpdir=$(mktemp -d)
+
+# Obtain board and revision info to form the directory structure:
+# <vendor>/<board>/<revision>/<timestamp>
+cbfstool_cmd="util/cbfstool/cbfstool"
+test_cmd $LOCAL "$cbfstool_cmd"
+$cbfstool_cmd build/coreboot.rom extract -n config -f ${tmpdir}/config.txt
+mainboard_dir="$(grep CONFIG_MAINBOARD_DIR ${tmpdir}/config.txt | awk -F '"' '{ print $2 }')"
+vendor=$(echo "$mainboard_dir" | awk -F '/' '{ print $1 }')
+mainboard=$(echo "$mainboard_dir" | awk -F '/' '{ print $2 }')
getrevision="util/board_status/getrevision.sh"
-test_cmd 0 $getrevision
-touch ${OUTDIR}/revision.txt
-printf "Local revision: %s\n" $($getrevision -l) >> ${OUTDIR}/revision.txt
-printf "Upstream revision: %s\n" $($getrevision -u) >> ${OUTDIR}/revision.txt
-printf "Upstream URL: %s\n" $($getrevision -U)>> ${OUTDIR}/revision.txt
-printf "Timestamp: %s\n" $($getrevision -t) >> ${OUTDIR}/revision.txt
+test_cmd $LOCAL $getrevision
+tagged_version=$($getrevision -T)
+timestamp=$($getrevision -t)
+
+results="${vendor}/${mainboard}/${tagged_version}/${timestamp}"
+
+echo "Temporarily placing output in ${tmpdir}/${results}"
+mkdir -p "${tmpdir}/${results}"
+
+mv "${tmpdir}/config.txt" "${tmpdir}/${results}"
+
+touch ${tmpdir}/${results}/revision.txt
+printf "Local revision: %s\n" "$($getrevision -l)" >> ${tmpdir}/${results}/revision.txt
+printf "Tagged revision: %s\n" "${tagged_version}" >> ${tmpdir}/${results}/revision.txt
+printf "Upstream revision: %s\n" $($getrevision -u) >> ${tmpdir}/${results}/revision.txt
+printf "Upstream URL: %s\n" $($getrevision -U)>> ${tmpdir}/${results}/revision.txt
+printf "Timestamp: %s\n" "$timestamp" >> ${tmpdir}/${results}/revision.txt
+
+test_cmd $REMOTE "cbmem"
+cmd $REMOTE "cbmem -c" > ${tmpdir}/${results}/coreboot_console.txt
+
+# TODO: Some commands should be optional and be non-fatal in case of error.
+#cmd $REMOTE "cbmem -t" > ${outdir}/coreboot_timestamps.txt
+
+cmd $REMOTE dmesg > ${tmpdir}/${results}/kernel_log.txt
+
+# FIXME: the board-status directory might get big over time. Is there a way we
+# can push the results without fetching the whole repo?
+coreboot_dir=`pwd`
+if [ $UPLOAD_RESULTS -eq 1 ]; then
+ # extract username from ssh://<username>@review.coreboot.org/blah
+ username=$(git config --get remote.origin.url | sed 's/ssh\:\/\///' | sed 's/@.*//')
+
+ cd "util/board_status/"
+ if [ ! -e "board-status" ]; then
+ git clone "ssh://${username}@review.coreboot.org:29418/board-status"
+ if [ $? -ne 0 ]; then
+ "Error cloning board-status repo, aborting."
+ exit $EXIT_FAILURE
+ fi
+ fi
-cbfstool_cmd="util/cbfstool/cbfstool"
-test_cmd 0 "$cbfstool_cmd"
-$cbfstool_cmd build/coreboot.rom extract -n config -f ${OUTDIR}/config.txt
+ cd "board-status"
+ echo "Copying results to $(pwd)/${results}"
-test_cmd 1 "cbmem"
-cmd 1 "cbmem -c" > ${OUTDIR}/coreboot_console.txt
-cmd 1 "cbmem -t" > ${OUTDIR}/coreboot_timestamps.txt
-cmd 1 "cbmem -C" > ${OUTDIR}/coreboot_coverage.txt
+ # Note: Result directory should be unique due to the timestamp.
+ cp -R "${tmpdir}/${vendor}" .
-cmd 1 dmesg > ${OUTDIR}/kernel_log.txt
+ echo "Uploading results"
+ git add "${vendor}"
+ git commit -a -am "${mainboard_dir}/${tagged_version}/${timestamp}"
+ git push origin
-#if [ $UPLOAD_RESULTS -eq 1 ]; then
-# FIXME: implement this part
-#fi
+ # Results have been uploaded so it's pointless to keep the
+ # temporary files around.
+ rm -rf "${tmpdir}"
+fi
+cd "$coreboot_dir"
if [ $CLOBBER_OUTPUT -eq 1 ]; then
- rm -rf ${OUTDIR}
+ rm -rf ${tmpdir}
fi
exit $EXIT_SUCCESS
diff --git a/util/board_status/getrevision.sh b/util/board_status/getrevision.sh
index c8c126a5ee..0a6b6c6923 100755
--- a/util/board_status/getrevision.sh
+++ b/util/board_status/getrevision.sh
@@ -121,6 +121,20 @@ local_revision() {
echo "${r}"
}
+# Similar to local_revision but uses "git describe" instead of "git log" which
+# includes number of commits since most recent tag.
+tagged_revision() {
+ local r
+
+ if git_is_file_tracked "$1" ; then
+ r=$(git describe --tags --dirty)
+ else
+ return ${EXIT_FAILURE}
+ fi
+
+ echo "${r}"
+}
+
upstream_revision() {
local r=
@@ -143,6 +157,8 @@ Commands
local revision information including an indicator for uncommitted changes
-u or --upstream
upstream revision
+ -T or --tags
+ similar to -l, but uses \"git describe\" to obtain revision info with tags
-U or --url
URL associated with the latest commit
-d or --date
@@ -175,6 +191,10 @@ main() {
check_action $1
action=local_revision
shift;;
+ -T|--tags)
+ check_action $1
+ action=tagged_revision
+ shift;;
-u|--upstream)
check_action $1
action=upstream_revision