cd9c0c51f9463d768c5eecdec14cb7c9aaf66cf7
braney
  Fri May 29 17:28:10 2026 -0700
Docker QA instances on hgwdev (tip/beta/rel): lifecycle scripts + autoBuild wiring, refs #37655

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

diff --git src/utils/qa/weeklybld/autoBuild.sh src/utils/qa/weeklybld/autoBuild.sh
index ff2910eb675..b37ad3f0185 100755
--- src/utils/qa/weeklybld/autoBuild.sh
+++ src/utils/qa/weeklybld/autoBuild.sh
@@ -423,44 +423,48 @@
         today_date=$(date "+%b %e" | sed 's/  / /')  # e.g. "Mar 17"
         if ! echo "$newest_cgi" | grep -q "$(date '+%b')" 2>/dev/null; then
             log "WARNING: CGIs in cgi-bin-beta may not have been updated today. Check manually."
         fi
     fi
 
     # Run robots in background (takes 6+ hours, wiki says don't wait)
     log "Starting doRobots.csh (runs for 6+ hours in background)..."
     local robotlog="$LOGDIR/v${BRANCHNN}.robots.log"
     if ! $DRY_RUN; then
         nohup /bin/tcsh -c "source $BUILDENV && cd $WEEKLYBLD && ./doRobots.csh >& $robotlog" &
         local robot_pid=$!
         log "doRobots.csh started in background (PID $robot_pid). Log: $robotlog"
     fi
 
-    # Docker testing image build
-    log "Building testing Docker images..."
-    ensure_binfmt
+    # Build the beta image locally on hgwdev; do NOT push to Docker Hub.
+    # kent-beta runs from this image and is torn down again on do_wrapup.
+    # refs #37655 (replaces the former genomebrowser/server:testing push)
+    log "Building local beta Docker image kent:beta (for v${BRANCHNN})..."
     local dockerdir
     dockerdir="$BUILDHOME/v${BRANCHNN}_branch/kent/src/product/installer/docker"
     if [[ -d "$dockerdir" ]]; then
-        local dockerlog="$LOGDIR/v${BRANCHNN}.docker-testing.log"
-        # refs #37350: rm stale local manifest before create, drop --amend to prevent digest accumulation
-        run_tcsh "cd $dockerdir && setenv stage testing && docker build --no-cache --platform linux/amd64 -t genomebrowser/server:\${stage}-amd64 . && docker push genomebrowser/server:\${stage}-amd64 && docker build --no-cache --platform linux/arm64 -t genomebrowser/server:\${stage}-arm64 . && docker push genomebrowser/server:\${stage}-arm64 && docker manifest rm genomebrowser/server:\${stage} >& /dev/null ; docker manifest create genomebrowser/server:\${stage} genomebrowser/server:\${stage}-amd64 genomebrowser/server:\${stage}-arm64 && docker manifest push genomebrowser/server:\${stage}" >& "$dockerlog" || {
-            log "WARNING: Docker testing build had issues. See $dockerlog (non-fatal, continuing)"
+        local dockerlog="$LOGDIR/v${BRANCHNN}.docker-beta.log"
+        # amd64 only: the container only runs on hgwdev (amd64) and is never
+        # pushed, so no arm64 build, no manifest, no binfmt.
+        run_tcsh "cd $dockerdir && docker build --no-cache --platform linux/amd64 -t kent:beta ." >& "$dockerlog" || {
+            log "WARNING: kent:beta build had issues. See $dockerlog (non-fatal, continuing)"
         }
-        log "Docker testing build complete (or skipped on error)."
+        log "Refreshing local kent-beta container..."
+        run "$WEEKLYBLD/refresh-instance.sh" beta || \
+            log "WARNING: kent-beta refresh failed; container may be stale"
     else
-        log "WARNING: Docker directory not found at $dockerdir - skipping Docker build"
+        log "WARNING: Docker directory not found at $dockerdir - skipping beta build"
     fi
 
     log "Final Build complete. Robots running in background."
     log "Next steps: QA tests on hgwbeta, then cherry-picks as needed, then push."
 }
 
 ##############################################################################
 # Generate markdown release notes from the versions page
 ##############################################################################
 
 generate_release_markdown() {
     local ver="$1"
     local outdir="$WEEKLYBLD/markdownReleaseNotes"
     local outfile="$outdir/v${ver}_markdown.txt"
     local url="https://genecats.gi.ucsc.edu/builds/versions-all/v${ver}.html"
@@ -597,30 +601,39 @@
     # Step 7: Build release Docker images
     log "Building release Docker images..."
     ensure_binfmt
     local dockerdir="$BUILDHOME/v${BRANCHNN}_branch/kent/src/product/installer/docker"
     if [[ -d "$dockerdir" ]]; then
         local dockerlog="$LOGDIR/v${BRANCHNN}.docker-release.log"
         # refs #37350: rm stale local manifest before create, drop --amend to prevent digest accumulation
         run_tcsh "cd $dockerdir && setenv stage v${BRANCHNN} && docker build --no-cache --platform linux/amd64 -t genomebrowser/server:\${stage}-amd64 . && docker push genomebrowser/server:\${stage}-amd64 && docker build --no-cache --platform linux/arm64 -t genomebrowser/server:\${stage}-arm64 . && docker push genomebrowser/server:\${stage}-arm64 && docker manifest rm genomebrowser/server:\${stage} >& /dev/null ; docker manifest create genomebrowser/server:\${stage} genomebrowser/server:\${stage}-amd64 genomebrowser/server:\${stage}-arm64 && docker manifest push genomebrowser/server:\${stage} && docker manifest rm genomebrowser/server:latest >& /dev/null ; docker manifest create genomebrowser/server:latest genomebrowser/server:\${stage}-amd64 genomebrowser/server:\${stage}-arm64 && docker manifest push genomebrowser/server:latest" >& "$dockerlog" || {
             log "WARNING: Docker release build had issues. See $dockerlog (non-fatal)"
         }
         log "Docker release build complete."
     else
         log "WARNING: Docker directory not found - skipping Docker release build"
     fi
 
+    # Refresh kent-rel against the just-pushed release image, then tear down
+    # the beta container/image now that v${BRANCHNN} has shipped. refs #37655
+    log "Refreshing local kent-rel container..."
+    run "$WEEKLYBLD/refresh-instance.sh" rel || \
+        log "WARNING: kent-rel refresh failed; container may be stale"
+    log "Removing local kent-beta container and image (v${BRANCHNN} has shipped)..."
+    run "$WEEKLYBLD/remove-instance.sh" beta || \
+        log "WARNING: kent-beta teardown failed; check container/image manually"
+
     # Step 8: Generate markdown release notes for GitHub
     if ! $DRY_RUN; then
         generate_release_markdown "$BRANCHNN"
     fi
 
     log "Wrap-up complete for v${BRANCHNN}."
     log "Manual steps remaining:"
     log "  - Push to genome browser store: sudo /cluster/bin/scripts/gbib_gbic_push"
     log "  - Create GitHub release at https://github.com/ucscGenomeBrowser/kent/releases/new"
     log "    Release notes: $WEEKLYBLD/markdownReleaseNotes/v${BRANCHNN}_markdown.txt"
     log "  - Wait 1 day for nightly rsync, then verify hgdownload: https://hgdownload.soe.ucsc.edu/admin/exe/"
     log "  - Send mirror announcement email to genome-mirror@soe.ucsc.edu"
 }
 
 ##############################################################################