|
| 1 | +package build.hail |
| 2 | + |
| 3 | +import mill.* |
| 4 | +import mill.api.{BuildCtx, Result} |
| 5 | +import mill.scalalib.* |
| 6 | +import mill.scalalib.Assembly.* |
| 7 | +import mill.scalalib.TestModule.TestNg |
| 8 | +import mill.util.{Jvm, VcsVersion} |
| 9 | + |
| 10 | +import build.Env |
| 11 | +import build.Settings |
| 12 | +import build.HailScalaModule |
| 13 | +import millbuild.BuildConfig.* |
| 14 | +import millbuild.BuildMode.* |
| 15 | +import millbuild.MvnCoordinate.* |
| 16 | + |
| 17 | +object `package` extends Cross[RootHailModule](enabledScalaVersions) |
| 18 | + |
| 19 | +trait RootHailModule extends CrossScalaModule, HailScalaModule: |
| 20 | + outer => |
| 21 | + |
| 22 | + override def crossScalaVersion: String = |
| 23 | + Settings.scalaMinorVersions(crossValue) |
| 24 | + |
| 25 | + def buildInfo: T[PathRef] = Task { |
| 26 | + val revision = VcsVersion.vcsState().currentRevision |
| 27 | + os.write( |
| 28 | + Task.dest / "build-info.properties", |
| 29 | + s"""[Build Metadata] |
| 30 | + |revision=$revision |
| 31 | + |sparkVersion=${Env.sparkVersion()} |
| 32 | + |hailPipVersion=${Settings.hailMajorMinorVersion}.${Settings.hailPatchVersion} |
| 33 | + |hailBuildConfiguration=${buildMode} |
| 34 | + |""".stripMargin, |
| 35 | + ) |
| 36 | + PathRef(Task.dest) |
| 37 | + } |
| 38 | + |
| 39 | + override def moduleDeps: Seq[JavaModule] = |
| 40 | + Seq( |
| 41 | + build.hail.memory(if buildMode == CI then "debug" else "release"), |
| 42 | + ) |
| 43 | + |
| 44 | + override def resources: T[Seq[PathRef]] = |
| 45 | + super.resources() ++ Seq( |
| 46 | + BuildCtx.withFilesystemCheckerDisabled { |
| 47 | + PathRef(BuildCtx.workspaceRoot / "prebuilt" / "lib") |
| 48 | + }, |
| 49 | + buildInfo(), |
| 50 | + ) |
| 51 | + |
| 52 | + override def generatedSources: T[Seq[PathRef]] = |
| 53 | + Task { |
| 54 | + Seq(build.hail.`ir-gen`.generate()) |
| 55 | + } |
| 56 | + |
| 57 | + override def unmanagedClasspath: T[Seq[PathRef]] = |
| 58 | + Seq(build.hail.shadeazure.assembly()) |
| 59 | + |
| 60 | + // omit unmanagedClasspath from the jar |
| 61 | + override def jar: T[PathRef] = |
| 62 | + Task { |
| 63 | + val jar = Task.dest / "out.jar" |
| 64 | + Jvm.createJar(jar, (resources() ++ Seq(compile().classes)).map(_.path).filter(os.exists), manifest()) |
| 65 | + PathRef(jar) |
| 66 | + } |
| 67 | + |
| 68 | + override def bomMvnDeps: T[Seq[Dep]] = |
| 69 | + Seq( |
| 70 | + `asm-bom` :: "9.9", |
| 71 | + `libraries-bom` :: "26.66.0", |
| 72 | + `log4j-bom` :: "2.22.0", |
| 73 | + ) |
| 74 | + |
| 75 | + override def compileMvnDeps: T[Seq[Dep]] = |
| 76 | + Seq[Dep]( |
| 77 | + // WARNING WARNING WARNING |
| 78 | + // Before changing the breeze version review: |
| 79 | + // - https://hail.zulipchat.com/#narrow/stream/123011-Hail-Query-Dev/topic/new.20spark.20ndarray.20failures/near/41645 |
| 80 | + // - https://github.com/hail-is/hail/pull/11555 |
| 81 | + `breeze` :: "1.1", |
| 82 | + `avro` :: "1.11.2", |
| 83 | + `commons-codec` :: "1.16.1", |
| 84 | + `commons-io` :: "2.16.1", |
| 85 | + `commons-lang3` :: "3.12.0", |
| 86 | + `commons-math3` :: "3.6.1", |
| 87 | + `hadoop-client-api` :: "3.3.4", |
| 88 | + `httpclient` :: "4.5.14", |
| 89 | + `jackson-core` :: "2.15.2", |
| 90 | + `json4s-jackson` :: "3.7.0-M11", |
| 91 | + `lz4-java` :: "1.8.0", |
| 92 | + `log4j-api`, |
| 93 | + `log4j-core`, |
| 94 | + `zstd-jni` :: "1.5.5-4", |
| 95 | + `scalac-compat-annotation` :: "0.1.4", |
| 96 | + (`spark-core` :: Env.sparkVersion()).excludeOrg("org.scalanlp"), |
| 97 | + (`spark-mllib` :: Env.sparkVersion()).excludeOrg("org.scalanlp"), |
| 98 | + ) |
| 99 | + |
| 100 | + override def mvnDeps: T[Seq[Dep]] = |
| 101 | + Seq[Dep]( |
| 102 | + `all` :: "1.1.2", |
| 103 | + `asm`, |
| 104 | + `asm-analysis`, |
| 105 | + `asm-util`, |
| 106 | + `google-auth-library-oauth2-http` |
| 107 | + .mvn |
| 108 | + .excludeOrg( |
| 109 | + "commons-codec", |
| 110 | + "org.apache.httpcomponents", |
| 111 | + "org.slf4j", |
| 112 | + ), |
| 113 | + `google-cloud-storage` |
| 114 | + .mvn |
| 115 | + .excludeOrg( |
| 116 | + "com.fasterxml.jackson.core", |
| 117 | + "commons-codec", |
| 118 | + "org.slf4j", |
| 119 | + ), |
| 120 | + (`elasticsearch-spark` :: "9.2.1") |
| 121 | + .excludeOrg( |
| 122 | + "commons-logging", |
| 123 | + "org.apache.spark", |
| 124 | + "org.slf4j", |
| 125 | + ), |
| 126 | + `freemarker` :: "2.3.31", |
| 127 | + (`htsjdk` :: "3.0.5").excludeOrg("*"), |
| 128 | + (`jdistlib` :: "0.4.5").excludeOrg("*"), |
| 129 | + `jna` :: "5.13.0", |
| 130 | + (`log4j-api-scala` :: "13.1.0").excludeOrg("*"), |
| 131 | + `scala-collection-compat`, |
| 132 | + `sourcecode` :: "0.4.2", |
| 133 | + ) |
| 134 | + |
| 135 | + override def runMvnDeps: T[Seq[Dep]] = |
| 136 | + Seq( |
| 137 | + (`breeze-natives` :: "1.1") |
| 138 | + .excludeOrg( |
| 139 | + "org.apache.commons", |
| 140 | + "org.slf4j", |
| 141 | + ), |
| 142 | + `junixsocket-core` :: "2.6.1", |
| 143 | + ) |
| 144 | + |
| 145 | + override def assemblyRules: Seq[Rule] = |
| 146 | + super.assemblyRules ++ Seq( |
| 147 | + Rule.Exclude("META-INF/INDEX.LIST"), |
| 148 | + Rule.ExcludePattern("^scala/(?!collection/compat).*"), |
| 149 | + Rule.AppendPattern("META-INF/services/.*", "\n"), |
| 150 | + Rule.Relocate("breeze.**", "is.hail.relocated.@0"), |
| 151 | + Rule.Relocate("com.google.**", "is.hail.relocated.@0"), |
| 152 | + Rule.Relocate("scala.collection.compat.**", "is.hail.relocated.@0"), |
| 153 | + ) |
| 154 | + |
| 155 | + override def scalacPluginMvnDeps: T[Seq[Dep]] = |
| 156 | + Seq( |
| 157 | + `better-monadic-for` :: "0.3.1", |
| 158 | + ) |
| 159 | + |
| 160 | + def writeRunClasspath: T[PathRef] = |
| 161 | + Task { |
| 162 | + os.write( |
| 163 | + Task.dest / "runClasspath", |
| 164 | + runClasspath().map(_.path).mkString(":"), |
| 165 | + ) |
| 166 | + PathRef(Task.dest) |
| 167 | + } |
| 168 | + |
| 169 | + object test extends HailScalaTests, TestNg, CrossValue: |
| 170 | + override def forkArgs: T[Seq[String]] = |
| 171 | + Seq("-Xss4m", "-Xmx4096M") |
| 172 | + |
| 173 | + override def compileMvnDeps: T[Seq[Dep]] = |
| 174 | + outer.compileMvnDeps() |
| 175 | + |
| 176 | + override def mvnDeps: T[Seq[Dep]] = |
| 177 | + outer.mvnDeps() ++ Seq( |
| 178 | + `guice` :: "5.1.0", |
| 179 | + `mockito-scala` :: "1.17.31", |
| 180 | + `scalacheck` :: "1.18.1", |
| 181 | + `scalacheck-1-18` :: "3.2.19.0", |
| 182 | + `scalatest` :: "3.2.19", |
| 183 | + `scalatest-shouldmatchers` :: "3.2.19", |
| 184 | + `testng-7-10` :: "3.2.19.0", |
| 185 | + ) |
| 186 | + |
| 187 | + override def runMvnDeps: T[Seq[Dep]] = |
| 188 | + outer.runMvnDeps() |
| 189 | + |
| 190 | + override def assemblyRules: Seq[Rule] = |
| 191 | + outer.assemblyRules |
0 commit comments