1/* Title: Pure/Admin/isabelle_devel.scala 2 Author: Makarius 3 4Website for Isabelle development resources. 5*/ 6 7package isabelle 8 9 10object Isabelle_Devel 11{ 12 val RELEASE_SNAPSHOT = "release_snapshot" 13 val BUILD_LOG_DB = "build_log.db" 14 val BUILD_STATUS = "build_status" 15 val CRONJOB_LOG = "cronjob-main.log" 16 17 val root = Path.explode("~/html-data/devel") 18 val cronjob_log = root + Path.basic(CRONJOB_LOG) 19 20 21 /* index */ 22 23 def make_index() 24 { 25 val redirect = "https://isabelle-dev.sketis.net/home/menu/view/20" 26 27 HTML.write_document(root, "index.html", 28 List( 29 XML.Elem(Markup("meta", 30 List("http-equiv" -> "Refresh", "content" -> ("0; url=" + redirect))), Nil)), 31 List(HTML.link(redirect, HTML.text("Isabelle Development Resources")))) 32 } 33 34 35 /* release snapshot */ 36 37 def release_snapshot( 38 options: Options, 39 rev: String = "", 40 afp_rev: String = "", 41 parallel_jobs: Int = 1) 42 { 43 Isabelle_System.with_tmp_dir("isadist")(base_dir => 44 { 45 Isabelle_System.update_directory(root + Path.explode(RELEASE_SNAPSHOT), 46 website_dir => 47 Build_Release.build_release(base_dir, options, rev = rev, afp_rev = afp_rev, 48 parallel_jobs = parallel_jobs, 49 build_sessions = List(Isabelle_System.getenv("ISABELLE_LOGIC")), 50 website = Some(website_dir))) 51 }) 52 } 53 54 55 /* maintain build_log database */ 56 57 def build_log_database(options: Options, log_dirs: List[Path]) 58 { 59 val store = Build_Log.store(options) 60 using(store.open_database())(db => 61 { 62 store.update_database(db, log_dirs) 63 store.update_database(db, log_dirs, ml_statistics = true) 64 store.snapshot_database(db, root + Path.explode(BUILD_LOG_DB)) 65 }) 66 } 67 68 69 /* present build status */ 70 71 def build_status(options: Options) 72 { 73 Isabelle_System.update_directory(root + Path.explode(BUILD_STATUS), 74 dir => Build_Status.build_status(options, target_dir = dir, ml_statistics = true)) 75 } 76} 77