difftreelog
feat move secret generation helpers to core
in: trunk
13 files changed
Cargo.lockdiffbeforeafterboth330 packageslockfile v3
Might be heavy and slow!
abort-on-drop
0.2.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5dd6d700ad9af641490c1f7d67980d2de4d1433016e5b12f819448d3c832142adepends onused byaddr2line
0.21.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cbdepends onused byadler
1.0.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35feused byaead
0.5.2crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0depends onaes
0.8.3crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2depends onused byaes-gcm
0.10.3crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1used byage
0.9.2crates.io↘ 29↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6d55a4d912c80a92762ffd1c884065f3f9646467d22c95390e824a0ff7def472depends on- aes
0.8.3 - aes-gcm
0.10.3 - age-core
0.9.0 - base64
0.13.1 - bcrypt-pbkdf
0.9.0 - bech32
0.9.1 - cbc
0.1.2 - chacha20poly1305
0.10.1 - cipher
0.4.4 - cookie-factory
0.3.2 - ctr
0.9.2 - curve25519-dalek
3.2.0 - hkdf
0.12.4 - hmac
0.12.1 - i18n-embed
0.13.9 - i18n-embed-fl
0.6.7 - lazy_static
1.4.0 - nom
7.1.3 - num-traits
0.2.17 - pin-project
1.1.3 - rand
0.7.3 - rand
0.8.5 - rsa
0.7.2 - rust-embed
6.8.1 - scrypt
0.10.0 - sha2
0.10.8 - subtle
2.5.0 - x25519-dalek
1.1.1 - zeroize
1.7.0
- aes
age-core
0.9.0crates.io↘ 9↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume3d2e815ac879dc23c1139e720d21c6cd4d1276345c772587285d965a69b8f32depends onused byaho-corasick
1.1.2crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0depends onalejandra
3.0.0github.com/kamadorueda/alejandra↘ 3↖ 1sourcegit+https://github.com/kamadorueda/alejandra#e53c2c6c6c103dc3f848dbd9fbd93ee7c69c109fdepends onused byandroid_system_properties
0.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311depends onused byandroid-tzdata
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0used byansi-str
0.8.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1cf4578926a981ab0ca955dc023541d19de37112bc24c1a197bd806d3d86ad1ddepends onused byansitok
0.2.0crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum220044e6a1bb31ddee4e3db724d29767f352de47445a6cd75e1a173142136c83anstream
0.6.5crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6depends onused byanstyle
1.0.4crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87anstyle-parse
0.2.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928cdepends onused byanstyle-query
1.0.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648depends onused byanstyle-wincon
3.0.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7depends onused byanyhow
1.0.77crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9arc-swap
1.6.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6used byasync-trait
0.1.77crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9depends onused byatty
0.2.14crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8depends onused byautocfg
1.1.0crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fabacktrace
0.3.69crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837depends onused bybase64
0.13.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8used bybase64
0.21.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9used bybcrypt-pbkdf
0.9.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3806a8db60cf56efee531616a34a6aaa9a114d6da2add861b0fa4a188881b2c7depends onused bybetter-command
0.1.0workspace↘ 6↖ 1bitflags
1.3.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718aused bybitflags
2.4.1crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07depends onblock-buffer
0.10.4crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71depends onused byblock-padding
0.3.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93depends onused byblowfish
0.9.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7depends onused bybumpalo
3.14.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aecused bybytecount
0.6.7crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205used bybyteorder
1.5.0crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64bbytes
1.5.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223used bycbc
0.1.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6depends onused bycbitset
0.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum29b6ad25ae296159fb0da12b970b2fe179b234584d7cd294c891e2bbb284466bdepends onused bycc
1.0.83crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0depends oncfg-if
1.0.0crates.io↘ 0↖ 14sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbaf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fdchacha20
0.9.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818depends onused bychacha20poly1305
0.10.1crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35used bychrono
0.4.31crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38depends onused bycipher
0.4.4crates.io↘ 3↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3daddepends onclap
4.4.12crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdcfab8ba68f3668e89f6ff60f5b205cea56aa7b769451a59f34b8682f51c056ddepends onclap_builder
4.4.12crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9depends onused byclap_derive
4.4.7crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442used byclap_lex
0.6.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1used bycolorchoice
1.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumacbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7used byconsole
0.15.7crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8used byconst-oid
0.9.6crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8used bycookie-factory
0.3.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126bused bycore-foundation-sys
0.8.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868fused bycountme
2.0.4crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum328b822bdcba4d4e402be8d9adb6eebf269f969f8eadef977a553ff3c4fbcb58used bycpufeatures
0.2.11crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0depends oncrypto-common
0.1.6crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3ctr
0.9.2crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835depends onused bycurve25519-dalek
3.2.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61used bydashmap
5.5.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856used byder
0.6.1crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4dedepends onderanged
0.3.11crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4depends onused bydigest
0.9.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066depends onused bydigest
0.10.7crates.io↘ 4↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292dirs
5.0.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225depends onused bydirs-sys
0.4.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321cused bydisplaydoc
0.2.4crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175ddepends onused byeither
1.9.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07used byencode_unicode
0.3.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831fused byenv_logger
0.10.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbeceused byequivalent
1.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5used byerrno
0.3.8crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245depends onused byfastrand
2.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5used byfind-crate
0.6.3crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2depends onfleet
0.2.0workspace↘ 34↖ 0depends on- abort-on-drop
0.2.2 - age
0.9.2 - age-core
0.9.0 - anyhow
1.0.77 - async-trait
0.1.77 - base64
0.21.5 - better-command
0.1.0 - chrono
0.4.31 - clap
4.4.12 - futures
0.3.30 - hostname
0.3.1 - human-repr
1.1.0 - indicatif
0.17.7 - itertools
0.11.0 - nixlike
0.1.0 - once_cell
1.19.0 - openssh
0.10.2 - owo-colors
3.5.0 - peg
0.8.2 - r2d2
0.8.10 - regex
1.10.2 - serde
1.0.193 - serde_json
1.0.108 - shlex
1.2.0 - tabled
0.14.0 - tempfile
3.9.0 - time
0.3.31 - tokio
1.35.1 - tokio-util
0.7.10 - tracing
0.1.40 - tracing-indicatif
0.3.6 - tracing-subscriber
0.3.18 - unindent
0.2.3 - z85
3.0.5
- abort-on-drop
fleet-install-secrets
0.1.0workspace↘ 10↖ 0fluent
0.16.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7depends onfluent-bundle
0.15.2crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffddepends onused byfluent-langneg
0.13.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94depends onfluent-syntax
0.11.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78depends onfnv
1.0.7crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1used byfutures
0.3.30crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0depends onused byfutures-channel
0.3.30crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78depends onfutures-core
0.3.30crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1dfutures-executor
0.3.30crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01dused byfutures-io
0.3.30crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1futures-macro
0.3.30crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489acdepends onused byfutures-sink
0.3.30crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5futures-task
0.3.30crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004futures-util
0.3.30crates.io↘ 10↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48depends ongeneric-array
0.14.7crates.io↘ 2↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9adepends ongetrandom
0.1.16crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fceused bygetrandom
0.2.11crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070fghash
0.5.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40depends onused bygimli
0.28.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253used byhashbrown
0.9.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04used byhashbrown
0.14.3crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604used byheck
0.4.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8hermit-abi
0.1.19crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33depends onused byhermit-abi
0.3.3crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7hkdf
0.12.4crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7depends onused byhmac
0.12.1crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5edepends onhostname
0.3.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867depends onused byhuman-repr
1.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1used byhumantime
2.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4used byi18n-config
0.4.6crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0c9ce3c48cbc21fd5b22b9331f32b5b51f6ad85d969b99e793427332e76e7640i18n-embed
0.13.9crates.io↘ 13↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92a86226a7a16632de6723449ee5fe70bac5af718bc642ee9ca2f0f6e14fa1fadepends onused byi18n-embed-fl
0.6.7crates.io↘ 13↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd26a3d3569737dfaac7fc1c4078e6af07471c3060b8e570bcd83cdd5f4685395depends onused byi18n-embed-impl
0.8.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum81093c4701672f59416582fe3145676126fd23ba5db910acad0793c1108aaa58used byiana-time-zone
0.1.59crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539depends onused byiana-time-zone-haiku
0.1.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269fdepends onused byindexmap
2.1.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1fdepends onused byindicatif
0.17.7crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25depends oninout
0.1.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5depends onused byinstant
0.1.12crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2cdepends onused byintl_pluralrules
7.0.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972depends onused byintl-memoizer
0.5.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66fdepends onio_tee
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4b3f7cef34251886990511df1c61443aa928499d598a9473929ab5a90a527304used byis_ci
1.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fbused byis-terminal
0.4.10crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455used byitertools
0.11.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57depends onused byitoa
1.0.10crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4cused byjs-sys
0.3.66crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229cadepends onlazy_static
1.4.0crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646depends onlibc
0.2.151crates.io↘ 0↖ 26sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4used by- android_system_properties
0.1.5 - atty
0.2.14 - backtrace
0.3.69 - cc
1.0.83 - console
0.15.7 - cpufeatures
0.2.11 - dirs-sys
0.4.1 - errno
0.3.8 - getrandom
0.1.16 - getrandom
0.2.11 - hermit-abi
0.1.19 - hostname
0.3.1 - libmimalloc-sys
0.1.35 - libredox
0.0.1 - mio
0.8.10 - nix
0.27.1 - num_cpus
1.16.0 - openssh
0.10.2 - parking_lot_core
0.9.9 - rand
0.7.3 - rand
0.8.5 - rustix
0.38.28 - signal-hook-registry
1.4.1 - socket2
0.5.5 - tokio
1.35.1 - tokio-pipe
0.2.12
- android_system_properties
libm
0.2.8crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058libmimalloc-sys
0.1.35crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3979b5c37ece694f1f5e51e7ecc871fdb0f517ed04ee45f88d15d6d553cb9664depends onused bylibredox
0.0.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8used bylinked-hash-map
0.5.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770fused bylinux-raw-sys
0.4.12crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456used bylock_api
0.4.11crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45depends onlog
0.4.20crates.io↘ 0↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8fmatch_cfg
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4used bymatchers
0.1.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558depends onused bymemchr
2.7.1crates.io↘ 0↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149memoffset
0.6.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79cedepends onused bymimalloc
0.1.39crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfa01922b5ea280a911e323e4d2fd24b7fe5cc4042e0d2cda3c40775cdc4bdc9cdepends onused byminimal-lexical
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79aused byminiz_oxide
0.7.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7depends onused bymio
0.8.10crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09used bynix
0.27.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053depends onused bynixlike
0.1.0workspace↘ 8↖ 1nom
7.1.3crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4adepends onnu-ansi-term
0.46.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84depends onused bynum_cpus
1.16.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43depends onused bynum-bigint-dig
0.8.4crates.io↘ 9↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151depends onused bynum-integer
0.1.45crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9depends onnum-iter
0.1.43crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252used bynum-traits
0.2.17crates.io↘ 2↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267cdepends onnumber_prefix
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3used byobject
0.32.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441depends onused byonce_cell
1.19.0crates.io↘ 0↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92opaque-debug
0.3.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5openssh
0.10.2crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8274f2bf1fc3785406a3ff07c92c15590c00e84efb883da77b671562ca9a6115depends onused byoption-ext
0.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7dused byoverload
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39used byowo-colors
3.5.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6fdepends onused bypapergrid
0.10.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma2ccbe15f2b6db62f9a9871642746427e297b0ceb85f9a7f1ee5ff47d184d0c8used byparking_lot
0.12.1crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228fdepends onparking_lot_core
0.9.9crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008epbkdf2
0.11.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917depends onpeg
0.8.2crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum400bcab7d219c38abf8bd7cc2054eb9bbbd4312d66f6a5557d572a203f646f61depends onused bypeg-macros
0.8.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum46e61cce859b76d19090f62da50a9fe92bab7c2a5f09e183763559a2ac392c90used bypeg-runtime
0.8.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum36bae92c60fa2398ce4678b98b2c4b5a7c61099961ca1fa305aec04a9ad28922used bypin-project
1.1.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422depends onused bypin-project-internal
1.1.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405depends onused bypin-project-lite
0.2.13crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58pin-utils
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184used bypkcs1
0.4.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719depends onused bypkcs8
0.9.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4baused bypoly1305
0.8.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abfused bypolyval
0.6.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fbused byportable-atomic
1.6.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0used bypowerfmt
0.2.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391used byppv-lite86
0.2.17crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6deproc-macro-error
1.0.4crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumda25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38cproc-macro-error-attr
1.0.4crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869used byproc-macro2
1.0.75crates.io↘ 1↖ 23sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum907a61bd0f64c2f29cd1cf1dc34d05176426a3f504a78010f08416ddb7b13708depends onused by- async-trait
0.1.77 - clap_derive
4.4.7 - displaydoc
0.2.4 - futures-macro
0.3.30 - i18n-embed-fl
0.6.7 - i18n-embed-impl
0.8.3 - peg-macros
0.8.2 - pin-project-internal
1.1.3 - proc-macro-error
1.0.4 - proc-macro-error-attr
1.0.4 - quote
1.0.35 - rust-embed-impl
6.8.1 - serde_derive
1.0.193 - syn
1.0.109 - syn
2.0.48 - tabled_derive
0.6.0 - thiserror-impl
1.0.53 - tokio-macros
2.2.0 - tracing-attributes
0.1.27 - vte_generate_state_changes
0.1.1 - wasm-bindgen-backend
0.2.89 - wasm-bindgen-macro-support
0.2.89 - zeroize_derive
1.4.2
- async-trait
quote
1.0.35crates.io↘ 1↖ 23sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868efdepends onused by- async-trait
0.1.77 - clap_derive
4.4.7 - displaydoc
0.2.4 - futures-macro
0.3.30 - i18n-embed-fl
0.6.7 - i18n-embed-impl
0.8.3 - peg-macros
0.8.2 - pin-project-internal
1.1.3 - proc-macro-error
1.0.4 - proc-macro-error-attr
1.0.4 - rust-embed-impl
6.8.1 - serde_derive
1.0.193 - syn
1.0.109 - syn
2.0.48 - tabled_derive
0.6.0 - thiserror-impl
1.0.53 - tokio-macros
2.2.0 - tracing-attributes
0.1.27 - vte_generate_state_changes
0.1.1 - wasm-bindgen-backend
0.2.89 - wasm-bindgen-macro
0.2.89 - wasm-bindgen-macro-support
0.2.89 - zeroize_derive
1.4.2
- async-trait
r2d2
0.8.10crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93used byrand
0.7.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03used byrand
0.8.5crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404rand_chacha
0.2.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402depends onused byrand_chacha
0.3.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88depends onused byrand_core
0.5.1crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19depends onrand_core
0.6.4crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922cdepends onrand_hc
0.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613cdepends onused byredox_syscall
0.4.1crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aadepends onredox_users
0.4.4crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4used byregex
1.10.2crates.io↘ 4↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343regex-automata
0.1.10crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132depends onused byregex-automata
0.4.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483fused byregex-syntax
0.6.29crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1used byregex-syntax
0.8.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9fremowt-agent
0.1.0workspace↘ 0↖ 0remowt-fs
0.1.0workspace↘ 0↖ 0rnix
0.10.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8024a523e8836f1a5d051203dc00d833357fee94e351b51348dfaeca5364daa9depends onused byron
0.8.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94used byrowan
0.12.6crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma1b36e449f3702f3b0c821411db1cbdf30fb451726a9456dce5dabcd44420043used byrsa
0.7.2crates.io↘ 13↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099cdepends onused byrust-embed
6.8.1crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma36224c3276f8c4ebc8c20f158eca7ca4359c8db89991c4925132aaaf6702661used byrust-embed-impl
6.8.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum49b94b81e5b2c284684141a2fb9e2a31be90638caf040bf9afbc5a0416afe1acused byrust-embed-utils
7.8.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d38ff6bf570dc3bb7100fce9f7b60c33fa71d80e88da3f2580df4ff2bdded74depends onrustc-demangle
0.1.23crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76used byrustc-hash
1.1.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2rustix
0.38.28crates.io↘ 5↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316ryu
1.0.16crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4cused bysalsa20
0.10.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213depends onused bysame-file
1.0.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502depends onused byscheduled-thread-pool
0.2.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19depends onused byscopeguard
1.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49used byscrypt
0.10.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45dused bysecrecy
0.8.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91edepends onused byself_cell
0.10.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915ddepends onused byself_cell
1.0.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65baused byserde
1.0.193crates.io↘ 1↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89depends onserde_derive
1.0.193crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3depends onserde_json
1.0.108crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526bdepends onserde_spanned
0.6.5crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1depends onused byserde-transcode
1.1.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum590c0e25c2a5bb6e85bf5c1bce768ceb86b316e7a01bdf07d2cb4ec2271990e2depends onused bysha2
0.10.8crates.io↘ 3↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8depends onsharded-slab
0.1.7crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6depends onused byshell-escape
0.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184fused byshlex
1.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380used bysignal-hook-registry
1.4.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1depends onused bysignature
1.6.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7cdepends onused byslab
0.4.9crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67depends onused bysmallvec
1.11.2crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970smol_str
0.1.24crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9depends onused bysocket2
0.5.5crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9depends onused byspin
0.5.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042dused byspki
0.6.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212bdepends onused bystrsim
0.10.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623subtle
2.5.0crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebcsupports-color
1.3.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6fdepends onused bysyn
1.0.109crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237syn
2.0.48crates.io↘ 3↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3fused by- async-trait
0.1.77 - clap_derive
4.4.7 - displaydoc
0.2.4 - futures-macro
0.3.30 - i18n-embed-fl
0.6.7 - i18n-embed-impl
0.8.3 - pin-project-internal
1.1.3 - rust-embed-impl
6.8.1 - serde_derive
1.0.193 - thiserror-impl
1.0.53 - tokio-macros
2.2.0 - tracing-attributes
0.1.27 - wasm-bindgen-backend
0.2.89 - wasm-bindgen-macro-support
0.2.89 - zeroize_derive
1.4.2
- async-trait
tabled
0.14.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdfe9c3632da101aba5131ed63f9eed38665f8b3c68703a6bb18124835c1a5d22used bytabled_derive
0.6.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4used bytempfile
3.9.0crates.io↘ 5↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fatermcolor
1.4.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449depends onused byterminal_size
0.3.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7depends onused bytext-size
1.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233used bythiserror
1.0.53crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb2cd5904763bad08ad5513ddbb12cf2ae273ca53fa9f68e843e236ec6dfccc09depends onthiserror-impl
1.0.53crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3dcf4a824cce0aeacd6f38ae6f24234c8e80d68632338ebaa1443b5df9e29e19depends onused bythread_local
1.1.7crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152depends onused bytime
0.3.31crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583eused bytime-core
0.1.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3used bytime-macros
0.2.16crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43fdepends onused bytinystr
0.7.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ecedepends onused bytokio
1.35.1crates.io↘ 10↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104depends ontokio-macros
2.2.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923bdepends onused bytokio-pipe
0.2.12crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf213a84bffbd61b8fa0ba8a044b4bbe35d471d0b518867181e82bd5c15542784depends onused bytokio-util
0.7.10crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15depends onused bytoml
0.5.11crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234depends onused bytoml
0.8.8crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35used bytoml_datetime
0.6.5crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1depends onused bytoml_edit
0.21.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03used bytracing
0.1.40crates.io↘ 3↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364eftracing-attributes
0.1.27crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7depends onused bytracing-core
0.1.32crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54depends ontracing-indicatif
0.3.6crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum069580424efe11d97c3fef4197fa98c004fa26672cc71ad8770d224e23b1951dtracing-log
0.2.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3used bytracing-subscriber
0.3.18crates.io↘ 10↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8bdepends ontype-map
0.4.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46depends onused bytypenum
1.17.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825unic-langid
0.9.4crates.io↘ 1↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum238722e6d794ed130f91f4ea33e01fcff4f188d92337a21297892521c72df516depends onunic-langid-impl
0.9.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4bd55a2063fdea4ef1f8633243a7b0524cbeef1905ae04c31a1c9b9775c55bc6depends onused byunicase
2.7.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89depends onused byunicode-ident
1.0.12crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4bunicode-width
0.1.11crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85unindent
0.2.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ceused byuniversal-hash
0.5.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07eadepends onused byutf8parse
0.2.1crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370avaluable
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6dused byversion_check
0.9.4crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483fvt100
0.15.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum84cd863bf0db7e392ba3bd04994be3473491b31e66340672af5d11943c6274deused byvte
0.10.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983used byvte
0.11.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197used byvte_generate_state_changes
0.1.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ffdepends onwalkdir
2.4.0crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54eedepends onwasi
0.9.0+wasi-snapshot-preview1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519used bywasi
0.11.0+wasi-snapshot-preview1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423used bywasm-bindgen
0.2.89crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064edepends onwasm-bindgen-backend
0.2.89crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826depends onwasm-bindgen-macro
0.2.89crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2used bywasm-bindgen-macro-support
0.2.89crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283used bywinapi
0.3.9crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419winapi-i686-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6used bywinapi-util
0.1.6crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596depends onwinapi-x86_64-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183fused bywindows_aarch64_gnullvm
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8used bywindows_aarch64_gnullvm
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8used bywindows_aarch64_gnullvm
0.52.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015eaused bywindows_aarch64_msvc
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43used bywindows_aarch64_msvc
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bcused bywindows_aarch64_msvc
0.52.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075efused bywindows_i686_gnu
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84fused bywindows_i686_gnu
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743eused bywindows_i686_gnu
0.52.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313used bywindows_i686_msvc
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060used bywindows_i686_msvc
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406used bywindows_i686_msvc
0.52.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9aused bywindows_x86_64_gnu
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36used bywindows_x86_64_gnu
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718eused bywindows_x86_64_gnu
0.52.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befdused bywindows_x86_64_gnullvm
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3used bywindows_x86_64_gnullvm
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044ccused bywindows_x86_64_gnullvm
0.52.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949eused bywindows_x86_64_msvc
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0used bywindows_x86_64_msvc
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538used bywindows_x86_64_msvc
0.52.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04used bywindows-core
0.52.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9depends onused bywindows-sys
0.45.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0depends onused bywindows-sys
0.48.0crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9depends onwindows-sys
0.52.0crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33ddepends onwindows-targets
0.42.2crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071depends onused bywindows-targets
0.48.5crates.io↘ 7↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940cdepends onwindows-targets
0.52.0crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cddepends onwinnow
0.5.31crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641cdepends onused byx25519-dalek
1.1.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4fused byz85
3.0.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a599daf1b507819c1121f0bf87fa37eb19daac6aff3aefefd4e6e2e0f2020fczeroize
1.7.0crates.io↘ 1↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2ddepends onzeroize_derive
1.4.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69depends onused by
Cargo.tomldiffbeforeafterboth--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,5 +6,5 @@
nixlike = { path = "./crates/nixlike" }
better-command = { path = "./crates/better-command" }
bifrostlink = "0.1.0"
-uuid = { version = "1.3.3", features = ["v4"] }
-tokio = { version = "1.33.0", features = ["fs", "rt", "macros", "sync", "time", "rt-multi-thread"] }
+uuid = { version = "1.7.0", features = ["v4"] }
+tokio = { version = "1.36.0", features = ["fs", "rt", "macros", "sync", "time", "rt-multi-thread"] }
README.adocdiffbeforeafterboth--- a/README.adoc
+++ b/README.adoc
@@ -11,3 +11,164 @@
- Modules can configure multiple hosts at once (I.e for wireguard/kubernetes installation)
- Secrets can be securely stored in Git (No one except target hosts can decrypt them), automatically regenerated, reencrypted, etc.
- Automatic rollback on deployment failure, which will work, as long as system is passing initrd stage (So still be carefull with root filesystem mount)
+
+== Secret generator example
+
+TODO:: This section should into some kind of fleet documentation... But as there is none, it is just left here as-is.
+
+=== Quickly run securely setup gitlab
+
+[source,nix]
+----
+{config, ...}: {
+ secrets = let ownership = { owner = "gitlab"; group = "gitlab"; }; in {
+ gitlab-initial-root = {
+ generator = {mkPassword}: mkPassword {};
+ } // ownership;
+ gitlab-secret = {
+ generator = {mkPassword}: mkPassword {};
+ } // ownership;
+ gitlab-otp = {
+ generator = {mkPassword}: mkPassword {};
+ } // ownership;
+ gitlab-db = {
+ generator = {mkPassword}: mkPassword {};
+ } // ownership;
+ gitlab-jws = {
+ generator = {mkRsa}: mkRsa {};
+ } // ownership;
+ };
+ services.gitlab = let secrets = config.secrets; in {
+ enable = true;
+ initialRootPasswordFile = secrets.gitlab-initial-root.secretPath;
+ secrets = {
+ secretFile = secrets.gitlab-secret.secretPath;
+ otpFile = secrets.gitlab-otp.secretPath;
+ dbFile = secrets.gitlab-db.secretPath;
+ jwsFile = secrets.gitlab-jws.secretPath;
+ };
+ };
+}
+----
+
+=== Securely initialize kubernetes secrets
+
+In my homelab and clusters, I almost always have some sort of HSM, and to issue new kubernetes certs I directly connect to it.
+This setup should probably split into multiple steps, where I allow target machine to generate CSR, then copy it to the HSM machine, and then sign it there... But this is just the plan.
+I want to build ansible-like script execution in fleet for this kind of tasks.
+
+[source,nix]
+----
+{...}: {
+ # First I define required secret generators:
+ nixpkgs.overlays = [
+ (final: prev: let
+ lib = final.lib;
+ in {
+ readKubernetesCa = {impureOn}:
+ final.mkImpureSecretGenerator ''
+ cd ~/ca
+
+ cert=kubernetes-intermediateCA.crt
+
+ expires_at=$(openssl x509 -in $cert -noout -enddate | cut -d= -f2 | xargs -I{} date -u -d {} +"%Y-%m-%dT%H:%M:%S.%NZ")
+ echo -n $expires_at > $out/expires_at
+
+ cat $cert > $out/public
+ ''
+ impureOn;
+ mkKubernetesCert = {
+ subj,
+ sans ? [],
+ impureOn,
+ }:
+ final.mkImpureSecretGenerator ''
+ cd ~/ca
+
+ params=$(sudo mktemp)
+ csr=$(sudo mktemp)
+ cert=$(sudo mktemp)
+ sudo openssl ecparam -genkey -name secp384r1 -out $params
+ sudo openssl req -new -key $params \
+ -subj "${lib.strings.concatStringsSep "" (lib.attrsets.mapAttrsToList (k: v: "/${k}=${v}") subj)}" \
+ ${lib.optionalString (sans != []) "-addext \"subjectAltName = ${lib.strings.concatStringsSep "," sans}\""} \
+ -out $csr
+ sudo hsms x509 -req -days 365 -in $csr -CA kubernetes-intermediateCA.crt -CAkey "pkcs11:object=[CENSORED] Kubernetes Intermediate CA;type=private" -CAcreateserial -copy_extensions copy -out $cert
+
+ expires_at=$(sudo openssl x509 -in $cert -noout -enddate | cut -d= -f2 | xargs -I{} date -u -d {} +"%Y-%m-%dT%H:%M:%S.%NZ")
+ echo -n $expires_at > $out/expires_at
+
+ sudo cat $params | encrypt > $out/secret
+ sudo cat $cert > $out/public
+ ''
+ impureOn;
+ })
+ ];
+ # Those secret generators are impure, thus they are run in system environment.
+ # Probably there needs to be a dedicated user for that kind of tasks, but this is my current setup, don't judge.
+ # I write a couple of scripts for executing openssl with HSM.
+ environment.systemPackages = [
+ pkgs.openssl.bin
+ (pkgs.writeShellApplication {
+ name = "hsms";
+ text = ''
+ set -eu
+ export OPENSSL_CONF=${openssl-conf}
+ # Yay, using secrets to generate secrets!
+ HSM_PIN=$(cat ${config.secrets.hsm-pin.secretPath})
+ exec ${pkgs.openssl}/bin/openssl "$@" -keyform=engine -CAkeyform=engine -engine=pkcs11 -passin=pass:"$HSM_PIN"
+ '';
+ })
+ (pkgs.writeShellApplication {
+ name = "hsmt";
+ text = ''
+ set -eu
+ HSM_PIN=$(cat ${config.secrets.hsm-pin.secretPath})
+ exec ${pkgs.opensc}/bin/pkcs11-tool -l --pin="$HSM_PIN" "$@"
+ '';
+ })
+ ];
+ # And finally, I have secrets, which are shared between machines.
+ # Note that this example is somewhat wrong, as this goes not into the machine configuration, but to fleet configuration.
+ sharedSecrets = {
+ "ca.pem" = {
+ # This is just the public key, no need to regenerate it to change owner list
+ regenerateOnOwnerAdded = false;
+ # For secret regeneration/reencryption, we need to specify which machines SHOULD have it.
+ expectedOwners = ["controlplane-1" "controlplane-2" "worker-1" "worker-2"];
+ generator = {readKubernetesCa}:
+ readKubernetesCa {
+ impureOn = "[CENSORED]";
+ };
+ };
+ "kube-admin.pem" = {
+ regenerateOnOwnerAdded = false;
+ expectedOwners = ["cluster-admin"];
+ generator = {mkKubernetesCert}:
+ mkKubernetesCert {
+ subj = {
+ CN = "admin";
+ O = "system:masters";
+ };
+ impureOn = "[CENSORED]";
+ };
+ };
+ "kube-apiserver.pem" = {
+ # This secret depends on machine SANS, so if owner list has been changed, then we need to regenerate it.
+ # However, SANS dependency is in fact handled by secret seed, and secret is regenerated if the seed is changed...
+ #
+ # In this case regeneration is added as a half-assed security measure, as if apiserver is removed, we don't
+ # want for it to be able to pretend like it is a valid server.
+ #
+ # However, certificate revokation is complicated in my setup, and I can't show it here.
+ regenerateOnOwnerAdded = true;
+ expectedOwners = ["controlplane-1" "controlplane-2"];
+ generator = {mkKubernetesCert}:
+ mkKubernetesCert {
+ inherit sans;
+ subj.CN = "kubernetes";
+ impureOn = "[CENSORED]";
+ };
+ };
+}
+----
cmds/fleet/Cargo.tomldiffbeforeafterboth--- a/cmds/fleet/Cargo.toml
+++ b/cmds/fleet/Cargo.toml
@@ -12,17 +12,17 @@
anyhow = "1.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
-time = { version = "0.3.30", features = ["serde"] }
-tempfile = "3.8"
-once_cell = "1.18.0"
-hostname = "0.3.1"
-age-core = "0.9.0"
-peg = "0.8.2"
-age = { version = "0.9.2", features = ["ssh", "armor"] }
-base64 = "0.21.5"
-chrono = { version = "0.4.31", features = ["serde"] }
-z85 = "3.0.5"
-clap = { version = "4.4.7", features = [
+time = { version = "0.3", features = ["serde"] }
+tempfile = "3.10"
+once_cell = "1.19"
+hostname = "0.3"
+age-core = "0.10"
+peg = "0.8"
+age = { version = "0.10", features = ["ssh", "armor"] }
+base64 = "0.21"
+chrono = { version = "0.4", features = ["serde"] }
+z85 = "3.0"
+clap = { version = "4.5", features = [
"derive",
"env",
"wrap_help",
@@ -30,18 +30,18 @@
] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }
-tokio-util = { version = "0.7.10", features = ["codec"] }
-async-trait = "0.1.74"
-futures = "0.3.29"
-tracing-indicatif = "0.3.5"
-indicatif = "0.17.7"
-itertools = "0.11.0"
-shlex = "1.2.0"
-tabled = { version = "0.14.0", features = ["color"] }
-owo-colors = { version = "3.5.0", features = ["supports-color", "supports-colors"] }
+tokio-util = { version = "0.7", features = ["codec"] }
+async-trait = "0.1"
+futures = "0.3"
+tracing-indicatif = "0.3"
+indicatif = "0.17"
+itertools = "0.12"
+shlex = "1.3"
+tabled = { version = "0.15" }
+owo-colors = { version = "4.0", features = ["supports-color", "supports-colors"] }
r2d2 = "0.8.10"
-abort-on-drop = "0.2.2"
-unindent = "0.2.3"
-regex = "1.10.2"
-openssh = "0.10.1"
-human-repr = "1.1.0"
+abort-on-drop = "0.2"
+unindent = "0.2"
+regex = "1.10"
+openssh = "0.10"
+human-repr = "1.1"
cmds/fleet/src/cmds/secrets/mod.rsdiffbeforeafterboth--- a/cmds/fleet/src/cmds/secrets/mod.rs
+++ b/cmds/fleet/src/cmds/secrets/mod.rs
@@ -1,5 +1,6 @@
use crate::{
better_nix_eval::Field,
+ command::MyCommand,
fleetdata::{FleetSecret, FleetSharedSecret, SecretData},
host::Config,
nix_go, nix_go_json,
@@ -8,14 +9,16 @@
use chrono::{DateTime, Utc};
use clap::Parser;
use owo_colors::OwoColorize;
-use serde::Deserialize;
+use serde::{de::DeserializeOwned, Deserialize};
use std::{
collections::{BTreeSet, HashSet},
io::{self, Cursor, Read},
- path::PathBuf,
+ path::{Path, PathBuf},
+ str::FromStr,
};
use tabled::{Table, Tabled};
-use tokio::fs::read_to_string;
+use tempfile::tempdir;
+use tokio::fs::{self, read_to_string};
use tracing::{error, info, info_span, warn, Instrument};
#[derive(Parser)]
@@ -67,6 +70,10 @@
#[clap(long)]
plaintext: bool,
},
+ ReadPublic {
+ name: String,
+ machine: String,
+ },
UpdateShared {
name: String,
@@ -151,8 +158,89 @@
#[serde(rename_all = "camelCase")]
enum GeneratorKind {
Impure,
+ Pure,
}
+async fn generate_pure(
+ config: &Config,
+ _display_name: &str,
+ secret: Field,
+ default_generator: Field,
+ owners: &[String],
+) -> Result<FleetSecret> {
+ // TODO: pure secrets are supposed to be generated by nix daemon itself,
+ // inside of a sandbox... But we aren't here yet.
+ let config_field = &config.config_unchecked_field;
+ let generator = nix_go!(secret.generator);
+ let default_pkgs = &config.default_pkgs;
+
+ let call_package = nix_go!(default_pkgs.callPackage);
+
+ let generator = nix_go!(call_package(generator)(Obj {}));
+ let generator = generator.build().await?;
+ let generator = generator
+ .get("out")
+ .ok_or_else(|| anyhow!("missing generate out"))?;
+
+ let mut recipients = String::new();
+ for owner in owners {
+ let key = config.key(owner).await?;
+ recipients.push_str(&format!("-r \"{key}\" "));
+ }
+ recipients.push_str("-e");
+
+ let out = tempdir()?;
+
+ let mut gen = MyCommand::new(generator);
+ gen.env("rageArgs", recipients);
+ gen.env(
+ "out",
+ out.path().to_str().expect("sane tempdir should be utf-8"),
+ );
+ gen.run().await.context("impure generator")?;
+
+ {
+ let mut marker_path = out.path().to_owned();
+ marker_path.push("marker");
+ let marker = fs::read_to_string(&marker_path).await?;
+ ensure!(marker == "SUCCESS", "generation not succeeded");
+ }
+
+ let mut public_path = out.path().to_owned();
+ public_path.push("public");
+ let mut secret_path = out.path().to_owned();
+ secret_path.push("secret");
+ let public = fs::read_to_string(&public_path).await.ok();
+ let secret = fs::read(&secret_path).await.ok();
+ if let Some(secret) = &secret {
+ ensure!(
+ age::Decryptor::new(Cursor::new(&secret)).is_ok(),
+ "builder produced non-encrypted value as secret, this is highly insecure, and not allowed."
+ );
+ }
+
+ let mut created_at_path = out.path().to_owned();
+ created_at_path.push("created_at");
+ let mut expires_at_path = out.path().to_owned();
+ expires_at_path.push("expires_at");
+
+ async fn read_value<T: FromStr>(path: &Path) -> Result<T> {
+ dbg!(path);
+ let raw = fs::read(path).await?;
+ let raw = String::from_utf8(raw)?;
+ raw.parse().map_err(|_| anyhow!("fromStr failed"))
+ }
+
+ let created_at = read_value(&created_at_path).await?;
+ let expires_at = read_value(&expires_at_path).await.ok();
+
+ Ok(FleetSecret {
+ created_at,
+ expires_at,
+ public,
+ secret: secret.map(SecretData),
+ })
+}
async fn generate_impure(
config: &Config,
_display_name: &str,
@@ -254,6 +342,9 @@
GeneratorKind::Impure => {
generate_impure(config, display_name, secret, default_generator, owners).await
}
+ GeneratorKind::Pure => {
+ generate_pure(config, display_name, secret, default_generator, owners).await
+ }
}
}
async fn generate_shared(
@@ -357,6 +448,8 @@
expires_at,
re_add,
} => {
+ // TODO: Forbid updating secrets with set expectedOwners (= not user-managed).
+
let exists = config.has_shared(&name);
if exists && !force && !re_add {
bail!("secret already defined");
@@ -456,6 +549,16 @@
println!("{}", z85::encode(&data));
}
}
+ Secret::ReadPublic {
+ name,
+ machine,
+ } => {
+ let secret = config.host_secret(&machine, &name)?;
+ let Some(public) = secret.public else {
+ bail!("no secret {name}");
+ };
+ print!("{public}");
+ }
Secret::UpdateShared {
name,
machines,
@@ -463,6 +566,8 @@
remove_machines,
prefer_identities,
} => {
+ // TODO: Forbid updating secrets with set expectedOwners (= not user-managed).
+
let secret = config.shared_secret(&name)?;
if secret.secret.secret.is_none() {
bail!("no secret");
cmds/fleet/src/main.rsdiffbeforeafterboth--- a/cmds/fleet/src/main.rs
+++ b/cmds/fleet/src/main.rs
@@ -11,9 +11,8 @@
mod fleetdata;
-use std::ffi::OsString;
-use std::process::exit;
use std::time::Duration;
+use std::{ffi::OsString, process::ExitCode};
use anyhow::{bail, Result};
use clap::Parser;
@@ -62,6 +61,7 @@
path.push(entry.path());
let mut status = MyCommand::new("nix");
+ status.args(&config.nix_args);
status.arg("store").arg("prefetch-file").arg(path);
status.run_nix_string().instrument(span).await?;
Ok(())
@@ -118,7 +118,11 @@
return;
};
let pos = state.pos();
- let _ = write!(writer, "{} / {}", pos.human_count_bare(), len.human_count_bare());
+ if pos > len {
+ let _ = write!(writer, "{}", pos.human_count_bare());
+ } else {
+ let _ = write!(writer, "{} / {}", pos.human_count_bare(), len.human_count_bare());
+ }
})
.with_key(
"color_start",
@@ -151,7 +155,7 @@
tracing_subscriber::fmt::layer()
.without_time()
.with_target(true)
- .with_writer(indicatif_layer.get_stderr_writer())
+ .with_writer(indicatif_layer.get_stdout_writer())
.with_filter(filter), // .withou,
)
.with(indicatif_layer)
@@ -159,12 +163,15 @@
}
#[tokio::main]
-async fn main() {
+async fn main() -> ExitCode {
setup_logging();
if let Err(e) = main_real().await {
+ // If I remove this line, the next error!() line gets eaten.
+ info!("fixme: this line gets eaten by tracing-indicatif on levels info+");
error!("{e:#}");
- exit(1);
+ return ExitCode::FAILURE;
}
+ ExitCode::SUCCESS
}
async fn main_real() -> Result<()> {
cmds/install-secrets/Cargo.tomldiffbeforeafterboth--- a/cmds/install-secrets/Cargo.toml
+++ b/cmds/install-secrets/Cargo.toml
@@ -4,18 +4,18 @@
edition = "2021"
[dependencies]
-age = { version = "0.9.2", features = ["ssh"] }
-anyhow = "1.0.75"
-env_logger = "0.10.0"
-log = "0.4.20"
+age = { version = "0.10.0", features = ["ssh"] }
+anyhow = "1.0.79"
+tracing-subscriber = "0.3"
+tracing = "0.1"
nix = {version = "0.27.1", features = ["user", "fs"]}
-serde = { version = "1.0.190", features = ["derive"] }
-serde_json = "1.0.107"
-clap = { version = "4.4.7", features = [
+serde = { version = "1.0.196", features = ["derive"] }
+serde_json = "1.0.113"
+clap = { version = "4.5.1", features = [
"derive",
"env",
"wrap_help",
"unicode",
] }
-tempfile = "3.8.1"
+tempfile = "3.10.0"
z85 = "3.0.5"
cmds/install-secrets/src/main.rsdiffbeforeafterboth--- a/cmds/install-secrets/src/main.rs
+++ b/cmds/install-secrets/src/main.rs
@@ -2,9 +2,8 @@
use age::{Encryptor, Identity, Recipient};
use anyhow::{anyhow, bail, Context, Result};
use clap::Parser;
-use log::{error, info, warn};
use nix::sys::stat::Mode;
-use nix::unistd::{User, Group, chown};
+use nix::unistd::{chown, Group, User};
use serde::{Deserialize, Deserializer};
use std::fmt::{self, Display};
use std::fs::{self, File};
@@ -14,6 +13,9 @@
use std::path::Path;
use std::str::{from_utf8, FromStr};
use std::{collections::HashMap, path::PathBuf};
+use tracing::{error, info, warn};
+use tracing_subscriber::filter::LevelFilter;
+use tracing_subscriber::EnvFilter;
#[derive(Clone, Debug)]
struct SecretWrapper(Vec<u8>);
@@ -228,8 +230,13 @@
}
fn main() -> anyhow::Result<()> {
- env_logger::Builder::new()
- .filter_level(log::LevelFilter::Info)
+ tracing_subscriber::fmt()
+ .with_env_filter(
+ EnvFilter::builder()
+ .with_default_directive(LevelFilter::INFO.into())
+ .from_env_lossy(),
+ )
+ .without_time()
.init();
let opts = Opts::parse();
crates/better-command/Cargo.tomldiffbeforeafterboth--- a/crates/better-command/Cargo.toml
+++ b/crates/better-command/Cargo.toml
@@ -3,12 +3,10 @@
version = "0.1.0"
edition = "2021"
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
[dependencies]
-once_cell = "1.19.0"
-regex = "1.10.2"
-serde = { version = "1.0.193", features = ["derive"] }
-serde_json = "1.0.108"
-tracing = "0.1.40"
-tracing-indicatif = "0.3.6"
+once_cell = "1.19"
+regex = "1.10"
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+tracing = "0.1"
+tracing-indicatif = "0.3"
crates/nixlike/Cargo.tomldiffbeforeafterboth--- a/crates/nixlike/Cargo.toml
+++ b/crates/nixlike/Cargo.toml
@@ -7,8 +7,8 @@
alejandra = {git = "https://github.com/kamadorueda/alejandra"}
linked-hash-map = "0.5.6"
peg = "0.8.2"
-serde = "1.0.190"
-thiserror = "1.0.50"
-serde_json = "1.0.107"
+serde = "1.0.196"
+thiserror = "1.0.57"
+serde_json = "1.0.113"
ron = "0.8.1"
serde-transcode = "1.1.1"
flake.lockdiffbeforeafterboth--- a/flake.lock
+++ b/flake.lock
@@ -5,11 +5,11 @@
"systems": "systems"
},
"locked": {
- "lastModified": 1701680307,
- "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
@@ -23,11 +23,11 @@
"systems": "systems_2"
},
"locked": {
- "lastModified": 1681202837,
- "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
+ "lastModified": 1705309234,
+ "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "cfacdce06f30d2b68473a46042957675eebb3401",
+ "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"type": "github"
},
"original": {
@@ -38,11 +38,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1704409229,
- "narHash": "sha256-Vc41cRJ3trOnocovLe0zZE35pK5Lfuo/zHk0xx3CNDY=",
+ "lastModified": 1708177587,
+ "narHash": "sha256-Tj/YV9kdC+I7V/kjrq3Bdl8z2VIHT5hiAG74s52vLgw=",
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "786f788914f2a6e94cedf361541894e972b8fd23",
+ "rev": "3c43b81701e73452df1c080b05770407da9e16d6",
"type": "github"
},
"original": {
@@ -67,11 +67,11 @@
]
},
"locked": {
- "lastModified": 1704075545,
- "narHash": "sha256-L3zgOuVKhPjKsVLc3yTm2YJ6+BATyZBury7wnhyc8QU=",
+ "lastModified": 1708135817,
+ "narHash": "sha256-EUMO/K3+Wgh0THOLoRXhxrh6G/pQ7BlJ8No+ciy1nKA=",
"owner": "oxalica",
"repo": "rust-overlay",
- "rev": "a0df72e106322b67e9c6e591fe870380bd0da0d5",
+ "rev": "c77e68d33a84ce3f9e86905c0f2ef78d5defad28",
"type": "github"
},
"original": {
flake.nixdiffbeforeafterboth--- a/flake.nix
+++ b/flake.nix
@@ -29,7 +29,7 @@
llvmPkgs = pkgs.buildPackages.llvmPackages_11;
rust =
(pkgs.rustChannelOf {
- date = "2024-01-01";
+ date = "2024-02-10";
channel = "nightly";
})
.default
@@ -38,12 +38,14 @@
packages = (import ./pkgs) pkgs pkgs;
devShell = (pkgs.mkShell.override {stdenv = llvmPkgs.stdenv;}) {
nativeBuildInputs = with pkgs; [
+ alejandra
rust
lld
cargo-edit
cargo-udeps
cargo-fuzz
cargo-watch
+ cargo-outdated
pkg-config
openssl
modules/fleet/secrets.nixdiffbeforeafterboth--- a/modules/fleet/secrets.nix
+++ b/modules/fleet/secrets.nix
@@ -1,5 +1,11 @@
-{ lib, fleetLib, config, ... }: with lib; with fleetLib;
-let
+{
+ lib,
+ fleetLib,
+ config,
+ ...
+}:
+with lib;
+with fleetLib; let
sharedSecret = with types; ({config, ...}: {
options = {
expectedOwners = mkOption {
@@ -9,13 +15,14 @@
Secrets would be decrypted and stored to /run/secrets/$\{name} on owners
'';
+ default = null;
};
# TODO: Aren't those options may be just desugared to data/expectedData?
regenerateOnOwnerAdded = mkOption {
type = bool;
description = ''
Is this secret owner-dependent, and needs to be regenerated on ownership set change, or it may be just reencrypted.
-
+
You want to have this option set to true, when this secret contains some reference to its owners, i.e x509 SANs.
'';
};
@@ -24,7 +31,7 @@
type = bool;
description = ''
Should this secret be removed on owner removal, or it may be just reencrypted
-
+
Most probably its value should be equal to regenerateOnOwnerAdded, override only if you know what are you doing.
Contrary to regenerateOnOwnerAdded, you may want to set this option to false, when host permissions are revoked
in some other way than by this secret ownership, I.e by firewall/etc.
@@ -55,7 +62,7 @@
Imported from fleet.nix
'';
- default = [ ];
+ default = [];
};
# TODO: Make secret generator generate arbitrary number of secret/public parts?
# Make it generate a folder, where all files except suffixed by .enc are public, and the rest are secret?
@@ -96,43 +103,121 @@
};
};
};
-in
-{
+in {
options = with types; {
sharedSecrets = mkOption {
type = attrsOf (submodule sharedSecret);
- default = { };
+ default = {};
description = "Shared secrets";
};
hostSecrets = mkOption {
type = attrsOf (attrsOf (submodule hostSecret));
- default = { };
+ default = {};
description = "Host secrets. Imported from fleet.nix";
internal = true;
};
};
config = {
- assertions = mapAttrsToList
+ assertions =
+ mapAttrsToList
(name: secret: {
assertion = secret.expectedOwners == null || builtins.sort (a: b: a < b) secret.owners == builtins.sort (a: b: a < b) secret.expectedOwners;
message = "Shared secret ${name} is expected to be encrypted for ${builtins.toJSON secret.expectedOwners}, but it is encrypted for ${builtins.toJSON secret.owners}. Run fleet secrets regenerate to fix";
})
config.sharedSecrets;
hosts = hostsToAttrs (host: {
- modules =
- let
- cleanupSecret = (secretName: v: {
- inherit (v) public secret;
- shared = true;
- });
- in
- [
- {
- secrets = (mapAttrs cleanupSecret
+ modules = let
+ cleanupSecret = secretName: v: {
+ inherit (v) public secret;
+ shared = true;
+ };
+ in [
+ {
+ secrets =
+ (
+ mapAttrs cleanupSecret
(filterAttrs (_: v: builtins.elem host v.owners) config.sharedSecrets)
- ) // (mapAttrs cleanupSecret (config.hostSecrets.${host} or { }));
- }
- ];
+ )
+ // (mapAttrs cleanupSecret (config.hostSecrets.${host} or {}));
+ }
+ ];
});
+ # TODO: Should this attribute be moved to `nixpkgs.overlays`?
+ overlays = [
+ (final: prev: let
+ lib = final.lib;
+ in {
+ mkPassword = {size ? 32}:
+ final.mkSecretGenerator ''
+ ${final.coreutils}/bin/tr -dc 'A-Za-z0-9!?%=' < /dev/random \
+ | ${final.coreutils}/bin/head -c ${toString size} \
+ | encrypt > $out/secret
+ '';
+ mkRsa = {size ? 4096}:
+ final.mkSecretGenerator ''
+ ${final.openssl}/bin/openssl genrsa -out rsa_private.key ${toString size}
+ ${final.openssl}/bin/openssl rsa -in rsa_private.key -pubout -out rsa_public.key
+
+ sudo cat rsa_private.key | encrypt > $out/secret
+ sudo cat rsa_public.key > $out/public
+ '';
+ # TODO: Move to fleet
+ # TODO: Merge both generators to one with consistent options syntax?
+ # Impure generator is built on local machine, then built closure is copied to remote machine,
+ # and then it is ran in inpure context, so that this generator may access HSMs and other things.
+ mkImpureSecretGenerator = generatorText: machine:
+ (prev.writeShellScript "impureGenerator.sh" ''
+ #!/bin/sh
+ set -eu
+
+ # TODO: Provide encryption function as script passed to `callPackage generator {encrypt = ...;}`
+ function encrypt() {
+ eval ${final.rage}/bin/rage $rageArgs
+ }
+
+ created_at=$(date -u +"%Y-%m-%dT%H:%M:%S.%NZ")
+ echo -n $created_at > $out/created_at
+
+ ${generatorText}
+
+ echo -n SUCCESS > $out/marker
+ '')
+ .overrideAttrs (old: {
+ passthru = {
+ generatorKind = "impure";
+ impureOn = machine;
+ };
+ });
+ # TODO: Implement consistent naming
+ # Pure secret generator is supposed to be run entirely by nix, using `__impure` derivation type...
+ # But for now, it is ran the same way as `impureSecretGenerator`, but on the local machine.
+ mkSecretGenerator = generatorText:
+ (prev.writeShellScript "generator.sh" ''
+ #!/bin/sh
+ set -eu
+ # TODO: User should create output directory by themselves.
+ cd $out
+
+ # TODO: Provide encryption function as script passed to `callPackage generator {encrypt = ...;}`
+ function encrypt() {
+ eval ${final.rage}/bin/rage $rageArgs
+ }
+
+ created_at=$(date -u +"%Y-%m-%dT%H:%M:%S.%NZ")
+ echo -n $created_at > $out/created_at
+
+ ${generatorText}
+
+ echo -n SUCCESS > $out/marker
+ '')
+ .overrideAttrs (old: {
+ passthru = {
+ generatorKind = "pure";
+ };
+ # TODO: make nix daemon build secret, not just the script.
+ # __impure = true;
+ });
+ })
+ ];
};
}