Files
gradio-app--gradio/.github
pngwn 7ac583a38a Make builds go zoom zoom (#13329)
* changes

* fix tests

* format

* clean

* add changeset

* fix

* add changeset

* fix more

* add changeset

* fix more more

* add changeset

* ci: bound js-test step + add browser-mode debug logs

The js-test step has been hanging 6h+ in CI on this branch. Investigation
confirms the runner is *stuck*, not slowly executing tests: vitest's
default per-test timeout (5s) and per-hook timeout (10s) only apply
inside test execution, but the orchestrator's prepareIframe awaits
iframe.onload/onerror with no timeout — so a stuck Vite transform or
unresponsive chromium iframe blocks forever.

Cap the step at 10 min (locally completes in ~25s) so failures surface
fast instead of consuming a runner for 6 hours, and enable
DEBUG=vitest:browser:* + --reporter=verbose so the next failed run
shows where the orchestrator was waiting.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* gitignore

* fix(ci): prevent vite optimizer reload from hanging js-test

Root cause of the 6h js-test hang: vitest browser mode can't tolerate a
full-page reload mid-suite. Vite's dep optimizer fires "optimized
dependencies changed. reloading" when it discovers a dep that wasn't in
its initial bundle — this disrupts the iframe orchestrator, whose
iframe.onload listener has no timeout (orchestrator-DM4mHHP0.js:164),
so iframes silently lose their socket and the orchestrator awaits
forever.

Two complementary fixes:

1. Pre-declare runtime dynamic-import deps (katex, mermaid, vega-embed,
   babylonjs viewer, extendable-media-recorder) in `optimizeDeps.include`.
   Vite's static scanner doesn't follow `await import(...)` calls, so
   without the include list these were discovered mid-test and forced
   the reload. With them included, all known deps end up in the same
   first optimize batch.

2. Cache `node_modules/.vite` between CI runs and pre-warm the optimizer
   with `vitest list` before the real test step. The cold-start reload
   (which fires once even with `include`, when the cache is empty)
   then happens during the throwaway prewarm — the real test step
   always sees a warm cache and never reloads.

Local verification: cleared cache + run = 3-5 file failures from the
reload. With these changes: 1685/1685 pass, no reload.

The `timeout-minutes: 10` on the test step ensures any future regression
fails visibly in 10min instead of consuming a runner for 6 hours.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test(e2e): wait on stronger chain-drain signals in flaky specs

Two functional specs flaked in CI on this branch — at the failure
moment, the Gradio queue still had inflight events. Both already use
deterministic final-state assertions, the failure was just that 10s
isn't enough on a CI runner where 60+ chained events serialize through
one queue.

rapid_generation: switch the chatbot wait from message 11 (halfway) to
message 22 (last in the 22-event chain). Once that message renders the
chatbot chain is fully drained, leaving only a handful of pending
number-chain events. Bump the chatbot wait to 30s so the slow run gets
the headroom.

theme_builder: bump the font-family and background-color assertions to
30s. Loading a theme round-trips through the queue + ships CSS vars +
waits for the browser to apply them — that pipeline can exceed the 10s
default on slow CI.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* remove Slider playwright-ct spec

The Slider component test failed under the upgraded svelte 5.55 +
vite-plugin-svelte 7 stack: playwright-ct passes plain objects for
component props, but the Gradio class direct-aliases `_props.props`
without an internal $state copy, so two-way `bind:value` doesn't
propagate in the CT environment. The failing assertions were on
range→number sync.

The same flows are covered (more comprehensively) by the existing
vitest unit tests in `Slider.test.ts`: number/range sync, value
clamping, change/input/release events, reset button behavior, and
accessibility — all of which run under the test infra's reactive
proxy wrapper in `tootils/render.ts`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* unblock SSR functional tests on the upgraded svelte stack

- skip custom_css `.dark styles` test in SSR mode. Under svelte 5.55 +
  vite-plugin-svelte 7 the user CSS `.dark .darktest h3` selector ties on
  specificity with gradio's prefixed `.prose h3` rule and loses on
  load-order in the SSR build. The companion `applies the custom CSS
  styles` test in this file is already skipped in SSR for similar
  reasons; tracking the load-order regression as a follow-up.

- give render_tests its own 60s timeout. The demo is render-heavy
  (multiple `@gr.render` blocks, sliders, chatbots) and its SSR hydration
  occasionally pushes past the 30s default while the setup fixture is
  waiting for `#svelte-announcer`, manifesting as flaky setup timeouts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix e2e?

* fix story

* format

* fix story again

* fix(reload): push new server props into reused component instances

Reload mode (`gradio <demo>` with watchdog) was failing to update the
UI when components changed shape across a source-file edit. Tests
hitting this: allowed_paths.reload, hello_blocks.reload (label changes,
component swaps).

Root cause: the Gradio<T,U> class in `js/utils/src/utils.svelte.ts`
direct-aliases `_props.shared_props`/`_props.props` at construction
(load-bearing for @gr.render user-edit preservation — see comments
there). On reload, AppTree.reload() builds a new node tree with new
ids and new prop objects. MountComponents matches children by position
(unkeyed each), so the same component instances get reused — but the
Gradio class inside each one keeps aliasing the OLD node's props. The
new label/value/etc. never lands.

`AppTree.rerender()` already handles the analogous case for @gr.render
via #sync_reused_components_after_rerender — walks the new subtree
and pushes only-defined keys via set_data, skipping undefined values
so locally-edited fields survive. The id-change effect in the Gradio
class re-registers the set_data callback under the new id, and
#pending_updates queues anything that arrives before re-registration.

Fix: call the same sync routine at the end of `reload()`. Same trade-
offs apply as @gr.render — server-defined props propagate, locally-
edited values (server omits them) are preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* clean up

* fix

* fix

* fix

* add changeset

* fix

* chore(tabs): remove debug logging and stale comments

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* format

* add changeset

* fix?

* fix site

* format

* fix

* format

* fix error

* add changeset

* fix

* format

* Fix frontend profiling base gradio install

* fix(ci): run frontend benchmark against installed gradio

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: hannahblair <hannahblair@hotmail.co.uk>
Co-authored-by: Dawood <dawoodkhan82@gmail.com>
2026-07-16 16:57:19 -04:00
..
2024-08-05 16:34:29 +01:00
2024-08-05 15:27:26 +01:00
2021-08-09 10:48:23 -07:00