src/Pure/Tools/build_docker.scala
changeset 75393 87ebf5a50283
parent 74727 fa15929bdf83
child 75394 42267c650205
equal deleted inserted replaced
75388:b3ca4a6ed74b 75393:87ebf5a50283
     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