Files
servo/Cargo.toml
Jonathan Schwender c40180d000 release test: Add publish script for crates.io (#44005)
This is a PR to test the changes from #43972. Publishing happens on a
protected branch, so we need to merge the changes to the protected
branch (crates-io-release-testing) first, in order to test that the
script here works.

-------------

Add a no dependencies python script (besides cargo metadata), to work
around current limitations of `cargo publish --workspace` (which can't
resume publishing after an error). We could also use 3rd party solutions
like cargo workspaces or cargo release, but that would require auditing
their source code, and hence writing a small self-contained script for
our use seems preferable. Hopefully `cargo publish --workspace` will
become more useful in the future, allowing us to eliminate the script
again.

Testing: This will be tested after merging to the feature branch.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-08 05:29:35 +00:00

402 lines
17 KiB
TOML

[workspace]
resolver = "2"
members = [
"components/media/examples",
"components/xpath",
"ports/servoshell",
"tests/unit/*",
]
default-members = ["ports/servoshell"]
exclude = [".cargo", "support/crown"]
[workspace.package]
version = "0.1.0-rc2"
authors = ["The Servo Project Developers"]
repository = "https://github.com/servo/servo"
# A generic description for packages that don't have a meaningful description yet.
description = "A component of the servo web-engine."
license = "MPL-2.0"
edition = "2024"
publish = true
# We have yet to decide on a policy for updating the minimum supported Rust version.
# Before increasing this, please open a discussion on Zulip explaining the reason
# why we should consider increasing our minimum supported Rust version.
# Please also note, that the **default** Rust version in rust-toolchain.toml may be
# bumped freely.
# Skip 1.90 which causes mis-compilation: https://github.com/rust-lang/rust/issues/147265
rust-version = "1.86.0"
[workspace.dependencies]
accesskit = { version = "0.24.0", features = ["serde"] }
accountable-refcell = "0.2.2"
aes = "0.8.4"
aes-gcm = "0.10.3"
aes-kw = { version = "0.2.1", features = ["alloc"] }
app_units = "0.7"
arboard = "3"
argon2 = { version = "0.5", features = ["alloc"] }
arrayvec = "0.7"
async-tungstenite = { version = "0.34", features = ["tokio-rustls-webpki-roots"] }
atomic_refcell = "0.1.13"
aws-lc-rs = { version = "1.16", default-features = false, features = ["aws-lc-sys"] }
backtrace = "0.3"
base64 = "0.22.1"
base64ct = { version = "1.8", features = ["alloc"] }
bitflags = "2.11"
brotli = "8.0.2"
bytemuck = "1"
byteorder = "1.5"
cbc = "0.1.2"
cfg-if = "1.0.4"
chacha20poly1305 = "0.10"
chardetng = "0.1"
chrono = { version = "0.4", features = ["serde"] }
cipher = { version = "0.4.4", features = ["alloc"] }
content-security-policy = { version = "0.8.0", features = ["serde"] }
cookie = { package = "cookie", version = "0.18" }
crossbeam-channel = "0.5"
cssparser = { version = "0.36", features = ["serde"] }
ctr = "0.9.2"
data-url = "0.3"
der = { version = "0.7", features = ["alloc", "derive"] }
digest = "0.10"
dpi = "0.1"
dwrote = "0.11.5"
ecdsa = "0.16"
elliptic-curve = "0.13"
encoding_rs = { version = "0.8", features = ["serde"] }
env_logger = "0.11"
euclid = "0.22"
flate2 = "1.1"
freetype-sys = "0.20"
futures = { version = "0.3", default-features = false }
futures-core = { version = "0.3", default-features = false }
futures-util = { version = "0.3", default-features = false }
gleam = "0.15"
glib = "0.22"
glib-sys = "0.22"
glow = "0.16.0"
gstreamer = { version = "0.25", features = ["v1_18"] }
gstreamer-app = "0.25"
gstreamer-audio = "0.25"
gstreamer-base = "0.25"
gstreamer-gl = "0.25"
gstreamer-gl-egl = "0.25"
gstreamer-gl-sys = "0.25"
gstreamer-gl-wayland = "0.25"
gstreamer-gl-x11 = "0.25"
gstreamer-play = "0.25"
gstreamer-sdp = "0.25"
gstreamer-sys = "0.25"
gstreamer-video = "0.25"
gstreamer-webrtc = { version = "0.25", features = ["v1_18"] }
harfbuzz-sys = "0.6.1"
headers = "0.4"
hitrace = { version = "0.1.6", features = ["api-19", "tracing-rs"] }
hkdf = "0.12"
html5ever = "0.39"
http = "1.4"
http-body-util = "0.1"
hyper = "1.8"
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "tls12", "webpki-tokio"] }
hyper-util = { version = "0.1", features = ["client-legacy", "http2", "tokio", "client-proxy"] }
icu_locid = "1.5.0"
icu_properties = "1.5.0"
icu_segmenter = "1.5.0"
image = { version = "0.25", default-features = false, features = ["avif", "rayon", "bmp", "gif", "ico", "jpeg", "png", "webp"] }
imsz = "0.4"
indexmap = { version = "2.11.4", features = ["std"] }
inventory = { version = "0.3.24" }
ipc-channel = "0.21"
itertools = "0.14"
js = { package = "mozjs", version = "=0.15.7", default-features = false, features = ["libz-sys", "intl"] }
keyboard-types = { version = "0.8.3", features = ["serde", "webdriver"] }
kurbo = { version = "0.12", features = ["euclid"] }
libc = "0.2"
log = "0.4.29"
mach2 = "0.6"
malloc_size_of_derive = "0.1"
markup5ever = "0.39"
memmap2 = "0.9.10"
mime = "0.3.13"
mime-multipart-hyper1 = "0.10.0"
mime_guess = "2.0.5"
ml-dsa = "0.0.4"
ml-kem = { version = "0.2", features = ["deterministic"] }
mozangle = "0.5.5"
nix = "0.30"
nom = "8.0.0"
nom-rfc8288 = "0.4.0"
num-bigint-dig = "0.8"
num-derive = "0.4.2"
num-traits = "0.2"
num_cpus = "1.17.0"
objc2 = "0.6.4"
objc2-core-foundation = "0.3.2"
objc2-core-graphics = "0.3.2"
objc2-core-text = "0.3.2"
ocb3 = "0.1.0"
openxr = "0.20"
p256 = { version = "0.13", features = ["ecdh"] }
p384 = { version = "0.13", features = ["ecdh"] }
p521 = { version = "0.13", features = ["ecdh"] }
parking_lot = { version = "0.12", features = ["serde"] }
peniko = "0.5"
percent-encoding = "2.3"
pkcs8 = { version = "0.10", features = ["rand_core"] }
postcard = { version = "1.1.3", default-features = false, features = ["use-std"] }
proc-macro2 = "1"
quote = "1"
rand = "0.9"
raw-window-handle = "0.6"
rayon = "1"
read-fonts = "0.35.0"
regex = "1.12"
resvg = "0.45.0"
rsa = { version = "0.9.10", features = ["sha1", "sha2"] }
rustc-hash = "2.1.2"
rustls = { version = "0.23", default-features = false, features = ["logging", "std", "tls12"] }
rustls-pki-types = "1.14"
rustls-platform-verifier = "0.6.2"
sea-query = { version = "1.0.0-rc.31", default-features = false, features = ["backend-sqlite", "derive"] }
sea-query-rusqlite = { version = "0.8.0-rc.15" }
sec1 = "0.7"
selectors = "0.36.1"
serde = "1.0.228"
serde_bytes = "0.11"
serde_core = "1.0.226"
serde_json = "1.0"
servo_arc = "0.4.3"
sha1 = "0.10"
sha2 = "0.10"
sha3 = "0.10"
skrifa = "0.37.0"
smallvec = { version = "1.15", features = ["serde", "union"] }
string_cache = "0.9"
strum = { version = "0.28", features = ["derive"] }
stylo = "0.15.0"
stylo_atoms = "0.15.0"
stylo_dom = "0.15.0"
stylo_malloc_size_of = "0.15.0"
stylo_static_prefs = "0.15.0"
stylo_traits = "0.15.0"
surfman = { version = "0.11.0", features = ["chains"] }
syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] }
synstructure = "0.13"
taffy = { version = "0.10", default-features = false, features = ["calc", "detailed_layout_info", "grid", "std"] }
tendril = { version = "0.5", features = ["encoding_rs"] }
tikv-jemalloc-sys = "0.6.1"
tikv-jemallocator = "0.6.1"
time = { package = "time", version = "0.3", features = ["large-dates", "local-offset", "serde"] }
tokio = "1"
tokio-rustls = { version = "0.26", default-features = false, features = ["logging"] }
tokio-stream = "0.1"
tokio-util = { version = "0.7.18", default-features = false }
tower = { version = "0.5", default-features = false, features = ["util"] }
tracing = "0.1.44"
tracing-perfetto = "0.1.5"
tracing-subscriber = "0.3.23"
tungstenite = "0.29"
unicode-bidi = "0.3.18"
unicode_categories = "0.1.1"
unicode-properties = { version = "0.1.4", features = ["emoji"] }
unicode-script = "0.5"
unicode-segmentation = "1.13.2"
url = "2.5"
urlpattern = "0.3"
utf-8 = "0.7"
uuid = { version = "1.23.0", features = ["v4", "v5"] }
vello = "0.6"
vello_cpu = "0.0.4"
webdriver = "0.53.0"
webpki-roots = "1.0"
webrender = { version = "0.68", features = ["capture"] }
webrender_api = "0.68"
wgpu-core = "26"
wgpu-types = "26"
winapi = "0.3"
windows-sys = "0.61"
winit = "0.30.13"
wio = "0.2"
wr_malloc_size_of = "0.2.2"
x25519-dalek = { version = "2.0.1", features = ["static_secrets"] }
xi-unicode = "0.3.0"
xml5ever = "0.39"
############################################################################################
## Workspace-local dependencies
############################################################################################
# All local path dependencies in the servo workspace, that use the workspace version, should
# be listed here, between the `Begin` and `End` comments, so that we can easily find and
# update the version requirements when bumping the workspace version.
# Begin workspace-version dependencies - Don't change this comment, we grep for it in scripts!
deny_public_fields = { package = "servo-deny-public-fields", version = "0.1.0-rc2", path = "components/deny_public_fields" }
devtools = { package = "servo-devtools", version = "0.1.0-rc2", path = "components/devtools" }
devtools_traits = { package = "servo-devtools-traits", version = "0.1.0-rc2", path = "components/shared/devtools" }
dom_struct = { package = "servo-dom-struct", version = "0.1.0-rc2", path = "components/dom_struct" }
embedder_traits = { package = "servo-embedder-traits", version = "0.1.0-rc2", path = "components/shared/embedder" }
fonts = { package = "servo-fonts", version = "0.1.0-rc2", path = "components/fonts" }
fonts_traits = { package = "servo-fonts-traits", version = "0.1.0-rc2", path = "components/shared/fonts" }
hyper_serde = { package = "servo-hyper-serde", version = "0.1.0-rc2", path = "components/hyper_serde" }
jstraceable_derive = { package = "servo-jstraceable-derive", version = "0.1.0-rc2", path = "components/jstraceable_derive" }
layout = { package = "servo-layout", version = "0.1.0-rc2", path = "components/layout" }
layout_api = { package = "servo-layout-api", version = "0.1.0-rc2", path = "components/shared/layout" }
malloc_size_of = { package = "servo-malloc-size-of", version = "0.1.0-rc2", path = "components/malloc_size_of" }
media = { package = "servo-media-thread", version = "0.1.0-rc2", path = "components/media/media-thread" }
metrics = { package = "servo-metrics", version = "0.1.0-rc2", path = "components/metrics" }
net = { package = "servo-net", version = "0.1.0-rc2", path = "components/net" }
net_traits = { package = "servo-net-traits", version = "0.1.0-rc2", path = "components/shared/net" }
paint = { package = "servo-paint", version = "0.1.0-rc2", path = "components/paint" }
paint_api = { package = "servo-paint-api", version = "0.1.0-rc2", path = "components/shared/paint" }
pixels = { package = "servo-pixels", version = "0.1.0-rc2", path = "components/pixels" }
profile = { package = "servo-profile", version = "0.1.0-rc2", path = "components/profile" }
profile_traits = { package = "servo-profile-traits", version = "0.1.0-rc2", path = "components/shared/profile" }
script = { package = "servo-script", version = "0.1.0-rc2", path = "components/script" }
script_bindings = { package = "servo-script-bindings", version = "0.1.0-rc2", path = "components/script_bindings" }
script_traits = { package = "servo-script-traits", version = "0.1.0-rc2", path = "components/shared/script" }
servo = { version = "0.1.0-rc2", path = "components/servo", default-features = false }
servo-allocator = { version = "0.1.0-rc2", path = "components/allocator" }
servo-background-hang-monitor = { version = "0.1.0-rc2", path = "components/background_hang_monitor" }
servo-background-hang-monitor-api = { version = "0.1.0-rc2", path = "components/shared/background_hang_monitor" }
servo-base = { version = "0.1.0-rc2", path = "components/shared/base" }
servo-bluetooth = { version = "0.1.0-rc2", path = "components/bluetooth" }
servo-bluetooth-traits = { version = "0.1.0-rc2", path = "components/shared/bluetooth" }
servo-canvas = { version = "0.1.0-rc2", path = "components/canvas" }
servo-canvas-traits = { version = "0.1.0-rc2", path = "components/shared/canvas" }
servo-config = { version = "0.1.0-rc2", path = "components/config" }
servo-config-macro = { version = "0.1.0-rc2", path = "components/config/macro" }
servo-constellation = { version = "0.1.0-rc2", path = "components/constellation" }
servo-constellation-traits = { version = "0.1.0-rc2", path = "components/shared/constellation" }
servo-default-resources = { version = "0.1.0-rc2", path = "components/default-resources" }
servo-geometry = { version = "0.1.0-rc2", path = "components/geometry" }
servo-media = { version = "0.1.0-rc2", path = "components/media/servo-media" }
servo-media-audio = { version = "0.1.0-rc2", path = "components/media/audio" }
servo-media-auto = { version = "0.1.0-rc2", path = "components/media/backends/auto" }
servo-media-derive = { version = "0.1.0-rc2", path = "components/media/servo-media-derive" }
servo-media-dummy = { version = "0.1.0-rc2", path = "components/media/backends/dummy" }
servo-media-gstreamer = { version = "0.1.0-rc2", path = "components/media/backends/gstreamer" }
servo-media-gstreamer-render = { version = "0.1.0-rc2", path = "components/media/backends/gstreamer/render" }
servo-media-gstreamer-render-android = { version = "0.1.0-rc2", path = "components/media/backends/gstreamer/render-android" }
servo-media-gstreamer-render-unix = { version = "0.1.0-rc2", path = "components/media/backends/gstreamer/render-unix" }
servo-media-player = { version = "0.1.0-rc2", path = "components/media/player" }
servo-media-streams = { version = "0.1.0-rc2", path = "components/media/streams" }
servo-media-traits = { version = "0.1.0-rc2", path = "components/media/traits" }
servo-media-webrtc = { version = "0.1.0-rc2", path = "components/media/webrtc" }
servo-tracing = { version = "0.1.0-rc2", path = "components/servo_tracing" }
servo-url = { version = "0.1.0-rc2", path = "components/url" }
storage = { package = "servo-storage", version = "0.1.0-rc2", path = "components/storage" }
storage_traits = { package = "servo-storage-traits", version = "0.1.0-rc2", path = "components/shared/storage" }
timers = { package = "servo-timers", version = "0.1.0-rc2", path = "components/timers" }
webdriver_server = { package = "servo-webdriver-server", version = "0.1.0-rc2", path = "components/webdriver_server" }
webgl = { package = "servo-webgl", version = "0.1.0-rc2", path = "components/webgl", default-features = false }
webgpu = { package = "servo-webgpu", version = "0.1.0-rc2", path = "components/webgpu" }
webgpu_traits = { package = "servo-webgpu-traits", version = "0.1.0-rc2", path = "components/shared/webgpu" }
webxr = { package = "servo-webxr", version = "0.1.0-rc2", path = "components/webxr" }
webxr-api = { package = "servo-webxr-api", version = "0.1.0-rc2", path = "components/shared/webxr" }
xpath = { package = "servo-xpath", version = "0.1.0-rc2", path = "components/xpath" }
# End workspace-version dependencies - Don't change this comment, we grep for it in scripts!
# RSA key generation could be very slow without compilation
# optimizations, in development mode. Without optimizations, WPT might
# consider RSA key generation tests fail due to timeout.
# Building with higher optimization levels can speed up the key
# generation process to avoid false negative result in those tests.
# More details: <https://docs.rs/rsa/0.9.8/rsa/index.html#example>
[profile.dev.package.num-bigint-dig]
opt-level = 3
# Force tikv-jemalloc-sys to build with at least -O1.
# This can help with build environments that force _FORTIFY_SOURCE, such as Nix.
# More details: <https://github.com/tikv/jemallocator/issues/108>
[profile.dev.package.tikv-jemalloc-sys]
opt-level = 1
[profile.release]
opt-level = 3
debug-assertions = true
# Disk-space is limited in CI, so we disabled features that are not needed for code coverage.
# Locally using the default `dev` profile is perfectly fine.
[profile.coverage]
inherits = "dev"
incremental = false
debug = false
# A profile between `dev` and `release` which aims to offer a compromise between
# fast incremental rebuilds and runtime speed.
[profile.medium]
inherits = "release"
opt-level = 2
incremental = true
debug = "line-tables-only"
[profile.production]
inherits = "release"
debug-assertions = false
lto = true
codegen-units = 1
opt-level = "s"
[profile.production-stripped]
inherits = "production"
strip = true
[profile.profiling]
inherits = "release"
debug-assertions = false
debug = true
lto = "thin"
codegen-units = 1
[patch.crates-io]
# If you need to temporarily test Servo with a local fork of some upstream
# crate, add that here. Use the form:
#
# <crate> = { path = "/path/to/local/checkout" }
#
# For html5ever:
#
# html5ever = { path = "../html5ever/html5ever" }
# markup5ever = { path = "../html5ever/markup5ever" }
# web_atoms = { path = "../html5ever/web_atoms" }
# xml5ever = { path = "../html5ever/xml5ever" }
# tendril = { path = "../html5ever/tendril" }
# For WebRender:
#
# webrender = { path = "../webrender/webrender" }
# webrender_api = { path = "../webrender/webrender_api" }
# wr_malloc_size_of = { path = "../webrender/wr_malloc_size_of" }
#
# Or for mozjs:
#
# mozjs = { path = "../mozjs/mozjs" }
# mozjs_sys = { path = "../mozjs/mozjs-sys" }
#
# Or for CSP crate:
# content-security-policy = { path = "../rust-content-security-policy" }
#
# Pending egui bumping their accesskit version: https://github.com/emilk/egui/pull/7850
# This is only used in servoshell.
# TODO: When these are no longer needed remove the exception in deny.toml as well.
egui = { git = "https://github.com/emilk/egui.git", rev = "5d8f393335e051785b4fd3af9ef92eda5b61177f" }
egui-winit = { git = "https://github.com/emilk/egui.git", rev = "5d8f393335e051785b4fd3af9ef92eda5b61177f" }
#
# Or for Stylo:
#
# [patch."https://github.com/servo/stylo"]
# selectors = { path = "../stylo/selectors" }
# servo_arc = { path = "../stylo/servo_arc" }
# stylo = { path = "../stylo/style" }
# stylo_atoms = { path = "../stylo/stylo_atoms" }
# stylo_dom = { path = "../stylo/stylo_dom" }
# stylo_malloc_size_of = { path = "../stylo/malloc_size_of" }
# stylo_static_prefs = { path = "../stylo/stylo_static_prefs" }
# stylo_traits = { path = "../stylo/style_traits" }
#
# Or for another Git dependency:
#
# [patch."https://github.com/servo/<repository>"]
# <crate> = { path = "/path/to/local/checkout" }
#