Skip to content

Conversation

@feanil
Copy link
Contributor

@feanil feanil commented Oct 30, 2025

The legacy video uploads page in Studio has been replaced with a new
view in the Authoring MFE. This change removes the now unused
JS/CSS/HTML/Python related to the old video page.

This work is part of #36108

BREAKING CHANGE: The contentstore.new_studio_mfe.use_new_video_uploads_page
waffle flag is no longer respected. The code operates as if this is set to True.

@feanil feanil force-pushed the feanil/drop_course_videos branch from fdd2b61 to 0e3689c Compare October 30, 2025 20:02
@feanil feanil changed the title feat: Drop support for the legacy video upload page. feat!: Drop support for the legacy video upload page. Oct 30, 2025
@feanil feanil force-pushed the feanil/drop_course_videos branch 4 times, most recently from fb7625b to d6dd652 Compare November 3, 2025 19:01
@feanil feanil force-pushed the feanil/drop_course_videos branch from d6dd652 to 58979c3 Compare January 8, 2026 19:54
@feanil feanil force-pushed the feanil/drop_course_videos branch from 58979c3 to a9724da Compare January 29, 2026 20:59
@feanil feanil marked this pull request as ready for review January 29, 2026 21:50
@feanil feanil requested a review from kdmccormick January 29, 2026 21:50
@feanil feanil added the create-sandbox A test sandbox will be created for this PR, using the `open-craft/pr-sandbox-automation` tool label Jan 29, 2026
@open-craft-grove
Copy link

Sandbox deployment failed 💥
Please check the settings and requirements.
Retry deployment by pushing a new commit or updating the requirements/settings in the pull request's description.
📜 Failure Logs
ℹ️ Grove Config, Tutor Config, Tutor Requirements

@open-craft-grove
Copy link

Sandbox deployment failed 💥
Please check the settings and requirements.
Retry deployment by pushing a new commit or updating the requirements/settings in the pull request's description.
📜 Failure Logs
ℹ️ Grove Config, Tutor Config, Tutor Requirements

@kdmccormick
Copy link
Member

kdmccormick commented Jan 30, 2026

Wow, net -7000, nice 🔥

I didn't even realize there was a legacy video uploads page! Is it this? https://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/video/upload_video.html

Regarding the contentstore.new_studio_mfe.use_new_video_uploads_page--I think this is unfortunately a bit complicated. We had discussed in slack a while back: https://axim-collaborative.slack.com/archives/C03R320AFJP/p1740423161502069?thread_ts=1740064169.548659&cid=C03R320AFJP. Basically, the page requires edx-val, so it only works on edx.org or any other site which has managed to reverse-engineer the edX video pipeline enough to get uploads working (unclear to me if any such sites exist). With the waffle flag enabled, here's what Content > Videos looks like on the Ulmo sandbox:

Screenshot 2026-01-30 at 12 24 52 PM

I remember us discussing in standup (and hinted in that thread) that someone could maybe work on a version of the MFE page which didn't include any of the edX-specific stuff, and exposed plugin slots which edX could plug their stuff into. But I don't know what that would look like and I'm not sure who would do it. I think our options for the purpose of the legacy studio removal are either
(a) rip this new edX-specific MFE page out too now, or
(b) remove the legacy page right now, but leave the new page and its waffle flag in, punting that issue for a later time.

@feanil
Copy link
Contributor Author

feanil commented Jan 30, 2026

(b) remove the legacy page right now, but leave the new page and its waffle flag in, punting that issue for a later time.

You're saying keep the cleanup but leave the waffle flag in place so that the new MFE page remains off by default since it's actually useless for non edx.org operators at the moment? If we do that, we have to answer the question of what does the backend do when the waffle flag is set to false and there is no old page to display. I think this means we update the code to not provide links to the video page in this case and so we'll need to update other older templates to put conditional around those references. Does that sound right to you @kdmccormick ?

@kdmccormick
Copy link
Member

I think this means we update the code to not provide links to the video page in this case and so we'll need to update other older templates to put conditional around those references.

Good question, the thing is I'm not actually sure how one gets to the legacy video page, up until now I didn't know it even existed. Do you know how it's accessed today? Is it possible it's already behind some flag? If the new uploads page is fully edX-specific, then I'd guess that the legacy page is edX-specific too.

@feanil feanil force-pushed the feanil/drop_course_videos branch from a9724da to 3e590ec Compare January 30, 2026 20:49
@kdmccormick kdmccormick removed their request for review January 30, 2026 21:17
@open-craft-grove
Copy link

Sandbox deployment failed 💥
Please check the settings and requirements.
Retry deployment by pushing a new commit or updating the requirements/settings in the pull request's description.
📜 Failure Logs
ℹ️ Grove Config, Tutor Config, Tutor Requirements

@feanil
Copy link
Contributor Author

feanil commented Feb 2, 2026

Good question, the thing is I'm not actually sure how one gets to the legacy video page, up until now I didn't know it even existed. Do you know how it's accessed today? Is it possible it's already behind some flag? If the new uploads page is fully edX-specific, then I'd guess that the legacy page is edX-specific too.

The legacy page is not accessible accessible at all today. It's only accessible from the legacy studio header and the authoring MFE either does or doesn't show the new videos page but has no ability to go to the old videos page.

There's also another bug in the MFE where it will show a link to the videos page if the old MFE is enabled, but then only adds the page to the route if a frontend setting is set.

So I'm thinking we should remove the old page which is not accessible, but leave the waffle flag for now and leave it at false by default so that the community doesn't get the new videos page which they still can't use. What do you think?

@kdmccormick
Copy link
Member

So I'm thinking we should remove the old page which is not accessible, but leave the waffle flag for now and leave it at false by default so that the community doesn't get the new videos page which they still can't use. What do you think?

In the interest of getting legacy studio cleaned up, fully agree

Here's an issue where we can track follow-up: #37972

@feanil feanil force-pushed the feanil/drop_course_videos branch from 60d2128 to 0c5605a Compare February 2, 2026 17:11
'js/views/video/transcripts/utils', 'js/views/video/transcripts/message_manager',
'js/views/video/transcripts/file_uploader', 'sinon',
'xmodule'
'xmodule', 'accessibility'
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Note for reviewers: This was added to get the edx object to load correctly. That object was previously being loaded implicitly by some of the other JS being loaded on the same test page but with a bunch of the other video related code removed, this previous side-effect was exposed. Adding this module as an explicit dependency fixed the issue in this test without needing to add back a bunch of the other JS code.

@feanil feanil requested a review from kdmccormick February 2, 2026 17:12
@kdmccormick
Copy link
Member

fyi, if everything works, a sandbox should get created and linked in the output of the sandbox_deployment PR check

@kdmccormick
Copy link
Member

sandbox failed, but the build logs are actually helpful now.

2026-02-02T17:26:32.2368076Z #73 34.61 Error: Error: ERROR: module path does not exist: /tmp/tmpw68dxusi/js/factories/videos_index.js for module named: js/factories/videos_index. Path is relative to: /openedx/edx-platform
2026-02-02T17:26:32.2369221Z #73 34.61     at /openedx/venv/lib/python3.12/site-packages/require/resources/r.js:30213:35
2026-02-02T17:26:32.2369805Z #73 34.61 
2026-02-02T17:26:32.6415900Z #73 35.01 Traceback (most recent call last):
2026-02-02T17:26:32.6416492Z #73 35.01   File "/openedx/edx-platform/./manage.py", line 92, in <module>
2026-02-02T17:26:32.6417110Z #73 35.01     execute_from_command_line([sys.argv[0]] + django_args)
2026-02-02T17:26:32.7933908Z #73 35.01 Found another file with the destination path 'common/js/vendor/moment-timezone-with-data.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7935852Z #73 35.01 Found another file with the destination path 'common/js/vendor/jquery-migrate.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7937508Z #73 35.01 Found another file with the destination path 'common/js/vendor/backbone.paginator.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7939099Z #73 35.01 Found another file with the destination path 'common/js/vendor/sinon.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7940633Z #73 35.01 Found another file with the destination path 'common/js/vendor/jquery.scrollTo.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7942252Z #73 35.01 Found another file with the destination path 'common/js/vendor/moment-with-locales.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7943810Z #73 35.01 Found another file with the destination path 'common/js/vendor/require.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7945320Z #73 35.01 Found another file with the destination path 'common/js/vendor/hls.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7946843Z #73 35.01 Found another file with the destination path 'common/js/vendor/backbone.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7948413Z #73 35.01 Found another file with the destination path 'common/js/vendor/underscore.string.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7957143Z #73 35.01 Found another file with the destination path 'common/js/vendor/underscore.js'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
2026-02-02T17:26:32.7958592Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
2026-02-02T17:26:32.7959340Z #73 35.01     utility.execute()
2026-02-02T17:26:32.7960180Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/django/core/management/__init__.py", line 436, in execute
2026-02-02T17:26:32.7960912Z #73 35.01     self.fetch_command(subcommand).run_from_argv(self.argv)
2026-02-02T17:26:32.7961646Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/django/core/management/base.py", line 420, in run_from_argv
2026-02-02T17:26:32.7962322Z #73 35.01     self.execute(*args, **cmd_options)
2026-02-02T17:26:32.7962990Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/django/core/management/base.py", line 464, in execute
2026-02-02T17:26:32.7963646Z #73 35.01     output = self.handle(*args, **options)
2026-02-02T17:26:32.7964108Z #73 35.01              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-02-02T17:26:32.7965070Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 209, in handle
2026-02-02T17:26:32.7965836Z #73 35.01     collected = self.collect()
2026-02-02T17:26:32.7966239Z #73 35.01                 ^^^^^^^^^^^^^^
2026-02-02T17:26:32.7966962Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 148, in collect
2026-02-02T17:26:32.7967935Z #73 35.01     for original_path, processed_path, processed in processor:
2026-02-02T17:26:32.7968471Z #73 35.01                                                     ^^^^^^^^^
2026-02-02T17:26:32.7969123Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/require/storage.py", line 105, in post_process
2026-02-02T17:26:32.7969729Z #73 35.01     env.run_optimizer(
2026-02-02T17:26:32.7970299Z #73 35.01   File "/openedx/venv/lib/python3.12/site-packages/require/storage.py", line 53, in run_optimizer
2026-02-02T17:26:32.7970996Z #73 35.01     raise OptimizationError("Error while running r.js optimizer.")
2026-02-02T17:26:32.7971647Z #73 35.01 require.storage.OptimizationError: Error while running r.js optimizer.
2026-02-02T17:26:33.7785976Z #73 ERROR: process "/bin/sh -c ./manage.py lms collectstatic --noinput --settings=tutor.assets &&     ./manage.py cms collectstatic --noinput --settings=tutor.assets &&     rdfind -makesymlinks true -followsymlinks true /openedx/staticfiles/" did not complete successfully: exit code: 1

@feanil
Copy link
Contributor Author

feanil commented Feb 2, 2026

Weird that the CI build of assets did not catch this. Looks like it doesn't run the production require js optimizer which is what caught the issue. I'll fix the issue but also see if I can update the asset check workflow to fix this.

feanil and others added 2 commits February 2, 2026 14:44
The legacy video uploads page in Studio has been replaced with a new
view in the Authoring MFE.  This change removes the now unused
JS/CSS/HTML/Python related to the old video page.

This work is part of #36108

BREAKING CHANGE: The `contentstore.new_studio_mfe.use_new_video_uploads_page`
waffle flag is no longer respected. The code operates as if this is set to True.
The static-assets-check workflow was setting DJANGO_SETTINGS_MODULE=lms.envs.production
globally, but then running both LMS and CMS collectstatic. Because manage.py doesn't
override DJANGO_SETTINGS_MODULE when it's already set (and --settings isn't passed),
CMS was running with LMS settings instead of CMS settings.

This meant CMS-specific RequireJS builds (cms/static/cms/js/build.js) were never being
tested, allowing issues like missing modules to slip through to sandbox deployments.

Fix by setting DJANGO_SETTINGS_MODULE explicitly for each service.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@feanil feanil force-pushed the feanil/drop_course_videos branch from 0c5605a to a7d9a20 Compare February 2, 2026 19:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

create-sandbox A test sandbox will be created for this PR, using the `open-craft/pr-sandbox-automation` tool

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants