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 header = "Isabelle Development Resources" 26 27 HTML.write_document(root, "index.html", 28 List(HTML.title(header)), 29 List(HTML.chapter(header), 30 HTML.itemize( 31 List( 32 HTML.text("Isabelle nightly ") ::: 33 List(HTML.link(RELEASE_SNAPSHOT, HTML.text("release snapshot"))) ::: 34 HTML.text(" (for all platforms)"), 35 36 HTML.text("Cronjob ") ::: List(HTML.link(CRONJOB_LOG, HTML.text("log file"))), 37 38 HTML.text("Isabelle ") ::: 39 List(HTML.link(BUILD_STATUS + "/index.html", HTML.text("build status"))) ::: 40 HTML.text(" information"), 41 42 HTML.text("Database with recent ") ::: 43 List(HTML.link(BUILD_LOG_DB, HTML.text("build log"))) ::: 44 HTML.text(" information (e.g. for ") ::: 45 List(HTML.link("https://sqlitebrowser.org", 46 List(HTML.code(HTML.text("sqlitebrowser"))))) ::: 47 HTML.text(")"))))) 48 } 49 50 51 /* release snapshot */ 52 53 def release_snapshot( 54 rev: String = "", 55 afp_rev: String = "", 56 parallel_jobs: Int = 1, 57 remote_mac: String = "") 58 { 59 Isabelle_System.with_tmp_dir("isadist")(base_dir => 60 { 61 Isabelle_System.update_directory(root + Path.explode(RELEASE_SNAPSHOT), 62 website_dir => 63 Build_Release.build_release(base_dir, rev = rev, afp_rev = afp_rev, 64 parallel_jobs = parallel_jobs, remote_mac = remote_mac, website = Some(website_dir))) 65 }) 66 } 67 68 69 /* maintain build_log database */ 70 71 def build_log_database(options: Options, log_dirs: List[Path]) 72 { 73 val store = Build_Log.store(options) 74 using(store.open_database())(db => 75 { 76 store.update_database(db, log_dirs) 77 store.update_database(db, log_dirs, ml_statistics = true) 78 store.snapshot_database(db, root + Path.explode(BUILD_LOG_DB)) 79 }) 80 } 81 82 83 /* present build status */ 84 85 def build_status(options: Options) 86 { 87 Isabelle_System.update_directory(root + Path.explode(BUILD_STATUS), 88 dir => Build_Status.build_status(options, target_dir = dir, ml_statistics = true)) 89 } 90} 91