[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v7 20/20] osstest: save/retrieve the last successfully tested FreeBSD build



And use it in order to install the hosts for the next FreeBSD flight.

Note that the anoints are done after the push, but there's a recovery
mechanism in case osstest manages to do a successful push, but the
artifacts are not anointed for some reason. Osstest will continue to
create flights until the revision of the anointed artifacts matches
the one pushed to the repository (even if that means running flights
with OLD_REVISION == NEW_REVISION).

Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
Changes since v6:
 - Use just the branch name for anoint (instead of freebsd-$branch).
 - Force the creation of flights if the revision of the current
   anoints don't match OLD_VERSION.
 - Iterate over the list of current anoints instead of open-coding the
   arches.
 - Split the retrieve/anoint code blocks into it's own sections.

Changes since v5:
 - New in this version.
---
 cr-daily-branch | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/cr-daily-branch b/cr-daily-branch
index af17ad20..d74f9c33 100755
--- a/cr-daily-branch
+++ b/cr-daily-branch
@@ -126,6 +126,34 @@ elif [ "x$OSSTEST_NO_BASELINE" != xy ] ; then
        fi
 fi
 
+# For convenience set a global variable with the FreeBSD branch
+# under test, so that we don't need to repeat this in several
+# places
+case "$branch" in
+freebsd-*) freebsd_branch=${branch#freebsd-} ;;
+*) freebsd_branch=master ;;
+esac
+
+case "$branch" in
+freebsd-*)
+    IFS=$'\n'
+    for anointed in \
+        `./mg-anoint list-prepared "freebsd build $freebsd_branch*"`; do
+        # Check if the anointed version matches OLD_VERSION,
+        # or else force a new flight, even if OLD_REVISION matches
+        # NEW_REVISION.
+        flight_job=`./mg-anoint retrieve "$anointed"`
+        anointed_revision=`check_tested --flight=${flight_job%% *} \
+                                        --print-revision=$tree`
+        if [ "x$anointed_revision" != "x$OLD_REVISION" ]; then
+            skipidentical=false
+            break
+        fi
+    done
+    unset IFS
+    ;;
+esac
+
 if [ "x$REVISION_XEN" = x ]; then
         REVISION_XEN="`fetch_version $xenbranch`"
         export REVISION_XEN
@@ -277,6 +305,19 @@ freebsd)
        ;;
 esac
 
+IFS=$'\n'
+for anointed in \
+    `./mg-anoint list-prepared "freebsd build $freebsd_branch*"`; do
+    # Retrieve previous successful FreeBSD build for each arch.
+    freebsd_arch=${anointed##* }
+    freebsd_envvar="FREEBSD_${freebsd_arch^^}_BUILDJOB"
+    if [ "x${!freebsd_envvar}" = "x" ]; then
+        flight_job=`./mg-anoint retrieve "$anointed"`
+        export ${freebsd_envvar}=${flight_job/ /.}
+    fi
+done
+unset IFS
+
 if [ "x$OLD_REVISION" = xdetermine-late ]; then
        OLD_REVISION="`\
  $AP_FETCH_PFX ./ap-fetch-version-baseline-late $branch $NEW_REVISION`"
@@ -476,6 +517,33 @@ else
         echo
 fi
 
+# Do the anoints after the push: if for some reason this fails,
+# and osstest ends up with a pushed revision that doesn't match
+# the latest anointed artifact a new flight will be run regardless
+# of whether OLD_REVISION == NEW_REVISION.
+case "$branch" in
+freebsd-*)
+    if grep '^tolerable$' $mrof >/dev/null 2>&1 && $OSSTEST_ANOINT &&
+       [ "x$OSSTEST_BLESSING" == "xreal" ]; then
+        IFS=$'\n'
+        for anointed in `./mg-anoint list-prepared \
+                                     "freebsd build $freebsd_branch*"`; do
+            # Update anointed versions
+            # NB: failure to update an anointed build for a specific arch
+            # should not be fatal, and it's not an issue if one of the
+            # arches gets slightly out of sync with the other ones.
+            freebsd_arch=${anointed##* }
+            if ./mg-anoint anoint \
+                           "freebsd build $freebsd_branch $freebsd_arch" \
+                           $flight build-$freebsd_arch-freebsd; then
+                echo "Anointed artifacts from build-$freebsd_arch-freebsd"
+            fi
+        done
+        unset IFS
+    fi
+    ;;
+esac
+
 if [ -f $revlog ]; then
     revlog_lines=`wc -l <$revlog`
     if [ $revlog_lines -lt 300 ]; then
-- 
2.11.0 (Apple Git-81)


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.