Commit Graph

2344 Commits

Author SHA1 Message Date
Jonathan Schwender
961b618a98 libservo: Remove dependency on gstreamer.py (#43165)
A published or vendored package will not have access to gstreamer.py.
Hence, we move the package list into libservo, and modify the remaining
usage of gstreamer.py (in mach) to read the same list.


Testing: Covered by CI testing, which involves building servo and the
macos dmg and windows installer.

Fixes: Part of #43145

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-12 06:31:03 +00:00
Jonathan Schwender
9069043477 Move ply and WebIDL into script_bindings (#43180)
This is required to publish script_bindings, since all files used during
codegen need to be there.
It might also be possible to generate the bindings ahead of time and
vendor them in-tree, but this seems painful to setup from a CI
perspective.
Since there don't seem to be any other users in-tree we can just vendor
into the script-bindings directory.

`ply` is licensed under the BSD 3 clause, and WebIDL under MPL-2.0, with
the licenses available in our cargo package. Both tools won't end up in
`servo` since they are build-time dependencies, so I believe we don't
need to adjust the crate license, or configure `about.toml`.

Testing: Should be covered by existing tests. We don't test if this
allows vendored builds or published builds.
Fixes: Partial fix for #43145

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-12 05:44:46 +00:00
Jonathan Schwender
fca0a2555e deny.toml: Clarify time-rs CVE. (#43148)
The CVE doesn't impact us, so we can ignore it safely. This improves the
comment above the ignored entry in deny.toml. We test our own code via
`clippy` and we aren't using the vulnerable type. Our dependencies could
in theory use it, but that seems rather unlikely.

Testing: test-tidy is tested in CI.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-11 09:42:41 +00:00
Jonathan Schwender
e23f052412 Rename libservo to servo (#43141)
As discussed on zulip we would like to rename `libservo` to `servo`
(again) before a future crates.io release.
Servo is a library, so the `lib` prefix is somewhat redundant. We
already renamed the binary of ServoShell to `servoshell`, to reduce
confusion of users of what servo is.

Note: This PR does not touch all occurrences of `libservo`. Specifically
CI job names remain untouched, since the risk of breaking something is
higher here, harder to test for and the name not user facing.

Testing: CI testing of this change should give us good confidence.
Manual testing of `./mach doc` and `./mach build` showed no issues on
macos. [Full try
run](https://github.com/jschwe/servo/actions/runs/22909562747)

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-10 20:55:14 +00:00
atbrakhi
ed3e63d054 devtools: create helper functions to reduce duplication in tests (#43140)
Create helper functions to reduce boilerplate in some tests

Testing: All tests are passing
Fixes: See comment
https://github.com/servo/servo/pull/43135#pullrequestreview-3921936566

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-10 15:43:22 +00:00
Simon Wülker
c37ae57a0d script: Only send objects with ESClass::Object to devtools (#43133)
We should only send previews of ordinary objects[^1] (i think that's the
correct term) objects to the devtools. The code is not designed to
handle other objects, which currently causes crashes.

Testing: This change adds a devtools test that crashes without this
change.

[^1]: https://tc39.es/ecma262/#ordinary-object

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-10 15:19:03 +00:00
atbrakhi
3adc252612 devtools: Add test for StepIn, StepOut and StepOver hooks (#43135)
This PR adds a test for `StepIn`, `StepOut` and `StepOver` hooks.

This test is intentionally designed to include all three `StepIn`,
`StepOut` and `StepOver` hooks in one test. This could be tested
separately but in a real use case one is mostly using these hooks
together in a single debugging session, not in isolation.

It is important we mirror that workflow. Also considering this area is
actively under development, it would be easier to catch regressions with
this flow test.

Testing: Added a new test
Fixes: Part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-10 12:41:00 +00:00
Euclid Ye
1d0b3f1418 ci: Update WiX files and Windows workflow to reflect ServoShell name (#43104)
`candle` generates the object file based on the name of WiX source file,
which is used by linker later.
This PR effectively changes:
- `Servo.exe` to `ServoShell.exe` for the windows installer
- `Servo.zip` to `ServoShell.zip`

We already generates `servoshell.exe` from build, it is weird that we
keep the name `Servo.exe` for the MSI.

Testing: The problem is fixed, for both executable and zip, see
[this](https://github.com/servo/servo/actions/runs/22841763218/job/66249263625).
Bencher [works
too](https://github.com/servo/servo/actions/runs/22843667165/job/66256020144).
Fixes: #43102, where the windows artifact keeps missing.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-09 08:17:56 +00:00
Jonathan Schwender
1632e61ed6 servoshell: Rename executable to servoshell. (#42958)
This should help clarify the difference between servo the library /
engine and servoshell the browser (demo).

Other changes: 

- Removed etc/servo.sb ( [apple sandbox profile
format](https://angelica.gitbook.io/hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox#sandbox-profiles))
since it is not needed anymore. See [this
comment](https://github.com/servo/servo/pull/42958#discussion_r2876253489)
for more details.

Testing: This is a very invasive change, and there are bound to be
scripts / places I have overlooked. Searching for usages of `servo` is
very hard, since it's also the name of the library.
Try run: https://github.com/servo/servo/actions/runs/22637676818

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-07 08:08:38 +00:00
Brent Schroeter
4c69d856f6 tools: Support tab navigation via navigateTo, goBack, and goForward (#43026)
Add support for navigation requests ("navigateTo", "goBack", and
"goForward") over the Remote Debugging Protocol. These may be sent by a
UI client in response to user input (for example the address bar in the
Firefox inspector), or they can be used to automate navigation during
unit tests.

This currently only supports navigation within the URL domain at which
servoshell is initially launched, due to a bug in servo's
`BrowsingContextActor` implementation. (Unit tests covering a fix for
that issue will depend on this change.)

Testing: The behavior of all 3 new message types is covered by a new
test case—`test_navigation`—in the devtools unit test suite.
Fixes: #38668

---------

Signed-off-by: Brent Schroeter <contact@brentsch.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-06 09:13:39 +00:00
Jonathan Schwender
a2bd2ab09b Add codesigning script for macOS (#42912)
This script automates the signing, packaging and notarization of
servoshell on macOS.
This is a first step towards: #40031 and #12532. While we could let a
maintainer code-sign and upload the signed release, probably this should
be integrated into CI, which would require additional work.

This script started out quite simple as part of `./mach package`.
However, since the script has access to secrets, it shouldn't be part of
mach (to minimize the amout of code that needs to be trusted).
We also needed to save state and be able to resume operations, since
notarizing can take quite long and the stapling needs to wait until
notarization has completed.
Since notarizing can take long (up to a day has been observed during
first tests), we save artifacts and the notarization ID, and add a
`--check-status` command that can be used to poll if notarization has
been finished.

Testing: Manually testing required. A signed and notarized `.dmg`
artifact has [been
uploaded](https://servo.zulipchat.com/#narrow/channel/500774-tsc/topic/Signing.20macos.20Servoshell/near/576256648)
to zulip, allowing others to verify the notarization worked.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-06 03:43:20 +00:00
Jonathan Schwender
4e44e366d3 servoshell: Delete duplicate Info.plist (#42955)
We had two `Info.plist` files. The maintained one is in the root
directory of this repository.
There is no reason for two plist files, so remove the unmaintained one. 
Additionally, we also move the maintained version from the root
directory to the servoshell directory.

Testing: We don't test the contents of the plist file.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-03 15:14:30 +00:00
atbrakhi
630e4b75da devtools: Implement frame scoped evaluation (#42936)
When paused at a breakpoint, hovering over local variables now shows
their value. Previously `eval` used `executeInGlobal()` which could not
access local scope, so hovering showed `ReferenceError` instead of the
actual value.


https://github.com/user-attachments/assets/05247b82-4e4d-422d-a428-63e46b55d55f

Testing: Added a new test
Fixes: Part #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-03 14:22:25 +00:00
Martin Robinson
eb63ad307e mach: Remove generic nightly download support (#42977)
See #42956. It's quite likely that this code has bitrotted and if this
feature is desired, should probably download the nightlies from GitHub
and also be updated to support our current packaging output.

Testing: This is just removing unused code from our build scripts.
Fixes: #42956.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-03 10:03:02 +00:00
Jonathan Schwender
37dfa42731 Unify servo package naming (#42916)
This is a preparation for publishing to crates.io. Changes include:
- Add `servo-` prefixes to avoid name collisions on crates.io
- Use `-` instead of `_` in package names.
- Rename the crates to their original names in Cargo.toml,
  to keep the diff minimal
- Rename `media` to `servo-media-thread` to avoid name collision with
  `servo-media` (originally from the media repository).

This is an outcome of the previous discussion at [#general > Switch
remaining git dependencies to
crates.io](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Switch.20remaining.20git.20dependencies.20to.20crates.2Eio/with/576336288)

Testing: This should be mostly covered by our CI, but some amount of
breakage is to be expected, since some package names could still be
referenced from scripts which are not tested or run in CI. [mach try
run](https://github.com/jschwe/servo/actions/runs/22502945949)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-01 14:15:27 +00:00
Jonathan Schwender
b590c6c848 mach: Add command to export build env (#42888)
Add `./mach print-env` to export the environment variables mach sets to
stdout and `./mach exec` to execute an arbitrary command in the custom
environment. This allows users to easily run custom commands, or tools
in the same environment as mach would create without adding support
every tool. Note: `./mach print-env` is only targeting UNIX shells for
now, although probably one could detect the shell and e.g. also support
PowerShell (in theory).

In principle, simple commands like `./mach cargo-fix` could be removed
and instead used via `./mach exec cargo fix`.

The execution of commands via `./mach exec my_command` (e.g. running
custom tools like cargo-flamegraph) still has some limitations, since
arguments that the user might have meant to pass to the command, might
be eaten by `./mach` (if mach expects that parameter, e.g. `--target
<triple>`. It's recommended to delimit explicitly by adding `--`., e.g.
`./mach exec --ohos -- cargo build --target aarch64-unknown-linux-ohos`.
Without the `--` delimiter, `./mach would interpret `--target` instead
of passing it to `cargo build`.

Testing: Manual testing of `./mach print-env --ohos`. 
Fixes: #25473 #38223

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-28 13:31:48 +00:00
Jonathan Schwender
cb7d7a93a8 mach: Remove ensure_clobber (#42915)
We don't use the CLOBBER file anywhere. The CLOBBER was introduced in
d03e52d240, but without any commit
message. Judging by the CLOBBER file in that commit, this was related to
the CI machines at the time. Should be safe to remove.

Testing: Well, this probably should be reviewed by someone who is
familiar with the background. Not covered by any tests.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-28 08:55:33 +00:00
Euclid Ye
ad906e8754 Webdriver CI: Use single chunk, default number of processes (#42842)
As said in
https://github.com/servo/servo/issues/42803#issuecomment-3957052680,
there's been a weird discrepancy between running wdspec tests in:
1. local / Linux WPT workflow
2. WebDriver Try

For 2, it triggers FAIL/ERROR that never happen in 1. It is not
intermittent, but always happens.

This PR makes 2 have same behaviour as running locally: default number
of processes (CPU count. For self-hosted runner workflow, this is
double. Hyperthreading?), single chunk.

This improves the running time by 2 mins as well.

Testing: The test results now work same as Linux WPT and local.
https://github.com/servo/servo/actions/runs/22385441028/job/64795317878#step:11:552
Fixes: #39097
Fixes: #42803

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-28 04:02:00 +00:00
Jonathan Schwender
82613e762b mach: Redirect some print statements to stderr (#42886)
This cleans up some of the informational print statement during
`build_env()` to go to stderr instead.
This opens up stdout usage to print information to stdout for
consumption (in a follow-up PR)

Testing: Covered by `./mach build --ohos` in CI.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-27 02:36:44 +00:00
Simon Wülker
ea8375beaf script: Remember which nodes the devtools know about (#42785)
Currently, `script` and `devtools` use a node's unique id to identify it
across requests. The unique ID is part of a node's rare data field and
is really only meant for debugging. Instantiating it on a node causes
it's memory usage to go up significantly. Now, when the devtools ask for
information about a specific `Node` then they send the unique ID to
`script`, and the script thread then walks the whole DOM tree searching
for that specific ID. This happens here:

6d0b651218/components/script/devtools.rs (L142-L153)

So, in the worst case, all of the nodes in the tree now have a unique
ID. That's not great!

Also, when `script` notifies `devtools` about changes to a DOM node then
`devtools` expects a `NodeActor` to exist for that Node. The actor might
not exist if the inspector doesn't know about that node yet - that
happens when the user hasn't expanded their parent yet.
That is an oversight from https://github.com/servo/servo/pull/42601 and
causes problems now(https://github.com/servo/servo/issues/42784) because
for the longest time, `devtools` was mostly the one sending requests. Of
course, we could make `devtools` simply ignore updates for nodes that it
doesn't know about, but ideally we shouldn't send these updates in the
first place.

This change implements a lookup map on the `ScriptThread` that contains
all nodes that have been sent to the devtools inspector. The map allows
us to efficiently resolve a unique ID to a `Node` in O(1), without
creating unique IDs for the whole tree. It also allows us to only send
DOM updates for nodes that the inspector cares about.

For now, entries from the cache are not evicted unless the relevant
pipeline is closed. That reflects reality, because the inspector also
keeps using them forever.
In the future we will tell the inspector when nodes are removed from the
tree - then it can't interact with them anymore, and we can remove them
from the script-side map.

This is change is not all that complicated but it involves moving a lot
of code around, so feel free to ask for clarification when something is
unclear!





Testing: This change adds a test
Fixes part of https://github.com/servo/servo/issues/42784

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-25 12:35:52 +00:00
Josh Matthews
ab9bb8ac97 python: Run flake8 on WPT tooling to match upstream. (#42823)
This should prevent recurring issues with exported WPT changes being
prevented from merging due to failing linting checks upstream.

Testing: Can't test WPT linting integration at this point in time.
Fixes: #40662

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-02-24 20:00:10 +00:00
atbrakhi
960a20c2ab devtools: Fix panic for breakpoint at invalid entry point (#42810)
Fix panic for breakpoint at invalid entry point.

Testing: Added a new test
Fixes: Part of https://github.com/servo/servo/issues/42784

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-02-24 10:20:03 +00:00
eri
92259af702 devtools: Unify pause handling for breakpoints and interrupt (#42599)
The pause debugger screen should be shown for both pausing manually
(interrupt) and hitting a breakpoint.

Reuse the logic for pausing breakpoints to pause the debugger when the
user manually clicks the pause button.

Rename the pause event to interrupt to match the language of the
DevTools client and to avoid confusion with paused frames, which can
happen on interrupt or on a breakpoint.


https://github.com/user-attachments/assets/ceb0007d-0e57-44d6-a159-55980ff8b517

Testing: New DevTools test and manual testing.
Part of: #36027

cc @atbrakhi

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-02-23 09:29:59 +00:00
Simon Wülker
742c8f8ef6 script: Don't crash when logging self-referential objects with devtools (#42752)
Testing: This change adds a test
Fixes https://github.com/servo/servo/issues/42742

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-22 22:21:44 +00:00
atbrakhi
3c8c46d32f devtools: implement pause and resume in debugger (#42580)
When a breakpoint is hit, the script thread now pauses execution and
notifies devtools clients with a "paused" event. The script
thread enters a loop that processes devtools messages until
a Resume command is received.

This change does not implement manual pause

Testing: Added new test
Fixes: part of https://github.com/servo/servo/issues/36027




https://github.com/user-attachments/assets/c619db20-4579-4f77-aa60-0e43e6e7e575

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-02-18 10:08:46 +00:00
Simon Wülker
a60f9370c7 devtools: Apply attribute modifications in the inspector to the DOM tree (#42601)
The inspector view allows modifying the attributes of DOM elements.
However, we lie to the devtools client: While it looks like the
attributes change, the changes are never actually applied to the DOM.

This change fixes that, and also makes it so attribute modifications
from non-inspector sources are shown in the inspector.

Testing: This change adds two tests

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-17 13:05:41 +00:00
Euclid Ye
7b1a59460c mach (Android): Remove CC_ & CXX_ for build environment (#42563)
This reverts the workaround introduced in
https://github.com/servo/servo/pull/42232#discussion_r2740827196 which
enabled CC builder, given https://github.com/aws/aws-lc-rs/pull/1026 in
the new release.

Depends on: #42551
Testing: Android build:
https://github.com/servo/servo/actions/runs/21931411344
Fixes: #42242

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-12 05:16:21 +00:00
Simon Wülker
929e275fcd devtools: Show attached event listeners in inspector tab (#42355)
This change makes the devtools inspector show any event listeners that
are attached to a node. The primary motivation is making the devtools
more useful for debugging real-world websites.

<img width="536" height="268" alt="image"
src="https://github.com/user-attachments/assets/5ba13e41-14b4-4202-b994-eadff5d1c6b5"
/>

You can also click on the event listener to show some more info, though
most of that (everything except the event type and the event phase) is
currently just placeholder text:

<img width="1360" height="456" alt="image"
src="https://github.com/user-attachments/assets/ec025847-43fc-489c-8b26-46afb6dada64"
/>


Testing: This change adds a new test

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-11 13:31:25 +00:00
pralkarz
0dc5bee60a devtools: handle syntax highlighting booleans in console.log (#42513)
Testing: `./mach test-devtools` (added a new test)
Fixes: #42503

---------

Signed-off-by: pralkarz <pralkarz@tuta.com>
2026-02-11 12:46:35 +00:00
Simon Wülker
60c8b8fad5 devtools: Support sending js objects to firefox devtools from console.log (#42296)
This allows us to `console.log` objects from JS and have a preview of
them appear in the console.
Interacting with said preview doesn't work yet, because the devtools
object actor is a stub.

<img width="600" height="78" alt="image"
src="https://github.com/user-attachments/assets/d896471f-3982-4406-94d4-b13eebabe337"
/>

Testing: This change adds a test

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-10 10:31:17 +00:00
pralkarz
b1012479fd mach: run fmt with the root dir as cwd (#42473)
`contextdir.chdir` is not thread-safe, but the formatting runs
synchronously in a single thread, so it's fine.

Testing: Made some changes to various `.rs`, `.py`, and `.toml` files,
and ran `../mach fmt` from a few different subdirectories to ensure it
picks up the files to reformat.
Fixes: #42472

Signed-off-by: pralkarz <pralkarz@tuta.com>
2026-02-09 13:27:00 +00:00
Sebastian C
ceab4b6094 mach: use --no-verify for mach try push command (#42429)
Skip push hooks for try command. This speeds up try for me, which
normally means waiting for clippy a second time. The commit step is
already using `--no-verify`.

Testing: tested this change locally and it works

Signed-off-by: Sebastian C <sebsebmc@gmail.com>
2026-02-07 18:46:00 +00:00
Euclid Ye
1eb5e96907 wpt/UT: Disable https_proxy for local tests (#42322)
This helps buddies from MI5, MI6, NSA etc. to run tests behind proxy.

Testing: Tested locally behind proxy. For some reason, I already set
`127.0.0.1` and `localhost` in `no_proxy`, but it does not work.
Fixes: #42321

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-04 08:39:17 +00:00
Tim van der Lippe
1133eb229a wpt: Use Webdriver for all WPT runs (#41511)
All other browsers use a single configuration for their browser
invocations on WPT. Servo historically had two: servo and servodriver.
Now that we run WPT on Servo GitHub CI with Webdriver using the
servodriver, we can align our configuration with theirs.

The existing "servo" configuration is renamed to "servo_legacy" and
"servodriver" is then renamed to "servo". This way, we preserve the
"servo" product name as defined on wpt.fyi, but we do use its webdriver
configuration.

Since webdriver is not fully working yet for debugging purposes, we keep
the "servo_legacy" configuration now. In the future, once the debugging
story has improved, we can remove "servo_legacy".

All in all, this ensures that both on local, Servo GitHub CI and on
wpt.fyi we all use the exact same configuration. I tested this locally
by running the following test:

```
./mach test-wpt tests/wpt/tests/css/css-overflow/scrollbar-gutter-dynamic-004.html
```

This does times out with the servo binary and works with the servodriver
binary.

Running the servo_legacy configuration is done via the `--servo-legacy`
flag:

```
./mach test-wpt tests/wpt/mozilla/tests/mozilla/caption.html --servo-legacy
```

Fixes #40751

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-29 20:47:03 +00:00
Euclid Ye
9e3cb9c42e mach (Android): Use CC instead of forcing CMake to build aws-lc-sys (#42232)
In #41912, the bump of `aws-lc-sys` breaks the Android build, as it
replaces CMake build with cc builder for all platforms. As fallback, we
use CMake for Android only.

Another bump of it today #42226 is supposed to fix the issue:

> Fix building for older Android targets by
[@​justsmth](https://github.com/justsmth) in
[aws/aws-lc-rs#1013](https://redirect.github.com/aws/aws-lc-rs/pull/1013)

, but it [does
not](https://github.com/servo/servo/actions/runs/21467527086/job/61832707394).

After investigation, we properly set up environment variable to make
sure C/C++ compiler bundled with NDK can be used.
This makes Android consistent with other platforms.

Testing:
https://github.com/servo/servo/actions/runs/21468482975/job/61835557765

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-29 14:15:10 +00:00
Jonathan Schwender
6b12ecf26b Increase stylo stack size in asan and debug builds (#42115)
This bumps stylo to allow configuring the stack size of the stylo
threads, which fixes crashes with asan and debug builds.

Testing: Manual testing with `--with-asan` and with the debug profile.
Fixes: #40814

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-28 15:39:49 +00:00
Narfinger
67c0ce7e75 CI/mach: Run wpt tests, smoketest and devtools tests in multiprocess mode (#41684)
According to discussions in
https://servo.zulipchat.com/#narrow/channel/263398-general/topic/GenericChannel.20and.20testing.20of.20ipc-mode/with/565017052
it would be a good idea to test servo in multiprocess
mode as more channels are switched to GenericChannel.
This changes the test-wpt, test-webdriver and smoketest to have a
multiprocess argument for most tests.


Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: WPT test run here:
https://github.com/Narfinger/servo/actions/runs/20713369574

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-28 08:56:18 +00:00
Jonathan Schwender
73af1bf099 devcontainer: Use our own dockerfile (#42166)
Switch to using our own dockerfile, and install the required
dependencies into our image.
In follow-ups we can build the docker image in CI, so that users can
download a prebuilt docker image to save time.

Testing: Manually tested by opening servo in the devcontainer and
running `./mach build`

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-28 05:18:40 +00:00
Ashwin Naren
ccc0d95930 Update servo.exe.manifest for servoshell (#42167)
Bumps servoshell version to actual version and updates `./mach release`
to update it.

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-01-26 20:23:18 +00:00
Jonathan Schwender
ca24f1c861 mach: Move package list to a text based format (#41775)
This allows us to reuse the list without python, e.g. from a
shell-script. This is useful to build docker image layers, without
requiring python / uv / mach first.
Future changes will split the list into multiple text files, so we can
install only required subsets (e.g. skipping gstreamer) and a workflow
to automatically sync changes to the book.

Testing: `./mach bootstrap` still works.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
2026-01-26 09:43:47 +00:00
Martin Robinson
9c9d9c863f Rename compositing and compositing_traits to paint and paint_api (#42066)
This change finishes the big rename associated with the old
`compositing` crates. Long ago, these crates managed a compositor, like
you might find in a traditional web engine. These days, compositing is
done in WebRender so the name has stopped making much sense. Various
structs inside the crates have already been renamed and this is the
final big change necessary for the rename

Testing: This is just a rename so existing tests should cover it.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-24 09:17:35 +00:00
Jonathan Schwender
9a4192a5e3 tidy: Improve check_shell substitution lint (#42099)
Probably we should use a proper linter like `shellcheck`, but in the
meantime make the lint slightly smarter, so that it doesn't complaint
about e.g. `$1`. This is especially a problem when adding scripts which
use `awk`, since our lint is quite stupid and doesn't understand `''`
strings.
This fixes linting, for a simple new script introduced in
https://github.com/servo/servo/pull/41775

Testing: ./mach test-tidy still passes.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-23 15:10:15 +00:00
Jonathan Schwender
82df609833 mach: Use uv to manage the virtual environment (#41861)
Instead of attempting to manage the virtual environment ourselves, use
`uv` to manage the installation of dependencies.
Since we still have dependencies coming from upstream wpt, we use
`[tool.setuptool]` in our pyproject.toml to ensure that `uv` dynamically
installs our dependencies according to the requirements.txt files.

Additionally, this PR also reverts `--no-project` usage. `--no-project`
was added as a temporary workaround in
https://github.com/servo/servo/pull/37741.
It's not 100% clear to me what exactly the issue was, but
[apparently](https://github.com/servo/servo/pull/37741#pullrequestreview-2985666234)
the issue caused the build to break.
Removing the arg seems to work fine, except that we get a warning about
a missing `requiress-python` value in `pyproject.toml`.
Apparently it is good practice to specify the requirement as `>=` in th
pyroject, and lock the exact version via `uv pin` (which writes to
`.python_version`, where we already pin 3.11.


Testing: Should be covered by existing tests, which compile code on all
platforms.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-22 05:51:44 +00:00
Jonathan Schwender
bca2e2ca74 Move upload_nightly to a dedicated script (#41922)
Follow-up to https://github.com/servo/servo/pull/41882

This further reduces the amount of code that is involved in handling our
publishing.

Testing: Manual triggering of a test release [workflow
run](https://github.com/servo/servo/actions/runs/21026468888)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-15 13:33:07 +00:00
Jonathan Schwender
f0b2db0994 CI: Refactor nightly release process (#41882)
This change moves the upload and attestation steps to the nightly
workflow. This results in overall slightly more code, but reduces the
amount of code that has access to extra privileges.

Additionally, this refactoring will allow to easily change the target
repo for the nightly release, i.e. allowing us to reuse the nightly
workflow for our monthly releases in the servo/servo repo (in a
follow-up PR).

We change upload_nightly to get an additional `packages` parameter, that
we use instead of a hardcoded table of expected packages per platform.
`download-artifact` doesn't preserve the whole directory structure, so
it would be a bit cumbersome to preserve that.
Since we anyway only use the upload script in CI, we can just directly
specify the packages in the CI, which also makes things slightly more
flexibel if we want to add new packages or platforms.

There are still more improvements to come, specifically also to the
`upload_nightly` script, with the goal to minimize the amount of code
that needs to be trusted.

Testing: Manually triggering the [release
workflow](https://github.com/servo/servo/actions/runs/20996682863/job/60358012404)
via workflow-dispatch.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-15 07:10:18 +00:00
dependabot[bot]
c9b7ce0404 build: Force using CMake to build aws-lc-sys for Android + Bump aws-lc-rs 1.15.2 -> 1.15.3 (#41912)
There is a significant change, which replaced the CMake build with a new
cc builder. This does not work for Android, so we force CMake for
Android only. This is fine as we already set up CMake toolchain for
Android.

Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.15.2 to
1.15.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/aws/aws-lc-rs/releases">aws-lc-rs's
releases</a>.</em></p>
<blockquote>
<h2>aws-lc-rs v1.15.3</h2>
<h2>What's Changed</h2>
<ul>
<li>🎉 CMake no longer required for any targets 🎉 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/911">aws/aws-lc-rs#911</a>
<ul>
<li>For non-FIPS builds on all platforms only a C compiler is
required!</li>
</ul>
</li>
<li>impl Send for Streaming Keys by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/977">aws/aws-lc-rs#977</a></li>
<li><code>less_safe_update</code> for Streaming ciphers by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/991">aws/aws-lc-rs#991</a></li>
<li>aws-lc-fips-sys v0.13.11 aligns with <a
href="https://github.com/aws/aws-lc/releases/tag/AWS-LC-FIPS-3.1.0">AWS-LC-FIPS-3.1.0</a>
by <a href="https://github.com/justsmth"><code>@​justsmth</code></a> in
<a
href="https://redirect.github.com/aws/aws-lc-rs/pull/994">aws/aws-lc-rs#994</a></li>
</ul>
<h3>Build Improvements</h3>
<ul>
<li>Add support for i686-win7-windows target by <a
href="https://github.com/cstkingkey"><code>@​cstkingkey</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/988">aws/aws-lc-rs#988</a></li>
<li>Support mips &amp; rustc_codegen_cranelift compiler backend by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/986">aws/aws-lc-rs#986</a></li>
<li>Fix path formatting for build flags in cc_builder by <a
href="https://github.com/roobscoob"><code>@​roobscoob</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/989">aws/aws-lc-rs#989</a></li>
<li><code>disable-prebuilt-nasm</code> feature by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/997">aws/aws-lc-rs#997</a></li>
</ul>
<h3>Issues Being Closed</h3>
<ul>
<li>Disabling pre-built nasm binaries through feature flags
(aws-lc-rs/disable-prebuilt-nasm) -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/996">#996</a></li>
<li>StreamingDecryptingKey and StreamingEncryptingKey need useless extra
block in output -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/990">#990</a></li>
<li>build failure when targeting mips64el-unknown-linux-gnuabi64 or
i686-win7-windows-msvc -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/982">#982</a></li>
<li>build failure when targeting x86_64-pc-windows-msvc -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/981">#981</a></li>
<li>aws-lc-sys on ppc64le: undefined reference to
aws_lc_0_35_0_aes_hw_encrypt -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/980">#980</a></li>
<li>Can't send StreamingDecryptingKey between threads -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/975">#975</a></li>
<li>Remove cmake dependency for Windows -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/828">#828</a></li>
<li>Building aws-lc-sys under MSVC is brittle -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/780">#780</a></li>
<li>MSBUILD error MSB1009 install.vcxproj does not exist (but
INSTALL.vcxproj does) -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/772">#772</a></li>
<li>Other libraries that rely on AWS LC SYS do not compile properly in a
Windows environment -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/771">#771</a></li>
<li>Support aws-lc-sys on x86_64-unknown-freebsd without cmake -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/766">#766</a></li>
<li>Unable to build w/ rustc_codegen_cranelift compiler backend - <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/537">#537</a></li>
<li>No mips-unknown-linux-musl support -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/522">#522</a></li>
</ul>
<h2>Other Merged PRs</h2>
<ul>
<li>Update toml_edit requirement from 0.23.0 to 0.24.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/976">aws/aws-lc-rs#976</a></li>
<li>Some CI jobs only run on pull-requests by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/970">aws/aws-lc-rs#970</a></li>
<li>More robust rustls integ test by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/973">aws/aws-lc-rs#973</a></li>
<li>Simplify build - no more rust_wrapper lib by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/978">aws/aws-lc-rs#978</a></li>
<li>PR feedback + cleanup -- run-rustls-integration.sh by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/979">aws/aws-lc-rs#979</a></li>
<li>Prepare aws-lc-sys v0.36.0 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/992">aws/aws-lc-rs#992</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/cstkingkey"><code>@​cstkingkey</code></a> made
their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/988">aws/aws-lc-rs#988</a></li>
<li><a href="https://github.com/roobscoob"><code>@​roobscoob</code></a>
made their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/989">aws/aws-lc-rs#989</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.2...v1.15.3">https://github.com/aws/aws-lc-rs/compare/v1.15.2...v1.15.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="efaf569ec6"><code>efaf569</code></a>
Prepare aws-lc-rs v1.15.3 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/998">#998</a>)</li>
<li><a
href="4c475059eb"><code>4c47505</code></a>
disable-prebuilt-nasm feature (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/997">#997</a>)</li>
<li><a
href="8aef7a7ef2"><code>8aef7a7</code></a>
<code>less_safe_update</code> for Streaming ciphers (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/991">#991</a>)</li>
<li><a
href="d4c164669f"><code>d4c1646</code></a>
Prepare aws-lc-fips-sys v0.13.11 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/994">#994</a>)</li>
<li><a
href="9bd808d3bf"><code>9bd808d</code></a>
Prepare aws-lc-sys v0.36.0 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/992">#992</a>)</li>
<li><a
href="63f2243e35"><code>63f2243</code></a>
Fix path formatting for build flags in cc_builder (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/989">#989</a>)</li>
<li><a
href="607fa7d1f8"><code>607fa7d</code></a>
Support mips &amp; rustc_codegen_cranelift compiler backend (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/986">#986</a>)</li>
<li><a
href="dbb7d2e77d"><code>dbb7d2e</code></a>
Eliminate CMake Requirement (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/911">#911</a>)</li>
<li><a
href="1cec9de4bf"><code>1cec9de</code></a>
Add support for i686-win7-windows target (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/988">#988</a>)</li>
<li><a
href="e0aa4187a8"><code>e0aa418</code></a>
PR feedback + cleanup -- run-rustls-integration.sh (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/979">#979</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.2...v1.15.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=cargo&previous-version=1.15.2&new-version=1.15.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-15 02:15:57 +00:00
Martin Robinson
cdd3f50b98 mach: Parse URL arguments to update-wpt from sys.argv (#41851)
Instead of relying on the contents of the already-parsed arguments,
which may have tried to convert URL arguments to paths, parse URLs from
their original place in `sys.argv`. This is a workaround to the fact
that we extend the internal WPT update command to accept URLs of GitHub
Actions. This is a custom Servo extension that has no equivalent to
the WPT upstream command.

Testing: There aren't really tests for this level of the Servo command
line tools.
Fixes: #41728

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-13 01:54:10 +00:00
Martin Robinson
d666e8655c mach: Remove limits on the number of Rayon threads (#41854)
This limit was introduced for another CI system in 2017 and it seems
that tests run just fine without it, so I think we can just remove this.
In addition, this has caused problems for some developers locally [^1].

We now also have preferences to limit the maximum number of
threads in the thread pool (and have a default set, that prevents
spawning too many threads on machine with many cores).

[^1]: [#general > Browser not responding when running WPT
tests](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Browser.20not.20responding.20when.20running.20WPT.20tests/with/567475990)

Try run: https://github.com/servo/servo/actions/runs/20914348749

Testing: This doesn't seem to harm WPT tests on CI, so that's the test.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-12 13:21:29 +00:00
Mukilan Thiyagarajan
688691609e mach: Upgrade cargo-deny and report unknown errors in test-tidy (#41853)
The versions of `cargo-deny` older than 0.18.6 have a bug which causes
the executions of `cargo-deny check` to prematurely fail when reading
the advisory db
(https://github.com/EmbarkStudios/cargo-deny/issues/804).

This error is ignored by `test-tidy` since the error message doesn't
have the expected JSON fields, causing `test-tidy` to succeed even when
there are valid issues in `deny.toml` or `Cargo.lock`.

So upgrade the `cargo-deny` version installed by `mach` to be the latest
version and ensure that at least the version with the fix is installed
on the system. Also fix the `test-tidy` code to always fail when the
exit code from `cargo-deny` is non-zero.

This patch also updates `deny.toml` to include exceptions to allow
`./mach test-tidy` to pass. Some of these need to be investigated
separately from this change.

Fixes #41845.
Fixes #38945.

Testing: Tested locally on NixOS.

---------

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-01-12 11:43:28 +00:00
Jonathan Schwender
be58b215d7 mach: Fix link to building section of the book in python/servo/platform/linux.py (#41772)
The book was changed, so we need to update the link to the new location.

Testing: Only changes comment. Reviewers can review by following the new
link.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-08 15:14:51 +00:00