#!/usr/bin/env python3 """Part D spike (30 min) on guest 9202, controller v0.267.0, drill catalog. 1. an app two steps behind (vikunja A=2.4.0 -> B=2.5.0 -> C=2.6.0): does ONE press jump A -> C today? 2. does a `templates//steps/` folder reach the box? (it is read from the catalog clone) Evidence only; every act is a product endpoint.""" import json, os, sys, time sys.path.insert(0, ".") import walk as w DRILL = w.DRILL CACHE = "/var/lib/docker/volumes/felhom-controller-data/_data/catalog-cache" def commit(msg, edit): edit() w.sh(["git", "-C", DRILL, "add", "-A"]) w.sh(["git", "-C", DRILL, "commit", "-q", "-m", msg]) r = w.sh(["git", "-C", DRILL, "push", "-q", "origin", "main"], timeout=120) h = w.sh(["git", "-C", DRILL, "rev-parse", "--short=12", "HEAD"]).stdout.strip() w.say(f"drill commit {h}: {msg} (push rc={r.returncode})") return h def set_img(ref): p = f"{DRILL}/templates/vikunja/docker-compose.yml" s = open(p).read() import re s = re.sub(r"image: vikunja/vikunja:\S+", f"image: vikunja/vikunja:{ref}", s) open(p, "w").write(s) out = {} commit("SPIKE vikunja A=2.4.0", lambda: set_img("2.4.0")) w.login() w.sync_rescan("vikunja", "vikunja/vikunja:2.4.0") ok = w.deploy("vikunja", "vikunja-sp") out["deployed_A"] = ok out["A"] = w.observables("vikunja") def step_b(): set_img("2.5.0") os.makedirs(f"{DRILL}/templates/vikunja/steps", exist_ok=True) open(f"{DRILL}/templates/vikunja/steps/spike-B.yml", "w").write( open(f"{DRILL}/templates/vikunja/docker-compose.yml").read()) commit("SPIKE vikunja B=2.5.0 + steps/spike-B.yml", step_b) commit("SPIKE vikunja C=2.6.0", lambda: set_img("2.6.0")) out["badge_wait_s"] = w.sync_rescan("vikunja", "vikunja/vikunja:2.6.0") out["cache_steps"] = w.guest(f"git -C {CACHE} rev-parse --short=12 HEAD; git -C {CACHE} rev-list --count HEAD; ls -la {CACHE}/templates/vikunja/ {CACHE}/templates/vikunja/steps/ 2>&1; ls /opt/docker/stacks/vikunja/") w.say("cache:\n" + out["cache_steps"]) out["badges"] = w.badges("vikunja") out["press"] = w.press_update("vikunja") out["after"] = w.observables("vikunja") w.say("after: " + json.dumps(out["after"])) w.remove("vikunja") json.dump(out, open("../partD/00-spike.json", "w"), indent=2, ensure_ascii=False) open("../partD/00-spike.log", "w").write("\n".join(w.LOG) + "\n")