Repository navigation
feat: bring desktop Studio UI and local playback to web #2312
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
richiemcilroy
wants to merge
667
commits into
main
Choose a base branch
from
feature/web-editor-desktop-parity
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
667 commits
Select commit
Hold shift + click to select a range
9e08389
perf(editor): recompute the preview size only when its dimensions change
richiemcilroy c5f4933
perf(editor): redraw the clip waveform in steps while the timeline fo…
richiemcilroy 003931a
perf(editor): skip unchanged audio element writes each frame
richiemcilroy 351f2a0
perf(editor): cache parsed source URLs for frame reads
richiemcilroy c44130f
fix(web): stop the share page upload tracker re-rendering in a loop
richiemcilroy 65543aa
fix(web): send upload progress from the committed render and test the…
richiemcilroy c228108
chore(editor): drop a comment restating the clip thumbnail lookup
richiemcilroy ece7b25
Merge origin/main into feature/web-editor-desktop-parity
richiemcilroy 9d44d95
perf(editor): lay out the following timeline in steps and shift it be…
richiemcilroy 2e1a3f6
perf(web): keep the Effect runtime out of the shareable link limit ov…
richiemcilroy d6d94bd
perf(web): load the render view and hls.js only while a Save renders
richiemcilroy ff7081c
perf(web): start share playback on Cap's own storage without a probe …
richiemcilroy 5e7c38e
fix(web): keep relative times from breaking share page hydration
richiemcilroy 6f23c87
perf(editor): feed the browser export's encoder directly instead of t…
richiemcilroy f6a33c5
chore(web): quote the tab audio option without escapes
richiemcilroy f30eea3
fix(media-server): give WebM validation as long as a transcode of it …
richiemcilroy 2634000
perf(editor): reuse the browser renderer's texture limit and present …
richiemcilroy 011c2c8
chore(editor): drop a comment restating the present bind group cache
richiemcilroy 5fa49e3
perf(web): load the embed's HLS player and upload tracker only when n…
richiemcilroy 76a0bbc
perf(web): prefetch the dashboard from share pages on hover instead o…
richiemcilroy 529d105
fix(web): seek a lazily loaded HLS embed to its start time
richiemcilroy 201aa83
chore(web): drop comments restating the hover prefetch prop
richiemcilroy 52d0b5d
chore: exclude generated export renderer bindings from Biome
richiemcilroy 9f538c8
fix(web): log camera upload failures when finalizing a paired recording
richiemcilroy 6e3249d
test(web): expect streaming MP4 and multipart uploads in the paired r…
richiemcilroy 75ca44d
test(extension): match recording uploads to the browser's streaming M…
richiemcilroy 9e9026d
fix(editor): keep EXIF-rotated and oversized backgrounds on the nativ…
richiemcilroy c6b305a
fix(editor): send the export worker a plain copy of the project config
richiemcilroy e70ee03
fix(editor): hide the loading skeleton from assistive tech during the…
richiemcilroy 1ac5c0c
test(editor): follow decoded frames and preview sizing in the composi…
richiemcilroy f9a73a9
test(media-server): follow the web editor's Download header and rende…
richiemcilroy 623f10d
test(media-server): detect Firefox VideoFrame rendering through textu…
richiemcilroy f70e792
test(media-server): record folder import alerts in the page instead o…
richiemcilroy c654182
fix(recorder): recover unwritten spool chunks when the backup store n…
richiemcilroy a479fad
fix(web): keep a take when its final backup write fails and fall back…
richiemcilroy a934f94
test(web): replay paired capture on a persistent profile and cover an…
richiemcilroy 95376ea
fix(web): keep transcript words when the stored duration is shorter t…
richiemcilroy fc91b04
fix(web): say no speech was detected instead of no audio track
richiemcilroy f88d81a
fix(web): keep locale dates in the editor recordings list out of hydr…
richiemcilroy 0377a4b
fix(web): retry preview assets when the media server lacks the route yet
richiemcilroy 799af8f
fix(web): stop requesting a preview GIF that a new render has not mad…
richiemcilroy aa39572
fix(editor): show caption generation errors in the captions panel
richiemcilroy 54e022f
feat(editor): say when an export renders on Cap's servers
richiemcilroy 1a5cdb8
fix(editor): keep the default timeline and unchanged pauses out of un…
richiemcilroy 274eda0
fix(editor): clamp the playhead and hover time when the timeline gets…
richiemcilroy 70ac3d2
fix(editor): draw the web zoom preview from a decoded frame and back …
richiemcilroy 3ba9e7b
fix(editor): size the Quarter preview below Half on small canvases
richiemcilroy d728a78
fix(web): check a share tab for updates the first time it returns aft…
richiemcilroy 9817729
fix(web): keep relative cap dates out of hydration checks
richiemcilroy ba9c700
fix(media-server): make editor session capacity configurable and recl…
richiemcilroy dcf1df6
fix(web): show when editor servers are busy and preview on a worker w…
richiemcilroy 761301c
test(media-server): keep a background export alive by polling it with…
richiemcilroy 5b89292
fix(web): drop the one-off recording publish flag as soon as the shar…
richiemcilroy 8884c0a
fix(web): fall back to the uploaded video when a render ends without …
richiemcilroy eebad95
fix(web): back off render status polling and stop after an hour
richiemcilroy 1835d56
fix(media-server): install from the workspace root so the editor bund…
richiemcilroy 1a85334
fix(web): keep polling a render that is still running after an hour
richiemcilroy fc70b53
fix(editor): show zoom preview unavailable instead of a stale frame
richiemcilroy b55b094
fix(editor): lock browser export files and remove the ones no tab sti…
richiemcilroy 7a0dd5a
fix(editor): decode Chrome export frames in software so colours match…
richiemcilroy 2040994
fix(web): stop treating a render as running once its status stops ans…
richiemcilroy 978371d
fix(editor): remove day-old export files when Web Locks are unavailable
richiemcilroy e138394
perf(editor): step the preview down after a couple of very slow frames
richiemcilroy 5005472
perf(rendering): scissor browser card draws and skip the motion blur …
richiemcilroy 3736f95
fix(editor): undo Chrome's display gamma on hardware-decoded preview …
richiemcilroy 4aa1937
refactor(editor): expose the timeline a recording without one opens with
richiemcilroy f36a51e
refactor(export): move web editor preparation into the export library
richiemcilroy c058242
feat(render-farm): prepare web recordings in the render engine
richiemcilroy 8ecf5c3
feat(web): start farm renders without an editor worker when the farm …
richiemcilroy b6ba5ca
perf(editor): feed waveform audio packets straight to the decoder
richiemcilroy 17e8736
fix(web): ask the farm to fill session defaults only for never-edited…
richiemcilroy 30d66e1
fix(render-farm): render saved projects as saved when preparing
richiemcilroy c14e191
perf(editor): size the preview once at open instead of after layout s…
richiemcilroy 8ecdec9
perf(editor): wait for layout before the first web preview frame and …
richiemcilroy 1724438
fix(web): keep checking an unreachable render rarely instead of givin…
richiemcilroy 80f2450
fix(rendering): split the scissor guard so clippy accepts it
richiemcilroy 18c46b5
fix(editor): match the preview box during resize and step down on ren…
richiemcilroy ef9da12
fix(editor): mount the preview without waiting for colour calibration
richiemcilroy f0b5a69
fix(render-farm): publish exports without padding and keep decoder re…
richiemcilroy ecc6b1c
feat(render-farm): prepare web recordings on the farm and download so…
richiemcilroy 9901683
fix(render-farm): rewrite browser WebM in process instead of calling …
richiemcilroy 75b2c5f
chore(web): drop render farm helper comments that restate the code
richiemcilroy 60eaeee
feat(rendering): convert browser NV12 planes to RGBA with an exact BT…
richiemcilroy eb6547c
perf(editor): feed Safari preview frames to the renderer as NV12 planes
richiemcilroy 469e246
docs(render-farm): drop test and helper comments that restate the code
richiemcilroy 8dc3f26
fix(render-farm): join prepared file keys with slashes on every OS
richiemcilroy 7d6dbf8
fix(web): prepare on a worker when the farm lacks a library track the…
richiemcilroy 5585f84
fix(render-farm): count landed source ranges as transcode progress
richiemcilroy ad76ae4
Merge origin/main into feature/web-editor-desktop-parity
richiemcilroy df2a321
feat(render-farm): run cursor reconstruction jobs
richiemcilroy cc88b6a
feat(web): replace a browser recording's cursor from a farm reconstru…
richiemcilroy 46dae24
feat(editor): add an experimental cursor replacement toggle on web
richiemcilroy 02b1b6a
fix(render-farm): keep a cursor task alive while its bundle downloads
richiemcilroy 53502fd
fix(web): expire abandoned cursor runs and start one at a time
richiemcilroy e1ff3f2
fix(editor): reload onto the cursor sources whenever they change
richiemcilroy 44f18b9
fix(web): store cursor reconstructions in the render folder the farm …
richiemcilroy 5875dc0
fix(editor): only hold back a repeated cursor reload toward the same …
richiemcilroy d6fdf1d
fix(render-farm): refuse a chunk whose stash upload failed
richiemcilroy 05beb51
fix(render-farm): keep a cursor task alive while it uploads its outputs
richiemcilroy 67b78a9
fix(web): tie cursor runs to their exact display and the farm's own s…
richiemcilroy 6bff342
fix(editor): leave frames tagged with other matrices to the browser's…
richiemcilroy f46016d
fix(render-farm): fail a cursor transfer that outlasts its limit
richiemcilroy 21bba36
fix(web): let a cursor run for a replaced display be started again
richiemcilroy 8734183
fix(web): keep cursor runs recorded before source identity working
richiemcilroy f2d9f58
feat(render-farm): let an S3 upload be cancelled
richiemcilroy 6003035
fix(render-farm): cancel a cursor upload past its limit before failin…
richiemcilroy 37a86cd
fix(web): start a cursor run only for the display the request read
richiemcilroy 9dcbbcc
fix(render-farm): give multipart upload cleanup its own deadline
richiemcilroy a908da4
test(render-farm): time out a hanging multipart cleanup
richiemcilroy 921a45f
chore(editor): drop comments that narrate the code below them
richiemcilroy 78b4cf5
fix(editor): apply the colour correction between frames and expose wh…
richiemcilroy c7bb034
test(editor): wait for the colour check before comparing compositor f…
richiemcilroy 56bc723
test(media-server): report editor state when browser-only playback ne…
richiemcilroy c8a4b8b
test(media-server): bound the playback failure diagnostics so the fai…
richiemcilroy 1a3ce9d
perf(editor): read further ahead only while scrubbing
richiemcilroy 730429c
perf(editor): show key frames while scrubbing and the exact frame onc…
richiemcilroy a7e0554
chore(editor): drop comments that restate the scrub thresholds
richiemcilroy ed3e329
feat(render-farm): index fragmented MP4 recordings from their fragmen…
richiemcilroy 7a591b3
perf(render-farm): render remuxable recordings in place instead of tr…
richiemcilroy ed64288
perf(editor): cap mediabunny read-ahead so it stops evicting the next…
richiemcilroy ec6cae7
fix(editor): name the skip to start button
richiemcilroy 60a63b9
test(media-server): start the full-quality playback check from the be…
richiemcilroy 6a41cb3
fix(render-farm): only dispatch prefixed tasks to workers that can re…
richiemcilroy 2f4da86
perf(web): start recording renders from the upload request instead of…
richiemcilroy b51a28f
perf(web): poll a render the page is showing every second, faster onc…
richiemcilroy 8e6d92a
fix(web): keep the recording render start helpers out of the workflow…
richiemcilroy 10c2584
perf(editor): read signed media ranges without Chrome's one-request-p…
richiemcilroy 9f8db6d
perf(editor): resume playback at the preview resolution the last play…
richiemcilroy cf7d366
fix(web): pass the video id to render start logs as an argument, not …
richiemcilroy b52e379
chore: drop comments that restate the render start helpers and segmen…
richiemcilroy 513a483
refactor(editor): use a kebab-case filename for the web cursor replac…
richiemcilroy 20b8ab1
fix(render-farm): count a worker as able to serve a task only if disp…
richiemcilroy 5cf7247
perf(web): look up the studio video and edits alongside the sign-in c…
richiemcilroy 45ce544
perf(editor): open WebM audio with small reads instead of video-sized…
richiemcilroy 278a96d
fix(render-farm): decode only each audio section's window when a trac…
richiemcilroy 4a93fa7
perf(render-farm): free a render slot while its finished chunk waits …
richiemcilroy 8122ead
fix(editor): read further back for a WebM seek point when the last cl…
richiemcilroy 6de407d
chore(editor): keep only the why in the playback scale comments
richiemcilroy ec8b834
fix(editor): wait for a loaded video's frame by readiness, not a load…
richiemcilroy 8043a7d
chore(editor): drop the WebM fixture file's header comment
richiemcilroy 84da68d
chore(editor): remove the web cursor replacement toggle for now
richiemcilroy 522d5fd
chore(editor): hide the keyboard tab and track in the web editor
richiemcilroy a17647d
fix(web): play a video that is still rendering in the share player, n…
richiemcilroy cbfec85
feat(rendering): interpolate chroma when converting browser NV12 plan…
richiemcilroy 3630e0e
perf(editor): export from NV12 planes in Safari with five second keyf…
richiemcilroy 98ca273
fix(web): serve a browser Save's playlist as a variant so playback re…
richiemcilroy da2fedc
fix(editor): count a web recording's pointer input as recorded cursor…
richiemcilroy 145283a
fix(editor): keep BT.601 retagged frames off the Safari export's NV12…
richiemcilroy f4962c0
fix(editor): stay ready once the first frame has shown while the prev…
richiemcilroy de15bc7
feat(editor): add a focus mode that gives the web preview and timelin…
richiemcilroy c330429
fix(editor): leave focus mode when asked to mid-transition
richiemcilroy ccb76d1
chore(editor): drop comments that describe focus mode
richiemcilroy 9019a75
fix(web): generate web editor captions from the share transcript with…
richiemcilroy 02d6012
fix(editor): carry a caption edit from the timeline onto its source c…
richiemcilroy ae1f78a
fix(editor): burn captions into a browser Save only when export with …
richiemcilroy 3f2a11d
chore(editor): drop comments that restate the browser export entry po…
richiemcilroy 4a51b57
fix(editor): rewrite only the edited piece of a caption a cut split
richiemcilroy 7363476
fix(web): take a worker session when web captions come to need one mi…
richiemcilroy 35d04de
fix(editor): keep a word a cut runs through when editing the other pi…
richiemcilroy f1a298e
fix(web): let a caption request replace a stale worker session it needs
richiemcilroy 859197c
test(editor): replay the pause redraw racing a config change, and sam…
richiemcilroy 3c5c62c
feat(export): export captions whenever they are on, without a separat…
richiemcilroy 22c6e49
fix(web): fall back to crypto random bytes for the share analytics se…
richiemcilroy 0beabf1
fix(web): match storage hosts by domain rather than substring
richiemcilroy d0cd725
fix(media-server): strip DASH manifest comments until none remain
richiemcilroy 5d0a428
fix(desktop): export captions with the editor's caption switch now th…
richiemcilroy 4a1c407
chore(desktop-gpui): drop the export with subtitles toggle
richiemcilroy 592d344
perf(web): load Sentry after the page, queueing errors from before it…
richiemcilroy 695cd50
perf(web): load the TanStack devtools only in development
richiemcilroy 2e01d5b
perf(web): keep the Effect runtime and idle screens off the editor pa…
richiemcilroy cfa9830
perf(editor): size media reads to the measured connection and hold wa…
richiemcilroy 00ee544
perf(editor): preload the renderer wasm alongside the entry script
richiemcilroy d5fd8ee
feat(editor): answer Play at once and explain a slow load while video…
richiemcilroy 1966573
fix(editor): keep the web preview on the editor's edits when a slower…
richiemcilroy 162a5c7
Merge main into feature/web-editor-desktop-parity
richiemcilroy bbaa0b0
fix(editor): check a waveform byte grant before calling it
richiemcilroy 077a09c
fix(web): replay navigations from before Sentry loads
richiemcilroy 98abecf
fix(editor): fall back to a plain read when a waveform range read fai…
richiemcilroy e715194
fix(editor): seed the web preview's project config from a save when i…
richiemcilroy ff60fd2
style(web): format the client Sentry test
richiemcilroy 9d5e155
fix(recorder): keep part uploads going on slow uplinks instead of abo…
richiemcilroy 0efa63e
perf(editor): let a loading paused frame give way to Play and read ah…
richiemcilroy 303a133
perf(editor): read a recording's tail only as far as its last fragmen…
richiemcilroy a7cec28
fix(editor): forget a loading-screen Play press when its editor attem…
richiemcilroy e85673e
feat(editor): rate the connection from the editor's own media reads
richiemcilroy 6bbca86
feat(editor): centre the loading status over the preview and explain …
richiemcilroy e2091a3
fix(editor): retry a save that failed offline once the browser is bac…
richiemcilroy 148060d
feat(web): show connection quality in the editor bar in place of Dash…
richiemcilroy 09482dd
feat(web): make the editor bar's share link a share page toggle on ph…
richiemcilroy 46d0a2d
feat(web): show a loading status while the editor's code downloads
richiemcilroy 191e522
perf(editor): drop the loading status backdrop blur and keep its spin…
richiemcilroy 1c9d4e1
feat(editor): replay touch drags, pinches and two-finger scrolls on t…
richiemcilroy c563826
feat(editor): stack the web editor below 1024px with settings in a sh…
richiemcilroy adb0bde
fix(editor): stack the export page on phones and tablets
richiemcilroy b3162db
fix(editor): show a paused frame as loading only once the preview has…
richiemcilroy e3691c5
feat(web): save on an editor worker when the render farm can't, and n…
richiemcilroy 26eef18
refactor(web): remove the browser save chunk stream, its routes and i…
richiemcilroy fd207ce
feat(editor): centre the loading status over the preview and lay out …
richiemcilroy 08aa9be
fix(web): say our servers are busy instead of naming the render farm …
richiemcilroy 7a69b87
fix(recorder): retry a part that stops while others move, judged agai…
richiemcilroy b7b9d46
fix(web): wait for a busy editor pool only as long as Save does when …
richiemcilroy e22cacb
style(web): format the worker Save session call
richiemcilroy 5fdea02
chore(editor): keep the earliest perf events and drop comments that r…
richiemcilroy 53379b0
fix(editor): give a frame a fresh decoder when the last one is still …
richiemcilroy e1b2a25
fix(editor): reopen a segment's settings when it's tapped again on a …
richiemcilroy 23a7410
chore(editor): drop comments that restate the responsive layout code
richiemcilroy 8eef6f8
fix(editor): retry a timed out first preview frame and keep playing o…
richiemcilroy 79959d7
chore(editor): drop comments that restate the preview tools and phone…
richiemcilroy b43c777
perf(recorder): give camera tracks a camera-shaped bitrate and trim s…
richiemcilroy 63050d4
feat(web): give the share page header a title row over the video with…
richiemcilroy feff32f
feat(media-server): render, upload and report a Save from the editor …
richiemcilroy a270216
feat(web): publish Saves the editor worker renders on the server, lik…
richiemcilroy 490a331
fix(web): stack the share view toggle above the reactions bar until t…
richiemcilroy 86cca70
perf(recorder): keep more bits for full-frame and VP8 camera recordings
richiemcilroy 3f19550
test(media-server): measure the replay preview only once its backing …
richiemcilroy 0cb66bf
fix(editor): size fragment search windows to the recording's fragment…
richiemcilroy 06036a8
fix(editor): start the connection indicator at checking and judge it …
richiemcilroy bc867dd
perf(editor): stop a fragment search once every frame waiting on it h…
richiemcilroy 67b588c
fix(web): show only the back arrow in the editor bar on phones
richiemcilroy e2c22e3
fix(editor): retry a project save that can't reach Cap and say so pla…
richiemcilroy a74466e
fix(editor): show Saved on open when the share link already shows the…
richiemcilroy ac6662c
fix(editor): keep the latest perf events once the log is full
richiemcilroy adf49bc
fix(media-server): close a worker session at once and let its Save fi…
richiemcilroy ccec958
fix(web): withdraw only the worker Save a failed start recorded
richiemcilroy 723b7f1
fix(editor): call Save saved on open only when a render of the stored…
richiemcilroy 969ca1e
fix(editor): show one loading status on the web loading screen and cl…
richiemcilroy fda8f39
chore(editor): drop the comment that restates the shadow defaults
richiemcilroy 8275f38
fix(editor): clear the loading card once frames flow and show one loa…
richiemcilroy 2a8f776
perf(editor): drop the blur over a recording's unprepared timeline range
richiemcilroy 8c3624a
fix(editor): drop a late camera frame once the playhead has moved and…
richiemcilroy 781622e
fix(editor): let a fragment search finish after its frame moves on, w…
richiemcilroy 788149c
perf(editor): draw a paused frame's screen at once and redraw when it…
richiemcilroy cba4715
chore(editor): drop comments that restate the quiet loading timeline
richiemcilroy 67281ce
fix(media-server): wait for Saves still publishing on shutdown and al…
richiemcilroy b184a3b
chore(web): drop a comment that narrates the worker Save test
richiemcilroy 9a6dd4f
perf(editor): stop a fragment search shortly after every caller has g…
richiemcilroy 3dcceb9
feat(web): let Pro owners set a Cap's link preview title, description…
richiemcilroy fb7c3a8
fix(web): scroll the link preview dialog as one page on phones
richiemcilroy 0ed95a7
chore(media-server): drop a comment that restates the pending close wait
richiemcilroy 862fc33
feat(web): clamp share titles to a fixed height, label the Manage but…
richiemcilroy 240eb08
feat(web): pause a Cap's custom link preview while its owner has no P…
richiemcilroy 87b908f
fix(editor): report a camera that fails after its frame was drawn wit…
richiemcilroy c7dd84b
feat(web): open the link preview dialog from the share page's Manage …
richiemcilroy cd917d1
chore(editor): drop a comment that narrates clearing the selection
richiemcilroy 9fe298d
fix(web): only delete a link preview image that no saved preview stil…
richiemcilroy 1240d74
fix(web): serve link preview images through HttpApi at a URL that mov…
richiemcilroy 1be2ba3
chore(web): drop comments that narrate the link preview dialog
richiemcilroy c6b584a
test(web): leave through the connection indicator's dashboard link in…
richiemcilroy d5324d2
fix(web): let Cmd and Ctrl shortcuts like reload through the share pl…
richiemcilroy 549c5af
fix(editor): never cancel browser shortcuts like reload while the web…
richiemcilroy File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,164 @@ | ||
| name: Docker Build Editor Worker | ||
|
|
||
| on: | ||
| pull_request: | ||
| paths: | ||
| - "apps/media-server/**" | ||
| - "apps/web/lib/editor-caption-access.ts" | ||
| - "apps/web/lib/editor-caption-transport.ts" | ||
| - "apps/web/lib/editor-recording-title.ts" | ||
| - "apps/desktop/src/assets/music/**" | ||
| - "apps/desktop/src-tauri/assets/backgrounds/**" | ||
| - "crates/**" | ||
| - "packages/editor-cap-bundle/**" | ||
| - "packages/editor-solid-web/**" | ||
| - "vendor/**" | ||
| - "Cargo.toml" | ||
| - "Cargo.lock" | ||
| - "package.json" | ||
| - "bun.lock" | ||
| - "bunfig.toml" | ||
| - ".github/workflows/docker-build-editor-worker.yml" | ||
| push: | ||
| branches: | ||
| - main | ||
| paths: | ||
| - "apps/media-server/**" | ||
| - "apps/web/lib/editor-caption-access.ts" | ||
| - "apps/web/lib/editor-caption-transport.ts" | ||
| - "apps/web/lib/editor-recording-title.ts" | ||
| - "apps/desktop/src/assets/music/**" | ||
| - "apps/desktop/src-tauri/assets/backgrounds/**" | ||
| - "crates/**" | ||
| - "packages/editor-cap-bundle/**" | ||
| - "packages/editor-solid-web/**" | ||
| - "vendor/**" | ||
| - "Cargo.toml" | ||
| - "Cargo.lock" | ||
| - "package.json" | ||
| - "bun.lock" | ||
| - "bunfig.toml" | ||
| - ".github/workflows/docker-build-editor-worker.yml" | ||
|
|
||
| permissions: {} | ||
|
|
||
| jobs: | ||
| build: | ||
| name: Build and test editor worker (${{ matrix.platform }}) | ||
| runs-on: ${{ matrix.runner }} | ||
| timeout-minutes: 30 | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: | ||
| - platform: amd64 | ||
| runner: ubuntu-24.04 | ||
| - platform: arm64 | ||
| runner: ubuntu-24.04-arm | ||
| permissions: | ||
| contents: read | ||
| steps: | ||
| - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 | ||
| with: | ||
| persist-credentials: false | ||
| - name: Set up Docker Buildx v3.12.0 | ||
| uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f | ||
| - name: Build editor worker image with Docker v6.19.2 | ||
| uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 | ||
| with: | ||
| context: . | ||
| file: apps/media-server/Dockerfile.editor | ||
| platforms: linux/${{ matrix.platform }} | ||
| load: true | ||
| tags: cap-editor-worker:verification | ||
| cache-from: type=gha,scope=editor-worker-${{ matrix.platform }} | ||
| cache-to: type=gha,mode=max,scope=editor-worker-${{ matrix.platform }} | ||
| - name: Check native worker readiness | ||
| run: | | ||
| docker run --rm --network none \ | ||
| -e CAP_WEB_EDITOR_PUBLIC_ORIGIN=http://127.0.0.1:3457 \ | ||
| -e MEDIA_SERVER_WEBHOOK_SECRET=test \ | ||
| --entrypoint bun cap-editor-worker:verification \ | ||
| -e 'import app from "./src/editor-worker-app.ts"; const response = await app.request("/health"); if (!response.ok) process.exit(1)' | ||
| - name: Exercise paired native editor routes | ||
| run: | | ||
| docker run --rm --network none --cpus 4 --memory 4g \ | ||
| -e MEDIA_SERVER_WEBHOOK_SECRET=test \ | ||
| --entrypoint bun cap-editor-worker:verification test \ | ||
| src/__tests__/editor-worker-app.test.ts \ | ||
| src/__tests__/lib/editor-assets.test.ts \ | ||
| src/__tests__/lib/editor-clip-thumbnails.test.ts \ | ||
| src/__tests__/lib/editor-config-paths.test.ts \ | ||
| src/__tests__/lib/editor-image-assets.test.ts \ | ||
| src/__tests__/lib/editor-security.test.ts \ | ||
| src/__tests__/lib/editor-wallpapers.test.ts \ | ||
| src/__tests__/routes/editor-clips.test.ts \ | ||
| src/__tests__/routes/editor.test.ts | ||
| - name: Verify editor subprocess credential isolation | ||
| run: | | ||
| docker run --rm --network none \ | ||
| -e MEDIA_SERVER_WEBHOOK_SECRET=test \ | ||
| -e AWS_SECRET_ACCESS_KEY=test \ | ||
| --entrypoint bun cap-editor-worker:verification \ | ||
| src/__tests__/lib/editor-process-env-replay.ts | ||
| - name: Verify cursor-only MOV export | ||
| run: | | ||
| docker run --rm --network none --cpus 4 --memory 4g \ | ||
| --entrypoint bun cap-editor-worker:verification \ | ||
| src/__tests__/routes/editor-cursor-mov-replay.ts | ||
| - name: Replay browser-only Studio and worker exports | ||
| if: matrix.platform == 'amd64' | ||
| run: | | ||
| docker run --rm --cpus 4 --memory 8g --ipc host \ | ||
| -v "${{ github.workspace }}:/source" \ | ||
| -w /source/apps/media-server \ | ||
| cap-editor-worker:verification \ | ||
| bash -e -u -o pipefail -c ' | ||
| cd /source | ||
| bun install --frozen-lockfile | ||
| bunx playwright install --with-deps chromium webkit firefox | ||
| apt-get install -y --no-install-recommends xauth | ||
| bun run --filter @cap/editor-solid-web build | ||
| cd /source/apps/media-server | ||
| export CAP_EDITOR_UI_PARITY_ARTIFACT_DIR=/source/cap-editor-parity-artifacts | ||
| run_browser_only_studio() { | ||
| case "$CAP_EDITOR_UI_BROWSER" in | ||
| firefox|webkit) CAP_EDITOR_UI_HEADED=1 xvfb-run -a bun src/__tests__/routes/editor-solid-browser-only-replay.ts ;; | ||
| *) bun src/__tests__/routes/editor-solid-browser-only-replay.ts ;; | ||
| esac | ||
| } | ||
| run_worker_studio() { | ||
| case "$CAP_EDITOR_UI_BROWSER" in | ||
| firefox|webkit) CAP_EDITOR_UI_HEADED=1 xvfb-run -a bun run test:native-editor-ui ;; | ||
| *) bun run test:native-editor-ui ;; | ||
| esac | ||
| } | ||
| browser_replay_failed=0 | ||
| for browser in chromium firefox webkit; do | ||
| if ! CAP_EDITOR_UI_PARITY_ARTIFACT_DIR=/source/cap-editor-parity-artifacts CAP_EDITOR_UI_BROWSER="$browser" run_browser_only_studio; then | ||
| browser_replay_failed=1 | ||
| fi | ||
| done | ||
| for browser in chromium webkit firefox; do | ||
| for pro in 0 1; do | ||
| CAP_EDITOR_UI_SHARE_REPLAY=1 CAP_EDITOR_UI_BROWSER="$browser" CAP_EDITOR_UI_PRO_CAPTIONS="$pro" run_worker_studio | ||
| done | ||
| done | ||
| for repeat in 2 3; do | ||
| printf "WebKit Free replay %s\n" "$repeat" | ||
| CAP_EDITOR_UI_SHARE_REPLAY=1 CAP_EDITOR_UI_BROWSER=webkit CAP_EDITOR_UI_PRO_CAPTIONS=0 run_worker_studio | ||
| done | ||
| CAP_EDITOR_UI_CURSOR_MOV=1 CAP_EDITOR_UI_BROWSER=chromium CAP_EDITOR_UI_PRO_CAPTIONS=0 run_worker_studio | ||
| CAP_EDITOR_UI_CURSOR_MOV=1 CAP_EDITOR_UI_BROWSER=webkit CAP_EDITOR_UI_PRO_CAPTIONS=1 run_worker_studio | ||
| CAP_EDITOR_UI_CANVAS_FALLBACK=1 CAP_EDITOR_UI_BROWSER=chromium CAP_EDITOR_UI_PRO_CAPTIONS=0 run_worker_studio | ||
| CAP_EDITOR_UI_CANVAS_FALLBACK=1 CAP_EDITOR_UI_BROWSER=webkit CAP_EDITOR_UI_PRO_CAPTIONS=1 run_worker_studio | ||
| bun src/__tests__/routes/editor-presets-browser-replay.ts | ||
| if [ "$browser_replay_failed" -ne 0 ]; then exit 1; fi | ||
| ' | ||
| - name: Upload Studio parity diagnostics | ||
| if: failure() && matrix.platform == 'amd64' | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: web-studio-parity-diagnostics | ||
| path: cap-editor-parity-artifacts | ||
| if-no-files-found: ignore | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.