diff --git a/docs/licencias-cargo.tsv b/docs/licencias-cargo.tsv new file mode 100644 index 00000000..62660d17 --- /dev/null +++ b/docs/licencias-cargo.tsv @@ -0,0 +1,185 @@ +# licencias-cargo.tsv — GENERADO por scripts/licencias-cargo.sh. No editar a mano. +# +# La licencia que el AUTOR declara en su Cargo.toml: expresión SPDX escrita por quien tiene +# la potestad de licenciar. Sin ambigüedad -only/-or-later y SIN colapsar las dobles ⇒ manda +# sobre la detección por API de GitHub, que pierde ambas cosas. Sembrar con FORZAR=1. +# +# Tercera columna = el ref con el que se resolvió. Un tag concreto significa que el dato es +# de la VERSIÓN QUE EMPAQUETAMOS; 'HEAD(aprox)' que no se halló el tag y puede diferir. +# Total 176 · al tag exacto 167 · aproximadas 9 +aichat MIT OR Apache-2.0 v0.30.0 +angle-grinder MIT v0.19.6 +atac MIT v0.23.0 +bacon AGPL-3.0 v3.23.0 +bandwhich MIT v0.23.1 +bat MIT OR Apache-2.0 v0.26.1 +bingrep MIT v0.12.1 +bob-nvim MIT v4.1.7 +bottom MIT 0.12.3 +broot MIT v1.57.0 +caligula GPL-3.0 v0.5.0 +cargo-bloat MIT v0.12.1 +cargo-bundle-licenses MIT/Apache-2.0 v4.2.0 +cargo-cache MIT/Apache-2.0 0.8.3 +cargo-careful MIT OR Apache-2.0 v0.4.10 +cargo-criterion Apache-2.0/MIT 1.1.0 +cargo-deb MIT v3.7.0 +cargo-deny MIT OR Apache-2.0 0.19.9 +cargo-edit Apache-2.0 OR MIT v0.13.11 +cargo-expand MIT OR Apache-2.0 1.0.122 +cargo-feature MIT v0.7.0 +cargo-features-manager MIT v0.11.0 +cargo-flamegraph MIT OR Apache-2.0 v0.6.13 +cargo-fuzz MIT OR Apache-2.0 0.13.2 +cargo-generate MIT OR Apache-2.0 v0.23.9 +cargo-hack Apache-2.0 OR MIT v0.6.45 +cargo-llvm-cov Apache-2.0 OR MIT v0.8.5 +cargo-llvm-lines MIT OR Apache-2.0 0.4.46 +cargo-machete MIT v0.9.2 +cargo-make Apache-2.0 0.37.24 +cargo-modules MPL-2.0 v0.26.0 +cargo-msrv Apache-2.0 OR MIT v0.19.3 +cargo-mutants MIT v27.1.0 +cargo-ndk Apache-2.0 OR MIT v4.1.2 +cargo-outdated MIT v0.19.0 +cargo-readme MIT OR Apache-2.0 v3.3.2 +cargo-semver-checks Apache-2.0 OR MIT v0.48.0 +cargo-sort MIT/Apache-2.0 v2.1.3 +cargo-supply-chain Apache-2.0 OR MIT OR Zlib v0.3.4 +cargo-sweep MIT v0.8.0 +cargo-temp MIT OR Apache-2.0 v0.4.1 +cargo-udeps MIT OR Apache-2.0 v0.1.61 +cargo-watch CC0-1.0 v8.5.3 +cargo-wipe MIT v0.4.0 +cargo-wizard MIT v0.2.3 +cargo-zigbuild MIT v0.22.3 +cbindgen MPL-2.0 v0.27.0 +choose GPL-3.0-or-later v1.3.7 +cobalt MIT v0.20.4 +comrak BSD-2-Clause v0.52.0 +cosmic-comp GPL-3.0-only HEAD(aprox) +cosmic-edit GPL-3.0-only HEAD(aprox) +cosmic-files GPL-3.0-only HEAD(aprox) +cosmic-osd GPL-3.0-or-later HEAD(aprox) +cosmic-session GPL-3.0-only HEAD(aprox) +cosmic-settings-daemon GPL-3.0-or-later HEAD(aprox) +cosmic-term GPL-3.0-only HEAD(aprox) +cpc MIT v3.0.0 +csview MIT OR Apache-2.0 v1.3.4 +csvlens MIT v0.13.0 +dalfox MIT v3.1.2 +ddh LGPL-3.0 0.13.0 +delta MIT 0.19.2 +difftastic MIT 0.69.0 +diffutils MIT OR Apache-2.0 v0.5.0 +diskus MIT/Apache-2.0 v0.9.0 +dotter Unlicense v0.13.4 +dua MIT v2.34.0 +dufs MIT OR Apache-2.0 v0.46.0 +dust Apache-2.0 v1.2.4 +erdtree MIT v3.1.2 +eza EUPL-1.2 v0.23.4 +fastmod Apache-2.0 v0.4.4 +fblog WTFPL v4.17.0 +fd MIT OR Apache-2.0 v10.4.2 +feroxbuster MIT v2.13.1 +findutils MIT 0.9.1 +findutils-xargs MIT 0.9.1 +fnm GPL-3.0 v1.39.0 +fselect MIT OR Apache-2.0 0.10.1 +genact MIT v1.5.1 +git-absorb BSD-3-Clause 0.9.0 +git-graph MIT v0.7.0 +git-igitt MIT v0.1.21 +gitoxide MIT OR Apache-2.0 v0.54.0 +gitui MIT v0.28.1 +gitu MIT v0.42.0 +gptman MIT OR Apache-2.0 v1.1.0 +grcov MPL-2.0 v0.9.1 +grex Apache-2.0 v1.4.6 +heh MIT v0.6.3 +hexyl MIT/Apache-2.0 v0.17.0 +hgrep MIT v0.3.9 +htmlq MIT v0.4.0 +hwatch MIT 0.4.2 +hyperfine MIT OR Apache-2.0 v1.20.0 +igrep MIT v1.3.0 +jnv MIT v0.7.1 +joshuto LGPL-3.0 v0.9.9 +just CC0-1.0 1.51.0 +kbs2 MIT v0.7.3 +kmon GPL-3.0 v1.7.1 +kubie Zlib v0.26.1 +lsd Apache-2.0 v1.2.0 +macchina MIT v6.4.0 +maturin MIT OR Apache-2.0 v1.12.6 +mcfly MIT v0.9.3 +mdbook-mermaid MPL-2.0 v0.17.0 +mdbook-toc MPL-2.0 0.15.4 +miniserve MIT v0.35.0 +mise MIT v2026.7.0 +monolith CC0-1.0 v2.10.1 +natls MIT v2.1.14 +navi Apache-2.0 v2.24.0 +netscanner MIT v0.6.41 +nomino MIT OR Apache-2.0 v1.6.4 +nu MIT 0.104.1 +oha MIT v1.14.0 +otree MIT v0.6.5 +ouch MIT 0.8.0 +ox GPL-2.0 0.7.7 +parallel-disk-usage Apache-2.0 0.21.1 +pastel MIT/Apache-2.0 v0.12.0 +pls GPL-3.0-or-later v0.0.1-beta.10 +pop-launcher MPL-2.0 1.2.7 +presenterm BSD-2-Clause v0.16.1 +procs MIT v0.14.11 +rep-grep MIT 0.0.8 +repgrep Unlicense OR MIT OR Apache-2.0 0.16.1 +rip2 GPL-3.0+ v0.9.6 +ripgrep-all AGPL-3.0-or-later v0.10.10 +ripgrep Unlicense OR MIT 14.1.1 +ripsecrets MIT v0.1.11 +rnr MIT v0.5.1 +ruplacer BSD-3-Clause v0.10.0 +russ AGPL-3.0-or-later HEAD(aprox) +rustcat GPL-3.0 v3.0.0 +rustic Apache-2.0 OR MIT v0.11.3 +rustscan GPL-3.0-only 2.4.1 +rust-script MIT/Apache-2.0 0.36.0 +sccache Apache-2.0 v0.15.0 +sendme Apache-2.0 OR MIT v0.33.0 +serie MIT v0.8.0 +shellharden MPL-2.0 v4.3.1 +simple-http-server MIT v0.8.0 +skim MIT v4.7.0 +sshs MIT 4.7.2 +ssh-vault BSD-3-Clause 1.2.10 +starship ISC v1.25.1 +stylua MPL-2.0 v2.5.2 +systemctl-tui MIT v0.5.2 +taskwarrior-tui MIT v0.27.0 +tealdeer MIT OR Apache-2.0 v1.8.1 +television MIT 0.15.9 +tenere GPL-3.0-or-later v0.11.3 +tere EUPL-1.2 v1.6.0 +the-way MIT v0.20.3 +tokei MIT OR Apache-2.0 v14.0.0 +tomlq MIT 0.2.2 +topgrade GPL-3.0-or-later v17.6.1 +trunk MIT/Apache-2.0 v0.21.14 +ttyper MIT v1.6.0 +tuc GPL-3.0-or-later v1.3.0 +tuckr GPL-3.0-or-later 0.13.1 +viddy MIT v1.3.1 +viu MIT v1.6.1 +vivid MIT/Apache-2.0 v0.11.1 +wasm-pack MIT OR Apache-2.0 v0.15.0 +xan Unlicense OR MIT 0.59.0 +xdg-desktop-portal-cosmic GPL-3.0-or-later HEAD(aprox) +xh MIT v0.25.3 +xsv Unlicense/MIT 0.13.0 +xwin Apache-2.0 OR MIT 0.7.0 +zenith MIT 0.15.0 +zola EUPL-1.2 v0.22.1 +zoxide MIT v0.9.9 diff --git a/recipes/aichat.toml b/recipes/aichat.toml index 0d2e48e3..00017165 100644 --- a/recipes/aichat.toml +++ b/recipes/aichat.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "aichat" version = "0.30.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sigoden/aichat" diff --git a/recipes/bat.toml b/recipes/bat.toml index 15aa1041..050c70f3 100644 --- a/recipes/bat.toml +++ b/recipes/bat.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "bat" version = "0.26.1" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sharkdp/bat" diff --git a/recipes/cargo-audit.toml b/recipes/cargo-audit.toml index c6752e98..28167e59 100644 --- a/recipes/cargo-audit.toml +++ b/recipes/cargo-audit.toml @@ -6,7 +6,6 @@ # - deps.build=["zlib"]: git2/openssl-sys enlazan -lz. name = "cargo-audit" version = "0.22.1" -license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}" [source] tarball = "https://github.com/RustSec/cargo-audit/archive/cargo-audit/v0.22.1.tar.gz" diff --git a/recipes/cargo-binstall.toml b/recipes/cargo-binstall.toml index a091f873..54b11947 100644 --- a/recipes/cargo-binstall.toml +++ b/recipes/cargo-binstall.toml @@ -4,7 +4,6 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-binstall" version = "1.20.0" -license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}" [source] repo = "https://github.com/cargo-bins/cargo-binstall" diff --git a/recipes/cargo-bundle-licenses.toml b/recipes/cargo-bundle-licenses.toml index d4593ea5..0af854d7 100644 --- a/recipes/cargo-bundle-licenses.toml +++ b/recipes/cargo-bundle-licenses.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-bundle-licenses" version = "4.2.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sstadick/cargo-bundle-licenses" diff --git a/recipes/cargo-cache.toml b/recipes/cargo-cache.toml index 051d1880..1dbc4b71 100644 --- a/recipes/cargo-cache.toml +++ b/recipes/cargo-cache.toml @@ -4,6 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-cache" version = "0.8.3" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/matthiaskrgr/cargo-cache" diff --git a/recipes/cargo-careful.toml b/recipes/cargo-careful.toml index c83d8995..7f7f2f1e 100644 --- a/recipes/cargo-careful.toml +++ b/recipes/cargo-careful.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-careful" version = "0.4.10" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/RalfJung/cargo-careful" diff --git a/recipes/cargo-criterion.toml b/recipes/cargo-criterion.toml index f92f0102..ce431334 100644 --- a/recipes/cargo-criterion.toml +++ b/recipes/cargo-criterion.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-criterion" version = "1.1.0" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/bheisler/cargo-criterion" diff --git a/recipes/cargo-deny.toml b/recipes/cargo-deny.toml index 70ec36b2..0eec4fd9 100644 --- a/recipes/cargo-deny.toml +++ b/recipes/cargo-deny.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-deny" version = "0.19.9" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/EmbarkStudios/cargo-deny" diff --git a/recipes/cargo-edit.toml b/recipes/cargo-edit.toml index 54214947..9bc92734 100644 --- a/recipes/cargo-edit.toml +++ b/recipes/cargo-edit.toml @@ -8,7 +8,7 @@ # `cargo rustc --` exige un único target, itero los 4 bins. El install lo auto-genera el lab. name = "cargo-edit" version = "0.13.11" -license = "MIT" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/killercup/cargo-edit" diff --git a/recipes/cargo-expand.toml b/recipes/cargo-expand.toml index adc4e0a1..dad5ed0f 100644 --- a/recipes/cargo-expand.toml +++ b/recipes/cargo-expand.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-expand" version = "1.0.122" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/dtolnay/cargo-expand" diff --git a/recipes/cargo-flamegraph.toml b/recipes/cargo-flamegraph.toml index 9118bbe2..8de0a35f 100644 --- a/recipes/cargo-flamegraph.toml +++ b/recipes/cargo-flamegraph.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-flamegraph" version = "0.6.13" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/flamegraph-rs/flamegraph" diff --git a/recipes/cargo-fuzz.toml b/recipes/cargo-fuzz.toml index 72101432..a72ee8d9 100644 --- a/recipes/cargo-fuzz.toml +++ b/recipes/cargo-fuzz.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-fuzz" version = "0.13.2" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/rust-fuzz/cargo-fuzz" diff --git a/recipes/cargo-generate.toml b/recipes/cargo-generate.toml index 70ba9b3e..5665327b 100644 --- a/recipes/cargo-generate.toml +++ b/recipes/cargo-generate.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-generate" version = "0.23.9" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/cargo-generate/cargo-generate" diff --git a/recipes/cargo-hack.toml b/recipes/cargo-hack.toml index b48bffed..9ce09224 100644 --- a/recipes/cargo-hack.toml +++ b/recipes/cargo-hack.toml @@ -4,7 +4,7 @@ # El `cargo auditable` del abuild de Alpine no existe en el lab ⇒ se elimina. name = "cargo-hack" version = "0.6.45" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] tarball = "https://github.com/taiki-e/cargo-hack/archive/refs/tags/v0.6.45.tar.gz" diff --git a/recipes/cargo-llvm-cov.toml b/recipes/cargo-llvm-cov.toml index 90ef1b02..3a5f9b92 100644 --- a/recipes/cargo-llvm-cov.toml +++ b/recipes/cargo-llvm-cov.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-llvm-cov" version = "0.8.5" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/taiki-e/cargo-llvm-cov" diff --git a/recipes/cargo-llvm-lines.toml b/recipes/cargo-llvm-lines.toml index 6b5bee55..ad05fd6a 100644 --- a/recipes/cargo-llvm-lines.toml +++ b/recipes/cargo-llvm-lines.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-llvm-lines" version = "0.4.46" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/dtolnay/cargo-llvm-lines" diff --git a/recipes/cargo-msrv.toml b/recipes/cargo-msrv.toml index 24a67de6..c70c2263 100644 --- a/recipes/cargo-msrv.toml +++ b/recipes/cargo-msrv.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-msrv" version = "0.19.3" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/foresterre/cargo-msrv" diff --git a/recipes/cargo-ndk.toml b/recipes/cargo-ndk.toml index 27c0d1d8..affbe1a5 100644 --- a/recipes/cargo-ndk.toml +++ b/recipes/cargo-ndk.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-ndk" version = "4.1.2" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/bbqsrc/cargo-ndk" diff --git a/recipes/cargo-readme.toml b/recipes/cargo-readme.toml index 20318893..d14e7b95 100644 --- a/recipes/cargo-readme.toml +++ b/recipes/cargo-readme.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-readme" version = "3.3.2" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/webern/cargo-readme" diff --git a/recipes/cargo-semver-checks.toml b/recipes/cargo-semver-checks.toml index 7186c678..f31c6701 100644 --- a/recipes/cargo-semver-checks.toml +++ b/recipes/cargo-semver-checks.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-semver-checks" version = "0.48.0" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/obi1kenobi/cargo-semver-checks" diff --git a/recipes/cargo-sort.toml b/recipes/cargo-sort.toml index c7f6943e..feb6fb74 100644 --- a/recipes/cargo-sort.toml +++ b/recipes/cargo-sort.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-sort" version = "2.1.3" -license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/devinr528/cargo-sort" diff --git a/recipes/cargo-supply-chain.toml b/recipes/cargo-supply-chain.toml index 20bbcbba..9406b1d5 100644 --- a/recipes/cargo-supply-chain.toml +++ b/recipes/cargo-supply-chain.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-supply-chain" version = "0.3.4" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT OR Zlib" [source] repo = "https://github.com/rust-secure-code/cargo-supply-chain" diff --git a/recipes/cargo-temp.toml b/recipes/cargo-temp.toml index d59e619b..0abc4e94 100644 --- a/recipes/cargo-temp.toml +++ b/recipes/cargo-temp.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-temp" version = "0.4.1" -license = "MIT" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/yozhgoor/cargo-temp" diff --git a/recipes/cargo-udeps.toml b/recipes/cargo-udeps.toml index eb8b769d..cd8fff5b 100644 --- a/recipes/cargo-udeps.toml +++ b/recipes/cargo-udeps.toml @@ -4,6 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cargo-udeps" version = "0.1.61" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/est31/cargo-udeps" diff --git a/recipes/choose.toml b/recipes/choose.toml index b02b80da..b7912438 100644 --- a/recipes/choose.toml +++ b/recipes/choose.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "choose" version = "1.3.7" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] repo = "https://github.com/theryangeary/choose" diff --git a/recipes/cobalt.toml b/recipes/cobalt.toml index 8487c333..a1dd7c91 100644 --- a/recipes/cobalt.toml +++ b/recipes/cobalt.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cobalt" version = "0.20.4" -license = "Apache-2.0" +license = "MIT" [source] repo = "https://github.com/cobalt-org/cobalt.rs" diff --git a/recipes/comrak.toml b/recipes/comrak.toml index d415d309..f00af5fe 100644 --- a/recipes/comrak.toml +++ b/recipes/comrak.toml @@ -4,6 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "comrak" version = "0.52.0" +license = "BSD-2-Clause" [source] repo = "https://github.com/kivikakk/comrak" diff --git a/recipes/cpc.toml b/recipes/cpc.toml index 273aa08a..667e06dc 100644 --- a/recipes/cpc.toml +++ b/recipes/cpc.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "cpc" version = "3.0.0" -license = "AGPL-3.0" +license = "MIT" [source] repo = "https://github.com/probablykasper/cpc" diff --git a/recipes/csview.toml b/recipes/csview.toml index 46d79fb7..6296a49f 100644 --- a/recipes/csview.toml +++ b/recipes/csview.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "csview" version = "1.3.4" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/wfxr/csview" diff --git a/recipes/ddh.toml b/recipes/ddh.toml index e5810351..86097684 100644 --- a/recipes/ddh.toml +++ b/recipes/ddh.toml @@ -4,6 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "ddh" version = "0.13.0" +license = "LGPL-3.0" [source] repo = "https://github.com/darakian/ddh" diff --git a/recipes/diffutils.toml b/recipes/diffutils.toml index abef90b4..13bc295a 100644 --- a/recipes/diffutils.toml +++ b/recipes/diffutils.toml @@ -10,7 +10,7 @@ name = "diffutils" version = "0.5.0" -license = "GPL-3.0-or-later" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/uutils/diffutils" diff --git a/recipes/diskus.toml b/recipes/diskus.toml index 2a99cfdd..10c769af 100644 --- a/recipes/diskus.toml +++ b/recipes/diskus.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "diskus" version = "0.9.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sharkdp/diskus" diff --git a/recipes/dufs.toml b/recipes/dufs.toml index bfe6641d..0ceac9ad 100644 --- a/recipes/dufs.toml +++ b/recipes/dufs.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "dufs" version = "0.46.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sigoden/dufs" diff --git a/recipes/fd.toml b/recipes/fd.toml index 1e1d95f5..2b1f53ca 100644 --- a/recipes/fd.toml +++ b/recipes/fd.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "fd" version = "10.4.2" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sharkdp/fd" diff --git a/recipes/findutils.toml b/recipes/findutils.toml index 7fa2bcff..3201c1a1 100644 --- a/recipes/findutils.toml +++ b/recipes/findutils.toml @@ -16,7 +16,7 @@ name = "findutils" version = "0.9.1" -license = "GPL-3.0-or-later" +license = "MIT" [source] repo = "https://github.com/uutils/findutils" diff --git a/recipes/fselect.toml b/recipes/fselect.toml index 0d99f88c..f8f21ced 100644 --- a/recipes/fselect.toml +++ b/recipes/fselect.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "fselect" version = "0.10.1" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/jhspetersson/fselect" diff --git a/recipes/gitoxide.toml b/recipes/gitoxide.toml index 6bc717bf..89533f4d 100644 --- a/recipes/gitoxide.toml +++ b/recipes/gitoxide.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "gitoxide" version = "0.54.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/GitoxideLabs/gitoxide" diff --git a/recipes/gptman.toml b/recipes/gptman.toml index dd8b1aa4..76fbde11 100644 --- a/recipes/gptman.toml +++ b/recipes/gptman.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "gptman" version = "1.1.0" -license = "MIT" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/rust-disk-partition-management/gptman" diff --git a/recipes/hexyl.toml b/recipes/hexyl.toml index aeb71914..5dc8b331 100644 --- a/recipes/hexyl.toml +++ b/recipes/hexyl.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "hexyl" version = "0.17.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sharkdp/hexyl" diff --git a/recipes/hyperfine.toml b/recipes/hyperfine.toml index 0bc3a948..2fce7189 100644 --- a/recipes/hyperfine.toml +++ b/recipes/hyperfine.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "hyperfine" version = "1.20.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sharkdp/hyperfine" diff --git a/recipes/incoming-cosmic/cosmic-comp.toml b/recipes/incoming-cosmic/cosmic-comp.toml index 3336f0ca..a7cda718 100644 --- a/recipes/incoming-cosmic/cosmic-comp.toml +++ b/recipes/incoming-cosmic/cosmic-comp.toml @@ -29,7 +29,7 @@ # de EGL/wayland/xkbcommon; un estático acá no es una postura, es una mentira. name = "cosmic-comp" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-only" [source] tarball = "https://github.com/pop-os/cosmic-comp/archive/epoch-1.5.0/cosmic-comp-epoch-1.5.0.tar.gz" diff --git a/recipes/incoming-cosmic/cosmic-edit.toml b/recipes/incoming-cosmic/cosmic-edit.toml index f7a12b0d..943547aa 100644 --- a/recipes/incoming-cosmic/cosmic-edit.toml +++ b/recipes/incoming-cosmic/cosmic-edit.toml @@ -29,7 +29,7 @@ # los cuarenta minutos. name = "cosmic-edit" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-only" [source] tarball = "https://github.com/pop-os/cosmic-edit/archive/epoch-1.5.0/cosmic-edit-epoch-1.5.0.tar.gz" diff --git a/recipes/incoming-cosmic/cosmic-files.toml b/recipes/incoming-cosmic/cosmic-files.toml index f4d6114c..504b9a8a 100644 --- a/recipes/incoming-cosmic/cosmic-files.toml +++ b/recipes/incoming-cosmic/cosmic-files.toml @@ -26,7 +26,7 @@ # (`bzip2-sys` no aparece) antes de agregar una dep que no hacía falta. name = "cosmic-files" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-only" [source] tarball = "https://github.com/pop-os/cosmic-files/archive/epoch-1.5.0/cosmic-files-epoch-1.5.0.tar.gz" diff --git a/recipes/incoming-cosmic/cosmic-osd.toml b/recipes/incoming-cosmic/cosmic-osd.toml index bec0969b..e601efb5 100644 --- a/recipes/incoming-cosmic/cosmic-osd.toml +++ b/recipes/incoming-cosmic/cosmic-osd.toml @@ -13,7 +13,7 @@ # `libxkbcommon` + `pkgconf` por el gotcha 7 del runbook: winit/sctk ENLAZAN xkbcommon. name = "cosmic-osd" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] tarball = "https://github.com/pop-os/cosmic-osd/archive/epoch-1.5.0/cosmic-osd-epoch-1.5.0.tar.gz" diff --git a/recipes/incoming-cosmic/cosmic-session.toml b/recipes/incoming-cosmic/cosmic-session.toml index 9d9794e7..0005c164 100644 --- a/recipes/incoming-cosmic/cosmic-session.toml +++ b/recipes/incoming-cosmic/cosmic-session.toml @@ -23,7 +23,7 @@ # arriba y no lo implica: es el nombre del protocolo, no del programa que lo contesta. name = "cosmic-session" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-only" [source] tarball = "https://github.com/pop-os/cosmic-session/archive/epoch-1.5.0/cosmic-session-epoch-1.5.0.tar.gz" diff --git a/recipes/incoming-cosmic/cosmic-settings-daemon.toml b/recipes/incoming-cosmic/cosmic-settings-daemon.toml index d0707d95..a95bfbb0 100644 --- a/recipes/incoming-cosmic/cosmic-settings-daemon.toml +++ b/recipes/incoming-cosmic/cosmic-settings-daemon.toml @@ -21,7 +21,7 @@ # `ddc-hi` (brillo por DDC/CI sobre i2c) es Rust puro: habla el ioctl directo, no libddcutil. name = "cosmic-settings-daemon" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] tarball = "https://github.com/pop-os/cosmic-settings-daemon/archive/epoch-1.5.0/cosmic-settings-daemon-epoch-1.5.0.tar.gz" diff --git a/recipes/incoming-cosmic/cosmic-term.toml b/recipes/incoming-cosmic/cosmic-term.toml index 45c4a400..c4354e3d 100644 --- a/recipes/incoming-cosmic/cosmic-term.toml +++ b/recipes/incoming-cosmic/cosmic-term.toml @@ -16,7 +16,7 @@ # tocar las features por defecto es apartarse de la única combinación que upstream prueba. name = "cosmic-term" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-only" [source] tarball = "https://github.com/pop-os/cosmic-term/archive/epoch-1.5.0/cosmic-term-epoch-1.5.0.tar.gz" diff --git a/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml b/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml index 4bf2486b..47aa5c5c 100644 --- a/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml +++ b/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml @@ -31,7 +31,7 @@ # recorte. name = "xdg-desktop-portal-cosmic" version = "1.5.0" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] tarball = "https://github.com/pop-os/xdg-desktop-portal-cosmic/archive/epoch-1.5.0/xdg-desktop-portal-cosmic-epoch-1.5.0.tar.gz" diff --git a/recipes/maturin.toml b/recipes/maturin.toml index e5378179..a709bb07 100644 --- a/recipes/maturin.toml +++ b/recipes/maturin.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "maturin" version = "1.12.6" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/PyO3/maturin" diff --git a/recipes/nomino.toml b/recipes/nomino.toml index f76ee697..e4d15dc2 100644 --- a/recipes/nomino.toml +++ b/recipes/nomino.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "nomino" version = "1.6.4" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/yaa110/nomino" diff --git a/recipes/ouch.toml b/recipes/ouch.toml index 5dddcda6..e5bea126 100644 --- a/recipes/ouch.toml +++ b/recipes/ouch.toml @@ -4,6 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "ouch" version = "0.8.0" +license = "MIT" [source] repo = "https://github.com/ouch-org/ouch" diff --git a/recipes/pastel.toml b/recipes/pastel.toml index ce2eac6c..7b53be0c 100644 --- a/recipes/pastel.toml +++ b/recipes/pastel.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "pastel" version = "0.12.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sharkdp/pastel" diff --git a/recipes/pls.toml b/recipes/pls.toml index 89476aa0..d0fe4c8d 100644 --- a/recipes/pls.toml +++ b/recipes/pls.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "pls" version = "0.0.1-beta.10" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] repo = "https://github.com/pls-rs/pls" diff --git a/recipes/repgrep.toml b/recipes/repgrep.toml index 4d3e93c7..63e1b58e 100644 --- a/recipes/repgrep.toml +++ b/recipes/repgrep.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "repgrep" version = "0.16.1" -license = "Apache-2.0" +license = "Unlicense OR MIT OR Apache-2.0" [source] repo = "https://github.com/acheronfail/repgrep" diff --git a/recipes/rip2.toml b/recipes/rip2.toml index e05f6d63..192fc194 100644 --- a/recipes/rip2.toml +++ b/recipes/rip2.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "rip2" version = "0.9.6" -license = "GPL-3.0" +license = "GPL-3.0+" [source] repo = "https://github.com/MilesCranmer/rip2" diff --git a/recipes/ripgrep-all.toml b/recipes/ripgrep-all.toml index 51e022ed..2cf7d498 100644 --- a/recipes/ripgrep-all.toml +++ b/recipes/ripgrep-all.toml @@ -4,6 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "ripgrep-all" version = "0.10.10" +license = "AGPL-3.0-or-later" [source] repo = "https://github.com/phiresky/ripgrep-all" diff --git a/recipes/ripgrep.toml b/recipes/ripgrep.toml index a5f535cd..077a9dfc 100644 --- a/recipes/ripgrep.toml +++ b/recipes/ripgrep.toml @@ -15,7 +15,7 @@ name = "ripgrep" version = "14.1.1" -license = "Unlicense" +license = "Unlicense OR MIT" [source] repo = "https://github.com/BurntSushi/ripgrep" diff --git a/recipes/russ.toml b/recipes/russ.toml index 0e2382a8..5d447bce 100644 --- a/recipes/russ.toml +++ b/recipes/russ.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "russ" version = "0.5.0" -license = "AGPL-3.0" +license = "AGPL-3.0-or-later" [source] repo = "https://github.com/ckampfe/russ" diff --git a/recipes/rust-script.toml b/recipes/rust-script.toml index b062d825..5004130f 100644 --- a/recipes/rust-script.toml +++ b/recipes/rust-script.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "rust-script" version = "0.36.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/fornwall/rust-script" diff --git a/recipes/rustic.toml b/recipes/rustic.toml index e106270f..c8ca8bc3 100644 --- a/recipes/rustic.toml +++ b/recipes/rustic.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "rustic" version = "0.11.3" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/rustic-rs/rustic" diff --git a/recipes/rustscan.toml b/recipes/rustscan.toml index d823034a..07d023d6 100644 --- a/recipes/rustscan.toml +++ b/recipes/rustscan.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "rustscan" version = "2.4.1" -license = "GPL-3.0" +license = "GPL-3.0-only" [source] repo = "https://github.com/RustScan/RustScan" diff --git a/recipes/sendme.toml b/recipes/sendme.toml index c070adb3..d6c4b5d8 100644 --- a/recipes/sendme.toml +++ b/recipes/sendme.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "sendme" version = "0.33.0" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/n0-computer/sendme" diff --git a/recipes/tealdeer.toml b/recipes/tealdeer.toml index 1142bff8..eea0cc2a 100644 --- a/recipes/tealdeer.toml +++ b/recipes/tealdeer.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "tealdeer" version = "1.8.1" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/tealdeer-rs/tealdeer" diff --git a/recipes/tenere.toml b/recipes/tenere.toml index 0da26c8a..c7ab2b85 100644 --- a/recipes/tenere.toml +++ b/recipes/tenere.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "tenere" version = "0.11.3" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] repo = "https://github.com/pythops/tenere" diff --git a/recipes/tokei.toml b/recipes/tokei.toml index 8924c300..49a1e590 100644 --- a/recipes/tokei.toml +++ b/recipes/tokei.toml @@ -4,6 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "tokei" version = "14.0.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/XAMPPRocky/tokei" diff --git a/recipes/topgrade.toml b/recipes/topgrade.toml index abe91d64..ec220776 100644 --- a/recipes/topgrade.toml +++ b/recipes/topgrade.toml @@ -4,7 +4,7 @@ # crt-static + linker zig-cc ⇒ binario ESTÁTICO). Pure-Rust ⇒ zig-cc baseline. name = "topgrade" version = "17.6.1" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] tarball = "https://github.com/topgrade-rs/topgrade/archive/refs/tags/v17.6.1.tar.gz" diff --git a/recipes/trunk.toml b/recipes/trunk.toml index c7f467e0..46a4cfe2 100644 --- a/recipes/trunk.toml +++ b/recipes/trunk.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "trunk" version = "0.21.14" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/trunk-rs/trunk" diff --git a/recipes/tuc.toml b/recipes/tuc.toml index 0ccdb9da..e9f6464d 100644 --- a/recipes/tuc.toml +++ b/recipes/tuc.toml @@ -3,7 +3,7 @@ # sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild. name = "tuc" version = "1.3.0" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] tarball = "https://github.com/riquito/tuc/archive/v1.3.0/tuc-1.3.0.tar.gz" diff --git a/recipes/tuckr.toml b/recipes/tuckr.toml index 4f9dc1c0..05b18af2 100644 --- a/recipes/tuckr.toml +++ b/recipes/tuckr.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "tuckr" version = "0.13.1" -license = "GPL-3.0" +license = "GPL-3.0-or-later" [source] repo = "https://github.com/RaphGL/Tuckr" diff --git a/recipes/usbutils.toml b/recipes/usbutils.toml index 70519f17..7f27a49d 100644 --- a/recipes/usbutils.toml +++ b/recipes/usbutils.toml @@ -3,7 +3,6 @@ # sha256 del tarball (el wrapper lo calcula), y adaptar build/install del shell de abuild. name = "usbutils" version = "019" -license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}" [source] tarball = "https://github.com/gregkh/usbutils/archive/refs/tags/v019.tar.gz" diff --git a/recipes/vivid.toml b/recipes/vivid.toml index cf90a334..dffb0d6a 100644 --- a/recipes/vivid.toml +++ b/recipes/vivid.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "vivid" version = "0.11.1" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/sharkdp/vivid" diff --git a/recipes/wasm-pack.toml b/recipes/wasm-pack.toml index 79f4e777..5769f1a9 100644 --- a/recipes/wasm-pack.toml +++ b/recipes/wasm-pack.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "wasm-pack" version = "0.15.0" -license = "Apache-2.0" +license = "MIT OR Apache-2.0" [source] repo = "https://github.com/wasm-bindgen/wasm-pack" diff --git a/recipes/waybackurls.toml b/recipes/waybackurls.toml index 8b93f561..d08cb33a 100644 --- a/recipes/waybackurls.toml +++ b/recipes/waybackurls.toml @@ -4,7 +4,6 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "waybackurls" version = "0.1.0" -license = "{"message":"Not Found","documentation_url":"https://docs.github.com/rest/licenses/licenses#get-the-license-for-a-repository","status":"404"}" [source] repo = "https://github.com/tomnomnom/waybackurls" diff --git a/recipes/xan.toml b/recipes/xan.toml index 70fcaaf4..3600eedf 100644 --- a/recipes/xan.toml +++ b/recipes/xan.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "xan" version = "0.59.0" -license = "Unlicense" +license = "Unlicense OR MIT" [source] repo = "https://github.com/medialab/xan" diff --git a/recipes/xsv.toml b/recipes/xsv.toml index 8f7feb0e..de8b19af 100644 --- a/recipes/xsv.toml +++ b/recipes/xsv.toml @@ -7,7 +7,7 @@ name = "xsv" version = "0.13.0" -license = "Unlicense" +license = "Unlicense OR MIT" [source] tarball = "https://github.com/BurntSushi/xsv/archive/0.13.0/xsv-0.13.0.tar.gz" diff --git a/recipes/xwin.toml b/recipes/xwin.toml index aa55c230..63e9be01 100644 --- a/recipes/xwin.toml +++ b/recipes/xwin.toml @@ -4,7 +4,7 @@ # - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren. name = "xwin" version = "0.7.0" -license = "Apache-2.0" +license = "Apache-2.0 OR MIT" [source] repo = "https://github.com/Jake-Shadle/xwin" diff --git a/scripts/licencias-cargo.sh b/scripts/licencias-cargo.sh new file mode 100755 index 00000000..e445499c --- /dev/null +++ b/scripts/licencias-cargo.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# licencias-cargo.sh — lee la licencia que el AUTOR declara en su `Cargo.toml`, al tag exacto que la +# receta pinea. Es la fuente más autoritativa de las tres que usamos, y corrige a las otras dos. +# +# ── LA JERARQUÍA DE EVIDENCIA, DE PEOR A MEJOR ────────────────────────────────────────────────── +# 1. El nombre de la receta ......... NO es evidencia. Prohibido (ver docs/licencias-conocidas.tsv). +# 2. La familia / URL de fuente ..... buena para agrupar (X.Org=MIT, KDE Frameworks=LGPL doble). +# 3. La API de licencias de GitHub .. detecta el fichero LICENSE real, pero con DOS pérdidas: +# devuelve identificadores obsoletos y ambiguos (`GPL-3.0` sin decir -only/-or-later) y +# **colapsa las licencias dobles a una sola**. +# 4. El `Cargo.toml` del autor ...... ← ESTO. Una expresión SPDX escrita por quien tiene la potestad +# de licenciar, sin ambigüedad y sin colapsar. Corrige los dos defectos de (3) de una vez. +# +# Ejemplo medido: la API dejó `fd` como `Apache-2.0`; su Cargo.toml dice `MIT OR Apache-2.0`. No era +# falso —cumplir Apache-2.0 basta— pero perdía una opción que el autor concedió. Con esto se recupera. +# +# ── SE PIDE AL TAG QUE LA RECETA PINEA, NO A HEAD ─────────────────────────────────────────────── +# Ésa era la limitación registrada de la detección por API (mira la rama por defecto, no la versión +# que empaquetamos). Acá se prueba `?ref=v` y `?ref=` antes de caer a HEAD, y se +# ANOTA con qué ref se resolvió cada una, para que la tercera columna diga si el dato es exacto o +# aproximado. Un dato con su procedencia se puede auditar; uno sin ella hay que creerlo. +# +# ── LO QUE NO HACE ────────────────────────────────────────────────────────────────────────────── +# `license.workspace = true` (la licencia vive en el workspace padre) y `license-file` (licencia a +# medida, sin SPDX) se DESCARTAN en vez de adivinarse. Y no toca las recetas que no son Cargo: los +# módulos Go no tienen un campo equivalente en `go.mod`, así que ésos siguen dependiendo de (2) y (3). +# +# Uso: scripts/licencias-cargo.sh (escribe docs/licencias-cargo.tsv) +# FORZAR=1 TABLA=docs/licencias-cargo.tsv scripts/licencias.sh --sembrar +set -uo pipefail +ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT" +SALIDA="${SALIDA:-docs/licencias-cargo.tsv}" +JOBS="${JOBS:-12}" + +command -v gh >/dev/null && gh auth status >/dev/null 2>&1 || { echo "!! 'gh' ausente o sin auth"; exit 1; } +TMP=$(mktemp -d); trap 'rm -rf "$TMP"' EXIT + +# Todas las recetas con fuente en GitHub (tengan licencia o no: éste CORRIGE, no sólo rellena). +for f in recipes/*.toml recipes/incoming-*/*.toml; do + [ -f "$f" ] || continue + u=$(grep -m1 -E '^[[:space:]]*(tarball|repo)[[:space:]]*=' "$f" 2>/dev/null) + case "$u" in *github.com*) ;; *) continue ;; esac + n=$(basename "$f" .toml) + v=$(awk -F'"' '/^\[/{exit} /^[[:space:]]*version[[:space:]]*=/{print $2; exit}' "$f") + slug=$(printf '%s\n' "$u" | sed -E 's#.*github\.com[:/]+([^/"]+)/([^/"]+).*#\1/\2#; s/\.git$//') + case "$slug" in */*) printf '%s\t%s\t%s\n' "$n" "$slug" "${v:-}" ;; esac +done | sort -u > "$TMP/obj.tsv" + +echo "==> recetas con fuente en GitHub: $(wc -l < "$TMP/obj.tsv")" + +export TMP +xargs -P "$JOBS" -I{} sh -c ' + n=$(printf "%s" "{}" | cut -f1); slug=$(printf "%s" "{}" | cut -f2); v=$(printf "%s" "{}" | cut -f3) + for ref in "v$v" "$v" ""; do + [ -z "$v" ] && [ -n "$ref" ] && continue + if [ -n "$ref" ]; then q="?ref=$ref"; etiq="$ref"; else q=""; etiq="HEAD(aprox)"; fi + c=$(gh api "repos/$slug/contents/Cargo.toml$q" --jq ".content" 2>/dev/null) || continue + [ -z "$c" ] && continue + lic=$(printf "%s" "$c" | base64 -d 2>/dev/null | awk -F\" "/^\[/{if(t)exit; if(\$0 ~ /^\[package\]/)t=1; next} t&&/^[[:space:]]*license[[:space:]]*=/{print \$2; exit}") + case "$lic" in + ""|*workspace*|*true*) break ;; + *) printf "%s\t%s\t%s\n" "$n" "$lic" "$etiq" >> "$TMP/ok.tsv"; break ;; + esac + done +' < "$TMP/obj.tsv" + +N=$(wc -l < "$TMP/ok.tsv" 2>/dev/null || echo 0) +EXACT=$(grep -vc 'HEAD(aprox)' "$TMP/ok.tsv" 2>/dev/null || echo 0) +{ + echo "# licencias-cargo.tsv — GENERADO por scripts/licencias-cargo.sh. No editar a mano." + echo "#" + echo "# La licencia que el AUTOR declara en su Cargo.toml: expresión SPDX escrita por quien tiene" + echo "# la potestad de licenciar. Sin ambigüedad -only/-or-later y SIN colapsar las dobles ⇒ manda" + echo "# sobre la detección por API de GitHub, que pierde ambas cosas. Sembrar con FORZAR=1." + echo "#" + echo "# Tercera columna = el ref con el que se resolvió. Un tag concreto significa que el dato es" + echo "# de la VERSIÓN QUE EMPAQUETAMOS; 'HEAD(aprox)' que no se halló el tag y puede diferir." + echo "# Total $N · al tag exacto $EXACT · aproximadas $((N-EXACT))" + sort "$TMP/ok.tsv" 2>/dev/null +} > "$SALIDA" +echo "==> $N licencias de Cargo.toml ($EXACT al tag exacto) → $SALIDA" diff --git a/scripts/licencias-detectar.sh b/scripts/licencias-detectar.sh index 470c0f1d..16d96d42 100755 --- a/scripts/licencias-detectar.sh +++ b/scripts/licencias-detectar.sh @@ -53,8 +53,17 @@ export TMP xargs -P "$JOBS" -I{} sh -c ' n=$(printf "%s" "{}" | cut -f1); slug=$(printf "%s" "{}" | cut -f2) lic=$(gh api "repos/$slug/license" --jq ".license.spdx_id" 2>/dev/null) + # ⚠ VALIDAR LA FORMA, NO SÓLO LOS «NO SÉ» CONOCIDOS. Cuando el repo da 404 (renombrado, borrado, + # privado), `gh api` escribe el CUERPO DEL ERROR JSON en stdout y el filtro --jq falla ⇒ `lic` + # queda valiendo `{"message":"Not Found",...}`. Filtrando sólo ""/null/NOASSERTION/other, ese JSON + # pasaba como si fuera una licencia y se escribía en la receta: comillas incluidas, lo que además + # ROMPE el TOML y hace que el ArtifactHash deje de calcularse. Pasó de verdad en 5 recetas el + # 2026-08-07 y lo cazó la verificación de hashes, no la vista. + # ⇒ Regla: aceptar sólo lo que TIENE FORMA de expresión SPDX (letras, dígitos, . - + y los + # operadores OR/AND/WITH). Todo lo demás es un fallo disfrazado de dato. case "$lic" in ""|null|NOASSERTION|other) printf "%s\t%s\n" "$n" "$slug" >> "$TMP/sin.tsv" ;; + *[!A-Za-z0-9.+\ -]*) printf "%s\t%s\n" "$n" "$slug" >> "$TMP/sin.tsv" ;; *) printf "%s\t%s\t%s\n" "$n" "$lic" "$slug" >> "$TMP/con.tsv" ;; esac ' < "$TMP/objetivos.tsv" diff --git a/scripts/licencias.sh b/scripts/licencias.sh index 5a27fa18..2a84d528 100755 --- a/scripts/licencias.sh +++ b/scripts/licencias.sh @@ -63,7 +63,7 @@ case "$MODO" in # ── sembrar: escribir las licencias de la tabla curada ────────────────────────────────────────── --sembrar) [ -s "$TABLA" ] || { echo "!! falta la tabla curada: $TABLA"; exit 1; } - puestas=0; ya=0; sin_receta=0 + puestas=0; ya=0; sin_receta=0; corregidas=0 # TRES campos, no dos: `licencias-detectadas.tsv` añade una tercera columna con el `owner/repo` # consultado (la procedencia, para poder auditar). Leyendo sólo dos variables, `lic` se tragaría # también el slug y se escribiría `license = "MITowner/repo"` en la receta — basura silenciosa, @@ -71,11 +71,32 @@ case "$MODO" in while IFS=$'\t' read -r pkg lic _resto; do case "$pkg" in ''|'#'*) continue ;; esac [ -n "${lic:-}" ] || continue + # ÚLTIMA BARRERA antes de tocar una receta: la licencia tiene que TENER FORMA de expresión SPDX. + # Sin esto, cualquier fallo de una fuente aguas arriba se escribe como si fuera un dato — y el + # 2026-08-07 pasó: un cuerpo de error JSON de la API de GitHub acabó dentro de 5 recetas, con + # comillas, rompiendo el TOML y dejando de calcularse su ArtifactHash. Validar en el sitio que + # ESCRIBE es lo que corta la clase entera de fallo, no sólo el caso conocido. + case "$lic" in + *[!A-Za-z0-9.+\ -]*) echo " ?? $pkg: descarto licencia con forma inválida: $(printf '%.40s' "$lic")"; continue ;; + esac hallada=0 for f in recipes/"$pkg".toml recipes/incoming-*/"$pkg".toml; do [ -f "$f" ] || continue hallada=1 - if tiene_licencia "$f"; then ya=$((ya+1)); continue; fi + if tiene_licencia "$f"; then + # FORZAR=1: reemplazar lo ya declarado. Sólo tiene sentido con una fuente MÁS autoritativa + # que la que puso el valor actual — el caso real es `licencias-cargo.tsv`, la declaración + # del propio autor, que corrige los dos defectos de la detección por API (SPDX ambiguo y + # licencias dobles colapsadas). Con la tabla curada NO se usa: pisaría a mano lo verificado. + if [ "${FORZAR:-0}" = 1 ] && [ "$(licencia_de "$f")" != "$lic" ]; then + esc=$(printf '%s' "$lic" | sed 's/[&/\]/\\&/g') + sed -i "0,/^[[:space:]]*license[[:space:]]*=.*/s//license = \"$esc\"/" "$f" + corregidas=$((corregidas+1)) + else + ya=$((ya+1)) + fi + continue + fi # Insertar DESPUÉS de la línea `version = ...`, que está en la raíz del TOML y antes de # cualquier `[table]`. Es el único sitio seguro (ver la trampa de TOML en la cabecera). if grep -qE '^version[[:space:]]*=' "$f"; then @@ -90,7 +111,7 @@ case "$MODO" in done [ "$hallada" = 0 ] && sin_receta=$((sin_receta+1)) done < "$TABLA" - echo "==> sembradas $puestas · ya tenían $ya · en la tabla pero sin receta $sin_receta" + echo "==> sembradas $puestas · corregidas $corregidas · ya tenían $ya · sin receta $sin_receta" echo "==> verificá que el hash NO se movió: ./scripts/store-gc.sh (debe dar los mismos vigentes)" ;; @@ -139,6 +160,23 @@ case "$MODO" in done pct=0; [ "$tot" -gt 0 ] && pct=$((con*100/tot)) echo "==> licencias declaradas: $con de $tot recetas (${pct}%)" + + # ── GUARDIÁN: licencias con FORMA INVÁLIDA ─────────────────────────────────────────────────── + # El 2026-08-07 se escribió el cuerpo de un error JSON de la API de GitHub dentro de 5 recetas + # (`license = "{"message":"Not Found",...}"`). Las comillas rompen el TOML ⇒ esas recetas dejaron + # de parsear y de tener ArtifactHash, y así se COMMITEARON. No lo vio nadie leyendo: lo cazó la + # comparación de hashes. Por eso el informe lo comprueba SIEMPRE y sale distinto de cero: un dato + # con forma imposible es un fallo aguas arriba disfrazado de dato, y hay que verlo sin buscarlo. + malas=0 + for f in $(recetas); do + l=$(licencia_de "$f") + [ -z "$l" ] && continue + case "$l" in *[!A-Za-z0-9.+\ -]*) echo "!! FORMA INVÁLIDA en $f: $(printf '%.50s' "$l")"; malas=$((malas+1));; esac + done + if [ "$malas" -gt 0 ]; then + echo "!! $malas recetas con licencia de forma imposible — probablemente TOML roto. Arreglar YA." + exit 1 + fi if [ "$con" -gt 0 ]; then echo "==> reparto:" sort /tmp/.lic-cuenta.$$ | uniq -c | sort -rn | head -25 | sed 's/^/ /'