diff --git a/src/assets/gpg/node.asc b/src/assets/gpg/node.asc new file mode 100644 index 000000000..babf9418c --- /dev/null +++ b/src/assets/gpg/node.asc @@ -0,0 +1,386 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: C0D6 2484 39F1 D560 4AAF FB40 21D9 00FF DB23 3756 +Comment: Antoine du Hamel + +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 +Th80Z8v5rFX5xNw+zn0Ee+yr +=ffS3 +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: DD79 2F59 73C6 DE52 C432 CBDA C77A BFA0 0DDB F2B7 +Comment: Juan José Arboleda + +xjMEZAFttBYJKwYBBAHaRw8BAQdA9UUQNclFp0rIrgtQnNw6BgjDINkFPoVbuS4H +sQNEf+fNLEp1YW4gSm9zw6kgQXJib2xlZGEgPHNveWp1YW5hcmJvbEBnbWFpbC5j +b20+wpMEExYKADsWIQTdeS9Zc8beUsQyy9rHer+gDdvytwUCZAFttAIbAwULCQgH +AgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDHer+gDdvyt3PYAP9A8XbvZYT+N7k9 +2xnRMfrAUep6TLfWbx9uf7k/hm/+KAEAmqUYV1afcuwU2xXE5I8m25VMnCEKFFEF +52tW2baWkQXOOARkAW20EgorBgEEAZdVAQUBAQdAtwscgbxby3vew2hn9F+KlVPL +vFBPjnvODcnsqlO2mXQDAQgHwngEGBYKACAWIQTdeS9Zc8beUsQyy9rHer+gDdvy +twUCZAFttAIbDAAKCRDHer+gDdvytzxaAQDvYX4o1Y6R30bYwIXemGgbO8GlCkgk +5it7MjeSk8vUygEApE5zIi5OtP8TlPiMgu2MoJbIltqqDCKWTtHPIQRNIwk= +=KIdF +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: CC68 F5A3 106F F448 322E 48ED 27F5 E38D 5B0A 215F +Comment: marco-ippolito + +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 +ZWf0a3VP6Gco5bmDPhvGoLEs9Vw5 +=ITi7 +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 ++mUtYmxlPSkZZoKl +=RlGS +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: 890C 08DB 8579 162F EE0D F9DB 8BEA B4DF CF55 5EF4 +Comment: RafaelGSS + +xsDNBGKD3OQBDAC3ESxNd7dHfM7Hl3sE7Xn2osS4UZkJtmXA7hdbfybzf164wCbL +cYECq0GrGfgdnKEMWNzr2S08KkUWQwJZd70Jt1voVpqWVXdtBH/KxGwifixMkTEy +lu0ePvJM7L5HNOIZP5njcAU03hKgIibYQW+SWj/G37yfdyNprN2uX8p4CUyJbnBc +YOZ2W1tUzNsddvTV03JlDmfR5kwHoi5sTCqvQWTzsIQn/vGHxMqa3XjabfSvim1A +ytE1J7VIiu7P9hW1prEfUVY5+ggswUCfJl4A4WcCwFLIaIdOreiakAix7Hn5AD4D +lyskTzDy6QRpzFVm6YyrKzUzggqa+bQ5/9aq8LdKVim/f/LmEuSQdwkEt0rOWhAX +YJQrnJT8IFLqmgnJEygGkwcdXOBGRERRB8Mes0rfrgYHYW0WqGI5fMxyL1Ti9w+0 +AH6QFq1IoWZY8bzGk1bJe57lgJrshavpSc1ftKTqsFAoLYDsMF6lxkNyS7+OZMIx +U9hbvuJgdPj7/lUAEQEAAc0jUmFmYWVsR1NTIDxyYWZhZWwubnVudUBob3RtYWls +LmNvbT7CwRQEEwEKAD4WIQSJDAjbhXkWL+4N+duL6rTfz1Ve9AUCYoPc5AIbAwUJ +A8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRCL6rTfz1Ve9IWOC/0bSb8L +UFtOXaV87UTkfNHqe+0JIbZh9kpFKX5E8PSIkRUAMH+yJbx+tw+6OKWf1Ofu4NU4 +Kc6T2wXqH8k0XF0mIYlJf6sZWrrqYVcyPLKGmGHXrMfywg8QGlPhD2ZHrVermfVM +fA40v/1QpHAOfW2OZpJq/7GlrXrpaXK/BCjO0GBQu1omQwe/NPBXIHeSyamR6iex +WvcEWszAdcCKaQrRMVZdJ7v3OGG/KtviW5c1qH97gfulrOgqQ9Phj5ABu1yD55AH +SXlhRUcWzAeTYdvzNDT+PYC9IPaAHg05tRfl8tlX+CdZU41cQKKIhypPgxlxsR6z +mWb2FinuKDeHtb7gcUqBhrxXbqQDfcWf9YxdTtbbxnObQ2vhWbscftVOBDieXFEZ +vNCv2fz/uYHTWGew4Sio1esgE88yWBSE55liZgBKdh2LgYOr5kWnr1eoGjgukd2c +Rv+HOJYSxwyfBTjT7lTFuPz02t89JEt1AgmyLwWfvPwu3IsbkLZNgDnoshnOwM0E +YoPc5AEMAN+Z6DX1O0fLkt0lq+N70gmO+AlFI9l4L2HKBiPCMMPCXP/iX/04zVzm +6n3rl5ypNo+Q4um6eGwL9UGrzUJSwcD0nsvK8U+SVyDpp8e3i4+ph2XRiC5Bkktf +gye2vTAgE9clqnDpQGnaQ689gOd9nPQAUqNXnibuZsnETusbu/+HQDqM4wdSxTGX +Q4PaqjmyATeUcTVwh8bzdBOLZ8O2eilFgNhY30cycxevI68SnLzPz7riXTQo0pKb +f6hvK5kn3nULn5l7b+QFtuVbffe9vo3J3OT8lEX9Cvd73y01fgDRXs5j1Zbg5OaO +MXqMthbndq+enlhkD4vyCF07LkuHBk8lMX1yUVysMx/iqN7YS/2ZEMkJt095Q/6D +cNigEUpTvgtPJYxHam1uXQb3Ellhap/YeCkkgOs2FOeytaIR8na/A7TjPwOM6v/t +ar+ENQDF1nChrqhlLin9j+kyiwkTypWJ0kmyU58fZGvlSh1JfjVNaMuM4f6xoFQF +b88Au4p8swARAQABwsD8BBgBCgAmFiEEiQwI24V5Fi/uDfnbi+q0389VXvQFAmKD +3OQCGwwFCQPCZwAACgkQi+q0389VXvSWogv/aha894ratff+Dxq9bCvcl6n+HNRh +6vAiDlaLM5c8S2B4qA1BvlylavjGuVy/lQyr4NYl7CeMn7aRB9/am2HiIt7dSI6M +jsv0lXTzIXQgGjyrK14rO6HgB9TI22H+8W2g+zzWR3RQ76NyVnHHil0YeHpj4LpZ +bFNTKUpAOjv1vopWe7gkkjGFTw4rtZqLbXOYtcQWvb00x/UG928konaKwpNELX5w +KPxxsOPpGciKSS8Oq/K5KGTmnafJgObQgwB6AwrL2wBfuGTXQAMMs4PN48xAijsk +GjuGFxarBM/CvZ83L1OqRB+0g6T0Z1gHpq1s7t2WybE7KZh21yQuWN42QH6HLk7G +zbx9HodmUrdHoqPhzXfnmMtlCXefdyYDPvFjwEn7w1P8wey/USOQAEybYQKbWzSd +ZO6LnLNFwBaN3+PyItW97aNoeiJRtDFaNggTICHCcPlope/4LYkrLQjPX35+Mt0c +0N1iYrLUzLmu1v56i/h6AgpNU4VXo+mHhSxK +=S8HY +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=Tuyc +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +AI4= +=OmyH +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: A363 A499 291C BBC9 40DD 62E4 1F10 027A F002 F8B0 +Comment: ulises Gascon + +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 +LoXBSnU/UEHGsFNO +=TbED +-----END PGP PUBLIC KEY BLOCK----- diff --git a/src/assets/gpg/swift.asc b/src/assets/gpg/swift.asc new file mode 100644 index 000000000..f2c27c1c1 --- /dev/null +++ b/src/assets/gpg/swift.asc @@ -0,0 +1,90 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2 + +mQINBGGJWe0BEADGVbVhCEWnCMdAoxCaUaCPNomG5wdzw+sgx8FvqCFiGqYq/qzN +ckaydk+XWfiDT/Vo/NjMYnUJ0+gdSua1X0IUGqQlATYhKSGTHqgab4nwDCym0nFl +SBHPDgmMTNO57dHSGYduPjuisuhq7i0pybyn/oXuHAW5SIlz7bfpaz2jzFDY4xEP +TXImllHOmTxBsDdwv2J+H158w1NSHJoHeXpPIse3VHlcwJVNeGYMiDx4Qw9TfaL5 +fI7GgjbcELCXw/pGjbiz/JFX7Fzm4snesnqwIG3TN4kH3BdKRNMFnyN3zNZxQTaZ +LNCr3NCzhmmWTjeX5VSu6C+W8wuYRAThqJ42HpPR78zgv6pMnHgdhqquqAfL/Oid +XlISbQ4bSdc1y8xkLb86pzwzrLV3LmHjJ3NAi9U1QXygW0ikTgbB9LPzaTSGVU+y +0PMQ6JrRfSvyt5G7RmVzqm1ro8fkmeZBjNUf7GXCldn9linbhKzh/IvvPTYeNhIK +T99giWSChvZyR950vE5a4WEYKV3taJRLCqXHH1d7FKC080pvPR9VsqWB/thQ48Vr +dPleEa6O9IFMDudpOfsXTnHtnO7wKssN9RtxpotRukIhLGWxjHED3Rrt93T+IMQz +kpKz+Tcz/koM8SuAcYX15N/jeW8BzgA6Y6ODI/OSAMBzMQUYME5S7F7xOwARAQAB +tEZTd2lmdCBBdXRvbWF0aWMgU2lnbmluZyBLZXkgIzQgPHN3aWZ0LWluZnJhc3Ry +dWN0dXJlQGZvcnVtcy5zd2lmdC5vcmc+iQJUBBMBCgA+AhsDBQsJCAcDBRUKCQgL +BRYCAwEAAh4BAheAFiEE6BPIkoIKb6E3VbJo8WffGs+c4GkFAmVN6ZMFCQeG9qYA +CgkQ8WffGs+c4Glz3BAAl1MjB02h+TNnnmHg0RWSGUzIBpFEXQ8ojoQFhudloVlu +2zkdTzznXXpmuBH4QQTI0igPQyVQkOEXPAP05geeqOvlGm4wnwtw486Q5vTGxgn1 ++WjS3OMHFFS4y0GiOciRtu6WhwFOv6c2eSLIOmoDDvsb4js+YqtZ3fFcim/6gmRX +cKsEWzFyIcAxgm8iDks/sdqX2XQhkBuZ1bs3mOGGZnj8N2reNv0POJ/QTg9s5ydI +2NylO66kDmsNu7z5jkLg/Ol7eGuYvzwKIvdasHU2kd9gCPX/6B7mmUSK8LIiD9UN +D6wetgkT/ov9XhYWWKZxYM2sPJVhVRLkMZkNjxSS7GRWeYgkfca+xE2xm8KgbnpZ +CC2F4b9g9tCLH5LW93SXL2pdurimE9pa26A0t8C7/CBwV2YkvUP3oBIVKH+vEB+m +tS9H/VVaoflL/UPBPV7k1Nd8pgDxfUx+hDGW6wNrMyJSvykypWte5Xrk5q/TVTuZ +wOZVyyH6mMxWPKyYiUU6rcFu9kMkRNodBB6E/IT/oQ2EFCBAbKAGeMWii4OJtwfu +3W1lC4GFNCE5Ae6V5ew++5GjN+5fVJnjyY0rbKvLPHa+y0Rkojw+w6avXKmCF4JR +iPwYZF0RD0fuidRNNDG8HIZZq9fTuC2RWpdAk403/j9ary56FYxsYqyZ5saMn4w= +=RrPQ +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2 + +mQINBFyUJhwBEADDBN6jVDScsgzfQDxSQga0Og4O3N/nIquwi/DGOgsAsTMWcVA1 +gmRJb792vWa9CmnHILl3ap8zObDSbcXg90nx+eCzWJjG+Ud5c7xuam96NR8ntKmU +8+BbH/dp8zc9WJB37TiWcaLsddrn58zfm7Ml6P9M48WAeRJX8nxVBTw1SjXJurW0 +Ab8LOgfb60I09Skq72Ud7HaYJOG03iNTf6qLlF977OQsHCb21BnKSAmJqapUS96/ +VOngz7TBzYz4rntfetb8hg28WtUl1s5BQzWaFunkP03b8mPh3PL1SZxutwViVWBu +hf9kJtx/MLb79fnuJEOus1FvDqJdpd83H+XmXMIDYWgcBIBVrLT5HDtRerjF178H +okb1F+gboGIqhnx25xTPIYctSHPgJRScZp4WKrqQLKswAmSL4YJXnkXSff05l4gE +WXQpEMLBZa46qmu8lj8HfoZSbP9lfvEtZ6A+Q3sfh3gjYPv7e6n37x22tSgvyzCb +jHU1pA2rv10AHK7EIeEQElN+zCyAbmKuhPBiCyxDFg5Dx3xNkYwg9szBJ0KleVD4 ++Y3PZJ4N+u+SSATYnHGtmzvkhiNtqJCCwuaqY+jjVObzzqvLLtGjtjxNUWi2X4He +q+r2fubjCOW14UnQ06qfr3mVUSmuLSKs8BD8qTGuqlgcenGsY0bk0qUPcwARAQAB +tD5Td2lmdCA1LnggUmVsZWFzZSBTaWduaW5nIEtleSA8c3dpZnQtaW5mcmFzdHJ1 +Y3R1cmVAc3dpZnQub3JnPokCPAQTAQoAJwIbAwULCQgHAwUVCgkICwUWAgMBAAIe +AQIXgAUCZBiLlAUJC0bMeAAKCRCSXMHM7T0VYSogD/i38g/nf1JSDrWMWVKLzTWA +MO9V9JR1wcxx3YNQmGPzUv+gdXgOv8kWSKSJ5zopTrWJg/AJ6etShX7HpjXeHULp +aJGLohlMQuPCqD2+HvxpY67iA9i49owkzQI4gSIC6UwtCluWQCgcz2qE5zBWB1nK +ImegSYn9mHIooJ9em4UwHdEDztWPYeB192M+Eq1+HK3BlEFDrMxWdzVuEQ+oGslm +4Z5apV+r65fQa9T4rRxOpau8T9tKpXfaw+IzUDUE4PRTOyOkR8AOFm9hIg5KlV9z +1bhDRS4Xpb6i3H91OyGROoB6QsTCmVGnSw35bzYjlOc5I1bAtqJu3EC30gV97kCj +btm/cQLb+su/DEwjp4/lRtQagmRmHUuvJyPA+WNNiPYY/Ldzfy3w/SK4eJqM3Ctv +iEs+btFLg4yXCBmL6UFZ4rmZ++x11DoW9l63b/9PJYPASXBGXamqsrMvX+IozjQ1 +CzlI8Pi5XwZfa/yAMiNXTveKItZJFUl4L4xMz2Fk6q8vByb5P2TziooTNtpjJedg ++W2ZNKatqZtvqowJlr9utWmogInrlv+YSLXN43kVt/X+Dbi1qzIE0FnApLPJEw+x +nuahcoGN56UfxsdlmMDQ1QWs0Zp1DzXGOwAo9ciEIxrqlxR7N8rMluDv9vltVnZZ +1p6hhnwu6nXqf83I5GJK +=77jt +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v2 + +mQINBGbolYEBEADEvoijjZaq+5hLyiOHMns6+i/1mxczO5g9ZuXANYMI5uKXNgED +dWoJRJV1DKwY+1f9oBdcEctD0um4LY6346p38SJOurk/zRqlEx25sAq0bbOn0epE +BrOkHnmgBp+C5gWgrk+gKGjOXw63m2ipKp5joxP7QI7iplb7LRHnqOWqVFPF6c+A +y5zq7/FFfECwHYdkS3IV8uYG0qPmKDYoJgqCbySGzbHTiawFt8OJS5xYqzhXrClh +KMJf6orq8gNF4eBwa6FkyJFyPf/s8mbW3wREirL9DFinurMK68pUA7SDxLsegGgt +2PVse5o+1TVcKTDTCV0v5gmiQyXIUzvB87GaJLVIEIwYb08jtSBMvVLdVIpWv6RJ +bi7za2LvfaCBcpSAbqCtoq/lk9NYrXs8uiENxW0srIWoKoe6Gfvz0XvJEjJPIMNH +cy/42Nt3kgn6V3lHTioTPhxyEJ8AZ+s7yIeVR5fYuxdlVwe6zhiwvGtjWLmjTZBY +RbXayDV3ekNL3rEQ4qhXrvcmW0/v7n+vzf6a7Wog6R4pHr67BafM3v9M6jpu4Lqk +mLyXU/lX1+VTzKz7vDCz8CXafYUP8wFYGGW73xzd6Kho8vya1E4WNg+UPnYcu2SV +TkQe50I2Ik95QEAEdG3DJrLiGuLwH170KgeMYpWffNLtUNH1oCkh1lj8jQARAQAB +tEVTd2lmdCA2LnggUmVsZWFzZSBTaWduaW5nIEtleSA8c3dpZnQtaW5mcmFzdHJ1 +Y3R1cmVAZm9ydW1zLnN3aWZ0Lm9yZz6JAj0EEwEKACcFAmbolYECGwMFCQPCZwAF +CwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQ74CoZrR6mB/DIhAAnSHnGfRpr/0A +98dWa2uM2tt4oGT1+SN+va544/vu6CAc9jhvS871GvHe25B5HL5S6MDF3dim3oQe +zIGaIx3DUhbb0/JLeayL3NfhbCed5DX0W1XIQtksjYuHnvBRD+zrhcTQKqumR+LU +NVOh6l4o2Ko+aAYc8mIm+HufryRKJSWup1ZnExEdcZZEzyY4kT0H1fxAIWWU3NI1 +LDtq1O0Wl5CTUHU7mI/h2eWrxFDg4SmfV9dv4uBXyvxherHEhImJXceQ4ZkxvYGF +amXjlNzIr8c6y/IE8Q775nkfG5+4Gt+bGIJqxeSzfc4wq+txMa85TtRpgSthgqFi ++yQx5qghs3y8Pqj3kDatJB41oQZ221WbBRc2uvFDMWUaOtJ/pRymCN54FUwxUm6U +aM4VTWbGw0es1QRO+Px25Thoh8a5a3Fu0s9fa1sDJOUYSc7vfyRUfqNOVv5g8rnS +sPTmOGGjrjxWHA0oL7B5hxCR+/jBhw+6mLu18qwGI7YpgyZYSzowPY+LrMm/J973 +SyUtlCb2o42WhDR9FsX0AGvLhZpxy4Q7br7Pa2RXwmWEaxZik0iQ2Sg4pEvL5tVd +aFIUvVsFlayfXSBCZVjH0uyh0Vkk1ERZpSmxkRWgzp5MRIfkP5eh9009uhEUmxHV +Yih/un915S6ObH32x1IbJfi0cGK1NUA= +=sWSN +-----END PGP PUBLIC KEY BLOCK----- diff --git a/src/env.rs b/src/env.rs index ef11cd815..7a53df9ca 100644 --- a/src/env.rs +++ b/src/env.rs @@ -124,6 +124,9 @@ pub static MISE_BIN_NAME: Lazy<&str> = Lazy::new(|| filename(&ARGV0)); pub static MISE_LOG_FILE: Lazy> = Lazy::new(|| var_path("MISE_LOG_FILE")); pub static MISE_LOG_FILE_LEVEL: Lazy> = Lazy::new(log_file_level); +pub static HTTP_PROXY: Lazy> = + Lazy::new(|| var("https_proxy").or_else(|_| var("http_proxy")).ok()); + pub static __USAGE: Lazy> = Lazy::new(|| var("__USAGE").ok()); // true if running inside a shim diff --git a/src/git.rs b/src/git.rs index 2edd5fae2..f0cd19cce 100644 --- a/src/git.rs +++ b/src/git.rs @@ -1,4 +1,4 @@ -use std::env; +use crate::env; use std::fmt::Debug; use std::path::{Path, PathBuf}; @@ -260,11 +260,11 @@ impl Git { } } -fn get_fetch_options() -> Result> { +fn get_fetch_options() -> Result> { let mut fetch_options = FetchOptions::new(); - if let Ok(proxy_url) = env::var("https_proxy").or_else(|_| env::var("http_proxy")) { + if let Some(proxy_url) = env::HTTP_PROXY.as_ref() { let mut proxy_options = ProxyOptions::new(); - proxy_options.url(&proxy_url); + proxy_options.url(proxy_url); fetch_options.proxy_options(proxy_options); } Ok(fetch_options) diff --git a/src/gpg.rs b/src/gpg.rs new file mode 100644 index 000000000..60bf7e37f --- /dev/null +++ b/src/gpg.rs @@ -0,0 +1,20 @@ +use crate::cmd::CmdLineRunner; +use crate::install_context::InstallContext; +use crate::Result; + +pub fn add_keys_node(ctx: &InstallContext) -> Result<()> { + add_keys(ctx, include_str!("assets/gpg/node.asc")) +} + +pub fn add_keys_swift(ctx: &InstallContext) -> Result<()> { + add_keys(ctx, include_str!("assets/gpg/swift.asc")) +} + +fn add_keys(ctx: &InstallContext, keys: &str) -> Result<()> { + CmdLineRunner::new("gpg") + .arg("--quiet") + .arg("--import") + .stdin_string(keys) + .with_pr(ctx.pr.as_ref()) + .execute() +} diff --git a/src/main.rs b/src/main.rs index 0d9386793..09e367e01 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,6 +39,7 @@ mod fake_asdf; mod file; mod git; pub(crate) mod github; +mod gpg; mod hash; mod hook_env; mod hooks; @@ -70,6 +71,7 @@ mod versions_host; mod watch_files; pub(crate) use crate::exit::exit; +pub(crate) use crate::result::Result; pub(crate) use crate::toolset::install_state; use crate::ui::multi_progress_report::MultiProgressReport; diff --git a/src/plugins/core/node.rs b/src/plugins/core/node.rs index d0f6ca4f6..b50665cde 100644 --- a/src/plugins/core/node.rs +++ b/src/plugins/core/node.rs @@ -10,7 +10,7 @@ use crate::http::{HTTP, HTTP_FETCH}; use crate::install_context::InstallContext; use crate::toolset::ToolVersion; use crate::ui::progress_report::SingleReport; -use crate::{env, file, hash, http, plugins}; +use crate::{env, file, gpg, hash, http, plugins}; use eyre::{bail, ensure, Result}; use serde_derive::Deserialize; use std::collections::BTreeMap; @@ -205,21 +205,7 @@ impl NodePlugin { let sig_file = shasums_file.with_extension("asc"); let sig_url = format!("{}.sig", self.shasums_url(v)?); HTTP.download_file(sig_url, &sig_file, Some(ctx.pr.as_ref()))?; - CmdLineRunner::new("gpg") - .arg("--keyserver") - .arg("hkps://keys.openpgp.org") - .arg("--recv-keys") - .arg("--quiet") - .arg("C0D6248439F1D5604AAFFB4021D900FFDB233756") // Antoine du Hamel - .arg("DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7") // Juan José Arboleda - .arg("CC68F5A3106FF448322E48ED27F5E38D5B0A215F") // Marco Ippolito - .arg("8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600") // Michaël Zasso - .arg("890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4") // Rafael Gonzaga - .arg("C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C") // Richard Lau - .arg("108F52B48DB57BB0CC439B2997B01419BD92F80A") // Ruy Adorno - .arg("A363A499291CBBC940DD62E41F10027AF002F8B0") // Ulises Gascón - .with_pr(ctx.pr.as_ref()) - .execute()?; + gpg::add_keys_node(ctx)?; CmdLineRunner::new("gpg") .arg("--quiet") .arg("--trust-model") diff --git a/src/plugins/core/swift.rs b/src/plugins/core/swift.rs index a5575680a..14c74e3f3 100644 --- a/src/plugins/core/swift.rs +++ b/src/plugins/core/swift.rs @@ -6,7 +6,7 @@ use crate::http::HTTP; use crate::install_context::InstallContext; use crate::toolset::ToolVersion; use crate::ui::progress_report::SingleReport; -use crate::{env, file, github, plugins}; +use crate::{env, file, github, gpg, plugins}; use eyre::Result; use std::path::{Path, PathBuf}; use tempfile::tempdir_in; @@ -109,15 +109,7 @@ impl SwiftPlugin { .println("gpg not found, skipping verification".to_string()); return Ok(()); } - self.gpg(ctx) - .arg("--quiet") - .arg("--keyserver") - .arg("hkp://keyserver.ubuntu.com") - .arg("--recv-keys") - .arg("E813 C892 820A 6FA1 3755 B268 F167 DF1A CF9C E069") - .arg("A62A E125 BBBF BB96 A6E0 42EC 925C C1CC ED3D 1561") - .arg("52BB 7E3D E28A 71BE 22EC 05FF EF80 A866 B47A 981F") - .execute()?; + gpg::add_keys_swift(ctx)?; let sig_path = PathBuf::from(format!("{}.sig", tarball_path.to_string_lossy())); HTTP.download_file(format!("{}.sig", url(tv)), &sig_path, Some(ctx.pr.as_ref()))?; self.gpg(ctx) diff --git a/tasks.md b/tasks.md index 1c376b738..396a765ab 100644 --- a/tasks.md +++ b/tasks.md @@ -71,6 +71,10 @@ run a command inside of development docker container - **Usage**: `docs:setup` +## `fetch-gpg-keys` + +- **Usage**: `fetch-gpg-keys` + ## `filetask` - **Usage**: `filetask [-f --force] [-u --user ] [file] [arg_with_default]` diff --git a/xtasks/fetch-gpg-keys b/xtasks/fetch-gpg-keys new file mode 100755 index 000000000..0b7a4d535 --- /dev/null +++ b/xtasks/fetch-gpg-keys @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -euxo pipefail + +NODE_FINGERPRINTS=( + "C0D6248439F1D5604AAFFB4021D900FFDB233756" # Antoine du Hamel + "DD792F5973C6DE52C432CBDAC77ABFA00DDBF2B7" # Juan José Arboleda + "CC68F5A3106FF448322E48ED27F5E38D5B0A215F" # Marco Ippolito + "8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600" # Michaël Zasso + "890C08DB8579162FEE0DF9DB8BEAB4DFCF555EF4" # Rafael Gonzaga + "C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C" # Richard Lau + "108F52B48DB57BB0CC439B2997B01419BD92F80A" # Ruy Adorno + "A363A499291CBBC940DD62E41F10027AF002F8B0" # Ulises Gascón +) + +rm -rf src/assets/gpg +mkdir -p src/assets/gpg +for fingerprint in "${NODE_FINGERPRINTS[@]}"; do + curl -fLSs "https://keys.openpgp.org/vks/v1/by-fingerprint/$fingerprint" >> "src/assets/gpg/node.asc" +done +curl -fLSs "https://swift.org/keys/automatic-signing-key-4.asc" >> src/assets/gpg/swift.asc +curl -fLSs "https://swift.org/keys/release-key-swift-5.x.asc" >> src/assets/gpg/swift.asc +curl -fLSs "https://swift.org/keys/release-key-swift-6.x.asc" >> src/assets/gpg/swift.asc