From 3d1d909c85529f95bd073d3475646fc1b4768d15 Mon Sep 17 00:00:00 2001 From: rgdevment Date: Sun, 4 Oct 2026 19:59:58 -0300 Subject: [PATCH 1/4] docs: the commercial licence covers our code, not Slint's or the MPL's COMMERCIAL.md no longer offers relief from licence notices, which belong to the components and travel with every copy. A new section says how Slint is taken under its Royalty-free licence in a closed product, what that licence leaves out, and what the MPL-2.0 crates ask. The store paragraph says the project is a licensee of Slint like anyone else. The README thanks Slint and Tauri, with the #MadeWithSlint badge. --- COMMERCIAL.md | 36 ++++++++++++++++++++++++++++++++++-- README.md | 13 +++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/COMMERCIAL.md b/COMMERCIAL.md index f15e108..b0a7782 100644 --- a/COMMERCIAL.md +++ b/COMMERCIAL.md @@ -32,7 +32,7 @@ licence: it does not. Internal use is not distribution. - Ship LinkUnbound, or code derived from it, inside a **product you distribute to others**, without licensing that product under the GPL. - Redistribute it under **your own brand** without the GPL's source disclosure - and licence-notice requirements. + requirements. - Bundle it with hardware or preinstall it on machines you sell. - Satisfy a policy or contract that **forbids copyleft** dependencies in what you ship. @@ -48,17 +48,49 @@ fine, carry on". license your own product under the GPL. - Written permission you can hand to your legal or procurement team. +It covers LinkUnbound's own code and nothing else. The components it is built +on keep their own licences, and the notices those licences ask for still go +with every copy: see [Third-party components](#third-party-components). + Terms, scope, and price are agreed per case rather than published, because a single-seat integration and an OEM redistribution are not the same deal. Contact with what you want to do and the scale of it. +## Third-party components + +LinkUnbound is built on work it does not own, and no licence from this project +can relicense it. Everything that ships inside the binaries is listed, with its +version and licence, in [THIRD-PARTY-BUNDLED.md](THIRD-PARTY-BUNDLED.md). Most +of it is MIT, Apache-2.0, BSD or ISC: free to redistribute inside a closed +product, as long as its notices travel with it. Two need a closer look. + +**Slint** draws the picker. SixtyFPS GmbH offers it under the GPL-3.0, under +the Slint Royalty-free Desktop, Mobile, and Web Applications License 2.0, or +under a paid commercial licence. A product that takes LinkUnbound under a +commercial licence uses Slint under the Royalty-free licence: no charge, on +condition that the product shows Slint's `AboutSlint` widget in its About +screen, or the +[#MadeWithSlint badge](https://github.com/slint-ui/slint/tree/master/logo) on +the public page its binaries are downloaded from. That licence does not cover +embedded systems, nor a product that exposes Slint's API to its own users; +those need Slint's commercial licence, bought from SixtyFPS, not from this +project. + +**MPL-2.0** covers a few crates in the build (`cssparser`, `cssparser-macros`, `selectors`, +`dtoa-short`, `option-ext`). The MPL is copyleft per file: the source of those +files, and of any change made to them, stays available under the MPL, and the +rest of the product is untouched. LinkUnbound ships them unmodified. + ## Store distribution The GPL's section 10 forbids imposing further restrictions on recipients, which conflicts with the terms of some application stores — Apple's App Store being the well-known case. That conflict binds **licensees**, not the copyright holder: a third party cannot publish LinkUnbound there, and the -project itself can, under separate terms it grants to itself. +project itself can, under separate terms it grants to itself. It holds that +right over its own code only. For Slint the project is a licensee like anyone +else, so a build for such a store has to take Slint under its Royalty-free +licence instead of the GPL, with the attribution that licence asks for. In practice today: macOS builds are distributed as a signed and notarised DMG under the GPL, and the Microsoft Store build is unaffected, since Microsoft's diff --git a/README.md b/README.md index 6a98c18..8499bd5 100644 --- a/README.md +++ b/README.md @@ -350,6 +350,19 @@ I built LinkUnbound because I was tired of my OS not letting me choose which bro --- +## Acknowledgements + +The picker is drawn with [Slint](https://slint.dev), and the settings window runs on [Tauri](https://tauri.app). + + + + + Made with Slint + + + +--- + ## Project health

From b7ba8588d0eaec781b79a512ce907c2cdd58e91c Mon Sep 17 00:00:00 2001 From: rgdevment Date: Sun, 4 Oct 2026 20:11:57 -0300 Subject: [PATCH 2/4] fix: the notices list what the binaries link, not what the build runs cargo metadata counted build scripts, tests, proc-macros and features no build turns on, so THIRD-PARTY-BUNDLED.md named 541 crates and the About window carried notices for code that never ships. cargo tree with normal edges and no proc-macros resolves features the way the build does: 338 crates, Skia, wgpu and the Slint compiler gone. Of the MPL-2.0 crates only option-ext ships, and COMMERCIAL.md now names just that one. --- COMMERCIAL.md | 8 +- THIRD-PARTY-BUNDLED.md | 257 +++++----------------------------------- scripts/third-party.mjs | 24 +++- 3 files changed, 49 insertions(+), 240 deletions(-) diff --git a/COMMERCIAL.md b/COMMERCIAL.md index b0a7782..aa1c62a 100644 --- a/COMMERCIAL.md +++ b/COMMERCIAL.md @@ -76,10 +76,10 @@ embedded systems, nor a product that exposes Slint's API to its own users; those need Slint's commercial licence, bought from SixtyFPS, not from this project. -**MPL-2.0** covers a few crates in the build (`cssparser`, `cssparser-macros`, `selectors`, -`dtoa-short`, `option-ext`). The MPL is copyleft per file: the source of those -files, and of any change made to them, stays available under the MPL, and the -rest of the product is untouched. LinkUnbound ships them unmodified. +**MPL-2.0** covers one crate in the binaries, `option-ext`, which Tauri +reaches through `dirs`. The MPL is copyleft per file: the source of that crate, +and of any change made to it, stays available under the MPL, and the rest of +the product is untouched. LinkUnbound ships it unmodified. ## Store distribution diff --git a/THIRD-PARTY-BUNDLED.md b/THIRD-PARTY-BUNDLED.md index 398b31b..7b768d4 100644 --- a/THIRD-PARTY-BUNDLED.md +++ b/THIRD-PARTY-BUNDLED.md @@ -22,7 +22,7 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `scheduler` | 0.28.0 | MIT | | `uc.micro` | 3.0.0 | MIT | -## In the core (541 crates) +## In the core (338 crates) | Crate | Version | Licence | | --- | --- | --- | @@ -31,103 +31,49 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `alloc-no-stdlib` | 2.0.4 | BSD-3-Clause | | `alloc-stdlib` | 0.2.4 | BSD-3-Clause | | `allocator-api2` | 0.2.21 | MIT OR Apache-2.0 | -| `annotate-snippets` | 0.12.16 | MIT OR Apache-2.0 | -| `anstyle` | 1.0.14 | MIT OR Apache-2.0 | | `anyhow` | 1.0.104 | MIT OR Apache-2.0 | | `arboard` | 3.6.1 | MIT OR Apache-2.0 | | `arrayref` | 0.3.9 | BSD-2-Clause | | `arrayvec` | 0.7.8 | MIT OR Apache-2.0 | -| `ash` | 0.38.0+1.3.281 | MIT OR Apache-2.0 | | `atomic-waker` | 1.1.2 | Apache-2.0 OR MIT | -| `autocfg` | 1.5.1 | Apache-2.0 OR MIT | -| `base64` | 0.22.1 | MIT OR Apache-2.0 | -| `bincode` | 2.0.1 | MIT | -| `bindgen` | 0.72.1 | BSD-3-Clause | -| `bit-set` | 0.8.0 | Apache-2.0 OR MIT | -| `bit-vec` | 0.8.0 | Apache-2.0 OR MIT | -| `bitflags` | 1.3.2 | MIT/Apache-2.0 | -| `block-buffer` | 0.10.4 | MIT OR Apache-2.0 | -| `block2` | 0.5.1 | MIT | -| `borsh` | 1.8.1 | MIT OR Apache-2.0 | +| `base64` | 0.23.1 | MIT OR Apache-2.0 | +| `bitflags` | 2.13.2 | MIT OR Apache-2.0 | +| `block2` | 0.6.2 | MIT | | `brotli` | 8.0.4 | BSD-3-Clause AND MIT | | `brotli-decompressor` | 5.0.3 | BSD-3-Clause/MIT | -| `bs58` | 0.5.1 | MIT/Apache-2.0 | -| `by_address` | 1.2.1 | MIT OR Apache-2.0 | | `bytemuck` | 1.25.2 | Zlib OR Apache-2.0 OR MIT | -| `bytemuck_derive` | 1.12.1 | Zlib OR Apache-2.0 OR MIT | | `byteorder` | 1.5.0 | Unlicense OR MIT | | `byteorder-lite` | 0.1.0 | Unlicense OR MIT | | `bytes` | 1.12.1 | MIT | -| `camino` | 1.2.6 | MIT OR Apache-2.0 | -| `cargo_metadata` | 0.19.2 | MIT | -| `cargo_toml` | 0.22.3 | Apache-2.0 OR MIT | -| `cargo-platform` | 0.1.9 | MIT OR Apache-2.0 | -| `cc` | 1.4.7 | MIT OR Apache-2.0 | -| `cexpr` | 0.6.0 | Apache-2.0/MIT | | `cfb` | 0.7.3 | MIT | -| `cfg_aliases` | 0.2.2 | MIT | | `cfg-if` | 1.0.5 | MIT OR Apache-2.0 | -| `cgl` | 0.3.2 | MIT / Apache-2.0 | -| `chacha20` | 0.10.2 | MIT OR Apache-2.0 | | `chrono` | 0.4.45 | MIT OR Apache-2.0 | -| `clang-sys` | 1.9.1 | Apache-2.0 | | `clipboard-win` | 5.4.1 | BSL-1.0 | | `clru` | 0.6.3 | MIT | -| `codespan-reporting` | 0.13.1 | Apache-2.0 | | `color_quant` | 1.1.0 | MIT | | `const-field-offset` | 0.2.1 | MIT OR Apache-2.0 | -| `const-field-offset-macro` | 0.2.1 | MIT OR Apache-2.0 | -| `convert_case` | 0.10.0 | MIT | | `cookie` | 0.18.2 | MIT OR Apache-2.0 | | `core_detect` | 1.0.0 | MIT/Apache-2.0 | | `core-foundation` | 0.9.4 | MIT OR Apache-2.0 | | `core-foundation-sys` | 0.8.7 | MIT OR Apache-2.0 | | `core-graphics` | 0.23.2 | MIT OR Apache-2.0 | | `core-graphics-types` | 0.1.3 | MIT OR Apache-2.0 | -| `countme` | 3.0.1 | MIT OR Apache-2.0 | -| `cpufeatures` | 0.2.17 | MIT OR Apache-2.0 | | `crc32fast` | 1.5.2 | MIT OR Apache-2.0 | | `critical-section` | 1.2.0 | MIT OR Apache-2.0 | | `crossbeam-channel` | 0.5.17 | MIT OR Apache-2.0 | -| `crossbeam-deque` | 0.8.8 | MIT OR Apache-2.0 | -| `crossbeam-epoch` | 0.9.21 | MIT OR Apache-2.0 | | `crossbeam-utils` | 0.8.23 | MIT OR Apache-2.0 | -| `crypto-common` | 0.1.7 | MIT OR Apache-2.0 | -| `cssparser` | 0.36.0 | MPL-2.0 | -| `cssparser-macros` | 0.6.1 | MPL-2.0 | | `ctor` | 0.8.0 | Apache-2.0 OR MIT | -| `ctor-proc-macro` | 0.0.7 | Apache-2.0 OR MIT | | `cursor-icon` | 1.2.0 | MIT OR Apache-2.0 OR Zlib | -| `darling` | 0.24.1 | MIT | -| `darling_core` | 0.24.1 | MIT | -| `darling_macro` | 0.24.1 | MIT | | `data-url` | 0.3.2 | MIT OR Apache-2.0 | -| `defmt` | 1.1.1 | MIT OR Apache-2.0 | -| `defmt-macros` | 1.1.1 | MIT OR Apache-2.0 | -| `defmt-parser` | 1.0.0 | MIT OR Apache-2.0 | | `deranged` | 0.5.8 | MIT OR Apache-2.0 | | `derive_more` | 2.1.1 | MIT | -| `derive_more-impl` | 2.1.1 | MIT | -| `digest` | 0.10.7 | MIT OR Apache-2.0 | | `dirs` | 6.0.0 | MIT OR Apache-2.0 | | `dirs-sys` | 0.5.0 | MIT OR Apache-2.0 | | `dispatch` | 0.2.0 | MIT | | `dispatch2` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | -| `displaydoc` | 0.2.7 | MIT OR Apache-2.0 | -| `doctest-file` | 1.1.1 | 0BSD | -| `document-features` | 0.2.12 | MIT OR Apache-2.0 | -| `dom_query` | 0.27.0 | MIT | | `dpi` | 0.1.2 | Apache-2.0 AND MIT | -| `dtoa` | 1.0.11 | MIT OR Apache-2.0 | -| `dtoa-short` | 0.3.5 | MPL-2.0 | -| `dtor` | 0.3.0 | Apache-2.0 OR MIT | -| `dtor-proc-macro` | 0.0.6 | Apache-2.0 OR MIT | | `dunce` | 1.0.5 | CC0-1.0 OR MIT-0 OR Apache-2.0 | -| `dyn-clone` | 1.0.20 | MIT OR Apache-2.0 | -| `either` | 1.18.0 | MIT OR Apache-2.0 | | `embed_plist` | 1.2.2 | MIT OR Apache-2.0 | -| `embed-manifest` | 1.5.1 | MIT | -| `embed-resource` | 3.0.11 | MIT | | `encoding_rs` | 0.8.41 | (Apache-2.0 OR MIT) AND BSD-3-Clause | | `equivalent` | 1.0.2 | Apache-2.0 OR MIT | | `erased-serde` | 0.4.10 | MIT OR Apache-2.0 | @@ -138,7 +84,6 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `fdeflate` | 0.3.7 | MIT OR Apache-2.0 | | `field-offset` | 0.3.6 | MIT OR Apache-2.0 | | `filetime` | 0.2.29 | MIT/Apache-2.0 | -| `find-msvc-tools` | 0.1.13 | MIT OR Apache-2.0 | | `fixed_decimal` | 0.7.2 | Unicode-3.0 | | `flate2` | 1.1.10 | MIT OR Apache-2.0 | | `float-cmp` | 0.9.0 | MIT | @@ -148,36 +93,22 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `fontdb` | 0.24.0 | MIT | | `fontique` | 0.11.1 | Apache-2.0 OR MIT | | `foreign-types` | 0.5.0 | MIT/Apache-2.0 | -| `foreign-types-macros` | 0.2.4 | MIT/Apache-2.0 | | `foreign-types-shared` | 0.3.1 | MIT/Apache-2.0 | | `form_urlencoded` | 1.2.2 | MIT OR Apache-2.0 | | `futures-channel` | 0.3.34 | MIT OR Apache-2.0 | | `futures-core` | 0.3.34 | MIT OR Apache-2.0 | | `futures-io` | 0.3.34 | MIT OR Apache-2.0 | -| `futures-macro` | 0.3.34 | MIT OR Apache-2.0 | | `futures-sink` | 0.3.34 | MIT OR Apache-2.0 | | `futures-task` | 0.3.34 | MIT OR Apache-2.0 | | `futures-util` | 0.3.34 | MIT OR Apache-2.0 | -| `generic-array` | 0.14.7 | MIT | | `getrandom` | 0.2.17 | MIT OR Apache-2.0 | | `gif` | 0.14.2 | MIT OR Apache-2.0 | -| `gl_generator` | 0.14.0 | Apache-2.0 | | `glob` | 0.3.4 | MIT OR Apache-2.0 | | `global-hotkey` | 0.8.0 | Apache-2.0 OR MIT | -| `glow` | 0.18.0 | MIT OR Apache-2.0 OR Zlib | -| `glutin` | 0.32.3 | Apache-2.0 | -| `glutin_egl_sys` | 0.7.1 | Apache-2.0 | -| `glutin_wgl_sys` | 0.6.1 | Apache-2.0 | -| `glutin-winit` | 0.5.0 | MIT | -| `gpu-allocator` | 0.28.0 | MIT OR Apache-2.0 | -| `grid` | 1.0.1 | MIT | | `h2` | 0.4.19 | MIT | -| `half` | 2.7.1 | MIT OR Apache-2.0 | | `harfrust` | 0.12.0 | MIT | -| `hashbrown` | 0.12.3 | MIT OR Apache-2.0 | +| `hashbrown` | 0.17.1 | MIT OR Apache-2.0 | | `heck` | 0.5.0 | MIT OR Apache-2.0 | -| `hex` | 0.4.3 | MIT OR Apache-2.0 | -| `html5ever` | 0.38.0 | MIT OR Apache-2.0 | | `htmlparser` | 0.2.1 | MIT OR Apache-2.0 | | `http` | 1.5.0 | MIT OR Apache-2.0 | | `http-body` | 1.1.0 | MIT | @@ -187,16 +118,11 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `hyper-rustls` | 0.27.10 | Apache-2.0 OR ISC OR MIT | | `hyper-util` | 0.1.20 | MIT | | `i-slint-backend-selector` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | -| `i-slint-backend-testing` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `i-slint-backend-winit` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `i-slint-common` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | -| `i-slint-compiler` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `i-slint-core` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | -| `i-slint-core-macros` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | -| `i-slint-renderer-skia` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `i-slint-renderer-software` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `iana-time-zone` | 0.1.65 | MIT OR Apache-2.0 | -| `ico` | 0.5.0 | MIT | | `icu_collections` | 2.3.0 | Unicode-3.0 | | `icu_decimal` | 2.3.0 | Unicode-3.0 | | `icu_decimal_data` | 2.3.0 | Unicode-3.0 | @@ -205,97 +131,66 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `icu_locale_fallback_data` | 2.3.0 | Unicode-3.0 | | `icu_normalizer` | 2.3.0 | Unicode-3.0 | | `icu_normalizer_data` | 2.3.0 | Unicode-3.0 | -| `icu_plurals` | 2.3.0 | Unicode-3.0 | -| `icu_plurals_data` | 2.3.0 | Unicode-3.0 | | `icu_properties` | 2.3.0 | Unicode-3.0 | | `icu_properties_data` | 2.3.0 | Unicode-3.0 | | `icu_provider` | 2.3.1 | Unicode-3.0 | | `icu_segmenter` | 2.3.0 | Unicode-3.0 | | `icu_segmenter_data` | 2.3.0 | Unicode-3.0 | -| `ident_case` | 1.0.1 | MIT/Apache-2.0 | | `idna` | 1.1.0 | MIT OR Apache-2.0 | | `idna_adapter` | 1.2.2 | Apache-2.0 OR MIT | | `image` | 0.25.10 | MIT OR Apache-2.0 | | `image-webp` | 0.2.4 | MIT OR Apache-2.0 | | `imagesize` | 0.15.0 | MIT | | `imgref` | 1.12.3 | CC0-1.0 OR Apache-2.0 | -| `indexmap` | 1.9.3 | Apache-2.0 OR MIT | +| `indexmap` | 2.14.2 | Apache-2.0 OR MIT | | `infer` | 0.19.0 | MIT | | `interprocess` | 2.4.4 | 0BSD OR Apache-2.0 | | `ipnet` | 2.12.2 | MIT OR Apache-2.0 | -| `itertools` | 0.13.0 | MIT OR Apache-2.0 | | `itoa` | 1.0.18 | MIT OR Apache-2.0 | -| `jiff` | 0.2.37 | Unlicense OR MIT | -| `jiff-core` | 0.1.1 | Unlicense OR MIT | -| `jiff-tzdb` | 0.1.8 | Unlicense OR MIT | -| `jiff-tzdb-platform` | 0.1.3 | Unlicense OR MIT | -| `jobserver` | 0.1.35 | MIT OR Apache-2.0 | | `json-patch` | 3.0.1 | MIT/Apache-2.0 | | `jsonptr` | 0.6.3 | MIT OR Apache-2.0 | | `keyboard-types` | 0.7.0 | MIT OR Apache-2.0 | -| `khronos_api` | 3.1.0 | Apache-2.0 | | `kurbo` | 0.13.1 | Apache-2.0 OR MIT | -| `lazy_static` | 1.5.0 | MIT OR Apache-2.0 | | `libc` | 0.2.189 | MIT OR Apache-2.0 | -| `libloading` | 0.8.9 | ISC | | `libm` | 0.2.16 | MIT | | `linebender_resource_handle` | 0.1.1 | Apache-2.0 OR MIT | | `litemap` | 0.8.3 | Unicode-3.0 | -| `litrs` | 1.0.0 | MIT OR Apache-2.0 | | `lock_api` | 0.4.14 | MIT OR Apache-2.0 | | `log` | 0.4.34 | MIT OR Apache-2.0 | -| `lru-slab` | 0.1.3 | MIT OR Apache-2.0 OR Zlib | | `lyon_algorithms` | 1.0.21 | MIT OR Apache-2.0 | | `lyon_extra` | 1.1.0 | MIT OR Apache-2.0 | | `lyon_geom` | 1.0.19 | MIT OR Apache-2.0 | | `lyon_path` | 1.0.19 | MIT OR Apache-2.0 | -| `markup5ever` | 0.38.0 | MIT OR Apache-2.0 | | `memchr` | 2.8.3 | Unlicense OR MIT | | `memmap2` | 0.9.11 | MIT OR Apache-2.0 | | `memoffset` | 0.9.1 | MIT | | `mime` | 0.3.17 | MIT OR Apache-2.0 | -| `minimal-lexical` | 0.2.1 | MIT/Apache-2.0 | | `minisign-verify` | 0.2.5 | MIT | -| `miniz_oxide` | 0.8.9 | MIT OR Zlib OR Apache-2.0 | +| `miniz_oxide` | 0.9.1 | MIT OR Zlib OR Apache-2.0 | | `mio` | 1.2.3 | MIT | | `moxcms` | 0.8.1 | BSD-3-Clause OR Apache-2.0 | | `muda` | 0.19.3 | Apache-2.0 OR MIT | | `multiversion` | 0.9.0 | MIT OR Apache-2.0 | -| `multiversion_no_op` | 1.0.0 | Apache-2.0 OR MIT | -| `multiversion-macros` | 0.9.0 | MIT OR Apache-2.0 | -| `naga` | 30.0.1 | MIT OR Apache-2.0 | -| `naga-types` | 30.0.1 | MIT OR Apache-2.0 | -| `natord` | 1.0.9 | MIT | -| `new_debug_unreachable` | 1.0.6 | MIT | -| `nom` | 7.1.3 | MIT | -| `num_enum` | 0.7.6 | BSD-3-Clause OR MIT OR Apache-2.0 | -| `num_enum_derive` | 0.7.6 | BSD-3-Clause OR MIT OR Apache-2.0 | | `num-conv` | 0.2.2 | MIT OR Apache-2.0 | | `num-traits` | 0.2.19 | MIT OR Apache-2.0 | | `objc-sys` | 0.3.5 | MIT | -| `objc2` | 0.5.2 | MIT | -| `objc2-app-kit` | 0.2.2 | MIT | -| `objc2-core-data` | 0.2.2 | MIT | +| `objc2` | 0.6.4 | MIT | +| `objc2-app-kit` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-core-foundation` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-core-graphics` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | -| `objc2-core-image` | 0.2.2 | MIT | | `objc2-core-services` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-core-text` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-encode` | 4.1.0 | MIT | | `objc2-exception-helper` | 0.1.1 | Zlib OR Apache-2.0 OR MIT | -| `objc2-foundation` | 0.2.2 | MIT | -| `objc2-io-surface` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | -| `objc2-metal` | 0.2.2 | MIT | +| `objc2-foundation` | 0.3.2 | MIT | | `objc2-osa-kit` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | -| `objc2-quartz-core` | 0.2.2 | MIT | -| `objc2-security` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | +| `objc2-quartz-core` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-service-management` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-uniform-type-identifiers` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-web-kit` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `once_cell` | 1.21.4 | MIT OR Apache-2.0 | | `open` | 5.4.4 | MIT | | `option-ext` | 0.2.0 | MPL-2.0 | -| `ordered-float` | 5.5.0 | MIT | | `osakit` | 0.3.1 | MIT OR Apache-2.0 | | `parking_lot` | 0.12.5 | MIT OR Apache-2.0 | | `parking_lot_core` | 0.9.12 | MIT OR Apache-2.0 | @@ -304,133 +199,75 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `parley_data` | 0.11.1 | Apache-2.0 OR MIT | | `percent-encoding` | 2.3.2 | MIT OR Apache-2.0 | | `phf` | 0.13.1 | MIT | -| `phf_codegen` | 0.13.1 | MIT | -| `phf_generator` | 0.13.1 | MIT | -| `phf_macros` | 0.13.1 | MIT | | `phf_shared` | 0.13.1 | MIT | | `pico-args` | 0.5.0 | MIT | | `pin-project` | 1.1.13 | Apache-2.0 OR MIT | -| `pin-project-internal` | 1.1.13 | Apache-2.0 OR MIT | | `pin-project-lite` | 0.2.17 | Apache-2.0 OR MIT | -| `pin-utils` | 0.1.0 | MIT OR Apache-2.0 | | `pin-weak` | 1.1.0 | MIT | -| `pkg-config` | 0.3.34 | MIT OR Apache-2.0 | | `plist` | 1.10.1 | MIT | -| `png` | 0.17.16 | MIT OR Apache-2.0 | +| `png` | 0.18.1 | MIT OR Apache-2.0 | | `polycool` | 0.4.0 | MIT OR Apache-2.0 | | `portable-atomic` | 1.15.0 | Apache-2.0 OR MIT | | `potential_utf` | 0.1.6 | Unicode-3.0 | | `powerfmt` | 0.2.0 | MIT OR Apache-2.0 | -| `precomputed-hash` | 0.1.1 | MIT | -| `presser` | 0.3.1 | MIT OR Apache-2.0 | -| `prettyplease` | 0.2.37 | MIT OR Apache-2.0 | -| `proc-macro-crate` | 3.5.0 | MIT OR Apache-2.0 | -| `proc-macro2` | 1.0.107 | MIT OR Apache-2.0 | -| `profiling` | 1.0.18 | MIT OR Apache-2.0 | | `psl` | 2.1.238 | MIT/Apache-2.0 | | `psl-types` | 2.0.11 | MIT/Apache-2.0 | | `pulldown-cmark` | 0.13.4 | MIT | | `pxfm` | 0.1.30 | BSD-3-Clause OR Apache-2.0 | | `quick-error` | 2.0.1 | MIT/Apache-2.0 | | `quick-xml` | 0.42.0 | MIT | -| `quinn` | 0.11.12 | MIT OR Apache-2.0 | -| `quinn-proto` | 0.11.18 | MIT OR Apache-2.0 | -| `quinn-udp` | 0.5.15 | MIT OR Apache-2.0 | -| `quote` | 1.0.47 | MIT OR Apache-2.0 | -| `rand` | 0.10.3 | MIT OR Apache-2.0 | -| `rand_core` | 0.10.1 | MIT OR Apache-2.0 | -| `rand_pcg` | 0.10.2 | MIT OR Apache-2.0 | -| `range-alloc` | 0.1.5 | MIT OR Apache-2.0 | | `raw-window-handle` | 0.6.2 | MIT OR Apache-2.0 OR Zlib | -| `raw-window-metal` | 1.1.0 | MIT OR Apache-2.0 | -| `rayon` | 1.12.0 | MIT OR Apache-2.0 | -| `rayon-core` | 1.13.0 | MIT OR Apache-2.0 | | `read-fonts` | 0.41.0 | MIT OR Apache-2.0 | | `recvmsg` | 1.0.0 | 0BSD | -| `ref-cast` | 1.0.27 | MIT OR Apache-2.0 | -| `ref-cast-impl` | 1.0.27 | MIT OR Apache-2.0 | | `regex` | 1.13.1 | MIT OR Apache-2.0 | | `regex-automata` | 0.4.18 | MIT OR Apache-2.0 | | `regex-syntax` | 0.8.11 | MIT OR Apache-2.0 | -| `renderdoc-sys` | 1.1.0 | MIT OR Apache-2.0 | | `reqwest` | 0.12.28 | MIT OR Apache-2.0 | | `resvg` | 0.48.1 | Apache-2.0 OR MIT | | `rgb` | 0.8.53 | MIT | | `ring` | 0.17.14 | Apache-2.0 AND ISC | -| `rowan` | 0.17.0 | MIT OR Apache-2.0 | | `roxmltree` | 0.21.1 | MIT OR Apache-2.0 | -| `rspolib` | 0.1.2 | MIT | -| `rustc_version` | 0.4.1 | MIT OR Apache-2.0 | -| `rustc-hash` | 1.1.0 | Apache-2.0/MIT | | `rustix` | 1.1.5 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | | `rustls` | 0.23.45 | Apache-2.0 OR ISC OR MIT | | `rustls-native-certs` | 0.8.4 | Apache-2.0 OR ISC OR MIT | | `rustls-pki-types` | 1.15.1 | MIT OR Apache-2.0 | | `rustls-platform-verifier` | 0.7.0 | MIT OR Apache-2.0 | | `rustls-webpki` | 0.103.15 | ISC | -| `rustversion` | 1.0.23 | MIT OR Apache-2.0 | | `ryu` | 1.0.23 | Apache-2.0 OR BSL-1.0 | | `same-file` | 1.0.6 | Unlicense/MIT | | `schannel` | 0.1.29 | MIT | -| `schemars` | 0.8.22 | MIT | -| `schemars_derive` | 0.8.22 | MIT | | `scoped-tls-hkt` | 0.1.5 | MIT/Apache-2.0 | | `scopeguard` | 1.2.0 | MIT OR Apache-2.0 | | `security-framework` | 3.7.0 | MIT OR Apache-2.0 | | `security-framework-sys` | 2.17.0 | MIT OR Apache-2.0 | -| `selectors` | 0.36.1 | MPL-2.0 | | `semver` | 1.0.28 | MIT OR Apache-2.0 | | `serde` | 1.0.229 | MIT OR Apache-2.0 | | `serde_core` | 1.0.229 | MIT OR Apache-2.0 | -| `serde_derive` | 1.0.229 | MIT OR Apache-2.0 | -| `serde_derive_internals` | 0.29.1 | MIT OR Apache-2.0 | | `serde_json` | 1.0.151 | MIT OR Apache-2.0 | -| `serde_repr` | 0.1.21 | MIT OR Apache-2.0 | | `serde_spanned` | 1.1.1 | MIT OR Apache-2.0 | | `serde_urlencoded` | 0.7.1 | MIT/Apache-2.0 | | `serde_with` | 3.23.0 | MIT OR Apache-2.0 | -| `serde_with_macros` | 3.23.0 | MIT OR Apache-2.0 | | `serde-untagged` | 0.1.9 | MIT OR Apache-2.0 | | `serialize-to-javascript` | 0.1.2 | MIT OR Apache-2.0 | -| `serialize-to-javascript-impl` | 0.1.2 | MIT OR Apache-2.0 | -| `servo_arc` | 0.4.3 | MIT OR Apache-2.0 | -| `sha2` | 0.10.9 | MIT OR Apache-2.0 | -| `shlex` | 1.3.0 | MIT OR Apache-2.0 | | `simd-adler32` | 0.3.10 | MIT | | `simdutf8` | 0.1.5 | MIT OR Apache-2.0 | | `simplecss` | 0.2.2 | Apache-2.0 OR MIT | | `siphasher` | 1.0.3 | MIT/Apache-2.0 | -| `skia-bindings` | 0.153.3 | MIT | -| `skia-safe` | 0.153.3 | MIT | | `skrifa` | 0.44.0 | MIT OR Apache-2.0 | | `slab` | 0.4.12 | MIT | | `slint` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | -| `slint-build` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | -| `slint-macros` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `slotmap` | 1.1.1 | Zlib | | `smallvec` | 1.16.1 | MIT OR Apache-2.0 | | `smol_str` | 0.2.2 | MIT OR Apache-2.0 | -| `snafu` | 0.8.9 | MIT OR Apache-2.0 | -| `snafu-derive` | 0.8.9 | MIT OR Apache-2.0 | | `socket2` | 0.6.5 | MIT OR Apache-2.0 | | `softbuffer` | 0.4.8 | MIT OR Apache-2.0 | -| `spin_on` | 0.1.1 | Apache-2.0 OR MIT | -| `spirv` | 0.4.0+sdk-1.4.341.0 | Apache-2.0 | | `stable_deref_trait` | 1.2.1 | MIT OR Apache-2.0 | -| `static_assertions` | 1.1.0 | MIT OR Apache-2.0 | | `strict-num` | 0.1.1 | MIT | -| `string_cache` | 0.9.0 | MIT OR Apache-2.0 | -| `string_cache_codegen` | 0.6.1 | MIT OR Apache-2.0 | -| `strsim` | 0.11.1 | MIT | | `strum` | 0.28.0 | MIT | -| `strum_macros` | 0.28.0 | MIT | | `subtle` | 2.6.1 | BSD-3-Clause | | `svgtypes` | 0.16.1 | Apache-2.0 OR MIT | | `swash` | 0.2.10 | Apache-2.0 OR MIT | -| `swift-rs` | 1.0.8 | MIT OR Apache-2.0 | -| `syn` | 2.0.119 | MIT OR Apache-2.0 | | `sync_wrapper` | 1.0.2 | Apache-2.0 | -| `synstructure` | 0.14.0 | MIT | | `sys-locale` | 0.3.2 | MIT OR Apache-2.0 | | `system-configuration` | 0.7.0 | MIT OR Apache-2.0 | | `system-configuration-sys` | 0.6.0 | MIT OR Apache-2.0 | @@ -438,25 +275,16 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `tao` | 0.35.3 | Apache-2.0 | | `tar` | 0.4.46 | MIT OR Apache-2.0 | | `tauri` | 2.11.6 | Apache-2.0 OR MIT | -| `tauri-build` | 2.6.3 | Apache-2.0 OR MIT | -| `tauri-codegen` | 2.6.3 | Apache-2.0 OR MIT | -| `tauri-macros` | 2.6.3 | Apache-2.0 OR MIT | -| `tauri-plugin` | 2.6.3 | Apache-2.0 OR MIT | | `tauri-plugin-opener` | 2.5.5 | Apache-2.0 OR MIT | | `tauri-plugin-single-instance` | 2.4.5 | Apache-2.0 OR MIT | | `tauri-plugin-updater` | 2.12.0 | Apache-2.0 OR MIT | | `tauri-runtime` | 2.11.3 | Apache-2.0 OR MIT | | `tauri-runtime-wry` | 2.11.4 | Apache-2.0 OR MIT | | `tauri-utils` | 2.9.3 | Apache-2.0 OR MIT | -| `tauri-winres` | 0.3.6 | MIT | | `tempfile` | 3.27.0 | MIT OR Apache-2.0 | -| `tendril` | 0.5.1 | MIT OR Apache-2.0 | -| `text-size` | 1.1.1 | MIT OR Apache-2.0 | -| `thiserror` | 1.0.69 | MIT OR Apache-2.0 | -| `thiserror-impl` | 1.0.69 | MIT OR Apache-2.0 | +| `thiserror` | 2.0.21 | MIT OR Apache-2.0 | | `time` | 0.3.55 | MIT OR Apache-2.0 | | `time-core` | 0.1.9 | MIT OR Apache-2.0 | -| `time-macros` | 0.2.32 | MIT OR Apache-2.0 | | `tiny-skia` | 0.12.0 | BSD-3-Clause | | `tiny-skia-path` | 0.12.0 | BSD-3-Clause | | `tinystr` | 0.8.4 | Unicode-3.0 | @@ -464,9 +292,8 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `tokio` | 1.53.1 | MIT | | `tokio-rustls` | 0.26.5 | MIT OR Apache-2.0 | | `tokio-util` | 0.7.19 | MIT | -| `toml` | 0.9.12+spec-1.1.0 | MIT OR Apache-2.0 | -| `toml_datetime` | 0.7.5+spec-1.1.0 | MIT OR Apache-2.0 | -| `toml_edit` | 0.25.15+spec-1.1.0 | MIT OR Apache-2.0 | +| `toml` | 1.1.6+spec-1.1.0 | MIT OR Apache-2.0 | +| `toml_datetime` | 1.1.1+spec-1.1.0 | MIT OR Apache-2.0 | | `toml_parser` | 1.1.3+spec-1.1.0 | MIT OR Apache-2.0 | | `toml_writer` | 1.1.2+spec-1.1.0 | MIT OR Apache-2.0 | | `tower` | 0.5.3 | MIT | @@ -474,13 +301,10 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `tower-layer` | 0.3.3 | MIT | | `tower-service` | 0.3.3 | MIT | | `tracing` | 0.1.44 | MIT | -| `tracing-attributes` | 0.1.31 | MIT | | `tracing-core` | 0.1.36 | MIT | | `tray-icon` | 0.24.2 | MIT OR Apache-2.0 | | `try-lock` | 0.2.5 | MIT | -| `typed-index-collections` | 3.5.0 | MIT OR Apache-2.0 | | `typeid` | 1.0.3 | MIT OR Apache-2.0 | -| `typenum` | 1.20.1 | MIT OR Apache-2.0 | | `unic-char-property` | 0.9.0 | MIT/Apache-2.0 | | `unic-char-range` | 0.9.0 | MIT/Apache-2.0 | | `unic-common` | 0.9.0 | MIT/Apache-2.0 | @@ -488,82 +312,55 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `unic-ucd-version` | 0.9.0 | MIT/Apache-2.0 | | `unicase` | 2.9.0 | MIT OR Apache-2.0 | | `unicode-bidi` | 0.3.18 | MIT OR Apache-2.0 | -| `unicode-ident` | 1.0.26 | (MIT OR Apache-2.0) AND Unicode-3.0 | | `unicode-linebreak` | 0.1.5 | Apache-2.0 | | `unicode-script` | 0.5.8 | MIT OR Apache-2.0 | | `unicode-segmentation` | 1.13.3 | MIT OR Apache-2.0 | | `unicode-vo` | 0.1.0 | MIT/Apache-2.0 | -| `unicode-width` | 0.2.2 | MIT OR Apache-2.0 | -| `unicode-xid` | 0.2.6 | MIT OR Apache-2.0 | | `untrusted` | 0.9.0 | ISC | -| `unty` | 0.0.4 | MIT OR Apache-2.0 | | `url` | 2.5.8 | MIT OR Apache-2.0 | | `urlpattern` | 0.3.0 | MIT | | `usvg` | 0.48.1 | Apache-2.0 OR MIT | | `utf8_iter` | 1.0.4 | Apache-2.0 OR MIT | | `uuid` | 1.26.1 | Apache-2.0 OR MIT | -| `version_check` | 0.9.5 | MIT/Apache-2.0 | -| `vswhom` | 0.1.0 | MIT | -| `vswhom-sys` | 0.1.3 | MIT | | `vtable` | 0.5.0 | MIT OR Apache-2.0 | -| `vtable-macro` | 0.5.0 | MIT OR Apache-2.0 | | `walkdir` | 2.5.0 | Unlicense/MIT | | `want` | 0.3.1 | MIT | -| `web_atoms` | 0.2.6 | MIT OR Apache-2.0 | | `webbrowser` | 1.2.4 | MIT OR Apache-2.0 | | `webview2-com` | 0.38.2 | MIT | -| `webview2-com-macros` | 0.8.1 | MIT | | `webview2-com-sys` | 0.38.2 | MIT | | `weezl` | 0.1.12 | MIT OR Apache-2.0 | -| `wgpu` | 30.0.1 | MIT OR Apache-2.0 | -| `wgpu-core` | 30.0.1 | MIT OR Apache-2.0 | -| `wgpu-core-deps-apple` | 30.0.1 | MIT OR Apache-2.0 | -| `wgpu-core-deps-windows-linux-android` | 30.0.1 | MIT OR Apache-2.0 | -| `wgpu-hal` | 30.0.1 | MIT OR Apache-2.0 | -| `wgpu-naga-bridge` | 30.0.1 | MIT OR Apache-2.0 | -| `wgpu-types` | 30.0.1 | MIT OR Apache-2.0 | | `widestring` | 1.2.1 | MIT OR Apache-2.0 | | `winapi-util` | 0.1.11 | Unlicense OR MIT | | `window-vibrancy` | 0.6.0 | Apache-2.0 OR MIT | -| `windows` | 0.61.3 | MIT OR Apache-2.0 | +| `windows` | 0.62.2 | MIT OR Apache-2.0 | | `windows_x86_64_msvc` | 0.52.6 | MIT OR Apache-2.0 | -| `windows-collections` | 0.2.0 | MIT OR Apache-2.0 | -| `windows-core` | 0.61.2 | MIT OR Apache-2.0 | -| `windows-future` | 0.2.1 | MIT OR Apache-2.0 | -| `windows-implement` | 0.60.2 | MIT OR Apache-2.0 | -| `windows-interface` | 0.59.3 | MIT OR Apache-2.0 | -| `windows-link` | 0.1.3 | MIT OR Apache-2.0 | -| `windows-numerics` | 0.2.0 | MIT OR Apache-2.0 | +| `windows-collections` | 0.3.2 | MIT OR Apache-2.0 | +| `windows-core` | 0.62.2 | MIT OR Apache-2.0 | +| `windows-future` | 0.3.2 | MIT OR Apache-2.0 | +| `windows-link` | 0.2.1 | MIT OR Apache-2.0 | +| `windows-numerics` | 0.3.1 | MIT OR Apache-2.0 | | `windows-registry` | 0.6.1 | MIT OR Apache-2.0 | -| `windows-result` | 0.3.4 | MIT OR Apache-2.0 | -| `windows-strings` | 0.4.2 | MIT OR Apache-2.0 | -| `windows-sys` | 0.52.0 | MIT OR Apache-2.0 | +| `windows-result` | 0.4.1 | MIT OR Apache-2.0 | +| `windows-strings` | 0.5.1 | MIT OR Apache-2.0 | +| `windows-sys` | 0.59.0 | MIT OR Apache-2.0 | | `windows-targets` | 0.52.6 | MIT OR Apache-2.0 | -| `windows-threading` | 0.1.0 | MIT OR Apache-2.0 | +| `windows-threading` | 0.2.1 | MIT OR Apache-2.0 | | `windows-version` | 0.1.7 | MIT OR Apache-2.0 | | `winit` | 0.30.13 | Apache-2.0 | -| `winnow` | 0.7.15 | MIT | -| `winreg` | 0.55.0 | MIT | -| `write-fonts` | 0.50.0 | MIT OR Apache-2.0 | +| `winnow` | 1.0.4 | MIT | +| `winreg` | 0.56.0 | MIT | | `writeable` | 0.6.4 | Unicode-3.0 | | `wry` | 0.55.1 | Apache-2.0 OR MIT | | `xattr` | 1.6.1 | MIT OR Apache-2.0 | -| `xml-rs` | 0.8.29 | MIT | | `xmlwriter` | 0.1.0 | MIT | | `yazi` | 0.2.1 | Apache-2.0 OR MIT | | `yoke` | 0.8.3 | Unicode-3.0 | -| `yoke-derive` | 0.8.4 | Unicode-3.0 | | `zeno` | 0.3.3 | Apache-2.0 OR MIT | -| `zerocopy` | 0.8.57 | BSD-2-Clause OR Apache-2.0 OR MIT | -| `zerocopy-derive` | 0.8.57 | BSD-2-Clause OR Apache-2.0 OR MIT | | `zerofrom` | 0.1.8 | Unicode-3.0 | -| `zerofrom-derive` | 0.1.8 | Unicode-3.0 | | `zeroize` | 1.9.0 | Apache-2.0 OR MIT | | `zerotrie` | 0.2.5 | Unicode-3.0 | | `zerovec` | 0.11.8 | Unicode-3.0 | -| `zerovec-derive` | 0.11.6 | Unicode-3.0 | | `zip` | 4.6.1 | MIT | -| `zlib-rs` | 0.6.8 | Zlib | | `zmij` | 1.0.23 | MIT | | `zune-core` | 0.5.3 | MIT OR Apache-2.0 OR Zlib | | `zune-jpeg` | 0.5.15 | MIT OR Apache-2.0 OR Zlib | diff --git a/scripts/third-party.mjs b/scripts/third-party.mjs index 838b8b8..da6684b 100644 --- a/scripts/third-party.mjs +++ b/scripts/third-party.mjs @@ -115,14 +115,26 @@ const crates = () => { for (const triple of SHIPPED) { const said = execFileSync( "cargo", - ["metadata", "--format-version", "1", "--filter-platform", triple], + [ + "tree", + "--workspace", + "--edges", + "normal,no-proc-macro", + "--target", + triple, + "--prefix", + "none", + "--format", + "{p}|{l}", + ], { cwd: root, encoding: "utf8", maxBuffer: 64 * 1024 * 1024 }, ); - const meta = JSON.parse(said); - const ours = new Set(meta.workspace_members); - for (const one of meta.packages) { - if (ours.has(one.id) || seen.has(one.name)) continue; - seen.set(one.name, { version: one.version, licence: one.license ?? "see the crate" }); + for (const line of said.split(/\r?\n/)) { + const one = /^(\S+) v(\S+)(?: \((.+?)\))?\|(.*?)(?: \(\*\))?$/.exec(line); + if (!one) continue; + const [, name, version, from, licence] = one; + if ((from && existsSync(from)) || seen.has(name)) continue; + seen.set(name, { version, licence: licence || "see the crate" }); } } return seen; From 9d650d85cd4e8c04e4d5419f35296b1fee81cba7 Mon Sep 17 00:00:00 2001 From: rgdevment Date: Sun, 4 Oct 2026 20:26:50 -0300 Subject: [PATCH 3/4] fix: every version of a crate gets its notice, and the PR that moves them is checked The generator kept one row per crate name, so a second version, such as the other windows-sys, objc2 or getrandom builds, went unlisted: 367 rows now, the same set cargo tree gives for the three shipped targets. cargo tree runs --locked, so generating the notices cannot rewrite Cargo.lock. The notices check ran only at night and by hand; it now also runs on a pull request that touches the generator, its output, a manifest or a lockfile. The README shows the #MadeWithSlint badge the Royalty-free licence names, on its white background, instead of a light and dark pair. --- .github/workflows/rules.yml | 27 ++++++++-- README.md | 5 +- THIRD-PARTY-BUNDLED.md | 105 +++++++++++++++++++++++------------- scripts/third-party.mjs | 8 +-- 4 files changed, 96 insertions(+), 49 deletions(-) diff --git a/.github/workflows/rules.yml b/.github/workflows/rules.yml index 94be2d4..8dfc798 100644 --- a/.github/workflows/rules.yml +++ b/.github/workflows/rules.yml @@ -99,22 +99,41 @@ jobs: cargo test -p linkunbound-core --quiet || exit 1 done - # The release refuses notices behind the lockfiles; this says so the morning after, not on the tag. + # The release refuses notices behind the lockfiles; this says so on the pull request that moves them, not on the tag. notices: name: The notices name what ships - if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' + if: github.event_name != 'push' runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: + fetch-depth: 0 persist-credentials: false - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - id: look + env: + BASE: ${{ github.event.pull_request.base.sha }} + run: | + if [ -z "$BASE" ]; then + echo "touched=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + watched='^(scripts/third-party\.mjs|THIRD-PARTY-BUNDLED\.md|Cargo\.(lock|toml)|.*/Cargo\.toml|app/package(-lock)?\.json|\.github/workflows/rules\.yml)$' + from=$(git merge-base "$BASE" HEAD) + if git diff --name-only --diff-filter=d "$from" HEAD | grep -qE "$watched"; then + echo "touched=true" >> "$GITHUB_OUTPUT" + else + echo "touched=false" >> "$GITHUB_OUTPUT" + fi + - if: steps.look.outputs.touched == 'true' + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22 package-manager-cache: false - - uses: ./.github/actions/toolchain + - if: steps.look.outputs.touched == 'true' + uses: ./.github/actions/toolchain - name: Regenerated, they match the copy on main + if: steps.look.outputs.touched == 'true' run: | (cd app && npm ci) npm run notices diff --git a/README.md b/README.md index 8499bd5..0cdcbb9 100644 --- a/README.md +++ b/README.md @@ -355,10 +355,7 @@ I built LinkUnbound because I was tired of my OS not letting me choose which bro The picker is drawn with [Slint](https://slint.dev), and the settings window runs on [Tauri](https://tauri.app). - - - Made with Slint - + Made with Slint --- diff --git a/THIRD-PARTY-BUNDLED.md b/THIRD-PARTY-BUNDLED.md index 7b768d4..3055272 100644 --- a/THIRD-PARTY-BUNDLED.md +++ b/THIRD-PARTY-BUNDLED.md @@ -22,7 +22,7 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `scheduler` | 0.28.0 | MIT | | `uc.micro` | 3.0.0 | MIT | -## In the core (338 crates) +## In the core (367 crates) | Crate | Version | Licence | | --- | --- | --- | @@ -36,14 +36,17 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `arrayref` | 0.3.9 | BSD-2-Clause | | `arrayvec` | 0.7.8 | MIT OR Apache-2.0 | | `atomic-waker` | 1.1.2 | Apache-2.0 OR MIT | +| `base64` | 0.22.1 | MIT OR Apache-2.0 | | `base64` | 0.23.1 | MIT OR Apache-2.0 | +| `bitflags` | 1.3.2 | MIT/Apache-2.0 | | `bitflags` | 2.13.2 | MIT OR Apache-2.0 | +| `block2` | 0.5.1 | MIT | | `block2` | 0.6.2 | MIT | -| `brotli` | 8.0.4 | BSD-3-Clause AND MIT | | `brotli-decompressor` | 5.0.3 | BSD-3-Clause/MIT | +| `brotli` | 8.0.4 | BSD-3-Clause AND MIT | | `bytemuck` | 1.25.2 | Zlib OR Apache-2.0 OR MIT | -| `byteorder` | 1.5.0 | Unlicense OR MIT | | `byteorder-lite` | 0.1.0 | Unlicense OR MIT | +| `byteorder` | 1.5.0 | Unlicense OR MIT | | `bytes` | 1.12.1 | MIT | | `cfb` | 0.7.3 | MIT | | `cfg-if` | 1.0.5 | MIT OR Apache-2.0 | @@ -54,10 +57,13 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `const-field-offset` | 0.2.1 | MIT OR Apache-2.0 | | `cookie` | 0.18.2 | MIT OR Apache-2.0 | | `core_detect` | 1.0.0 | MIT/Apache-2.0 | -| `core-foundation` | 0.9.4 | MIT OR Apache-2.0 | | `core-foundation-sys` | 0.8.7 | MIT OR Apache-2.0 | -| `core-graphics` | 0.23.2 | MIT OR Apache-2.0 | +| `core-foundation` | 0.10.1 | MIT OR Apache-2.0 | +| `core-foundation` | 0.9.4 | MIT OR Apache-2.0 | | `core-graphics-types` | 0.1.3 | MIT OR Apache-2.0 | +| `core-graphics-types` | 0.2.0 | MIT OR Apache-2.0 | +| `core-graphics` | 0.23.2 | MIT OR Apache-2.0 | +| `core-graphics` | 0.25.0 | MIT OR Apache-2.0 | | `crc32fast` | 1.5.2 | MIT OR Apache-2.0 | | `critical-section` | 1.2.0 | MIT OR Apache-2.0 | | `crossbeam-channel` | 0.5.17 | MIT OR Apache-2.0 | @@ -67,8 +73,8 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `data-url` | 0.3.2 | MIT OR Apache-2.0 | | `deranged` | 0.5.8 | MIT OR Apache-2.0 | | `derive_more` | 2.1.1 | MIT | -| `dirs` | 6.0.0 | MIT OR Apache-2.0 | | `dirs-sys` | 0.5.0 | MIT OR Apache-2.0 | +| `dirs` | 6.0.0 | MIT OR Apache-2.0 | | `dispatch` | 0.2.0 | MIT | | `dispatch2` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | | `dpi` | 0.1.2 | Apache-2.0 AND MIT | @@ -92,8 +98,8 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `font-types` | 0.12.5 | MIT OR Apache-2.0 | | `fontdb` | 0.24.0 | MIT | | `fontique` | 0.11.1 | Apache-2.0 OR MIT | -| `foreign-types` | 0.5.0 | MIT/Apache-2.0 | | `foreign-types-shared` | 0.3.1 | MIT/Apache-2.0 | +| `foreign-types` | 0.5.0 | MIT/Apache-2.0 | | `form_urlencoded` | 1.2.2 | MIT OR Apache-2.0 | | `futures-channel` | 0.3.34 | MIT OR Apache-2.0 | | `futures-core` | 0.3.34 | MIT OR Apache-2.0 | @@ -102,21 +108,24 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `futures-task` | 0.3.34 | MIT OR Apache-2.0 | | `futures-util` | 0.3.34 | MIT OR Apache-2.0 | | `getrandom` | 0.2.17 | MIT OR Apache-2.0 | +| `getrandom` | 0.3.4 | MIT OR Apache-2.0 | +| `getrandom` | 0.4.3 | MIT OR Apache-2.0 | | `gif` | 0.14.2 | MIT OR Apache-2.0 | | `glob` | 0.3.4 | MIT OR Apache-2.0 | | `global-hotkey` | 0.8.0 | Apache-2.0 OR MIT | | `h2` | 0.4.19 | MIT | | `harfrust` | 0.12.0 | MIT | +| `hashbrown` | 0.16.1 | MIT OR Apache-2.0 | | `hashbrown` | 0.17.1 | MIT OR Apache-2.0 | | `heck` | 0.5.0 | MIT OR Apache-2.0 | | `htmlparser` | 0.2.1 | MIT OR Apache-2.0 | -| `http` | 1.5.0 | MIT OR Apache-2.0 | -| `http-body` | 1.1.0 | MIT | | `http-body-util` | 0.1.5 | MIT | +| `http-body` | 1.1.0 | MIT | +| `http` | 1.5.0 | MIT OR Apache-2.0 | | `httparse` | 1.10.1 | MIT OR Apache-2.0 | -| `hyper` | 1.11.1 | MIT | | `hyper-rustls` | 0.27.10 | Apache-2.0 OR ISC OR MIT | | `hyper-util` | 0.1.20 | MIT | +| `hyper` | 1.11.1 | MIT | | `i-slint-backend-selector` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `i-slint-backend-winit` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `i-slint-common` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | @@ -124,22 +133,22 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `i-slint-renderer-software` | 1.18.1 | GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 | | `iana-time-zone` | 0.1.65 | MIT OR Apache-2.0 | | `icu_collections` | 2.3.0 | Unicode-3.0 | -| `icu_decimal` | 2.3.0 | Unicode-3.0 | | `icu_decimal_data` | 2.3.0 | Unicode-3.0 | +| `icu_decimal` | 2.3.0 | Unicode-3.0 | | `icu_locale_core` | 2.3.0 | Unicode-3.0 | -| `icu_locale_fallback` | 2.3.0 | Unicode-3.0 | | `icu_locale_fallback_data` | 2.3.0 | Unicode-3.0 | -| `icu_normalizer` | 2.3.0 | Unicode-3.0 | +| `icu_locale_fallback` | 2.3.0 | Unicode-3.0 | | `icu_normalizer_data` | 2.3.0 | Unicode-3.0 | -| `icu_properties` | 2.3.0 | Unicode-3.0 | +| `icu_normalizer` | 2.3.0 | Unicode-3.0 | | `icu_properties_data` | 2.3.0 | Unicode-3.0 | +| `icu_properties` | 2.3.0 | Unicode-3.0 | | `icu_provider` | 2.3.1 | Unicode-3.0 | -| `icu_segmenter` | 2.3.0 | Unicode-3.0 | | `icu_segmenter_data` | 2.3.0 | Unicode-3.0 | -| `idna` | 1.1.0 | MIT OR Apache-2.0 | +| `icu_segmenter` | 2.3.0 | Unicode-3.0 | | `idna_adapter` | 1.2.2 | Apache-2.0 OR MIT | -| `image` | 0.25.10 | MIT OR Apache-2.0 | +| `idna` | 1.1.0 | MIT OR Apache-2.0 | | `image-webp` | 0.2.4 | MIT OR Apache-2.0 | +| `image` | 0.25.10 | MIT OR Apache-2.0 | | `imagesize` | 0.15.0 | MIT | | `imgref` | 1.12.3 | CC0-1.0 OR Apache-2.0 | | `indexmap` | 2.14.2 | Apache-2.0 OR MIT | @@ -166,6 +175,7 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `memoffset` | 0.9.1 | MIT | | `mime` | 0.3.17 | MIT OR Apache-2.0 | | `minisign-verify` | 0.2.5 | MIT | +| `miniz_oxide` | 0.8.9 | MIT OR Zlib OR Apache-2.0 | | `miniz_oxide` | 0.9.1 | MIT OR Zlib OR Apache-2.0 | | `mio` | 1.2.3 | MIT | | `moxcms` | 0.8.1 | BSD-3-Clause OR Apache-2.0 | @@ -174,7 +184,7 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `num-conv` | 0.2.2 | MIT OR Apache-2.0 | | `num-traits` | 0.2.19 | MIT OR Apache-2.0 | | `objc-sys` | 0.3.5 | MIT | -| `objc2` | 0.6.4 | MIT | +| `objc2-app-kit` | 0.2.2 | MIT | | `objc2-app-kit` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-core-foundation` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-core-graphics` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | @@ -182,27 +192,30 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `objc2-core-text` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-encode` | 4.1.0 | MIT | | `objc2-exception-helper` | 0.1.1 | Zlib OR Apache-2.0 OR MIT | +| `objc2-foundation` | 0.2.2 | MIT | | `objc2-foundation` | 0.3.2 | MIT | | `objc2-osa-kit` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-quartz-core` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-service-management` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-uniform-type-identifiers` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | | `objc2-web-kit` | 0.3.2 | Zlib OR Apache-2.0 OR MIT | +| `objc2` | 0.5.2 | MIT | +| `objc2` | 0.6.4 | MIT | | `once_cell` | 1.21.4 | MIT OR Apache-2.0 | | `open` | 5.4.4 | MIT | | `option-ext` | 0.2.0 | MPL-2.0 | | `osakit` | 0.3.1 | MIT OR Apache-2.0 | -| `parking_lot` | 0.12.5 | MIT OR Apache-2.0 | | `parking_lot_core` | 0.9.12 | MIT OR Apache-2.0 | +| `parking_lot` | 0.12.5 | MIT OR Apache-2.0 | | `parlance` | 0.1.0 | Apache-2.0 OR MIT | -| `parley` | 0.11.1 | Apache-2.0 OR MIT | | `parley_data` | 0.11.1 | Apache-2.0 OR MIT | +| `parley` | 0.11.1 | Apache-2.0 OR MIT | | `percent-encoding` | 2.3.2 | MIT OR Apache-2.0 | -| `phf` | 0.13.1 | MIT | | `phf_shared` | 0.13.1 | MIT | +| `phf` | 0.13.1 | MIT | | `pico-args` | 0.5.0 | MIT | -| `pin-project` | 1.1.13 | Apache-2.0 OR MIT | | `pin-project-lite` | 0.2.17 | Apache-2.0 OR MIT | +| `pin-project` | 1.1.13 | Apache-2.0 OR MIT | | `pin-weak` | 1.1.0 | MIT | | `plist` | 1.10.1 | MIT | | `png` | 0.18.1 | MIT OR Apache-2.0 | @@ -210,8 +223,8 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `portable-atomic` | 1.15.0 | Apache-2.0 OR MIT | | `potential_utf` | 0.1.6 | Unicode-3.0 | | `powerfmt` | 0.2.0 | MIT OR Apache-2.0 | -| `psl` | 2.1.238 | MIT/Apache-2.0 | | `psl-types` | 2.0.11 | MIT/Apache-2.0 | +| `psl` | 2.1.238 | MIT/Apache-2.0 | | `pulldown-cmark` | 0.13.4 | MIT | | `pxfm` | 0.1.30 | BSD-3-Clause OR Apache-2.0 | | `quick-error` | 2.0.1 | MIT/Apache-2.0 | @@ -219,35 +232,36 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `raw-window-handle` | 0.6.2 | MIT OR Apache-2.0 OR Zlib | | `read-fonts` | 0.41.0 | MIT OR Apache-2.0 | | `recvmsg` | 1.0.0 | 0BSD | -| `regex` | 1.13.1 | MIT OR Apache-2.0 | | `regex-automata` | 0.4.18 | MIT OR Apache-2.0 | | `regex-syntax` | 0.8.11 | MIT OR Apache-2.0 | +| `regex` | 1.13.1 | MIT OR Apache-2.0 | | `reqwest` | 0.12.28 | MIT OR Apache-2.0 | +| `reqwest` | 0.13.5 | MIT OR Apache-2.0 | | `resvg` | 0.48.1 | Apache-2.0 OR MIT | | `rgb` | 0.8.53 | MIT | | `ring` | 0.17.14 | Apache-2.0 AND ISC | | `roxmltree` | 0.21.1 | MIT OR Apache-2.0 | | `rustix` | 1.1.5 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | -| `rustls` | 0.23.45 | Apache-2.0 OR ISC OR MIT | | `rustls-native-certs` | 0.8.4 | Apache-2.0 OR ISC OR MIT | | `rustls-pki-types` | 1.15.1 | MIT OR Apache-2.0 | | `rustls-platform-verifier` | 0.7.0 | MIT OR Apache-2.0 | | `rustls-webpki` | 0.103.15 | ISC | +| `rustls` | 0.23.45 | Apache-2.0 OR ISC OR MIT | | `ryu` | 1.0.23 | Apache-2.0 OR BSL-1.0 | | `same-file` | 1.0.6 | Unlicense/MIT | | `schannel` | 0.1.29 | MIT | | `scoped-tls-hkt` | 0.1.5 | MIT/Apache-2.0 | | `scopeguard` | 1.2.0 | MIT OR Apache-2.0 | -| `security-framework` | 3.7.0 | MIT OR Apache-2.0 | | `security-framework-sys` | 2.17.0 | MIT OR Apache-2.0 | +| `security-framework` | 3.7.0 | MIT OR Apache-2.0 | | `semver` | 1.0.28 | MIT OR Apache-2.0 | -| `serde` | 1.0.229 | MIT OR Apache-2.0 | | `serde_core` | 1.0.229 | MIT OR Apache-2.0 | | `serde_json` | 1.0.151 | MIT OR Apache-2.0 | | `serde_spanned` | 1.1.1 | MIT OR Apache-2.0 | | `serde_urlencoded` | 0.7.1 | MIT/Apache-2.0 | | `serde_with` | 3.23.0 | MIT OR Apache-2.0 | | `serde-untagged` | 0.1.9 | MIT OR Apache-2.0 | +| `serde` | 1.0.229 | MIT OR Apache-2.0 | | `serialize-to-javascript` | 0.1.2 | MIT OR Apache-2.0 | | `simd-adler32` | 0.3.10 | MIT | | `simdutf8` | 0.1.5 | MIT OR Apache-2.0 | @@ -269,39 +283,40 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `swash` | 0.2.10 | Apache-2.0 OR MIT | | `sync_wrapper` | 1.0.2 | Apache-2.0 | | `sys-locale` | 0.3.2 | MIT OR Apache-2.0 | -| `system-configuration` | 0.7.0 | MIT OR Apache-2.0 | | `system-configuration-sys` | 0.6.0 | MIT OR Apache-2.0 | +| `system-configuration` | 0.7.0 | MIT OR Apache-2.0 | | `taffy` | 0.10.1 | MIT | | `tao` | 0.35.3 | Apache-2.0 | | `tar` | 0.4.46 | MIT OR Apache-2.0 | -| `tauri` | 2.11.6 | Apache-2.0 OR MIT | | `tauri-plugin-opener` | 2.5.5 | Apache-2.0 OR MIT | | `tauri-plugin-single-instance` | 2.4.5 | Apache-2.0 OR MIT | | `tauri-plugin-updater` | 2.12.0 | Apache-2.0 OR MIT | -| `tauri-runtime` | 2.11.3 | Apache-2.0 OR MIT | | `tauri-runtime-wry` | 2.11.4 | Apache-2.0 OR MIT | +| `tauri-runtime` | 2.11.3 | Apache-2.0 OR MIT | | `tauri-utils` | 2.9.3 | Apache-2.0 OR MIT | +| `tauri` | 2.11.6 | Apache-2.0 OR MIT | | `tempfile` | 3.27.0 | MIT OR Apache-2.0 | +| `thiserror` | 1.0.69 | MIT OR Apache-2.0 | | `thiserror` | 2.0.21 | MIT OR Apache-2.0 | -| `time` | 0.3.55 | MIT OR Apache-2.0 | | `time-core` | 0.1.9 | MIT OR Apache-2.0 | -| `tiny-skia` | 0.12.0 | BSD-3-Clause | +| `time` | 0.3.55 | MIT OR Apache-2.0 | | `tiny-skia-path` | 0.12.0 | BSD-3-Clause | +| `tiny-skia` | 0.12.0 | BSD-3-Clause | | `tinystr` | 0.8.4 | Unicode-3.0 | | `tinyvec` | 1.13.3 | Zlib OR Apache-2.0 OR MIT | -| `tokio` | 1.53.1 | MIT | | `tokio-rustls` | 0.26.5 | MIT OR Apache-2.0 | | `tokio-util` | 0.7.19 | MIT | -| `toml` | 1.1.6+spec-1.1.0 | MIT OR Apache-2.0 | +| `tokio` | 1.53.1 | MIT | | `toml_datetime` | 1.1.1+spec-1.1.0 | MIT OR Apache-2.0 | | `toml_parser` | 1.1.3+spec-1.1.0 | MIT OR Apache-2.0 | | `toml_writer` | 1.1.2+spec-1.1.0 | MIT OR Apache-2.0 | -| `tower` | 0.5.3 | MIT | +| `toml` | 1.1.6+spec-1.1.0 | MIT OR Apache-2.0 | | `tower-http` | 0.6.11 | MIT | | `tower-layer` | 0.3.3 | MIT | | `tower-service` | 0.3.3 | MIT | -| `tracing` | 0.1.44 | MIT | +| `tower` | 0.5.3 | MIT | | `tracing-core` | 0.1.36 | MIT | +| `tracing` | 0.1.44 | MIT | | `tray-icon` | 0.24.2 | MIT OR Apache-2.0 | | `try-lock` | 0.2.5 | MIT | | `typeid` | 1.0.3 | MIT OR Apache-2.0 | @@ -326,26 +341,40 @@ licence. Nothing of it was copied into LinkUnbound's own source. | `walkdir` | 2.5.0 | Unlicense/MIT | | `want` | 0.3.1 | MIT | | `webbrowser` | 1.2.4 | MIT OR Apache-2.0 | -| `webview2-com` | 0.38.2 | MIT | | `webview2-com-sys` | 0.38.2 | MIT | +| `webview2-com` | 0.38.2 | MIT | | `weezl` | 0.1.12 | MIT OR Apache-2.0 | | `widestring` | 1.2.1 | MIT OR Apache-2.0 | | `winapi-util` | 0.1.11 | Unlicense OR MIT | | `window-vibrancy` | 0.6.0 | Apache-2.0 OR MIT | -| `windows` | 0.62.2 | MIT OR Apache-2.0 | | `windows_x86_64_msvc` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_x86_64_msvc` | 0.53.1 | MIT OR Apache-2.0 | +| `windows-collections` | 0.2.0 | MIT OR Apache-2.0 | | `windows-collections` | 0.3.2 | MIT OR Apache-2.0 | +| `windows-core` | 0.61.2 | MIT OR Apache-2.0 | | `windows-core` | 0.62.2 | MIT OR Apache-2.0 | +| `windows-future` | 0.2.1 | MIT OR Apache-2.0 | | `windows-future` | 0.3.2 | MIT OR Apache-2.0 | +| `windows-link` | 0.1.3 | MIT OR Apache-2.0 | | `windows-link` | 0.2.1 | MIT OR Apache-2.0 | +| `windows-numerics` | 0.2.0 | MIT OR Apache-2.0 | | `windows-numerics` | 0.3.1 | MIT OR Apache-2.0 | | `windows-registry` | 0.6.1 | MIT OR Apache-2.0 | +| `windows-result` | 0.3.4 | MIT OR Apache-2.0 | | `windows-result` | 0.4.1 | MIT OR Apache-2.0 | +| `windows-strings` | 0.4.2 | MIT OR Apache-2.0 | | `windows-strings` | 0.5.1 | MIT OR Apache-2.0 | +| `windows-sys` | 0.52.0 | MIT OR Apache-2.0 | | `windows-sys` | 0.59.0 | MIT OR Apache-2.0 | +| `windows-sys` | 0.60.2 | MIT OR Apache-2.0 | +| `windows-sys` | 0.61.2 | MIT OR Apache-2.0 | | `windows-targets` | 0.52.6 | MIT OR Apache-2.0 | +| `windows-targets` | 0.53.5 | MIT OR Apache-2.0 | +| `windows-threading` | 0.1.0 | MIT OR Apache-2.0 | | `windows-threading` | 0.2.1 | MIT OR Apache-2.0 | | `windows-version` | 0.1.7 | MIT OR Apache-2.0 | +| `windows` | 0.61.3 | MIT OR Apache-2.0 | +| `windows` | 0.62.2 | MIT OR Apache-2.0 | | `winit` | 0.30.13 | Apache-2.0 | | `winnow` | 1.0.4 | MIT | | `winreg` | 0.56.0 | MIT | diff --git a/scripts/third-party.mjs b/scripts/third-party.mjs index da6684b..845356d 100644 --- a/scripts/third-party.mjs +++ b/scripts/third-party.mjs @@ -117,6 +117,7 @@ const crates = () => { "cargo", [ "tree", + "--locked", "--workspace", "--edges", "normal,no-proc-macro", @@ -133,8 +134,9 @@ const crates = () => { const one = /^(\S+) v(\S+)(?: \((.+?)\))?\|(.*?)(?: \(\*\))?$/.exec(line); if (!one) continue; const [, name, version, from, licence] = one; - if ((from && existsSync(from)) || seen.has(name)) continue; - seen.set(name, { version, licence: licence || "see the crate" }); + const key = `${name}@${version}`; + if ((from && existsSync(from)) || seen.has(key)) continue; + seen.set(key, { name, version, licence: licence || "see the crate" }); } } return seen; @@ -143,7 +145,7 @@ const crates = () => { const listed = (seen) => [...seen.entries()] .sort(([a], [b]) => a.localeCompare(b)) - .map(([name, one]) => `| \`${name}\` | ${one.version} | ${one.licence} |`) + .map(([key, one]) => `| \`${one.name ?? key}\` | ${one.version} | ${one.licence} |`) .join("\n"); const js = shipped(); From 33bfeee6b1b046bcd0eb5d9541f08db4ee31cede Mon Sep 17 00:00:00 2001 From: rgdevment Date: Sun, 4 Oct 2026 20:31:38 -0300 Subject: [PATCH 4/4] ci: the notices step says what it compares on a pull request too --- .github/workflows/rules.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/rules.yml b/.github/workflows/rules.yml index 8dfc798..ec32462 100644 --- a/.github/workflows/rules.yml +++ b/.github/workflows/rules.yml @@ -132,12 +132,12 @@ jobs: package-manager-cache: false - if: steps.look.outputs.touched == 'true' uses: ./.github/actions/toolchain - - name: Regenerated, they match the copy on main + - name: Regenerated, they match the copy in the tree if: steps.look.outputs.touched == 'true' run: | (cd app && npm ci) npm run notices if ! git diff --exit-code THIRD-PARTY-BUNDLED.md; then - echo "::error::THIRD-PARTY-BUNDLED.md is behind the lockfiles; run npm run notices and land it before the next tag" + echo "::error::THIRD-PARTY-BUNDLED.md is behind the lockfiles; run npm run notices and commit it" exit 1 fi