equal
deleted
inserted
replaced
5 */ |
5 */ |
6 |
6 |
7 package isabelle |
7 package isabelle |
8 |
8 |
9 |
9 |
10 object Build_Docker |
10 object Build_Docker { |
11 { |
|
12 private val default_base = "ubuntu" |
11 private val default_base = "ubuntu" |
13 private lazy val default_logic = Isabelle_System.getenv("ISABELLE_LOGIC") |
12 private lazy val default_logic = Isabelle_System.getenv("ISABELLE_LOGIC") |
14 |
13 |
15 private val Isabelle_Name = """^.*?(Isabelle[^/\\:]+)_linux(?:_arm)?\.tar\.gz$""".r |
14 private val Isabelle_Name = """^.*?(Isabelle[^/\\:]+)_linux(?:_arm)?\.tar\.gz$""".r |
16 |
15 |
29 no_build: Boolean = false, |
28 no_build: Boolean = false, |
30 entrypoint: Boolean = false, |
29 entrypoint: Boolean = false, |
31 output: Option[Path] = None, |
30 output: Option[Path] = None, |
32 more_packages: List[String] = Nil, |
31 more_packages: List[String] = Nil, |
33 tag: String = "", |
32 tag: String = "", |
34 verbose: Boolean = false): Unit = |
33 verbose: Boolean = false |
35 { |
34 ): Unit = { |
36 val isabelle_name = |
35 val isabelle_name = |
37 app_archive match { |
36 app_archive match { |
38 case Isabelle_Name(name) => name |
37 case Isabelle_Name(name) => name |
39 case _ => error("Cannot determine Isabelle distribution name from " + app_archive) |
38 case _ => error("Cannot determine Isabelle distribution name from " + app_archive) |
40 } |
39 } |
76 else "") |
75 else "") |
77 |
76 |
78 output.foreach(File.write(_, dockerfile)) |
77 output.foreach(File.write(_, dockerfile)) |
79 |
78 |
80 if (!no_build) { |
79 if (!no_build) { |
81 Isabelle_System.with_tmp_dir("docker")(tmp_dir => |
80 Isabelle_System.with_tmp_dir("docker")(tmp_dir => { |
82 { |
|
83 File.write(tmp_dir + Path.explode("Dockerfile"), dockerfile) |
81 File.write(tmp_dir + Path.explode("Dockerfile"), dockerfile) |
84 |
82 |
85 if (is_remote) { |
83 if (is_remote) { |
86 if (!Url.is_readable(app_archive)) |
84 if (!Url.is_readable(app_archive)) |
87 error("Cannot access remote archive " + app_archive) |
85 error("Cannot access remote archive " + app_archive) |
100 |
98 |
101 /* Isabelle tool wrapper */ |
99 /* Isabelle tool wrapper */ |
102 |
100 |
103 val isabelle_tool = |
101 val isabelle_tool = |
104 Isabelle_Tool("build_docker", "build Isabelle docker image", |
102 Isabelle_Tool("build_docker", "build Isabelle docker image", |
105 Scala_Project.here, args => |
103 Scala_Project.here, args => { |
106 { |
|
107 var base = default_base |
104 var base = default_base |
108 var entrypoint = false |
105 var entrypoint = false |
109 var logic = default_logic |
106 var logic = default_logic |
110 var no_build = false |
107 var no_build = false |
111 var output: Option[Path] = None |
108 var output: Option[Path] = None |