The GitHub Actions job "Required Checks" on texera.git/gh-readonly-queue/main/pr-5258-dc33251a9622ee68aaa958a154471174c67a05f0 has failed. Run started by GitHub user mengw15 (triggered by mengw15).
Head commit for run: 839c08644ae040da1183f48f0596f5179b1b8441 / Ryan Zhang <[email protected]> feat(python-notebook-migration): add notebook-migration-service microservice in backend (#5258) ### What changes were proposed in this PR? Introduces the microservice that mediates between Texera and the JupyterLab docker stack landed in `migration-tool-jupyter-docker`. Adds a new SBT subproject `notebook-migration-service` plus shared config and a frontend dev-proxy route. **New SBT subproject `notebook-migration-service/`:** - **`build.sbt`** and **`project/build.properties`** — module SBT setup; module depends on the existing `Auth`, `Config`, and `DAO` projects - **`src/main/scala/.../NotebookMigrationService.scala`** — Dropwizard `Application` entry point; sets Jersey URL pattern to `/api/*`, registers the resource class, initializes the shared SQL connection via `SqlServer.initConnection(StorageConfig.jdbcUrl, …)`, and wires in `RequestLoggingFilter`. - **`src/main/scala/.../NotebookMigrationServiceConfiguration.scala`** — Dropwizard `Configuration` subclass. - **`src/main/scala/.../resource/NotebookMigrationResource.scala`** — five REST endpoints under `/notebook-migration`: - `GET /get-jupyter-url` — health-checks the Jupyter container and returns its base URL. - `GET /get-jupyter-iframe-url` — returns the iframe-ready URL for `notebook.ipynb`. - `POST /set-notebook` — receives a notebook JSON, PUTs it into JupyterLab via its `/api/contents/work/{name}` API. - `POST /store-notebook-and-mapping` — persists a notebook + workflow-notebook mapping into Postgres in a single transaction (writes to the `notebook` and `workflow_notebook_mapping` tables added by `migration-tool-database-tables`). - `POST /fetch-notebook-and-mapping` — returns the most recent notebook + mapping for a given (wid, vid). - **`src/main/resources/logback.xml`** — logging config. - **`src/main/resources/notebook-migration-service-web-config.yaml`** — Dropwizard server config (HTTP port `9098`, DB connection refs). **Root build wiring:** - **`build.sbt`** — declares the new `NotebookMigrationService` SBT subproject and adds it to the `TexeraProject` aggregation. **Shared config:** - **`common/config/src/main/resources/storage.conf`** — new `jupyter { url = "http://localhost:9100" }` block, overridable via `STORAGE_JUPYTER_URL`. - **`common/config/src/main/scala/.../StorageConfig.scala`** — adds the `jupyterURL` accessor. **Frontend dev proxy:** - **`frontend/proxy.config.json`** — routes `/api/notebook-migration/*` to `http://localhost:9098`. ### Any related issues, documentation, discussions? Closes #5257 Parent issue #4301 - Hard dependency: **must be merged after `migration-tool-database-tables`** #5055 — the resource imports jOOQ-generated `Notebook` / `WorkflowNotebookMapping` classes that only exist once the schema PR is merged. - Soft dependency: the JupyterLab container from `migration-tool-jupyter-docker` is what `StorageConfig.jupyterURL` points to. Without it running, the Jupyter-related endpoints return a 500 with `"Cannot connect to Jupyter server"`. Service still starts and the DB-persistence endpoints work in isolation. ### How was this PR tested? ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Claude Opus 4.7) --------- Signed-off-by: Ryan Zhang <[email protected]> Co-authored-by: Copilot Autofix powered by AI <[email protected]> Co-authored-by: Meng Wang <[email protected]> Report URL: https://github.com/apache/texera/actions/runs/28129881361 With regards, GitHub Actions via GitBox
