chore: remove the scene publish/deploy flow - #3496
Conversation
Publishing moved to Creator Hub and its only entry point was the deleted editor, so the deploy-out path is dead. Remove the DeployToLand and DeployToWorld modal views (DeployModal now renders only the unpublish ClearDeployment view), the deployToLand/deployToWorld/deployToPool actions, sagas, and reducer cases, the deployToPool builder API method, and the related analytics, persistence, location and i18n entries. Keep unpublish (clearDeployment), deployment fetching/display, and Worlds.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Coverage Report for CI Build 33531033521Coverage increased (+0.08%) to 56.909%Details
Uncovered ChangesNo uncovered changes found. Coverage Regressions11 previously-covered lines in 3 files lost coverage.
Coverage Stats💛 - Coveralls |
decentraland-bot
left a comment
There was a problem hiding this comment.
Code Review — #3496 chore: remove the scene publish/deploy flow
Verdict: ✅ APPROVE — Clean, well-scoped deletion with no blocking issues.
Summary
This PR removes the unreachable scene publish/deploy-out flow (~3,967 lines deleted, 27 added, 46 files). Publishing moved to the desktop Creator Hub and its only entry-point — the web editor — was already deleted in a prior PR. The removal is thorough and consistent: components, Redux actions, sagas, reducer cases, analytics handlers, i18n keys, assets, types, and tests are all cleaned up in lockstep.
Kept intact (verified from diff): clearDeployment (unpublish), deployment fetching/display (DeploymentStatus, DeploymentDetail, SceneDetailPage read-only), and the Worlds feature (worldsSaga still triggers on CONNECT_WALLET_SUCCESS + CLEAR_DEPLOYMENT_SUCCESS).
Findings
[P2] Likely dead code: handleProgress / setProgress / ProgressStage / progress state
src/modules/deployment/sagas.ts
The handleProgress utility and setProgress action were only called from the now-deleted deploy handlers (handleDeployToWorldRequest → deployScene, handleDeployToLandRequest, handleDeployToPoolRequest). After this PR, nothing dispatches SET_PROGRESS, so:
handleProgress(defined at module-level insagas.ts) is dead code- The
SET_PROGRESS/SetProgressAction/setProgressaction + the reducer case for it ProgressStageenum- The
progressfield inDeploymentState+ related selectors (getProgress,isUploadingAssets,isCreatingFiles,isUploadingRecording)
…are all likely unused. Worth a follow-up sweep (search for ProgressStage, setProgress, getProgress, isUploading) to confirm and remove in the next PR.
[P2] Single-value enum DeployModalView
src/components/Modals/DeployModal/DeployModal.types.ts
DeployModalView now contains only CLEAR_DEPLOYMENT. A single-value enum is over-engineered — the view field in DeployModalMetadata could be replaced with a literal type or dropped entirely, since there's no view-switching logic left. Minor cleanup opportunity.
[P2] Residual CSS in DeployModal.css
src/components/Modals/DeployModal/DeployModal.css
The file was trimmed from ~175 to ~75 lines. Some remaining rules (.modal-header, .progress-bar, .error) may only be consumed by the surviving ClearDeployment sub-component, but styles like .ui.button height overrides were shared across multiple views. Worth verifying that the remaining rules are all reachable from ClearDeployment.
[P2] DeployModalMetadata.deploymentId tightened from optional to required
src/components/Modals/DeployModal/DeployModal.types.ts
The type changed from deploymentId?: string to deploymentId: string. The old component handled the missing-deploymentId case by showing the choice form (now deleted). This is correct for the remaining callers (unpublish always passes deploymentId), but since openModal metadata is typically any-typed, TypeScript won't catch a stale caller passing incomplete metadata. Low risk given the entry-point was already deleted, but worth a quick grep for openModal('DeployModal' to confirm all call-sites pass deploymentId.
Security Review
No security issues found. This is a pure code-removal PR that reduces attack surface — no new inputs, no secret handling changes, no auth modifications, no dependency additions.
Consumer Impact
All removed APIs (deployToPool, deployToLandRequest, deployToWorldRequest, PoolDeploymentAdditionalFields) are internal to the builder web app — not exported via any published package. No downstream consumers affected.
CI Status
All checks passing: tests (1546/1546), audit, Vercel preview deploy.
Reviewed by Jarvis 🤖 · Requested by Gabriel Díaz (<@U03MGHMAJL8>) via Slack
| @@ -77,347 +47,12 @@ const handleProgress = (type: ProgressStage) => (args: { loaded: number; total: | |||
| store.dispatch(setProgress(type, progress)) | |||
There was a problem hiding this comment.
[P2] handleProgress (lines 42-47) is now likely dead code — it was only called by the removed deploy handlers (deployScene, handleDeployToPoolRequest). Consider removing handleProgress, setProgress, SET_PROGRESS, ProgressStage, and the progress field from DeploymentState in a follow-up PR if a codebase search confirms no remaining consumers.
| project: Project | null | ||
| scene: Scene | null | ||
| } | ||
|
|
There was a problem hiding this comment.
[P2] DeployModalView is now a single-value enum (CLEAR_DEPLOYMENT). Since there's no view-switching logic left in DeployModal, this could be simplified to a string literal or removed entirely.
| DEPLOY_TO_WORLD = 'DEPLOY_TO_WORLD' | ||
| CLEAR_DEPLOYMENT = 'CLEAR_DEPLOYMENT' | ||
| } | ||
|
|
There was a problem hiding this comment.
[P2] deploymentId was tightened from optional (string | undefined) to required (string). This is correct since the remaining callers (unpublish) always provide it, but worth a quick grep -r "openModal('DeployModal'" src/ to confirm no stale call-site omits it — openModal metadata is typically any-typed so TS won't catch a mismatch.
Description
Follow-up cleanup on the web scene editor sunset stack: remove the scene publish / deploy-out flow. Publishing moved to the desktop Creator Hub and its only entry point was the deleted web editor, so deploying a scene to LAND / a World / the pool is now unreachable. This removes that path while keeping unpublish, deployment display, and the Worlds feature intact. Net −3967 lines / +27 across 46 files.
Type of Change
Changes Made
DeployToLand/(incl.LandAtlas/) andDeployToWorld/modal views.DeployModalnow renders only the unpublishClearDeploymentview (its two callers passCLEAR_DEPLOYMENTand that contract is unchanged); removed the now-emptyDeployModal.container.deployToLand/deployToWorld/deployToPoolactions, saga handlers, reducer cases, and thedeployScenecatalyst path frommodules/deployment; simplifieddeploymentSaga's signature to the params it still uses.deployToPoolbuilder API method +PoolDeploymentAdditionalFields(deployToLand/deployToWorldnever existed as API methods — deploys went through the catalyst content client, now gone).analytics/sagas, theDEPLOY_TO_WORLD_SUCCESStrigger term inworlds/sagas,DEPLOY_TO_LAND_SUCCESSfrom the persistenceincludeActionlist,FromParam.DEPLOY_TO_WORLD, theDeploymentErrorenum, 4 orphaned deploy SVGs, and the deploy-to-land/world i18n trees (en/es/zh).Kept intact (verified):
clearDeployment(unpublish) at all four call sites —DeploymentDetail,LandDetailPage/Scene,WorldListPage,WorldContributorTab; deployment fetching/state/selectors andDeploymentStatus/DeploymentDetail(SceneDetailPage still shows where a scene is published, read-only); and the Worlds feature (its saga still refreshes onCONNECT_WALLET_SUCCESS+CLEAR_DEPLOYMENT_SUCCESS).How to Test
…menu → Unpublish still opensDeployModal(ClearDeployment) and clears the deployment.npx tsc --noEmitclean;npx jestfull suite green (1546/1546);npm run buildsucceeds.Checklist
Related Issues
Top of the web scene editor sunset stack. Base:
sunset/7-retire-pool.Screenshots
No change to surviving surfaces (unpublish, deployment display); removal of the unreachable publish flow only.