Skip to content

chore: remove the scene publish/deploy flow - #3496

Open
cyaiox wants to merge 1 commit into
sunset/7-retire-poolfrom
sunset/8-remove-publish
Open

chore: remove the scene publish/deploy flow#3496
cyaiox wants to merge 1 commit into
sunset/7-retire-poolfrom
sunset/8-remove-publish

Conversation

@cyaiox

@cyaiox cyaiox commented Sep 1, 2026

Copy link
Copy Markdown
Member

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

  • New feature
  • Bug fix
  • Refactoring (no functional changes)
  • Documentation update
  • Infrastructure / CI/CD

Changes Made

  • Deleted the DeployToLand/ (incl. LandAtlas/) and DeployToWorld/ modal views. DeployModal now renders only the unpublish ClearDeployment view (its two callers pass CLEAR_DEPLOYMENT and that contract is unchanged); removed the now-empty DeployModal.container.
  • Removed the deployToLand/deployToWorld/deployToPool actions, saga handlers, reducer cases, and the deployScene catalyst path from modules/deployment; simplified deploymentSaga's signature to the params it still uses.
  • Removed the deployToPool builder API method + PoolDeploymentAdditionalFields (deployToLand/deployToWorld never existed as API methods — deploys went through the catalyst content client, now gone).
  • Dropped the deploy-success handling in analytics/sagas, the DEPLOY_TO_WORLD_SUCCESS trigger term in worlds/sagas, DEPLOY_TO_LAND_SUCCESS from the persistence includeAction list, FromParam.DEPLOY_TO_WORLD, the DeploymentError enum, 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 and DeploymentStatus/DeploymentDetail (SceneDetailPage still shows where a scene is published, read-only); and the Worlds feature (its saga still refreshes on CONNECT_WALLET_SUCCESS + CLEAR_DEPLOYMENT_SUCCESS).

How to Test

  1. Open a scene with a deployment → the menu → Unpublish still opens DeployModal (ClearDeployment) and clears the deployment.
  2. Unpublish from a LAND detail page and from the Worlds list still work.
  3. SceneDetailPage still shows the "Published in" deployment list (read-only); there is no longer any way to publish/deploy a scene.
  4. npx tsc --noEmit clean; npx jest full suite green (1546/1546); npm run build succeeds.

Checklist

  • Code follows the project's style guidelines
  • Self-reviewed the code for obvious errors
  • Added or updated tests where applicable (removed tests for deleted code)
  • Existing tests pass locally
  • Updated documentation if needed
  • No new warnings or console errors introduced

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.

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.
@vercel

vercel Bot commented Sep 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
builder Ready Ready Preview Sep 1, 2026 4:21pm UTC

Request Review

@cyaiox
cyaiox marked this pull request as ready for review September 1, 2026 16:23
@coveralls

Copy link
Copy Markdown

Coverage Report for CI Build 33531033521

Coverage increased (+0.08%) to 56.909%

Details

  • Coverage increased (+0.08%) from the base build.
  • Patch coverage: 8 of 8 lines across 4 files are fully covered (100%).
  • 11 coverage regressions across 3 files.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

11 previously-covered lines in 3 files lost coverage.

File Lines Losing Coverage Coverage
src/modules/project/export.ts 9 18.33%
src/modules/deployment/sagas.ts 1 56.7%
src/modules/scene/utils.ts 1 3.45%

Coverage Stats

Coverage Status
Relevant Lines: 12108
Covered Lines: 7437
Line Coverage: 61.42%
Relevant Branches: 5464
Covered Branches: 2563
Branch Coverage: 46.91%
Branches in Coverage %: Yes
Coverage Strength: 37.01 hits per line

💛 - Coveralls

@decentraland-bot decentraland-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 (handleDeployToWorldRequestdeployScene, handleDeployToLandRequest, handleDeployToPoolRequest). After this PR, nothing dispatches SET_PROGRESS, so:

  • handleProgress (defined at module-level in sagas.ts) is dead code
  • The SET_PROGRESS / SetProgressAction / setProgress action + the reducer case for it
  • ProgressStage enum
  • The progress field in DeploymentState + 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))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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'
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants