This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-5254-cf273e8f74aaa52dd88f1129c90ed27571f6db93 in repository https://gitbox.apache.org/repos/asf/texera.git
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 {
