From 3d6291ff11b21ea6c6f8371084b464921b6ffccb Mon Sep 17 00:00:00 2001 From: Jiadong Bai Date: Thu, 12 Mar 2026 15:32:51 -0700 Subject: [PATCH 1/5] replace disclaimer with disclaimer-wip --- DISCLAIMER | 10 ---------- DISCLAIMER-WIP | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) delete mode 100644 DISCLAIMER create mode 100644 DISCLAIMER-WIP diff --git a/DISCLAIMER b/DISCLAIMER deleted file mode 100644 index 28289676378..00000000000 --- a/DISCLAIMER +++ /dev/null @@ -1,10 +0,0 @@ -Apache Texera (incubating) is an effort undergoing incubation at the Apache -Software Foundation (ASF), sponsored by the Apache Incubator PMC. - -Incubation is required of all newly accepted projects until a further review -indicates that the infrastructure, communications, and decision making process -have stabilized in a manner consistent with other successful ASF projects. - -While incubation status is not necessarily a reflection of the completeness -or stability of the code, it does indicate that the project has yet to be -fully endorsed by the ASF. diff --git a/DISCLAIMER-WIP b/DISCLAIMER-WIP new file mode 100644 index 00000000000..cbc718569a6 --- /dev/null +++ b/DISCLAIMER-WIP @@ -0,0 +1,23 @@ +Apache Texera is an effort undergoing incubation at The Apache Software +Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is +required of all newly accepted projects until a further review indicates +that the infrastructure, communications, and decision-making process have +stabilized in a manner consistent with other successful ASF projects. +While incubation status is not necessarily a reflection of the +completeness or stability of the code, it does indicate that the project +has yet to be fully endorsed by the ASF. + +Some of the incubating project's releases may not be fully compliant +with ASF policy. For example, releases may have incomplete or +un-reviewed licensing conditions. What follows is a list of issues +the project is currently aware of (this list is likely to be incomplete): + +- LICENSE and NOTICE files in binary artifacts (Docker images, JARs) may + not yet fully account for all bundled third-party dependencies. A + comprehensive dependency license audit is in progress. + +If you are planning to incorporate this work into your product/project, +please be aware that you will need to conduct a thorough licensing +review to determine the overall implications of including this work. +For the current status of this project through the Apache Incubator, +visit: https://incubator.apache.org/projects/texera.html From 42b56f10279dfa8a3923b31a7d1186c10e9b513c Mon Sep 17 00:00:00 2001 From: Jiadong Bai Date: Thu, 12 Mar 2026 15:33:38 -0700 Subject: [PATCH 2/5] copy the license, notice and disclaimer-wip to docker images --- bin/access-control-service.dockerfile | 3 +++ bin/computing-unit-master.dockerfile | 3 +++ bin/computing-unit-worker.dockerfile | 3 +++ bin/config-service.dockerfile | 3 +++ bin/file-service.dockerfile | 3 +++ bin/texera-web-application.dockerfile | 3 +++ bin/workflow-compiling-service.dockerfile | 3 +++ bin/workflow-computing-unit-managing-service.dockerfile | 3 +++ 8 files changed, 24 insertions(+) diff --git a/bin/access-control-service.dockerfile b/bin/access-control-service.dockerfile index 41b328f78e9..0a7866a0c9c 100644 --- a/bin/access-control-service.dockerfile +++ b/bin/access-control-service.dockerfile @@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean AccessControlService/dist @@ -50,6 +51,8 @@ COPY --from=build /texera/.git /texera/.git COPY --from=build /texera/target/access-control-service* /texera/ # Copy resources directories from build phase COPY --from=build /texera/access-control-service/src/main/resources /texera/access-control-service/src/main/resources +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/access-control-service"] diff --git a/bin/computing-unit-master.dockerfile b/bin/computing-unit-master.dockerfile index 89f61f17fcc..f9df6e4f9f2 100644 --- a/bin/computing-unit-master.dockerfile +++ b/bin/computing-unit-master.dockerfile @@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean WorkflowExecutionService/dist @@ -121,6 +122,8 @@ COPY --from=build /texera/common/config/src/main/resources /texera/amber/common/ COPY --from=build /texera/amber/src/main/resources /texera/amber/src/main/resources # Copy code for python & R UDF COPY --from=build /texera/amber/src/main/python /texera/amber/src/main/python +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/computing-unit-master"] diff --git a/bin/computing-unit-worker.dockerfile b/bin/computing-unit-worker.dockerfile index ef8a57b617f..c938da78357 100644 --- a/bin/computing-unit-worker.dockerfile +++ b/bin/computing-unit-worker.dockerfile @@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean WorkflowExecutionService/dist @@ -119,6 +120,8 @@ COPY --from=build /texera/amber/target/amber-* /texera/amber/ # Copy resources directories from build phase COPY --from=build /texera/amber/src/main/resources /texera/amber/src/main/resources COPY --from=build /texera/common/config/src/main/resources /texera/amber/common/config/src/main/resources +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/computing-unit-worker"] diff --git a/bin/config-service.dockerfile b/bin/config-service.dockerfile index 1a8bd34ec62..f3abbcc6174 100644 --- a/bin/config-service.dockerfile +++ b/bin/config-service.dockerfile @@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean ConfigService/dist @@ -51,6 +52,8 @@ COPY --from=build /texera/target/config-service-* /texera/ # Copy resources directories from build phase COPY --from=build /texera/common/config/src/main/resources /texera/common/config/src/main/resources COPY --from=build /texera/config-service/src/main/resources /texera/config-service/src/main/resources +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/config-service"] diff --git a/bin/file-service.dockerfile b/bin/file-service.dockerfile index 0fc8a433d74..9663818ccd0 100644 --- a/bin/file-service.dockerfile +++ b/bin/file-service.dockerfile @@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean FileService/dist @@ -50,6 +51,8 @@ COPY --from=build /texera/target/file-service-* /texera/ # Copy resources directories from build phase COPY --from=build /texera/common/config/src/main/resources /texera/common/config/src/main/resources COPY --from=build /texera/file-service/src/main/resources /texera/file-service/src/main/resources +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/file-service"] diff --git a/bin/texera-web-application.dockerfile b/bin/texera-web-application.dockerfile index 0b33a124483..a3bb2d85e39 100644 --- a/bin/texera-web-application.dockerfile +++ b/bin/texera-web-application.dockerfile @@ -49,6 +49,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean WorkflowExecutionService/dist @@ -66,6 +67,8 @@ COPY --from=build /texera/amber/target/amber-* /texera/amber/ # Copy resources directories from build phase COPY --from=build /texera/amber/src/main/resources /texera/amber/src/main/resources COPY --from=build /texera/common/config/src/main/resources /texera/amber/common/config/src/main/resources +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/texera-web-application"] diff --git a/bin/workflow-compiling-service.dockerfile b/bin/workflow-compiling-service.dockerfile index 803cbe87de7..291d2d52e2e 100644 --- a/bin/workflow-compiling-service.dockerfile +++ b/bin/workflow-compiling-service.dockerfile @@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean WorkflowCompilingService/dist @@ -51,6 +52,8 @@ COPY --from=build /texera/target/workflow-compiling-service-* /texera/ # Copy resources directories from build phase COPY --from=build /texera/common/config/src/main/resources /texera/common/config/src/main/resources COPY --from=build /texera/workflow-compiling-service/src/main/resources /texera/workflow-compiling-service/src/main/resources +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/workflow-compiling-service"] diff --git a/bin/workflow-computing-unit-managing-service.dockerfile b/bin/workflow-computing-unit-managing-service.dockerfile index 30924c8687e..0f0739d60c3 100644 --- a/bin/workflow-computing-unit-managing-service.dockerfile +++ b/bin/workflow-computing-unit-managing-service.dockerfile @@ -35,6 +35,7 @@ RUN apt-get update && apt-get install -y \ # Add .git for runtime calls to jgit from OPversion COPY .git .git +COPY LICENSE NOTICE DISCLAIMER-WIP ./ RUN sbt clean ComputingUnitManagingService/dist @@ -51,6 +52,8 @@ COPY --from=build /texera/target/computing-unit-managing-service-* /texera/ # Copy resources directories from build phase COPY --from=build /texera/common/config/src/main/resources /texera/common/config/src/main/resources COPY --from=build /texera/computing-unit-managing-service/src/main/resources /texera/computing-unit-managing-service/src/main/resources +# Copy ASF licensing files +COPY --from=build /texera/LICENSE /texera/NOTICE /texera/DISCLAIMER-WIP /texera/ CMD ["bin/computing-unit-managing-service"] From 6461cbd0d55a06437f5e234297d8d67c6c99de8d Mon Sep 17 00:00:00 2001 From: Jiadong Bai Date: Thu, 12 Mar 2026 15:40:56 -0700 Subject: [PATCH 3/5] chore(build): dynamically generate META-INF licensing files via sbt Instead of hard-copying LICENSE/NOTICE/DISCLAIMER-WIP into each service's src/main/resources/META-INF/, use sbt resourceGenerators to copy them from the repo root at build time. Co-Authored-By: Claude Opus 4.6 --- build.sbt | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index 1e506e44f60..3fabd4bbe22 100644 --- a/build.sbt +++ b/build.sbt @@ -15,12 +15,32 @@ // specific language governing permissions and limitations // under the License. -lazy val DAO = project in file("common/dao") -lazy val Config = project in file("common/config") +// Copy LICENSE, NOTICE, and DISCLAIMER-WIP from the repo root into META-INF of every JAR. +// This ensures ASF licensing files are present in all binary artifacts. +lazy val asfLicensingSettings = Seq( + Compile / resourceGenerators += Task { + val rootDir = (ThisBuild / baseDirectory).value + val metaInfDir = (Compile / resourceManaged).value / "META-INF" + val filesToCopy = Seq("LICENSE", "NOTICE", "DISCLAIMER-WIP") + filesToCopy.flatMap { fileName => + val src = rootDir / fileName + if (src.exists()) { + val dest = metaInfDir / fileName + IO.copyFile(src, dest) + Seq(dest) + } else Seq.empty + } + } +) + +lazy val DAO = (project in file("common/dao")).settings(asfLicensingSettings) +lazy val Config = (project in file("common/config")).settings(asfLicensingSettings) lazy val Auth = (project in file("common/auth")) + .settings(asfLicensingSettings) .dependsOn(DAO, Config) lazy val ConfigService = (project in file("config-service")) .dependsOn(Auth, Config) + .settings(asfLicensingSettings) .settings( dependencyOverrides ++= Seq( // override it as io.dropwizard 4 require 2.16.1 or higher @@ -29,6 +49,7 @@ lazy val ConfigService = (project in file("config-service")) ) lazy val AccessControlService = (project in file("access-control-service")) .dependsOn(Auth, Config, DAO) + .settings(asfLicensingSettings) .settings( dependencyOverrides ++= Seq( // override it as io.dropwizard 4 require 2.16.1 or higher @@ -41,15 +62,18 @@ lazy val AccessControlService = (project in file("access-control-service")) //This Scala module defines a pyb"..." macro-based DSL for composing Python code templates as an immutable PythonTemplateBuilder. //Used mainly for Python Native Operators lazy val PyBuilder = (project in file("common/pybuilder")) + .settings(asfLicensingSettings) .configs(Test) .dependsOn(DAO % "test->test") // test scope dependency lazy val WorkflowCore = (project in file("common/workflow-core")) + .settings(asfLicensingSettings) .dependsOn(DAO, Config, PyBuilder) .configs(Test) .dependsOn(DAO % "test->test") // test scope dependency lazy val ComputingUnitManagingService = (project in file("computing-unit-managing-service")) .dependsOn(WorkflowCore, Auth, Config) + .settings(asfLicensingSettings) .settings( dependencyOverrides ++= Seq( // override it as io.dropwizard 4 require 2.16.1 or higher @@ -57,6 +81,7 @@ lazy val ComputingUnitManagingService = (project in file("computing-unit-managin ) ) lazy val FileService = (project in file("file-service")) + .settings(asfLicensingSettings) .dependsOn(WorkflowCore, Auth, Config) .configs(Test) .dependsOn(DAO % "test->test") // test scope dependency @@ -69,9 +94,10 @@ lazy val FileService = (project in file("file-service")) ) ) -lazy val WorkflowOperator = (project in file("common/workflow-operator")).dependsOn(WorkflowCore) +lazy val WorkflowOperator = (project in file("common/workflow-operator")).settings(asfLicensingSettings).dependsOn(WorkflowCore) lazy val WorkflowCompilingService = (project in file("workflow-compiling-service")) .dependsOn(WorkflowOperator, Config) + .settings(asfLicensingSettings) .settings( dependencyOverrides ++= Seq( // override it as io.dropwizard 4 require 2.16.1 or higher @@ -83,6 +109,7 @@ lazy val WorkflowCompilingService = (project in file("workflow-compiling-service lazy val WorkflowExecutionService = (project in file("amber")) .dependsOn(WorkflowOperator, Auth, Config) + .settings(asfLicensingSettings) .settings( dependencyOverrides ++= Seq( "com.fasterxml.jackson.core" % "jackson-core" % "2.15.1", From 18879aed854cd1970fde4974c57b168a6899edc4 Mon Sep 17 00:00:00 2001 From: Jiadong Bai Date: Thu, 12 Mar 2026 16:31:33 -0700 Subject: [PATCH 4/5] fix(build): use Def.task syntax for sbt 1.9 compatibility Task {} macro requires sbt 1.10+. Use Def.task {}.taskValue instead. Co-Authored-By: Claude Opus 4.6 --- build.sbt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 3fabd4bbe22..66734085617 100644 --- a/build.sbt +++ b/build.sbt @@ -18,7 +18,7 @@ // Copy LICENSE, NOTICE, and DISCLAIMER-WIP from the repo root into META-INF of every JAR. // This ensures ASF licensing files are present in all binary artifacts. lazy val asfLicensingSettings = Seq( - Compile / resourceGenerators += Task { + Compile / resourceGenerators += Def.task { val rootDir = (ThisBuild / baseDirectory).value val metaInfDir = (Compile / resourceManaged).value / "META-INF" val filesToCopy = Seq("LICENSE", "NOTICE", "DISCLAIMER-WIP") @@ -30,7 +30,7 @@ lazy val asfLicensingSettings = Seq( Seq(dest) } else Seq.empty } - } + }.taskValue ) lazy val DAO = (project in file("common/dao")).settings(asfLicensingSettings) From 7e49c5e839302dce61ec63d68db588f287c88947 Mon Sep 17 00:00:00 2001 From: Jiadong Bai Date: Thu, 12 Mar 2026 16:38:30 -0700 Subject: [PATCH 5/5] fix(ci): exclude DISCLAIMER-WIP from license header check Co-Authored-By: Claude Opus 4.6 --- .licenserc.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.licenserc.yaml b/.licenserc.yaml index 65e6c762904..2456ac4362c 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -12,6 +12,7 @@ header: - '**/*.jsonl' - 'DESCRIPTION' - 'DISCLAIMER' + - 'DISCLAIMER-WIP' - 'LICENSE' - 'NOTICE' - '.dockerignore'