This is an automated email from the ASF dual-hosted git repository.
jiadongb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/texera.git
The following commit(s) were added to refs/heads/main by this push:
new 47bb2e43b1 chore(license): switch to DISCLAIMER-WIP and add ASF
licensing files to JARs and Docker images (#4288)
47bb2e43b1 is described below
commit 47bb2e43b1e2fce66598188909905b8e66c1aa46
Author: Jiadong Bai <[email protected]>
AuthorDate: Fri Mar 13 14:42:21 2026 -0700
chore(license): switch to DISCLAIMER-WIP and add ASF licensing files to
JARs and Docker images (#4288)
### What changes were proposed in this PR?
- Renamed `DISCLAIMER` to `DISCLAIMER-WIP` using the ASF-required
template from the [incubation
policy](https://incubator.apache.org/policy/incubation.html#disclaimers),
listing the incomplete dependency license audit as a known issue.
- Added `LICENSE`, `NOTICE`, and `DISCLAIMER-WIP` to every Texera JAR's
`META-INF/` directory via an sbt `resourceGenerators` task that
dynamically copies them from the repo root at build time.
- Added `COPY` instructions in all 8 Dockerfiles to include `LICENSE`,
`NOTICE`, and `DISCLAIMER-WIP` at `/texera/` in every Docker image.
### Any related issues, documentation, discussions?
A workaround based on #4131
### How was this PR tested?
- Verified `DISCLAIMER-WIP` content follows the ASF incubation policy
template.
- Verified sbt `resourceGenerators` setting compiles and is applied to
all subprojects.
### Was this PR authored or co-authored using generative AI tooling?
Co-created with: Claude Code (Claude Opus 4.6)
---------
Co-authored-by: Claude Opus 4.6 <[email protected]>
Co-authored-by: Chen Li <[email protected]>
---
.licenserc.yaml | 1 +
DISCLAIMER | 10 -------
DISCLAIMER-WIP | 23 +++++++++++++++
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 ++
...flow-computing-unit-managing-service.dockerfile | 3 ++
build.sbt | 33 ++++++++++++++++++++--
12 files changed, 78 insertions(+), 13 deletions(-)
diff --git a/.licenserc.yaml b/.licenserc.yaml
index 65e6c76290..2456ac4362 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -12,6 +12,7 @@ header:
- '**/*.jsonl'
- 'DESCRIPTION'
- 'DISCLAIMER'
+ - 'DISCLAIMER-WIP'
- 'LICENSE'
- 'NOTICE'
- '.dockerignore'
diff --git a/DISCLAIMER b/DISCLAIMER
deleted file mode 100644
index 2828967637..0000000000
--- 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 0000000000..cbc718569a
--- /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
diff --git a/bin/access-control-service.dockerfile
b/bin/access-control-service.dockerfile
index 41b328f78e..0a7866a0c9 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 89f61f17fc..f9df6e4f9f 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 ef8a57b617..c938da7835 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 1a8bd34ec6..f3abbcc617 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 0fc8a433d7..9663818ccd 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 0b33a12448..a3bb2d85e3 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 803cbe87de..291d2d52e2 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 30924c8687..0f0739d60c 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"]
diff --git a/build.sbt b/build.sbt
index 1e506e44f6..6673408561 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 += Def.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
+ }
+ }.taskValue
+)
+
+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",