This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] 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 eac23d2101 feat(python-notebook-migration, config): add
python-notebook-migration-enabled feature flag (#5254)
eac23d2101 is described below
commit eac23d2101569ddc7efb20a35c4d366fef32a789
Author: Ryan Zhang <[email protected]>
AuthorDate: Sat Jun 6 03:09:31 2026 -0700
feat(python-notebook-migration, config): add
python-notebook-migration-enabled feature flag (#5254)
### What changes were proposed in this PR?
Introduces a feature flag `python-notebook-migration-enabled` (default
`false`) that will gate the upcoming Python-notebook to Texera-workflow
migration tool. No user-visible behavior changes, the flag controls
features that don't exist on `main` yet.
- `common/config/src/main/resources/gui.conf` — declare
`gui.workflow.workspace.python-notebook-migration-enabled = false`, with
env-var override
`GUI_WORKFLOW_WORKSPACE_PYTHON_NOTEBOOK_MIGRATION_ENABLED`.
-
`common/config/src/main/scala/org/apache/texera/config/GuiConfig.scala`
— Scala accessor for the new field.
- `…/service/resource/ConfigResource.scala` — include the flag in the
runtime config payload served to the frontend.
- `frontend/src/app/common/type/gui-config.ts` — add the typed field on
the frontend `GuiConfig` interface.
- `frontend/src/app/workspace/component/menu/menu.component.ts` — expose
a `pythonNotebookMigrationEnabled` getter for downstream migration-tool
UI to consume.
### Any related issues, documentation, discussions?
Closes #5253
Parent issue #4301
### How was this PR tested?
- Verified the new field appears in the `/api/config` payload
- Verified `MenuComponent.pythonNotebookMigrationEnabled` resolves
- No new UI in this PR, existing behavior is unchanged
### Was this PR authored or co-authored using generative AI tooling?
Generated-by: Claude Code (Claude Opus 4.7)
---
common/config/src/main/resources/gui.conf | 4 ++++
common/config/src/main/scala/org/apache/texera/config/GuiConfig.scala | 2 ++
.../scala/org/apache/texera/service/resource/ConfigResource.scala | 1 +
frontend/src/app/common/service/gui-config.service.mock.ts | 1 +
frontend/src/app/common/type/gui-config.ts | 1 +
5 files changed, 9 insertions(+)
diff --git a/common/config/src/main/resources/gui.conf
b/common/config/src/main/resources/gui.conf
index 302c9f77c0..a0673c9a3f 100644
--- a/common/config/src/main/resources/gui.conf
+++ b/common/config/src/main/resources/gui.conf
@@ -115,6 +115,10 @@ gui {
# the limit of columns to be displayed in the result table
limit-columns = 15
limit-columns = ${?GUI_WORKFLOW_WORKSPACE_LIMIT_COLUMNS}
+
+ # whether AI python-notebook migration feature is enabled
+ python-notebook-migration-enabled = false
+ python-notebook-migration-enabled =
${?GUI_WORKFLOW_WORKSPACE_PYTHON_NOTEBOOK_MIGRATION_ENABLED}
}
# whether to show the "Powered by Texera" attribution link in the sidebar
diff --git
a/common/config/src/main/scala/org/apache/texera/config/GuiConfig.scala
b/common/config/src/main/scala/org/apache/texera/config/GuiConfig.scala
index 32ce7ea7af..3064f0584c 100644
--- a/common/config/src/main/scala/org/apache/texera/config/GuiConfig.scala
+++ b/common/config/src/main/scala/org/apache/texera/config/GuiConfig.scala
@@ -75,4 +75,6 @@ object GuiConfig {
conf.getInt("gui.workflow-workspace.limit-columns")
val guiAttributionEnabled: Boolean =
conf.getBoolean("gui.attribution-enabled")
+ val guiWorkflowWorkspacePythonNotebookMigrationEnabled: Boolean =
+ conf.getBoolean("gui.workflow-workspace.python-notebook-migration-enabled")
}
diff --git
a/config-service/src/main/scala/org/apache/texera/service/resource/ConfigResource.scala
b/config-service/src/main/scala/org/apache/texera/service/resource/ConfigResource.scala
index 1db52e2dc8..2cb951d01e 100644
---
a/config-service/src/main/scala/org/apache/texera/service/resource/ConfigResource.scala
+++
b/config-service/src/main/scala/org/apache/texera/service/resource/ConfigResource.scala
@@ -70,6 +70,7 @@ class ConfigResource {
"activeTimeInMinutes" ->
GuiConfig.guiWorkflowWorkspaceActiveTimeInMinutes,
"copilotEnabled" -> GuiConfig.guiWorkflowWorkspaceCopilotEnabled,
"limitColumns" -> GuiConfig.guiWorkflowWorkspaceLimitColumns,
+ "pythonNotebookMigrationEnabled" ->
GuiConfig.guiWorkflowWorkspacePythonNotebookMigrationEnabled,
// flags from the auth.conf if needed
"expirationTimeInMinutes" -> AuthConfig.jwtExpirationMinutes
)
diff --git a/frontend/src/app/common/service/gui-config.service.mock.ts
b/frontend/src/app/common/service/gui-config.service.mock.ts
index 9165c19b9c..0324b10eb6 100644
--- a/frontend/src/app/common/service/gui-config.service.mock.ts
+++ b/frontend/src/app/common/service/gui-config.service.mock.ts
@@ -53,6 +53,7 @@ export class MockGuiConfigService {
copilotEnabled: false,
limitColumns: 15,
attributionEnabled: false,
+ pythonNotebookMigrationEnabled: false,
};
get env(): GuiConfig {
diff --git a/frontend/src/app/common/type/gui-config.ts
b/frontend/src/app/common/type/gui-config.ts
index 63531ee91b..abdb4067b2 100644
--- a/frontend/src/app/common/type/gui-config.ts
+++ b/frontend/src/app/common/type/gui-config.ts
@@ -44,6 +44,7 @@ export interface GuiConfig {
copilotEnabled: boolean;
limitColumns: number;
attributionEnabled: boolean;
+ pythonNotebookMigrationEnabled: boolean;
}
export interface SidebarTabs {