diff --git a/.cargo/audit.toml b/.cargo/audit.toml deleted file mode 100644 index 2b47b1e63..000000000 --- a/.cargo/audit.toml +++ /dev/null @@ -1,4 +0,0 @@ -[advisories] -ignore = [ - "RUSTSEC-2023-0071", # issue bd8af7a5e3fd02c0963d7550a5cc2cab00950775 -] diff --git a/.config/nextest.toml b/.config/nextest.toml deleted file mode 100644 index 1cd9d3880..000000000 --- a/.config/nextest.toml +++ /dev/null @@ -1,4 +0,0 @@ -# We want the tests to stop running if they are running -# longer than 1min -[profile.default] -slow-timeout = { period = "30s", terminate-after = 2, grace-period = "10s" } diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 09390f135..000000000 --- a/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -target -scripts -debian -systemd diff --git a/.env.seed b/.env.seed deleted file mode 100644 index 804388566..000000000 --- a/.env.seed +++ /dev/null @@ -1,2 +0,0 @@ -RADICLE_DOMAIN=seed.radicle.xyz -RADICLE_NODE_OPTIONS=--force diff --git a/.envrc b/.envrc deleted file mode 100644 index 3550a30f2..000000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use flake diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b9b9daf6b..000000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/target -/radicle-cli/target -/build/artifacts diff --git a/.gitsigners b/.gitsigners deleted file mode 100644 index 3c77d28ed..000000000 --- a/.gitsigners +++ /dev/null @@ -1,11 +0,0 @@ -cloudhead ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL460KIEccS4881p7PPpiiQBsxF+H5tgC6De6crw9rbU -adaszko ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM7gBkM8PwWFe5tiJkCXdYvrYSKapm8MSNVzjJWBy7DL -fintohaps ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOl44zVBYvu1Uhmq9nshhic4r1Moz5fdNOoWTtdJrUwd -erikli ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBrJyJTwj/xG7F7qY0HDFXbb8A+xNNH8eILQ8hlvKW7/ -slack-coder ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDJhzdajJ/SzvIlpywXRiXU5K3oxNjCoDawwIiSAJrbU -sebastinez ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFw+wCPZUh8OndhgavJMSZluorVvzJjz22PH81XrkvIu -zlatan ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPE9CnXiiTVCbXGQJSgZuboN4aPzNw4klqp/6/+djcD5 -rudolfs ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPueml1FxzjvwbD7vRZfwoaoyuxLy0L+WLBwSNiVoJe5 -dave ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEyzfcjfYYBnTLWEZYjsHUW1Pczg6HN0BHMWmoV5dg96 -canndrew ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICGRGjNA2OMOCbrEKIIO7cUvArmryX18XQB2AH+czSTb -yorgos ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILc7h6NDgUUORlg/M9n9jq5EK5o76PKtyWBDEAc/ogrs diff --git a/.radicle/native.yaml b/.radicle/native.yaml deleted file mode 100644 index 5c79e3952..000000000 --- a/.radicle/native.yaml +++ /dev/null @@ -1,9 +0,0 @@ -shell: | - cargo --version - rustc --version - - cargo fmt --check - cargo clippy --all-targets --workspace -- --deny clippy::all - cargo build --all-targets --workspace - cargo doc --workspace - cargo test --workspace --no-fail-fast diff --git a/0 b/0 new file mode 100644 index 000000000..53f6f083c --- /dev/null +++ b/0 @@ -0,0 +1 @@ +{"base":"e130b4dc06ca02a035519e1ea86ffeafc788866f","description":"This fixes the following issues:\n- 111cf90 (`handler` is not async-signal-safe)\n- c8e0300 (`libc::signal` should not be used)\n- b91c6c3 (Mutex can cause signals to be missed)\n\nThe changes are all only internal to `radicle-signals`, and the API of\n`radicle-signals` is the same as before, and uses of it don't need to be\nand aren't changed.\n\nSee the commit's message that describes its changes.\nSee the comments in the new code.\nSee the below:\n\nAll those issues are fixed by a different internal approach that:\n- Uses only atomic counters and a semaphore from within the signal\n handlers, ensuring async-signal-safety portably.\n- Uses `libc::sigaction` instead. With `SA_RESTART`, which preserves\n the same behavior as the prior use of `libc::signal` on all the OSs\n that https://radicle.xyz/ provides prebuilt binaries for, and which\n now ensures consistent behavior across all further OSs.\n- Does not access the mutex from within the signal handlers, and\n separates the management of the mutex'ed global state from the\n processing of signals receipts that sends the notifications over a\n channel.\n- Has an additional internal thread that blocks on the semaphore, and,\n upon wakes, takes the counters' latest values, and, for those signals\n that have newly been delivered, sends notifications over the\n user-provided channel.\n\nAll of this approach is provided via a new external dependency, the\n`signals_receipts` crate, written by myself, that provides and manages\nit all in a very easy-to-use way. The justification for having a new\nexternal dependency is:\n\nIt was found that all the parts for this approach are better provided as\nlibraries (crates), because: that significantly shortens and simplifies\n`radicle-signals`; they are entirely reusable for other various\nprojects; their internal workings need to be encapsulated; and they're\nnot something that the Radicle team should be expected to take on the\nmaintenance of. I, as the maintainer, expect the maintenance burden to\nbe minimal and rare and my understanding to not fade too much, and I\nexpect that any team member could reasonably familiarize with it all if\nneeded, due to the medium-small size, limited, and already-complete\nnature of these crates and due to the extensive comments in them.\n\nIt was also found that no lesser approach could be truly robust and\nportable while still preserving the preexisting API and use cases of\n`radicle-signals`. The approach I settled on does achieve that and does\npreserve those.\n\nFurther information about the approach can be found in the crates'\nREADMEs and documentation:\nhttps://crates.io/crates/signals_receipts\nhttps://crates.io/crates/sem_safe\n\nTo my knowledge, the only alternative for comparable robustness and\nportability would be the `signal_hook` crate which has more use in the\nRust ecosystem. After evaluating it, I decided against it because:\n1. It can't fully uninstall the signal handlers at the OS-process level\n (it can only emulate that (without perfect fidelity, IIUC)), and not\n being able to do so would've been a more disruptive change to the\n preexisting, and perhaps future, uses of `radicle-signals` that have\n been doing, and might want to do, full uninstalling. Whereas,\n `signals_receipts` does fully uninstall.\n2. It doesn't provide the ability to send over channels. Achieving that\n would've required an additional internal thread to do such, but\n having an ad-hoc approach to managing that, *with the uninstalling\n and re-installing*, would've been error-prone. Whereas,\n `signals_receipts` does provide the ability to send over channels,\n and it automatically manages its internal thread robustly.\n3. It has other substantial features that aren't needed by\n `radicle-signals`, but those would've had to be carried in the object\n code just to use its iterator that builds on them. Whereas,\n `signals_receipts` carries only what's needed.\n4. It uses the \"self-pipe trick\" which is a hack (albeit a reliable\n one). Whereas, `signals_receipts` uses semaphores which are more\n modern and are intended for signal handling.\n\nI've confirmed this patch builds cleanly for all the currently supported\nplatforms:\n`x86_64-unknown-linux-musl`\n`aarch64-unknown-linux-musl`\n`x86_64-apple-darwin`\n`aarch64-apple-darwin`\nAs well as for:\n`x86_64-unknown-linux-gnu`\n\nI have tested this patch in these ways:\n- The dependency crates, `signals_receipts` & `sem_safe`, that provide\n the new approach, have thorough tests and have been confirmed by me to\n work correctly on numerous POSIX OSs (see their READMEs). (Their\n portability is broader than Radicle's current support, and so will\n assist in broadening its support.) I've also done thorough debugger\n stepping of their code paths.\n- I've conducted functional testing of the direct uses of\n `radicle-signals`, using the new approach of this patch, on Linux and\n macOS, x86-64.\n- I've done thorough debugger stepping of the code paths of the direct\n uses of `radicle-signals`, including of the various possibilities due\n to differences in thread-scheduling races.\n- I've spent considerable time reasoning about the dependency crates and\n the preexisting uses of `radicle-signals`.\n\nThe uses of `radicle-signals` that I tested are:\n- `radicle-node`: Simple use in `main.rs` & `runtime.rs` that only\n installs once with a bounded channel and never uninstalls.\n- `radicle-term`: Uses in `spinner.rs` & `pager.rs` that uninstall after\n installing with unbounded channels and that could be invoked multiple\n times within the same process and thus could do re-installing.\n- `rad-cli-demo`: Uses `radicle-term` spinner & pager.\n\nThe indirect uses of `radicle-signals` that I haven't tested yet are:\n- `radicle-cli`: Uses `radicle-term` spinner & pager in numerous places\n that seemed equivalent enough to what I have tested.\n\nThe uses should be tested on AArch64 for at least the OSs that Radicle\nsupports (Linux & macOS), which I haven't done yet. There's no reason\nto expect any issues with that, since OSs provide the same APIs and\nsemantics for the relevant aspects of signal handling regardless of CPU\narchitecture. I'd need to find access to such machines.\n\nI can test the remaining uses, if there's interest in accepting this\ncontribution. Or, it might be good for someone from the team to test\nthose as part of reviewing this.\n\nIf you have any questions, I'm happy to respond to them.","oid":"08844cf18464bb36690472da7c4d56563d164aa0","type":"revision"} \ No newline at end of file diff --git a/1 b/1 new file mode 100644 index 000000000..71ef71e35 --- /dev/null +++ b/1 @@ -0,0 +1 @@ +{"target":"delegates","title":"signals: Use `signals_receipts` crate instead","type":"edit"} \ No newline at end of file diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md deleted file mode 100644 index a777d16da..000000000 --- a/ARCHITECTURE.md +++ /dev/null @@ -1,3 +0,0 @@ -# ARCHITECTURE - -See the [Protocol Guide](https://radicle.xyz/guides/protocol). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index d706d4c4c..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,236 +0,0 @@ -# CONTRIBUTING - -Contributions are very welcome. When contributing code, please follow these -simple guidelines. - -* Follow the coding guidelines when proposing code changes ([see below](#code-style)). -* Write properly formatted git commits messages ([see below](#writing-git-commit-messages)). -* Read the DCO and if you are contributing a significant amount of code, make sure your commits are signed off, using `git commit -s`. -* Contribute code via a Radicle Patch, by following the [guide][]. -* If it's a feature addition or major change, check with the maintainers first - before submitting a patch. We wouldn't want you to waste your time! -* If you need help or would like to discuss your changes, come to our community chat on [Zulip][zulip]. - -[guide]: https://radicle.xyz/guides/user#working-with-patches -[zulip]: https://radicle.zulipchat.com - -## Submitting patches - -Patch formatting follows the same rules as commit formatting. See below. - -## Linting & formatting - -Always check your code with the linter (`clippy`), by running: - - $ cargo clippy --workspace --tests - -And make sure your code is formatted with, using: - - $ cargo fmt - -Finally, ensure there is no trailing whitespace anywhere. - -## Running tests - -Make sure all tests are passing with: - - $ cargo test --workspace - -## Checking the docs - -If you make documentation changes, you may want to check whether there are any -warnings or errors: - - $ cargo doc --workspace --all-features - -## Code style - -The following code guidelines will help make code review smoother. - -### Use of `unwrap` and `expect` - -Use `unwrap` only in either of three circumstances: - -1. Based on manual static analysis, you've concluded that it's impossible for -the code to panic; so unwrapping is *safe*. An example would be: - - let list = vec![a, b, c]; - let first = list.first().unwrap(); - -2. The panic caused by `unwrap` would indicate a bug in the software, and it -would be impossible to continue in that case. - -3. The `unwrap` is part of test code, ie. `cfg!(test)` is `true`. - -In the first and second case, document `unwrap` call sites with a comment prefixed -with `SAFETY:` that explains why it's safe to unwrap, eg. - - // SAFETY: Node IDs are valid ref strings. - let r = RefString::try_from(node.to_string()).unwrap(); - -Use `expect` only if the function expects certain invariants that were not met, -either due to bad inputs, or a problem with the environment; and include the -expectation in the message. For example: - - logger::init(log::Level::Debug) - .expect("logger must only be initialized once"); - -### Module imports - -Modules are declared at the top of the file, before the imports. Public modules -are separated from private modules with a blank line: - - mod git; - mod storage; - - pub mod refs; - - use std::time; - use std::process; - - ... - -Imports are organized in groups, from least specific to more specific: - - use std::collections::HashMap; // First, `std` imports. - use std::process; - use std::time; - - use git_ref_format as format; // Then, external dependencies. - use once_cell::sync::Lazy; - - use crate::crypto::PublicKey; // Finally, local crate imports. - use crate::storage::refs::Refs; - use crate::storage::RemoteId; - -### Variable naming - -Use short 1-letter names when the variable scope is only a few lines, or the context is -obvious, eg. - - if let Some(e) = result.err() { - ... - } - -Use 1-word names for function parameters or variables that have larger scopes: - - pub fn commit(repo: &Repository, sig: &Signature) -> Result { - ... - } - -Use the most descriptive names for globals: - - pub const KEEP_ALIVE_DELTA: LocalDuration = LocalDuration::from_secs(30); - -### Function naming - -Stay concise. Use the function doc comment to describe -what the function does, not the name. Keep in mind functions are in the -context of the parent module and/or object and repeating that would be -redundant. - -### Logging - -When writing log statements, always include a `target` and include enough -context in the log message that it is useful on its own, eg. - - debug!(target: "service", "Routing table updated for {rid} with seed {nid}"); - -Check the file you are working on for what the `target` name should be; most -logs should be at the *debug* level. - -## Dependencies - -Before adding any code dependencies, check with the maintainers if this is okay. -In general, we try not to add external dependencies unless it's necessary. -Dependencies increase counter-party risk, build-time, attack surface, and -make code harder to audit. - -## Documentation - -Public types and functions should be documented. Modules *may* be documented, -if you see the need. - -Code comments should usually be full english sentences, and add missing context -for the reader: - - // Ensure that our inventory is recorded in our routing table, and we are tracking - // all of it. It can happen that inventory is not properly tracked if for eg. the - // user creates a new repository while the node is stopped. - for rid in self.storage.inventory()? { - ... - -## Proposing changes - -When proposing changes via a patch: - -* Isolate changes in separate commits to make the review process easier. -* Don't make unrelated changes, unless it happens to be an obvious improvement to - code you are touching anyway ("boyscout rule"). -* Rebase on `master` when needed. -* Keep your changesets small, specific and uncontroversial, so that they can be - merged more quickly. -* If the change is substantial or requires re-architecting certain parts of the - codebase, write a proposal in English first, and get consensus on that before - proposing the code changes. - -**Preparing commits** - -1. Each commit in your patch must pass all the tests, lints and checks. This is - so that they can be built into binaries and to make git bisecting possible. -2. Do not include any commits that are fixes or refactorings of previous patch - commits. These should be squashed to the minimal diff required to make the - change, unless it's helpful to make a large change over multiple commits, - while still respecting (1). Do not include `fixup!` commits either. -3. A commit *may* include a category prefix such as `cli:` or `node:` if it - mainly concerns a certain area of the codebase. For example. These prefixes - should usually be the name of the crate, minus any common prefix. Eg. - `cli:`, and *not* `radicle-cli:`. For documentation, you can use `docs:`, - and for CI-related files, you can use `ci:`. - -To help with the above, use `git commit --amend` and `git rebase -i`. You can -also interactively construct a commit from a working tree using `git add -p`. - -## Writing commit messages - -A properly formed git commit subject line should always be able to complete the -following sentence: - - If applied, this commit will _____ - -In addition, it should be capitalized and *must not* include a period. - -For example, the following message is well formed: - - Add support for .gif files - -While these ones are **not**: `Adding support for .gif files`, -`Added support for .gif files`, `add support for .gif files`. - -When it comes to formatting, here's a model git commit message[1]: - - Capitalized, short (50 chars or less) summary - - More detailed explanatory text, if necessary. Wrap it to about 72 - characters or so. In some contexts, the first line is treated as the - subject of an email and the rest of the text as the body. The blank - line separating the summary from the body is critical (unless you omit - the body entirely); tools like rebase can get confused if you run the - two together. - - Write your commit message in the imperative: "Fix bug" and not "Fixed bug" - or "Fixes bug." This convention matches up with commit messages generated - by commands like git merge and git revert. - - Further paragraphs come after blank lines. - - - Bullet points are okay, too. - - - Typically a hyphen or asterisk is used for the bullet, followed by a - single space, with blank lines in between, but conventions vary here. - - - Use a hanging indent. - ---- - -[1]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 4c44e481d..000000000 --- a/Cargo.lock +++ /dev/null @@ -1,3273 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aead" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" -dependencies = [ - "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "amplify" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e711289a6cb28171b4f0e6c8019c69ff9476050508dc082167575d458ff74d0" -dependencies = [ - "amplify_derive", - "amplify_num", - "ascii", - "wasm-bindgen", -] - -[[package]] -name = "amplify_derive" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759dcbfaf94d838367a86d493ec34ccc8aa6fe365cb7880d6bf89006de24d9c1" -dependencies = [ - "amplify_syn", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "amplify_num" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c009c5c4de814911b177e2ea59e4930bb918978ed3cce4900d846a6ceb0838" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "amplify_syn" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7736fb8d473c0d83098b5bac44df6a561e20470375cd8bcae30516dc889fd62a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "anstream" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" - -[[package]] -name = "anstyle-parse" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - -[[package]] -name = "anyhow" -version = "1.0.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" - -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - -[[package]] -name = "ascii" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" - -[[package]] -name = "autocfg" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" - -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - -[[package]] -name = "base32" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bcrypt-pbkdf" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2" -dependencies = [ - "blowfish", - "pbkdf2", - "sha2", -] - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "block-padding" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bloomy" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "489d2af57852b78a86478273ac6a1ef912061b6af3a439694c49f309f6ea3bdd" -dependencies = [ - "siphasher 0.3.11", -] - -[[package]] -name = "blowfish" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" -dependencies = [ - "byteorder", - "cipher", -] - -[[package]] -name = "bstr" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" -dependencies = [ - "memchr", - "regex-automata", - "serde", -] - -[[package]] -name = "bumpalo" -version = "3.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "cbc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" -dependencies = [ - "cipher", -] - -[[package]] -name = "cc" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" -dependencies = [ - "jobserver", - "libc", - "once_cell", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chacha20" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - -[[package]] -name = "chacha20poly1305" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" -dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", - "zeroize", -] - -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits", - "windows-targets 0.52.5", -] - -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", - "zeroize", -] - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "colored" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" -dependencies = [ - "lazy_static", - "windows-sys 0.48.0", -] - -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc32fast" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "rand_core", - "typenum", -] - -[[package]] -name = "ct-codecs" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df" - -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - -[[package]] -name = "cypheraddr" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5c54d2ad4ab9941383519471b75d12abc1a7b4779265e233168f2703a730d9" -dependencies = [ - "amplify", - "base32", - "cyphergraphy", - "sha3", -] - -[[package]] -name = "cyphergraphy" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67c16c8ef5ddcdab57aab83fd8e770540ea3682ccdae09642c63575b0da2184" -dependencies = [ - "amplify", - "ec25519", - "multibase", - "sha2", -] - -[[package]] -name = "cyphernet" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac949369884a7a1d802cc669821269c707be8cec4d65043382e253733d2e62e1" -dependencies = [ - "cypheraddr", - "cyphergraphy", - "noise-framework", - "socks5-client", -] - -[[package]] -name = "data-encoding" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" - -[[package]] -name = "data-encoding-macro" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" -dependencies = [ - "data-encoding", - "data-encoding-macro-internal", -] - -[[package]] -name = "data-encoding-macro-internal" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" -dependencies = [ - "data-encoding", - "syn 1.0.109", -] - -[[package]] -name = "der" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "zeroize", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - -[[package]] -name = "dyn-clone" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "ec25519" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfd533a2fc01178c738c99412ae1f7e1ad2cb37c2e14bfd87e9d4618171c825" -dependencies = [ - "ct-codecs", - "ed25519", - "getrandom", -] - -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "digest", - "elliptic-curve", - "rfc6979", - "signature 2.2.0", - "spki", -] - -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature 1.6.4", -] - -[[package]] -name = "either" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" - -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "pkcs8", - "rand_core", - "sec1", - "subtle", - "zeroize", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "escargot" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f474c6844cbd04e783d0f25757583db4f491770ca618bedf2fb01815fc79939" -dependencies = [ - "log", - "once_cell", - "serde", - "serde_json", -] - -[[package]] -name = "faster-hex" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a2b11eda1d40935b26cf18f6833c526845ae8c41e58d09af6adeb6f0269183" - -[[package]] -name = "fastrand" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - -[[package]] -name = "ff" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" -dependencies = [ - "rand_core", - "subtle", -] - -[[package]] -name = "filetime" -version = "0.2.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "windows-sys 0.52.0", -] - -[[package]] -name = "flate2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", - "zeroize", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "ghash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug", - "polyval", -] - -[[package]] -name = "git-ref-format" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "137adab7111fcb575db6f07dae3a7d37f3c2630878954c9931f7135dfa33eeef" -dependencies = [ - "git-ref-format-core", - "git-ref-format-macro", -] - -[[package]] -name = "git-ref-format-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebb6549ddc63ba5722acb98c823b0eccb7f8b979407bd2a8fd616f581ae50982" -dependencies = [ - "bstr", - "serde", - "thiserror", -] - -[[package]] -name = "git-ref-format-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18ffd0101a3bd9a3aba39602b8b20751ddb7ee11596debb58be3074209dad2ae" -dependencies = [ - "git-ref-format-core", - "proc-macro-error", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "git2" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" -dependencies = [ - "bitflags 2.5.0", - "libc", - "libgit2-sys", - "log", - "url", -] - -[[package]] -name = "gix-actor" -version = "0.31.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0e454357e34b833cc3a00b6efbbd3dd4d18b24b9fb0c023876ec2645e8aa3f2" -dependencies = [ - "bstr", - "gix-date", - "gix-utils", - "itoa", - "thiserror", - "winnow", -] - -[[package]] -name = "gix-chunk" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c8751169961ba7640b513c3b24af61aa962c967aaf04116734975cd5af0c52" -dependencies = [ - "thiserror", -] - -[[package]] -name = "gix-command" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90009020dc4b3de47beed28e1334706e0a330ddd17f5cfeb097df3b15a54b77" -dependencies = [ - "bstr", - "gix-path", - "gix-trace", - "shell-words", -] - -[[package]] -name = "gix-commitgraph" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133b06f67f565836ec0c473e2116a60fb74f80b6435e21d88013ac0e3c60fc78" -dependencies = [ - "bstr", - "gix-chunk", - "gix-features", - "gix-hash", - "memmap2", - "thiserror", -] - -[[package]] -name = "gix-config-value" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd06203b1a9b33a78c88252a625031b094d9e1b647260070c25b09910c0a804" -dependencies = [ - "bitflags 2.5.0", - "bstr", - "gix-path", - "libc", - "thiserror", -] - -[[package]] -name = "gix-credentials" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c70146183bd3c7119329a3c7392d1aa0e0adbe48d727f4df31828fe6d8fdaa1" -dependencies = [ - "bstr", - "gix-command", - "gix-config-value", - "gix-path", - "gix-prompt", - "gix-sec", - "gix-trace", - "gix-url", - "thiserror", -] - -[[package]] -name = "gix-date" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eed6931f21491ee0aeb922751bd7ec97b4b2fe8fbfedcb678e2a2dce5f3b8c0" -dependencies = [ - "bstr", - "itoa", - "thiserror", - "time", -] - -[[package]] -name = "gix-diff" -version = "0.44.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996d5c8a305b59709467d80617c9fde48d9d75fd1f4179ea970912630886c9d" -dependencies = [ - "bstr", - "gix-hash", - "gix-object", - "thiserror", -] - -[[package]] -name = "gix-features" -version = "0.38.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac7045ac9fe5f9c727f38799d002a7ed3583cd777e3322a7c4b43e3cf437dc69" -dependencies = [ - "crc32fast", - "flate2", - "gix-hash", - "gix-trace", - "gix-utils", - "libc", - "prodash", - "sha1_smol", - "thiserror", - "walkdir", -] - -[[package]] -name = "gix-fs" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6adf99c27cdf17b1c4d77680c917e0d94d8783d4e1c73d3be0d1d63107163d7a" -dependencies = [ - "fastrand", - "gix-features", - "gix-utils", -] - -[[package]] -name = "gix-hash" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93d7df7366121b5018f947a04d37f034717e113dcf9ccd85c34b58e57a74d5e" -dependencies = [ - "faster-hex", - "thiserror", -] - -[[package]] -name = "gix-hashtable" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddf80e16f3c19ac06ce415a38b8591993d3f73aede049cb561becb5b3a8e242" -dependencies = [ - "gix-hash", - "hashbrown", - "parking_lot", -] - -[[package]] -name = "gix-object" -version = "0.42.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25da2f46b4e7c2fa7b413ce4dffb87f69eaf89c2057e386491f4c55cadbfe386" -dependencies = [ - "bstr", - "gix-actor", - "gix-date", - "gix-features", - "gix-hash", - "gix-utils", - "gix-validate", - "itoa", - "smallvec", - "thiserror", - "winnow", -] - -[[package]] -name = "gix-odb" -version = "0.61.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20d384fe541d93d8a3bb7d5d5ef210780d6df4f50c4e684ccba32665a5e3bc9b" -dependencies = [ - "arc-swap", - "gix-date", - "gix-features", - "gix-fs", - "gix-hash", - "gix-object", - "gix-pack", - "gix-path", - "gix-quote", - "parking_lot", - "tempfile", - "thiserror", -] - -[[package]] -name = "gix-pack" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0594491fffe55df94ba1c111a6566b7f56b3f8d2e1efc750e77d572f5f5229" -dependencies = [ - "gix-chunk", - "gix-diff", - "gix-features", - "gix-hash", - "gix-hashtable", - "gix-object", - "gix-path", - "gix-tempfile", - "gix-traverse", - "memmap2", - "parking_lot", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-packetline" -version = "0.17.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b70486beda0903b6d5b65dfa6e40585098cdf4e6365ca2dff4f74c387354a515" -dependencies = [ - "bstr", - "faster-hex", - "gix-trace", - "thiserror", -] - -[[package]] -name = "gix-path" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d23d5bbda31344d8abc8de7c075b3cf26e5873feba7c4a15d916bce67382bd9" -dependencies = [ - "bstr", - "gix-trace", - "home", - "once_cell", - "thiserror", -] - -[[package]] -name = "gix-prompt" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5325eb17ce7b5e5d25dec5c2315d642a09d55b9888b3bf46b7d72e1621a55d8" -dependencies = [ - "gix-command", - "gix-config-value", - "parking_lot", - "rustix", - "thiserror", -] - -[[package]] -name = "gix-protocol" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aed3bb6179835a3250403baa9d7022579e559fc45f2efc416d9de1a14b5acf11" -dependencies = [ - "bstr", - "gix-credentials", - "gix-date", - "gix-features", - "gix-hash", - "gix-transport", - "gix-utils", - "maybe-async", - "thiserror", - "winnow", -] - -[[package]] -name = "gix-quote" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbff4f9b9ea3fa7a25a70ee62f545143abef624ac6aa5884344e70c8b0a1d9ff" -dependencies = [ - "bstr", - "gix-utils", - "thiserror", -] - -[[package]] -name = "gix-revwalk" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b030ccaab71af141f537e0225f19b9e74f25fefdba0372246b844491cab43e0" -dependencies = [ - "gix-commitgraph", - "gix-date", - "gix-hash", - "gix-hashtable", - "gix-object", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-sec" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fddc27984a643b20dd03e97790555804f98cf07404e0e552c0ad8133266a79a1" -dependencies = [ - "bitflags 2.5.0", - "gix-path", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "gix-tempfile" -version = "14.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006acf5a613e0b5cf095d8e4b3f48c12a60d9062aa2b2dd105afaf8344a5600c" -dependencies = [ - "gix-fs", - "libc", - "once_cell", - "parking_lot", - "tempfile", -] - -[[package]] -name = "gix-trace" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f924267408915fddcd558e3f37295cc7d6a3e50f8bd8b606cee0808c3915157e" - -[[package]] -name = "gix-transport" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d2f783b2fe86bf2a8cf1f3b8669d65b01ab4932f32cc0101d3893e1b16a3bd6" -dependencies = [ - "bstr", - "gix-command", - "gix-features", - "gix-packetline", - "gix-quote", - "gix-sec", - "gix-url", - "thiserror", -] - -[[package]] -name = "gix-traverse" -version = "0.39.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e499a18c511e71cf4a20413b743b9f5bcf64b3d9e81e9c3c6cd399eae55a8840" -dependencies = [ - "bitflags 2.5.0", - "gix-commitgraph", - "gix-date", - "gix-hash", - "gix-hashtable", - "gix-object", - "gix-revwalk", - "smallvec", - "thiserror", -] - -[[package]] -name = "gix-url" -version = "0.27.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db829ebdca6180fbe32be7aed393591df6db4a72dbbc0b8369162390954d1cf" -dependencies = [ - "bstr", - "gix-features", - "gix-path", - "home", - "thiserror", - "url", -] - -[[package]] -name = "gix-utils" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35192df7fd0fa112263bad8021e2df7167df4cc2a6e6d15892e1e55621d3d4dc" -dependencies = [ - "fastrand", - "unicode-normalization", -] - -[[package]] -name = "gix-validate" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c27dd34a49b1addf193c92070bcbf3beaf6e10f16a78544de6372e146a0acf" -dependencies = [ - "bstr", - "thiserror", -] - -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core", - "subtle", -] - -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "block-padding", - "generic-array", -] - -[[package]] -name = "inquire" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fddf93031af70e75410a2511ec04d49e758ed2f26dad3404a934e0fb45cc12a" -dependencies = [ - "bitflags 2.5.0", - "dyn-clone", - "fxhash", - "newline-converter", - "once_cell", - "tempfile", - "termion 2.0.3", - "unicode-segmentation", - "unicode-width", -] - -[[package]] -name = "io-reactor" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77d78c3e630f04a61ec86ba171c0bbd161434a7f2e8e4a67728320d4ce7c6c79" -dependencies = [ - "amplify", - "crossbeam-channel", - "libc", - "popol", -] - -[[package]] -name = "itoa" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" - -[[package]] -name = "jobserver" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "keccak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" -dependencies = [ - "cpufeatures", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin", -] - -[[package]] -name = "lexopt" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401" - -[[package]] -name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[package]] -name = "libgit2-sys" -version = "0.17.0+1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - -[[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libredox" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" -dependencies = [ - "bitflags 2.5.0", - "libc", - "redox_syscall", -] - -[[package]] -name = "libz-sys" -version = "1.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" - -[[package]] -name = "localtime" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016a009e0bb8ba6e3229fb74bf11a8fe6ef24542cc6ef35ef38863ac13f96d87" -dependencies = [ - "serde", -] - -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - -[[package]] -name = "maybe-async" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "memchr" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" - -[[package]] -name = "memmap2" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" -dependencies = [ - "libc", -] - -[[package]] -name = "miniz_oxide" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" -dependencies = [ - "adler", -] - -[[package]] -name = "multibase" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" -dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", -] - -[[package]] -name = "netservices" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af0f91a10aaddcc3b76770c3bf5c17680829aa0828e5ffc69c62d58bfbe9c48c" -dependencies = [ - "amplify", - "cyphernet", - "io-reactor", - "libc", - "rand", - "socket2", -] - -[[package]] -name = "newline-converter" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b6b097ecb1cbfed438542d16e84fd7ad9b0c76c8a65b7f9039212a3d14dc7f" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "noise-framework" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b57e96e713d599dc58755d0e5bb2238908a63e13f624f70c8345fdb7d8b51bae" -dependencies = [ - "amplify", - "chacha20poly1305", - "cyphergraphy", -] - -[[package]] -name = "nonempty" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff7ac1e5ea23db6d61ad103e91864675049644bf47c35912336352fa4e9c109" - -[[package]] -name = "nonempty" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995defdca0a589acfdd1bd2e8e3b896b4d4f7675a31fd14c32611440c7f608e6" -dependencies = [ - "serde", -] - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "num-bigint-dig" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - -[[package]] -name = "numtoa" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p384" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", - "sha2", -] - -[[package]] -name = "p521" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" -dependencies = [ - "base16ct", - "ecdsa", - "elliptic-curve", - "primeorder", - "rand_core", - "sha2", -] - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.48.5", -] - -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest", - "hmac", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - -[[package]] -name = "poly1305" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" -dependencies = [ - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" -dependencies = [ - "cfg-if", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - -[[package]] -name = "popol" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93406933502e4446250941cf95d5e62851feb62a25b742acf7ffce96755c53e3" -dependencies = [ - "libc", -] - -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "pretty_assertions" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" -dependencies = [ - "diff", - "yansi", -] - -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prodash" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744a264d26b88a6a7e37cbad97953fa233b94d585236310bcbc88474b4092d79" - -[[package]] -name = "qcheck" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b439bd4242da51d62d18c95e6a6add749346756b0d1a587dfd0cc22fa6b5f3f0" -dependencies = [ - "rand", -] - -[[package]] -name = "qcheck-macros" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2742b9af5a690615904b18f11983f4db9ea7ad1c7e6ed3fb4b2402cdaaf5b1b5" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "quote" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "radicle" -version = "0.13.0" -dependencies = [ - "amplify", - "base64 0.21.7", - "chrono", - "colored", - "crossbeam-channel", - "cyphernet", - "fastrand", - "git2", - "libc", - "localtime", - "log", - "multibase", - "nonempty 0.9.0", - "once_cell", - "pretty_assertions", - "qcheck", - "qcheck-macros", - "radicle-cob", - "radicle-crypto", - "radicle-git-ext", - "radicle-ssh", - "serde", - "serde_json", - "siphasher 1.0.1", - "sqlite", - "tempfile", - "thiserror", - "unicode-normalization", -] - -[[package]] -name = "radicle-cli" -version = "0.11.0" -dependencies = [ - "anyhow", - "chrono", - "git-ref-format", - "lexopt", - "localtime", - "log", - "nonempty 0.9.0", - "pretty_assertions", - "radicle", - "radicle-cli-test", - "radicle-cob", - "radicle-crypto", - "radicle-git-ext", - "radicle-node", - "radicle-surf", - "radicle-term", - "serde", - "serde_json", - "shlex", - "tempfile", - "thiserror", - "timeago", - "tree-sitter", - "tree-sitter-bash", - "tree-sitter-c", - "tree-sitter-css", - "tree-sitter-go", - "tree-sitter-highlight", - "tree-sitter-html", - "tree-sitter-json", - "tree-sitter-md", - "tree-sitter-python", - "tree-sitter-ruby", - "tree-sitter-rust", - "tree-sitter-toml", - "tree-sitter-typescript", - "zeroize", -] - -[[package]] -name = "radicle-cli-test" -version = "0.10.0" -dependencies = [ - "escargot", - "log", - "pretty_assertions", - "radicle", - "shlex", - "snapbox", - "thiserror", -] - -[[package]] -name = "radicle-cob" -version = "0.12.0" -dependencies = [ - "fastrand", - "git2", - "log", - "nonempty 0.9.0", - "once_cell", - "qcheck", - "qcheck-macros", - "radicle-crypto", - "radicle-dag", - "radicle-git-ext", - "serde", - "serde_json", - "tempfile", - "thiserror", -] - -[[package]] -name = "radicle-crdt" -version = "0.1.0" -dependencies = [ - "fastrand", - "num-traits", - "qcheck", - "qcheck-macros", - "radicle-crypto", - "serde", - "tempfile", - "thiserror", -] - -[[package]] -name = "radicle-crypto" -version = "0.11.0" -dependencies = [ - "amplify", - "cyphernet", - "ec25519", - "fastrand", - "multibase", - "qcheck", - "qcheck-macros", - "radicle-git-ext", - "radicle-ssh", - "serde", - "sqlite", - "ssh-key", - "tempfile", - "thiserror", - "zeroize", -] - -[[package]] -name = "radicle-dag" -version = "0.9.0" -dependencies = [ - "fastrand", -] - -[[package]] -name = "radicle-fetch" -version = "0.10.0" -dependencies = [ - "bstr", - "either", - "gix-actor", - "gix-features", - "gix-hash", - "gix-odb", - "gix-pack", - "gix-protocol", - "gix-transport", - "log", - "nonempty 0.9.0", - "radicle", - "radicle-git-ext", - "thiserror", -] - -[[package]] -name = "radicle-git-ext" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d2e8a6292811e44388e6068fcaf1040401e1f6a7a58cf48cc121cf7453c19d" -dependencies = [ - "git-ref-format", - "git2", - "percent-encoding", - "radicle-std-ext", - "serde", - "thiserror", -] - -[[package]] -name = "radicle-node" -version = "0.10.0" -dependencies = [ - "amplify", - "anyhow", - "bloomy", - "byteorder", - "chrono", - "colored", - "crossbeam-channel", - "cyphernet", - "fastrand", - "io-reactor", - "lexopt", - "libc", - "localtime", - "log", - "netservices", - "nonempty 0.9.0", - "once_cell", - "qcheck", - "qcheck-macros", - "radicle", - "radicle-crypto", - "radicle-fetch", - "radicle-git-ext", - "radicle-signals", - "radicle-systemd", - "scrypt", - "serde", - "serde_json", - "snapbox", - "socket2", - "sqlite", - "tempfile", - "thiserror", -] - -[[package]] -name = "radicle-remote-helper" -version = "0.10.0" -dependencies = [ - "log", - "radicle", - "radicle-cli", - "radicle-crypto", - "radicle-git-ext", - "thiserror", -] - -[[package]] -name = "radicle-signals" -version = "0.11.0" -dependencies = [ - "crossbeam-channel", - "libc", - "signals_receipts", -] - -[[package]] -name = "radicle-ssh" -version = "0.9.0" -dependencies = [ - "byteorder", - "log", - "thiserror", - "zeroize", -] - -[[package]] -name = "radicle-std-ext" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db20136bbc9ae63f3fec8e5a6c369f4902fac2244501b5dfc6d668e43475aaa4" - -[[package]] -name = "radicle-surf" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb308c3989087f71e43d8c7a2737273fdc7fbcd3e6628af81a42f601ae64f314" -dependencies = [ - "anyhow", - "base64 0.13.1", - "flate2", - "git2", - "log", - "nonempty 0.5.0", - "radicle-git-ext", - "radicle-std-ext", - "tar", - "thiserror", - "url", -] - -[[package]] -name = "radicle-systemd" -version = "0.9.0" - -[[package]] -name = "radicle-term" -version = "0.11.0" -dependencies = [ - "anstyle-query", - "anyhow", - "crossbeam-channel", - "git2", - "inquire", - "libc", - "once_cell", - "pretty_assertions", - "radicle-signals", - "shlex", - "tempfile", - "termion 3.0.0", - "thiserror", - "unicode-display-width", - "unicode-segmentation", - "zeroize", -] - -[[package]] -name = "radicle-tools" -version = "0.9.0" -dependencies = [ - "anyhow", - "radicle", - "radicle-cli", - "radicle-git-ext", - "radicle-term", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_termios" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb" - -[[package]] -name = "regex" -version = "1.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" - -[[package]] -name = "rfc6979" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" -dependencies = [ - "hmac", - "subtle", -] - -[[package]] -name = "rsa" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" -dependencies = [ - "const-oid", - "digest", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core", - "sha2", - "signature 2.2.0", - "spki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - -[[package]] -name = "ryu" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" - -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "scrypt" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" -dependencies = [ - "pbkdf2", - "salsa20", - "sha2", -] - -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "pkcs8", - "subtle", - "zeroize", -] - -[[package]] -name = "sem_safe" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9110d660d39b5f65f10a978ce0dd5e0a08c50e1d5589cadfad9b9a5f221fdb14" -dependencies = [ - "base64 0.22.1", - "errno", - "getrandom", - "libc", -] - -[[package]] -name = "serde" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "serde_json" -version = "1.0.116" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha1_smol" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest", - "keccak", -] - -[[package]] -name = "shell-words" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "signals_receipts" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74fa07c27e948f68f2f72241a189850526fbd3b428eee702884ba1883a39610e" -dependencies = [ - "cfg-if", - "errno", - "libc", - "sem_safe", -] - -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core", -] - -[[package]] -name = "similar" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" - -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "snapbox" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b831b6e80fbcd2889efa75b185d24005f85981431495f995292b25836519d84" -dependencies = [ - "anstream", - "anstyle", - "normalize-line-endings", - "similar", - "snapbox-macros", -] - -[[package]] -name = "snapbox-macros" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c4b838b05d15ab22754068cb73500b2f3b07bf09d310e15b27f88160f1de40" -dependencies = [ - "anstream", -] - -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socks5-client" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc7dcf6fab1d65d82d633006a4cc658d76ce436e01cf1a7c71873c0eeba324c" -dependencies = [ - "amplify", - "cypheraddr", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlite" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03801c10193857d6a4a71ec46cee198a15cbc659622aabe1db0d0bdbefbcf8e6" -dependencies = [ - "libc", - "sqlite3-sys", -] - -[[package]] -name = "sqlite3-src" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc95a51a1ee38839599371685b9d4a926abb51791f0bc3bf8c3bb7867e6e454" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "sqlite3-sys" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2752c669433e40ebb08fde824146f50d9628aa0b66a3b7fc6be34db82a8063b" -dependencies = [ - "libc", - "sqlite3-src", -] - -[[package]] -name = "ssh-cipher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" -dependencies = [ - "aes", - "aes-gcm", - "cbc", - "chacha20", - "cipher", - "ctr", - "poly1305", - "ssh-encoding", - "subtle", -] - -[[package]] -name = "ssh-encoding" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" -dependencies = [ - "base64ct", - "pem-rfc7468", - "sha2", -] - -[[package]] -name = "ssh-key" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca9b366a80cf18bb6406f4cf4d10aebfb46140a8c0c33f666a144c5c76ecbafc" -dependencies = [ - "bcrypt-pbkdf", - "p256", - "p384", - "p521", - "rand_core", - "rsa", - "sec1", - "sha2", - "signature 2.2.0", - "ssh-cipher", - "ssh-encoding", - "subtle", - "zeroize", -] - -[[package]] -name = "subtle" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tar" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" -dependencies = [ - "filetime", - "libc", - "xattr", -] - -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand", - "rustix", - "windows-sys 0.52.0", -] - -[[package]] -name = "termion" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4648c7def6f2043b2568617b9f9b75eae88ca185dbc1f1fda30e95a85d49d7d" -dependencies = [ - "libc", - "libredox", - "numtoa", - "redox_termios", -] - -[[package]] -name = "termion" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "417813675a504dfbbf21bfde32c03e5bf9f2413999962b479023c02848c1c7a5" -dependencies = [ - "libc", - "libredox", - "numtoa", - "redox_termios", -] - -[[package]] -name = "thiserror" -version = "1.0.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", -] - -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "itoa", - "libc", - "num-conv", - "num_threads", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - -[[package]] -name = "timeago" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1710e589de0a76aaf295cd47a6699f6405737dbfd3cf2b75c92d000b548d0e6" - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tree-sitter" -version = "0.20.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e747b1f9b7b931ed39a548c1fae149101497de3c1fc8d9e18c62c1a66c683d3d" -dependencies = [ - "cc", - "regex", -] - -[[package]] -name = "tree-sitter-bash" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da2032c37eb2ce29fd18df7d3b94355fec8d6d854d8f80934955df542b5906" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-c" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bbd5f3d8658c08581f8f2adac6c391c2e9fa00fe9246bf6c5f52213b9cc6b72" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-css" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3306ddefa1d2681adda2613d11974ffabfbeb215e23235da6c862f3493a04fd" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-go" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad6d11f19441b961af2fda7f12f5d0dac325f6d6de83836a1d3750018cc5114" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-highlight" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "042342584c5a7a0b833d9fc4e2bdab3f9868ddc6c4b339a1e01451c6720868bc" -dependencies = [ - "regex", - "thiserror", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-html" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "017822b6bd42843c4bd67fabb834f61ce23254e866282dd93871350fd6b7fa1d" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-json" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9a38a9c679b55cc8d17350381ec08d69fa1a17a53fcf197f344516e485ed4d" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-md" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c20d3ef8d202430b644a307e6299d84bf8ed87fa1b796e4638f8805a595060c" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-python" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c93b1b1fbd0d399db3445f51fd3058e43d0b4dcff62ddbdb46e66550978aa5" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-ruby" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d50ef383469df8485f024c5fb01faced8cb90368192a7ba02605b43b2427fe" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-rust" -version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0832309b0b2b6d33760ce5c0e818cb47e1d72b468516bfe4134408926fa7594" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-toml" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca517f578a98b23d20780247cc2688407fa81effad5b627a5a364ec3339b53e8" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "tree-sitter-typescript" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8bc1d2c24276a48ef097a71b56888ac9db63717e8f8d0b324668a27fd619670" -dependencies = [ - "cc", - "tree-sitter", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] -name = "unicode-display-width" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a43273b656140aa2bb8e65351fe87c255f0eca706b2538a9bd4a590a3490bf3" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" - -[[package]] -name = "unicode-width" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" - -[[package]] -name = "universal-hash" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" -dependencies = [ - "crypto-common", - "subtle", -] - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.60", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.60", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[package]] -name = "winapi-util" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134306a13c5647ad6453e8deaec55d3a44d6021970129e6188735e74bf546697" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - -[[package]] -name = "windows-targets" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" -dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" - -[[package]] -name = "winnow" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" -dependencies = [ - "memchr", -] - -[[package]] -name = "xattr" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" -dependencies = [ - "libc", - "linux-raw-sys", - "rustix", -] - -[[package]] -name = "yansi" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" - -[[package]] -name = "zeroize" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index 72f8c3ef9..000000000 --- a/Cargo.toml +++ /dev/null @@ -1,41 +0,0 @@ -[workspace] -package.version = "0.9.0" -members = [ - "radicle", - "radicle-cob", - "radicle-cli", - "radicle-cli-test", - "radicle-crdt", - "radicle-crypto", - "radicle-dag", - "radicle-fetch", - "radicle-node", - "radicle-remote-helper", - "radicle-ssh", - "radicle-tools", - "radicle-signals", - "radicle-systemd", -] -default-members = [ - "radicle", - "radicle-cli", - "radicle-cob", - "radicle-crdt", - "radicle-crypto", - "radicle-node", - "radicle-ssh", - "radicle-remote-helper", - "radicle-term", - "radicle-signals", - "radicle-systemd", -] -resolver = "2" - -[profile.container] -inherits = "release" -debug = true -incremental = false - -[workspace.lints] -clippy.type_complexity = "allow" -clippy.enum_variant_names = "allow" diff --git a/DCO b/DCO deleted file mode 100644 index 69175c983..000000000 --- a/DCO +++ /dev/null @@ -1,28 +0,0 @@ -Developer's Certificate of Origin 1.1 -Copyright © 2004, 2006 The Linux Foundation and its contributors. - ---- - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. diff --git a/HACKING.md b/HACKING.md deleted file mode 100644 index e900fcf94..000000000 --- a/HACKING.md +++ /dev/null @@ -1,178 +0,0 @@ -# HACKING - -Welcome to the Radicle "Heartwood" hacking guide! - -We appreciate your interest in contributing to the Radicle project. If you come across -a bug or a missing feature, please feel free to submit a patch. This guide is meant as -an introduction to the codebase, on how to debug issues, write tests and navigate the -repository. - -Please make sure to read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting code, -and follow the included guidelines. To download a development version of Radicle, -see the [README.md](README.md). - -For an architectural overview of Heartwood, see [ARCHITECTURE.md](ARCHITECTURE.md). - ---- - -The repository is structured in *crates*, as follows: - -* `radicle`: The Radicle standard library that contains shared libraries used across the project. -* `radicle-cli`: the Radicle command-line interface (`rad`). -* `radicle-cli-test`: The Radicle CLI testing framework, for writing documentation tests. -* `radicle-cob`: Radicle Collaborative Objects (COBs). Provides a way of creating and traversing edit histories. -* `radicle-crdt`: Conflict-free replicated datatypes (CRDTs) used for things like discussions and patches. -* `radicle-crypto`: A wrapper around Ed25519 cryptographic signing primitives. -* `radicle-dag`: A simple directed acyclic graph implementation used by `radicle-cob`. -* `radicle-node`: The radicle peer-to-peer daemon that enables users to connect to the network and share code. -* `radicle-remote-helper`: A Git remote helper for `rad://` remotes. -* `radicle-ssh`: OpenSSH functionality, including a library used to interface with `ssh-agent`. -* `radicle-term`: A generic terminal library used by the Radicle CLI. -* `radicle-tools`: Tools used to aid in the development of Radicle. - -## Running in debug mode - -To run the services or the CLI in debug mode, use `cargo run -p `. - -For example, the equivalent of `rad auth` in debug mode would be: - - $ cargo run -p radicle-cli --bin rad -- auth - -Arguments after the `--` are passed directly to the `rad` executable. - -This is useful if you are running multiple nodes on the same machine. You can also -specify different listen addresses for the peer-to-peer protocol using `--listen`. -To view all options, run `cargo run -p radicle-node -- --help`. - -You may want to set the appropriate environment variables before running these commands -to prevent them from interfering with an existing installation of radicle. See the -following section on environment variables. - -## Running in isolation - -When testing things, if you want to run one or more nodes in isolation from the -public Radicle network of nodes: - -* In the node `config.json` file: - - set `preferredSeeds` to `[]` - - set `node.connect` to `[]` - - set `node.network` to `test` - - set `node.peers.type` to `static` - -This allows you to make any changes to the repositories on your nodes without -having them replicated to outside your nodes. This would be good to do for any -experiments you make that might be burdensome for other nodes, such as creating -very large repositories. - -## Environment variables - -When developing radicle, some environment variables may be used to make the -development environment more friendly. - -**`RAD_HOME`** - -Set this to a path on your file system where you'd like radicle to store keys -and repositories. Typically you'll want to set this to a temporary folder, eg. -`/tmp/radicle`, that can be safely deleted. If set, all radicle data will be -stored within this folder. - -**`RAD_KEYGEN_SEED`** - -Set this to a 32-byte hexadecimal string to generate deterministic Node IDs -when creating new profiles. For example, integration tests use the following -setting: - - RAD_KEYGEN_SEED=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff - -**`RAD_PASSPHRASE`** - -Set this to the passphrase chosen during profile initialization (`rad auth`) to -skip the passphrase prompt. It's recommended to set this while developing to -avoid storing development keys with `ssh-agent`. - -## Logging - -Logging for `radicle-node` is turned on by default. Check the respective -`--help` output to set the log level. - -## Writing tests - -### Documentation tests - -When implementing changes to the CLI, or adding a new sub-command, it's a good -idea to add a documentation test. You can find examples of these in -`radicle-cli/examples`. - -Each documentation test must be accompanied by a regular unit test. These are -located in `radicle-cli/tests/commands.rs`. To keep tests deterministic, -environment variables are used. If your document test output is changing on -each test run, make sure to account for any variability in the test environment -(clocks, RNGs, etc.). - -### Node service logic tests - -When testing the core service logic, eg. the gossip protocol; tests can be -added to `radicle-node/src/tests.rs`. These service-level tests simply test -inputs and outputs and do not perform any I/O. - -### Node end-to-end tests - -If you find the need to test the replication protocol or networking layer, it's -possible to write an end-to-end test. These tests can be found in -`radicle-node/src/tests/e2e.rs`. - -## Debugging - -### Repository storage - -Radicle stores git repositories inside `$RAD_HOME/storage`, which defaults to -`~/.radicle/storage` on UNIX-based operating systems. You can use standard git -tooling to inspect references and other git objects inside storage. Each radicle -repository is stored under its own folder under storage as a bare Git repository. - -Once inside a repository folder, the following commands may come in handy. - -`git show-ref` to show all references: - - $ git show-ref - f60b291752bc38be7dfc90c4c4034de13e01a66b refs/heads/master - f60b291752bc38be7dfc90c4c4034de13e01a66b refs/namespaces/z6MkqTY5aQepDGNCrkPqzdmzveX3D4oAmyVXUDDVQaDGdyVH/refs/heads/master - 805b7d0df927dcbc4d3911ab07cd497953eecbd1 refs/namespaces/z6MkqTY5aQepDGNCrkPqzdmzveX3D4oAmyVXUDDVQaDGdyVH/refs/rad/id - 86136a42a69572015466bac2d974154ee76f0853 refs/namespaces/z6MkqTY5aQepDGNCrkPqzdmzveX3D4oAmyVXUDDVQaDGdyVH/refs/rad/sigrefs - 5575035d8b4faf1f18c532b08516f18031dd7b28 refs/namespaces/z6MkuGSynjxM8SLhcsiEPWZgDeGLAVNXf5g7WePmc1Tri1FS/refs/heads/master - 805b7d0df927dcbc4d3911ab07cd497953eecbd1 refs/namespaces/z6MkuGSynjxM8SLhcsiEPWZgDeGLAVNXf5g7WePmc1Tri1FS/refs/rad/id - 89e4f0baa327595c7b2849189fc8808388a29033 refs/namespaces/z6MkuGSynjxM8SLhcsiEPWZgDeGLAVNXf5g7WePmc1Tri1FS/refs/rad/sigrefs - -`git cat-file` to examine refs: - - $ git cat-file -p f60b291752bc38be7dfc90c4c4034de13e01a66b - - tree 1afc38724d2b89264c7b3826d40b0655a95cfab4 - author cloudhead 1678097961 +0100 - committer cloudhead 1678097961 +0100 - gpgsig -----BEGIN SSH SIGNATURE----- - U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgvjrQogRxxLjzzWns8+mKJAGzEX - 4fm2ALoN7pyvD2ssQAAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5 - AAAAQHXhUf7QjXNlgCjDbGSG+zoyIlE4S9/d9qjvG7x9jw8J/fXDVIMkh/Lkp743g7EliM - X+88wqit9BeQoHXuxj2Ao= - -----END SSH SIGNATURE----- - - Init - -You can also run `git ls-remote rad` from inside a working copy to examine the -remote refs in storage. - -### Connecting to your local node - -The radicle node listens on a UNIX domain socket located at -`$RAD_HOME/node/control.sock`. Make sure this file is accessible and has the -required permissions for your user to read and write to it. - -### Radicle keys - -Radicle uses Ed25519 keys that are located in `$RAD_HOME/keys`. These keys are -encoded in the standard OpenSSH format. It's therefore possible to use standard -OpenSSH tools to interact with them, eg. `ssh-add`. - -Your radicle secret key is protected with a passphrase (See: `$RAD_PASSPHRASE`). - diff --git a/LICENSE-APACHE b/LICENSE-APACHE deleted file mode 100644 index 1b5ec8b78..000000000 --- a/LICENSE-APACHE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS diff --git a/LICENSE-MIT b/LICENSE-MIT deleted file mode 100644 index 68fa6d19c..000000000 --- a/LICENSE-MIT +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 The Radicle Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index a6c939dba..000000000 --- a/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# ❤️🪵 - -*Radicle Heartwood Protocol & Stack* - -Heartwood is the third iteration of the Radicle Protocol, a powerful -peer-to-peer code collaboration and publishing stack. The repository contains a -full implementation of Heartwood, complete with a user-friendly command-line -interface (`rad`) and network daemon (`radicle-node`). - -Radicle was designed to be a secure, decentralized and powerful alternative to -code forges such as GitHub and GitLab that preserves user sovereignty -and freedom. - -See the [Protocol Guide](https://radicle.xyz/guides/protocol) for an -in-depth description of how Radicle works. - -## Installation - -**Requirements** - -* *Linux* or *Unix* based operating system. -* Git 2.34 or later -* OpenSSH 9.1 or later with `ssh-agent` - -### 📀 From binaries - -> Requires `curl` and `tar`. - -Run the following command to install the latest binary release: - - curl -sSf https://radicle.xyz/install | sh - -Or visit our [download](https://radicle.xyz/download) page. - -### 📦 From source - -> Requires the Rust toolchain. - -You can install the Radicle stack from source, by running the following -commands from inside this repository: - - cargo install --path radicle-cli --force --locked --root ~/.radicle - cargo install --path radicle-node --force --locked --root ~/.radicle - cargo install --path radicle-remote-helper --force --locked --root ~/.radicle - -Or directly from our seed node: - - cargo install --force --locked --root ~/.radicle \ - --git https://seed.radicle.xyz/z3gqcJUoA1n9HaHKufZs5FCSGazv5.git \ - radicle-cli radicle-node radicle-remote-helper - -## Running - -*Systemd* unit files are provided for the node under the `/systemd` folder. -They can be used as a starting point for further customization. - -For running in debug mode, see [HACKING.md](HACKING.md). - -## Contributing - -See [CONTRIBUTING.md](CONTRIBUTING.md) and [HACKING.md](HACKING.md) for an -introduction to contributing to Radicle. - -## License - -Radicle is distributed under the terms of both the MIT license and the Apache License (Version 2.0). - -See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details. diff --git a/VERSIONING.md b/VERSIONING.md deleted file mode 100644 index 3cf115905..000000000 --- a/VERSIONING.md +++ /dev/null @@ -1,60 +0,0 @@ -# Versioning - -This document describes the versioning scheme used by the Radicle Stack, ie. -the package that includes the Radicle CLI (`rad`), Radicle Node -(`radicle-node`) and other binaries. It is not relevant to the Rust *crate* -versions which follow [Semantic Versioning][semver]. - -[semver]: https://semver.org/ - -## Format - -Versioning of the Radicle Stack is based on Git tags. During the build phase, -we search for the most recent tag that starts with a `v` character, eg. -`v1.0.0`, and use that as the basis for computing the version. - -If we're building code that is pointed to by that tag directly, that code will -inherit that version number, with the `v` character stripped. For example: - - 1.0.0 - -If on the other hand, the commit we are building has no version tag pointing to -it, the output of `git describe` is used as-is. This indicates a development -version that is not released and not meant to be packaged or distributed. For -example: - - 1.0.0-6-ga3ffe51d - -Tags used for versioning are always annotated and signed, and follow the format: - - "v" "." "." - -When the tag is parsed, we strip the `v` prefix, which results in a version -matching: - - "." "." - -For pre-releases or release candidates, we add the `-rc` suffix, plus a number. -For example: - - 1.0.0-rc.2 - -These releases are meant to be packaged. - -## Semantics - -The Radicle version numbers do not follow strict rules, but these are the -guidelines we use: - -1. Increment the `` number when significant changes and/or improvements - are made to the Radicle Stack. This should happen rarely. -2. Increment the `` number when new features are added or existing - features are improved in a noticeable way. -3. Increment the `` number when bugs are fixed, docs are updated or - features are tweaked. - -Unless clearly stated in the documentation, none of the user-facing commands -should be considered stable APIs, and may therefore break in `` or -`` version updates. If command output is considered stable, and an -effort is made to maintain that stability, this will be stated in the command's -documentation. diff --git a/build.rs b/build.rs deleted file mode 100644 index 34d54253b..000000000 --- a/build.rs +++ /dev/null @@ -1,54 +0,0 @@ -use std::env; -use std::process::Command; - -fn main() -> Result<(), Box> { - // Set a build-time `GIT_HEAD` env var which includes the commit id; - // such that we can tell which code is running. - let hash = env::var("GIT_HEAD").unwrap_or_else(|_| { - Command::new("git") - .arg("rev-parse") - .arg("--short") - .arg("HEAD") - .output() - .ok() - .and_then(|output| { - if output.status.success() { - String::from_utf8(output.stdout).ok() - } else { - None - } - }) - .unwrap_or("unknown".into()) - }); - - let version = if let Ok(version) = env::var("RADICLE_VERSION") { - version - } else { - "pre-release".to_owned() - }; - - // Set a build-time `SOURCE_DATE_EPOCH` env var which includes the commit time. - let commit_time = env::var("SOURCE_DATE_EPOCH").unwrap_or_else(|_| { - Command::new("git") - .arg("log") - .arg("-1") - .arg("--pretty=%ct") - .arg("HEAD") - .output() - .ok() - .and_then(|output| { - if output.status.success() { - String::from_utf8(output.stdout).ok() - } else { - None - } - }) - .unwrap_or(0.to_string()) - }); - - println!("cargo::rustc-env=RADICLE_VERSION={version}"); - println!("cargo::rustc-env=SOURCE_DATE_EPOCH={commit_time}"); - println!("cargo::rustc-env=GIT_HEAD={hash}"); - - Ok(()) -} diff --git a/build/Dockerfile b/build/Dockerfile deleted file mode 100644 index 478f10128..000000000 --- a/build/Dockerfile +++ /dev/null @@ -1,107 +0,0 @@ -# Builds release binaries for Radicle. -FROM rust:1.77.2-alpine3.19 as builder -LABEL maintainer="Radicle Team " -WORKDIR /src -COPY . . - -ARG TZ -ARG LC_ALL -ARG SOURCE_DATE_EPOCH -ARG RADICLE_VERSION -ARG GIT_HEAD - -# Copy cargo configuration we're going to use to specify compiler options. -RUN mkdir -p .cargo && cp build/config.toml .cargo/config.toml -# Install dependencies. -RUN apk update && apk add --no-cache git musl-dev minisign curl xz asciidoctor -# Build man pages and strip metadata. Removes all comments, since they include -# non-reproducible information, such as version numbers. -RUN asciidoctor --doctype manpage --backend manpage --destination-dir . *.1.adoc && \ - find . -maxdepth 1 -type f -name '*.1' -exec sed -i '/^.\\\"/d' '{}' \; -# Add cargo targets. -RUN rustup target add \ - x86_64-unknown-linux-musl \ - aarch64-unknown-linux-musl \ - x86_64-apple-darwin \ - aarch64-apple-darwin - -# Install dependencies for cross-compiling to macOS. -# We use Zig as the linker to perform the compilation from a Linux host. -# Zig is not yet available on Debian, so we download the official binary. -# Compilation is done via `cargo-zigbuild` which is a wrapper around `zig`. -RUN curl -sSf -o zig.tar.xz https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz && \ - curl -sSf -o zig.tar.xz.minisig https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz.minisig && \ - minisign -Vm zig.tar.xz -P RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U && \ - xz -d -c zig.tar.xz | tar -x && \ - mv zig-linux-x86_64-0.12.0/zig /usr/bin/zig && \ - mv zig-linux-x86_64-0.12.0/lib /usr/lib/zig && \ - cargo install cargo-zigbuild@0.18.3 - - -# Parts of the macOS SDK are required to build Radicle, we make these available -# here. So far only `CoreFoundation` and `Security` frameworks are needed. -RUN xz -d -c build/macos-sdk-11.3.tar.xz | tar -x -# This env var is used by `cargo-zigbuild` to find the SDK. -ENV SDKROOT /src/macos-sdk-11.3 - -# Build binaries. -RUN cargo zigbuild --locked --release \ - --target=x86_64-apple-darwin \ - --target=aarch64-apple-darwin \ - --target=aarch64-unknown-linux-musl \ - --target=x86_64-unknown-linux-musl \ - -p radicle-node \ - -p radicle-remote-helper \ - -p radicle-cli - -# Now copy the files to a new image without all the intermediary artifacts to -# save some space. -FROM alpine:3.19 as packager - -ARG RADICLE_VERSION -ARG SOURCE_DATE_EPOCH - -COPY --from=builder \ - /src/target/x86_64-unknown-linux-musl/release/rad \ - /src/target/x86_64-unknown-linux-musl/release/git-remote-rad \ - /src/target/x86_64-unknown-linux-musl/release/radicle-node \ - /builds/x86_64-unknown-linux-musl/bin/ -COPY --from=builder \ - /src/target/aarch64-unknown-linux-musl/release/rad \ - /src/target/aarch64-unknown-linux-musl/release/git-remote-rad \ - /src/target/aarch64-unknown-linux-musl/release/radicle-node \ - /builds/aarch64-unknown-linux-musl/bin/ -COPY --from=builder \ - /src/target/aarch64-apple-darwin/release/rad \ - /src/target/aarch64-apple-darwin/release/git-remote-rad \ - /src/target/aarch64-apple-darwin/release/radicle-node \ - /builds/aarch64-apple-darwin/bin/ -COPY --from=builder \ - /src/target/x86_64-apple-darwin/release/rad \ - /src/target/x86_64-apple-darwin/release/git-remote-rad \ - /src/target/x86_64-apple-darwin/release/radicle-node \ - /builds/x86_64-apple-darwin/bin/ -COPY --from=builder /src/*.1 /builds/x86_64-unknown-linux-musl/man/man1/ -COPY --from=builder /src/*.1 /builds/aarch64-unknown-linux-musl/man/man1/ -COPY --from=builder /src/*.1 /builds/aarch64-apple-darwin/man/man1/ -COPY --from=builder /src/*.1 /builds/x86_64-apple-darwin/man/man1/ - -# Create and compress reproducible archive. -WORKDIR /builds -RUN x86_64-unknown-linux-musl/bin/rad version --json > radicle.json -RUN apk update && apk add --no-cache tar xz -RUN find * -maxdepth 0 -type d -exec mv '{}' "radicle-$RADICLE_VERSION-{}" \; && \ - find * -maxdepth 0 -type d -exec tar \ - --sort=name \ - --verbose \ - --mtime="@$SOURCE_DATE_EPOCH" \ - --owner=0 \ - --group=0 \ - --numeric-owner \ - --format=posix \ - --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ - --mode='go+u,go-w' \ - --remove-files \ - --create --xz \ - --file="{}.tar.xz" \ - '{}' \; diff --git a/build/README.md b/build/README.md deleted file mode 100644 index 51ec10768..000000000 --- a/build/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Builds - -Radicle uses a [reproducible build][rb] pipeline to make binary verification -easier and more secure. - -[rb]: https://reproducible-builds.org/ - -This build pipeline is designed to be run on an x86_64 machine running Linux. -The output is a set of `.tar.xz` archives containing binaries for the supported -platforms and signed by the user's Radicle key. - -These binaries are statically linked to be maximally portable, and designed to -be reproducible, byte for byte. - -To run the build, simply enter the following command from the repository root: - - build/build - -This will build all targets and place the output in `build/artifacts` with -one sub-directory per build target. - -Note that it will use `git describe` to get a version number for the build. -You *must* have a commit tagged with a version in your history or the build -will fail, eg. `v1.0.0`. - -When the build completes, the SHA-256 checksums of the artifacts are output. -For a given Radicle version and source tree, the same set of checksums should -always be output, no matter where or when the build is run. If they do not -match, either the build pipeline has a bug, making it non-reproducible, or one -of the machines is compromised. - -Here's an example output for a development version of Radicle: - - b9aa75bba175e18e05df4f6b39ec097414bbf56ccdeb4a2229b557f8b8e05404 radicle-1.0.0-rc.4-3-gb299f3b5-aarch64-apple-darwin.tar.xz - c7070806bf2d17a8a0d3b329e4d57b1e544b7b82cb58e2863074d96348a2ab0d radicle-1.0.0-rc.4-3-gb299f3b5-aarch64-unknown-linux-musl.tar.xz - 1a8327854f16ea90491fb90e0c3291a63c4b2ab01742c8435faec7d370cacb79 radicle-1.0.0-rc.4-3-gb299f3b5-x86_64-apple-darwin.tar.xz - 709ac67541ff0c0c570ac22ab2de9f98320e0cc2cc9b67f1909c014a2bb5bd49 radicle-1.0.0-rc.4-3-gb299f3b5-x86_64-unknown-linux-musl.tar.xz - -A script is included in `build/checksums` to output these checksums after -the artifacts are built. - -## Requirements - -The following software is required for the build: - - * `podman` - * `rad` (The Radicle CLI) - * `sha256sum` - -## macOS - -macOS binaries are not signed or notarized, so they have to be downloaded via -the CLI to avoid issues. A copy of a small subset of the Apple SDK is included -here to be able to cross-compile. - -## Podman - -We use `podman` to make the build reproducible on any machine by controlling -the build environment. We prefer `podman` to `docker` because it doesn't -require a background process to run and can be run without root access out of -the box. - -The first time you run `podman`, you may have to give yourself some extra UIDs -for `podman` to use, with: - - sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER - -Then update `podman` with: - - podman system migrate diff --git a/build/TARGETS b/build/TARGETS deleted file mode 100644 index eec922875..000000000 --- a/build/TARGETS +++ /dev/null @@ -1,4 +0,0 @@ -x86_64-unknown-linux-musl -aarch64-unknown-linux-musl -x86_64-apple-darwin -aarch64-apple-darwin diff --git a/build/build b/build/build deleted file mode 100755 index 70bcd91a5..000000000 --- a/build/build +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -set -e - -main() { - # Use UTC time for everything. - export TZ=UTC0 - # Set minimal locale. - export LC_ALL=C - # Set source date. This is honored by `asciidoctor` and other tools. - export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) - - if ! command -v rad > /dev/null; then - echo "fatal: rad is not installed" >&2 ; exit 1 - fi - - if ! command -v podman > /dev/null; then - echo "fatal: podman is not installed" >&2 ; exit 1 - fi - - if ! command -v sha256sum > /dev/null; then - echo "fatal: sha256sum is not installed" >&2 ; exit 1 - fi - - rev="$(git rev-parse --short HEAD)" - tempdir="$(mktemp -d)" - gitarchive="$tempdir/heartwood-$rev.tar.gz" - keypath="$(rad path)/keys/radicle.pub" - version="$(build/version)" - image=radicle-build-$version - - if [ ! -f "$keypath" ]; then - echo "fatal: no key found at $keypath" >&2 ; exit 1 - fi - # Authenticate user for signing - rad auth - - echo "Building Radicle $version.." - echo "Creating archive of repository at $rev in $gitarchive.." - git archive --format tar.gz -o "$gitarchive" HEAD - - echo "Building image ($image).." - podman --cgroup-manager=cgroupfs build \ - --build-arg SOURCE_DATE_EPOCH \ - --build-arg TZ \ - --build-arg LC_ALL \ - --build-arg RADICLE_VERSION=$version \ - --build-arg GIT_HEAD=$rev \ - --arch amd64 --tag $image -f ./build/Dockerfile - < $gitarchive - - echo "Creating container (radicle-build-container).." - podman --cgroup-manager=cgroupfs create --ulimit=host --replace --name radicle-build-container $image - - # Copy build artifacts to output folder. - outdir=build/artifacts - mkdir -p $outdir - podman cp --overwrite radicle-build-container:/builds/. $outdir/ - - for target in $(cat build/TARGETS); do - echo "Signing artifacts for $target.." - - filename="radicle-$version-$target.tar.xz" - filepath="$outdir/$filename" - - # Output SHA256 digest of archive. - checksum="$(cd $outdir && sha256sum $filename)" - echo "Checksum of $filepath is $(echo "$checksum" | cut -d' ' -f1)" - echo "$checksum" > $filepath.sha256 - - # Sign archive and verify archive. - rm -f $filepath.sig # Delete existing signature - ssh-keygen -Y sign -n file -f $keypath $filepath - ssh-keygen -Y check-novalidate -n file -s $filepath.sig < $filepath - done - - # Remove build artifacts that aren't needed anymore. - rm -f $gitarchive - podman rm radicle-build-container > /dev/null - podman rmi --ignore localhost/$image -} - -# Run build. -echo "Running build.." -main "$@" - -# Show artifact checksums. -echo -build/checksums -echo - -echo "Build successful." diff --git a/build/checksums b/build/checksums deleted file mode 100755 index a0225cf56..000000000 --- a/build/checksums +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -find build/artifacts -type f -name '*.sha256' -exec cat {} + diff --git a/build/config.toml b/build/config.toml deleted file mode 100644 index b50ab6768..000000000 --- a/build/config.toml +++ /dev/null @@ -1,13 +0,0 @@ -[target.x86_64-unknown-linux-musl] -rustflags = [ - "-C", "codegen-units=1", - "-C", "incremental=false", - "-C", "opt-level=3", -] - -[target.aarch64-unknown-linux-musl] -rustflags = [ - "-C", "codegen-units=1", - "-C", "incremental=false", - "-C", "opt-level=3", -] diff --git a/build/macos-sdk-11.3.tar.xz b/build/macos-sdk-11.3.tar.xz deleted file mode 100644 index 02fad1f94..000000000 Binary files a/build/macos-sdk-11.3.tar.xz and /dev/null differ diff --git a/build/tag b/build/tag deleted file mode 100755 index 7c8b3dbf5..000000000 --- a/build/tag +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -set -e - -if [ $# -ne 1 ]; then - echo "Usage: $0 " - exit 1 -fi - -version="$1" -tag="v$version" -commit="$(git rev-parse HEAD)" -signing_key=$(git config user.signingKey) - -git show "$commit" - -if [ "$signing_key" != "$(rad self --ssh-key)" ]; then - echo "The Git signing key does not match the output of 'rad self --ssh-key'." - exit 1 -fi - -printf "\n" -printf "Tag the above commit with \033[35m$tag\033[0m, using \033[35m$(rad self --did)\033[0m? [y/N] " -read confirmation -rad auth - -case "$confirmation" in - [Yy]*) - if git tag --annotate --sign "$tag" -m "Release $version" "$commit"; then - echo "Tag $tag created and signed over $commit." - else - echo "Failed to create tag." - exit 1 - fi ;; - *) - echo "Operation aborted." - exit 1 ;; -esac - diff --git a/build/upload b/build/upload deleted file mode 100755 index 8c89dffd7..000000000 --- a/build/upload +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -set -e - -SSH_LOGIN=${SSH_LOGIN:-release} -SSH_ADDRESS=${SSH_ADDRESS:-$SSH_LOGIN@files.radicle.xyz} -SSH_KEY="$(rad path)/keys/radicle" - -main() { - version="$(build/version)" - - echo "Uploading Radicle $version..." - - if [ -z "$version" ]; then - echo "fatal: empty version number" >&2 ; exit 1 - fi - - # Create remote folder. - ssh -i $SSH_KEY $SSH_ADDRESS mkdir -p /mnt/radicle/files/releases/$version - # Copy files over. - scp -i $SSH_KEY build/artifacts/radicle-$version* $SSH_ADDRESS:/mnt/radicle/files/releases/$version - scp -i $SSH_KEY build/artifacts/radicle.json $SSH_ADDRESS:/mnt/radicle/files/releases/$version - - for target in $(cat build/TARGETS); do - archive=/mnt/radicle/files/releases/$version/radicle-$version-$target.tar.xz - symlink=/mnt/radicle/files/releases/$version/radicle-$target.tar.xz - - echo "Creating symlinks for $target.." - - ssh -i $SSH_KEY $SSH_ADDRESS ln -snf $archive $symlink - ssh -i $SSH_KEY $SSH_ADDRESS ln -snf $archive.sig $symlink.sig - ssh -i $SSH_KEY $SSH_ADDRESS ln -snf $archive.sha256 $symlink.sha256 - done - - if git describe --exact-match --match='v*' 2>/dev/null; then - echo "Creating 'latest' symlink.." - ssh -i $SSH_KEY $SSH_ADDRESS ln -snf /mnt/radicle/files/releases/$version /mnt/radicle/files/releases/latest - else - echo "Skipping 'latest' symlink creation for development build." - fi - - echo "Pushing tags.." - git push rad --tags - - echo "Done." -} - -main "$@" diff --git a/build/version b/build/version deleted file mode 100755 index 4383147c1..000000000 --- a/build/version +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -if ! version="$(git describe --match='v*' --candidates=1 2>/dev/null)"; then - echo "fatal: no version tag found by 'git describe'" >&2 ; exit 1 -fi -# Remove `v` prefix from version. -version=${version#v} - -echo $version diff --git a/debian/build-deb b/debian/build-deb deleted file mode 100755 index 6f9ff8bc3..000000000 --- a/debian/build-deb +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -rm -f ../radicle*_* -git clean -fdx - -# Get name and version of source package. -name="$(dpkg-parsechangelog -SSource)" -version="$(dpkg-parsechangelog -SVersion)" - -# Get upstream version: everything before the last dash. -uv="$(echo "$version" | sed 's/-[^-]*$//')" -orig="${name}_${uv}.orig.tar.xz" - -# Create a tar ball without the Debian packaging. -tmp="$(mktemp -d)" -trap 'rm -rf "$tmp"' EXIT -git archive HEAD | tar -C "$tmp" -xf - -rm -rf "$tmp/debian" -tar -C "$tmp" -cf - . | xz >"../$orig" - -# Actually build the package, without signing the .changes file. -dpkg-buildpackage -us -uc - -# Dump some information to make it easier to visually verify -# everything looks OK. Also, test the package with the lintian tool. -arch="$(dpkg --print-architecture)" -deb="../${name}_${version}_${arch}.deb" -changes="../${name}_${version}_${arch}.changes" - -ls -l "$deb" -dpkg -c "$deb" -lintian -i "$changes" diff --git a/debian/cargo-checksum.json b/debian/cargo-checksum.json deleted file mode 100644 index 6852d00f5..000000000 --- a/debian/cargo-checksum.json +++ /dev/null @@ -1 +0,0 @@ -/* This file needs to exist, but can be empty. */ diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index a4efdeb5a..000000000 --- a/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -radicle (0.8.0-1) unstable; urgency=medium - - * New release. - - -- Lars Wirzenius Mon, 25 Sep 2023 08:34:08 +0300 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index 021ea30c0..000000000 --- a/debian/compat +++ /dev/null @@ -1,2 +0,0 @@ -10 - diff --git a/debian/control b/debian/control deleted file mode 100644 index 971763292..000000000 --- a/debian/control +++ /dev/null @@ -1,17 +0,0 @@ -Source: radicle -Maintainer: The Radicle Team -Uploaders: Lars Wirzenius -Section: vcs -Priority: optional -Standards-Version: 4.6.2 -Build-Depends: debhelper (>= 10~), - asciidoctor -Homepage: https://radicle.xyz/ - -Package: radicle -Architecture: any -Depends: ${misc:Depends}, ${shlibs:Depends}, git -Description: peer-to-peer, distributed git hosting - Radicle is a secure, decentralized and powerful alternative to code - forges such as GitHub and GitLab that preserves user sovereignty and - freedom. diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index 05a9fff69..000000000 --- a/debian/copyright +++ /dev/null @@ -1,10 +0,0 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: heartwood -Upstream-Contact: https://radicle.xyz/ -Source: https://app.radicle.xyz/seeds/seed.radicle.xyz - -Files: * -Copyright: 2019-2021, The Radicle Foundation -License: Apache-2 or Expat - License texts omitted, see LICENSE-APACHE and LICENSE-MIT in the - source tree. diff --git a/debian/install b/debian/install deleted file mode 100644 index 7e79e07c7..000000000 --- a/debian/install +++ /dev/null @@ -1 +0,0 @@ -*.1 usr/share/man/man1 diff --git a/debian/lintian-overrides b/debian/lintian-overrides deleted file mode 100644 index ba0f0dfc6..000000000 --- a/debian/lintian-overrides +++ /dev/null @@ -1,3 +0,0 @@ -radicle binary: initial-upload-closes-no-bugs -radicle binary: no-manual-page -radicle binary: unstripped-binary-or-object diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 8472b0f47..000000000 --- a/debian/rules +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/make -f - -DEB_BUILD_OPTIONS=nostrip - -%: - dh $@ - -override_dh_auto_build: - scripts/build-man-pages.sh . *.adoc - -override_dh_auto_install: - cargo install --locked --path=radicle-cli --root=debian/radicle - cargo install --locked --path=radicle-node --root=debian/radicle - cargo install --locked --path=radicle-remote-helper --root=debian/radicle - rm -f debian/*/.crates*.* - -override_dh_auto_test: - echo tests are disabled, for now diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 163aaf8d8..000000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides deleted file mode 100644 index 1d1033798..000000000 --- a/debian/source/lintian-overrides +++ /dev/null @@ -1 +0,0 @@ -radicle source: debian-rules-sets-DEB_BUILD_OPTIONS diff --git a/deny.toml b/deny.toml deleted file mode 100644 index f28eccf01..000000000 --- a/deny.toml +++ /dev/null @@ -1,126 +0,0 @@ -# Note that all fields that take a lint level have these possible values: -# * deny - An error will be produced and the check will fail -# * warn - A warning will be produced, but the check will not fail -# * allow - No warning or error will be produced - - -# The graph table configures how the dependency graph is constructed and thus -# which crates the checks are performed against -[graph] -targets = [] -# If true, metadata will be collected with `--all-features`. Note that this can't -# be toggled off if true, if you want to conditionally enable `--all-features` it -# is recommended to pass `--all-features` on the cmd line instead -all-features = false -# If true, metadata will be collected with `--no-default-features`. The same -# caveat with `all-features` applies -no-default-features = false - -# The output table provides options for how/if diagnostics are outputted -[output] -# When outputting inclusion graphs in diagnostics that include features, this -# option can be used to specify the depth at which feature edges will be added. -# This option is included since the graphs can be quite large and the addition -# of features from the crate(s) to all of the graph roots can be far too verbose. -# This option can be overridden via `--feature-depth` on the cmd line -feature-depth = 1 - -# This section is considered when running `cargo deny check advisories` -[advisories] -# Opt into new defaults since cargo deny 0.14.12 (2024-02-23) -version = 2 -# The path where the advisory database is cloned/fetched into -db-path = "~/.cargo/advisory-db" -# The url(s) of the advisory databases to use -db-urls = ["https://github.com/rustsec/advisory-db"] -# The lint level for crates that have been yanked from their source registry. -yanked = "warn" -# A list of advisory IDs to ignore. Note that ignored advisories will still -# output a note when they are encountered. -ignore = [] - -# This section is considered when running `cargo deny check licenses` -[licenses] -# Opt into new defaults since cargo deny 0.14.12 (2024-02-23) -version = 2 -# List of explicitly allowed licenses -allow = [ - "MIT", - "Apache-2.0", - "Unicode-DFS-2016", - "BSD-3-Clause", - "MPL-2.0" -] -# The confidence threshold for detecting a license from license text. -confidence-threshold = 0.8 -# Allow 1 or more licenses on a per-crate basis, so that particular licenses -# aren't accepted for every possible crate as with the normal allow list -exceptions = [ - { allow = ["GPL-3.0"], name = "radicle-surf", version = "*" }, - { allow = ["GPL-3.0"], name = "radicle-std-ext", version = "*" }, - { allow = ["GPL-3.0"], name = "radicle-git-ext", version = "*" }, - { allow = ["GPL-3.0"], name = "git-ref-format-core", version = "*" }, - { allow = ["GPL-3.0"], name = "git-ref-format-macro", version = "*" }, - { allow = ["GPL-3.0"], name = "git-ref-format", version = "*" }, -] - -[licenses.private] -# If true, ignores workspace crates that aren't published, or are only -# published to private registries. -ignore = false -registries = [] - -# This section is considered when running `cargo deny check bans`. -[bans] -# Lint level for when multiple versions of the same crate are detected -multiple-versions = "warn" -# Lint level for when a crate version requirement is `*` -wildcards = "allow" -# The graph highlighting used when creating dotgraphs for crates -# with multiple versions -# * lowest-version - The path to the lowest versioned duplicate is highlighted -# * simplest-path - The path to the version with the fewest edges is highlighted -# * all - Both lowest-version and simplest-path are used -highlight = "all" -# The default lint level for `default` features for crates that are members of -# the workspace that is being checked. This can be overridden by allowing/denying -# `default` on a crate-by-crate basis if desired. -workspace-default-features = "allow" -# The default lint level for `default` features for external crates that are not -# members of the workspace. This can be overridden by allowing/denying `default` -# on a crate-by-crate basis if desired. -external-default-features = "allow" -# List of crates that are allowed. Use with care! -allow = [] -# List of crates to deny -deny = [] - -# Certain crates/versions that will be skipped when doing duplicate detection. -skip = [] -# Similarly to `skip` allows you to skip certain crates during duplicate -# detection. Unlike skip, it also includes the entire tree of transitive -# dependencies starting at the specified crate, up to a certain depth, which is -# by default infinite. -skip-tree = [] - -# This section is considered when running `cargo deny check sources`. -[sources] -# Lint level for what to happen when a crate from a crate registry that is not -# in the allow list is encountered -unknown-registry = "warn" -# Lint level for what to happen when a crate from a git repository that is not -# in the allow list is encountered -unknown-git = "warn" -# List of URLs for allowed crate registries. Defaults to the crates.io index -# if not specified. If it is specified but empty, no registries are allowed. -allow-registry = ["https://github.com/rust-lang/crates.io-index"] -# List of URLs for allowed Git repositories -allow-git = [] - -[sources.allow-org] -# 1 or more github.com organizations to allow git sources for -github = [] -# 1 or more gitlab.com organizations to allow git sources for -gitlab = [] -# 1 or more bitbucket.org organizations to allow git sources for -bitbucket = [] diff --git a/flake.lock b/flake.lock deleted file mode 100644 index 416d4fcdc..000000000 --- a/flake.lock +++ /dev/null @@ -1,120 +0,0 @@ -{ - "nodes": { - "advisory-db": { - "flake": false, - "locked": { - "lastModified": 1722017365, - "narHash": "sha256-9wYR5NZIgI+qzMDlJrUzevR31fvFQRgfjlYp50Xp3Ts=", - "owner": "rustsec", - "repo": "advisory-db", - "rev": "9d024c07ee8c18609b43436bc865abf46636e250", - "type": "github" - }, - "original": { - "owner": "rustsec", - "repo": "advisory-db", - "type": "github" - } - }, - "crane": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1722907532, - "narHash": "sha256-i/j/dMZPR7uJoQPFTa6UCahLu8kMtozYuR83lIKMERM=", - "owner": "ipetkov", - "repo": "crane", - "rev": "d0c8f4ed8571c533b31c1d68e4ebc534b790cc5c", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1722940684, - "narHash": "sha256-X8JnSq0ruRWsU4PdYuxV+8W4W66F1lnCcxIZZMWzo4E=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "a3103d68517c6ad262ea27c96fc4a38ad81be7a0", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "release-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "advisory-db": "advisory-db", - "crane": "crane", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1722910815, - "narHash": "sha256-v6Vk/xlABhw2QzOa6xh3Jx/IvmlbKbOazFM+bDFQlWU=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "7df2ac544c203d21b63aac23bfaec7f9b919a733", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index b36dd91bc..000000000 --- a/flake.nix +++ /dev/null @@ -1,242 +0,0 @@ -{ - description = "Radicle"; - - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/release-24.05"; - - crane = { - url = "github:ipetkov/crane"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - - rust-overlay = { - url = "github:oxalica/rust-overlay"; - inputs = { - nixpkgs.follows = "nixpkgs"; - flake-utils.follows = "flake-utils"; - }; - }; - - flake-utils.url = "github:numtide/flake-utils"; - - advisory-db = { - url = "github:rustsec/advisory-db"; - flake = false; - }; - }; - - nixConfig = { - keepOutputs = true; - }; - - outputs = { - self, - nixpkgs, - crane, - flake-utils, - advisory-db, - rust-overlay, - ... - }: - flake-utils.lib.eachDefaultSystem (system: let - lib = nixpkgs.lib; - pkgs = import nixpkgs { - inherit system; - overlays = [(import rust-overlay)]; - }; - - rustToolChain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; - craneLib = (crane.mkLib pkgs).overrideToolchain rustToolChain; - - srcFilters = path: type: - builtins.any (suffix: lib.hasSuffix suffix path) [ - ".sql" # schemas - ".diff" # testing - ".md" # testing - ".adoc" # man pages - ] - || - # Default filter from crane (allow .rs files) - (craneLib.filterCargoSources path type); - - src = lib.cleanSourceWith { - src = ./.; - filter = srcFilters; - }; - - basicArgs = { - inherit src; - pname = "Heartwood"; - strictDeps = true; - }; - - # Build *just* the cargo dependencies, so we can reuse - # all of that work (e.g. via cachix) when running in CI - cargoArtifacts = craneLib.buildDepsOnly basicArgs; - - # Common arguments can be set here to avoid repeating them later - commonArgs = - basicArgs - // { - inherit cargoArtifacts; - - nativeBuildInputs = with pkgs; [ - git - # Add additional build inputs here - ]; - buildInputs = lib.optionals pkgs.stdenv.buildPlatform.isDarwin (with pkgs; [ - darwin.apple_sdk.frameworks.Security - ]); - - env = - { - RADICLE_VERSION = "nix-" + (self.shortRev or self.dirtyShortRev or "unknown"); - } - // ( - if self ? rev || self ? dirtyRev - then { - GIT_HEAD = self.rev or self.dirtyRev; - } - else {} - ); - }; - in { - # Formatter - formatter = pkgs.alejandra; - - # Set of checks that are run: `nix flake check` - checks = { - # Build the crate as part of `nix flake check` for convenience - inherit (self.packages.${system}) radicle; - - # Run clippy (and deny all warnings) on the crate source, - # again, reusing the dependency artifacts from above. - # - # Note that this is done as a separate derivation so that - # we can block the CI if there are issues here, but not - # prevent downstream consumers from building our crate by itself. - clippy = craneLib.cargoClippy (commonArgs - // { - cargoClippyExtraArgs = "--all-targets -- --deny warnings"; - }); - - doc = craneLib.cargoDoc commonArgs; - deny = craneLib.cargoDeny commonArgs; - fmt = craneLib.cargoFmt basicArgs; - - audit = craneLib.cargoAudit { - inherit src advisory-db; - }; - - # Run tests with cargo-nextest - nextest = craneLib.cargoNextest (commonArgs - // { - partitions = 1; - partitionType = "count"; - nativeBuildInputs = [ - # git is required so the sandbox can access it. - pkgs.git - # Ensure that `git-remote-rad` is present for testing. - self.packages.${system}.radicle-remote-helper - ]; - # Ensure dev is used since we rely on env variables being - # set in tests. - env.CARGO_PROFILE = "dev"; - }); - }; - - packages = let - crate = { - name, - pages ? [], - }: - craneLib.buildPackage (commonArgs - // { - inherit (craneLib.crateNameFromCargoToml {cargoToml = src + "/" + name + "/Cargo.toml";}) pname version; - cargoExtraArgs = "-p ${name}"; - doCheck = false; - - nativeBuildInputs = with pkgs; [asciidoctor installShellFiles]; - postInstall = '' - for page in ${lib.escapeShellArgs pages}; do - asciidoctor -d manpage -b manpage $page - installManPage ''${page::-5} - done - ''; - }); - crates = builtins.listToAttrs (map - ({name, ...} @ package: lib.nameValuePair name (crate package)) - [ - { - name = "radicle-cli"; - pages = [ - "rad.1.adoc" - "rad-id.1.adoc" - "rad-patch.1.adoc" - ]; - } - { - name = "radicle-remote-helper"; - pages = ["git-remote-rad.1.adoc"]; - } - { - name = "radicle-node"; - pages = ["radicle-node.1.adoc"]; - } - ]); - in - crates - // rec { - default = radicle; - radicle = pkgs.buildEnv { - name = "radicle"; - paths = with crates; [ - radicle-cli - radicle-node - radicle-remote-helper - ]; - }; - radicle-full = pkgs.buildEnv { - name = "radicle-full"; - paths = builtins.attrValues crates; - }; - }; - - apps.default = flake-utils.lib.mkApp { - drv = self.packages.${system}.radicle; - }; - - apps.radicle-full = flake-utils.lib.mkApp { - name = "rad"; - drv = self.packages.${system}.radicle-full; - }; - - apps.rad = flake-utils.lib.mkApp { - name = "rad"; - drv = self.packages.${system}.radicle-cli; - }; - - apps.git-remote-rad = flake-utils.lib.mkApp { - name = "git-remote-rad"; - drv = self.packages.${system}.radicle-remote-helper; - }; - - apps.radicle-node = flake-utils.lib.mkApp { - name = "radicle-node"; - drv = self.packages.${system}.radicle-node; - }; - - devShells.default = craneLib.devShell { - # Extra inputs can be added here; cargo and rustc are provided by default. - packages = with pkgs; [ - cargo-watch - cargo-nextest - ripgrep - rust-analyzer - sqlite - ]; - - env.RUST_SRC_PATH = "${rustToolChain}/lib/rustlib/src/rust/library"; - }; - }); -} diff --git a/git-remote-rad.1.adoc b/git-remote-rad.1.adoc deleted file mode 100644 index ca8c75aed..000000000 --- a/git-remote-rad.1.adoc +++ /dev/null @@ -1,26 +0,0 @@ -= git-remote-rad(1) -The Radicle Team -:doctype: manpage -:revnumber: 0.8.0 -:revdate: 2023-10-12 -:mansource: rad {revnumber} -:manmanual: Radicle CLI Manual - -== Name - -git-remote-rad - Git remote helper for Radicle - -== Synopsis - -*git-remote-rad* * - -== Description - -**git-remote-rad** is a **git**(1) remote helper program to allow git -to interact with the local Radicle storage. git will use this program -automatically, when using a remote repository with the "rad" protocol. -It is never invoked directly. - -== SEE ALSO == - -*git-remote-helpers*(1), *rad*(1) diff --git a/manifest b/manifest new file mode 100644 index 000000000..6188fc176 --- /dev/null +++ b/manifest @@ -0,0 +1 @@ +{"typeName":"xyz.radicle.patch","version":1} \ No newline at end of file diff --git a/rad-id.1.adoc b/rad-id.1.adoc deleted file mode 100644 index 124bc26f4..000000000 --- a/rad-id.1.adoc +++ /dev/null @@ -1,170 +0,0 @@ -= rad-id(1) -The Radicle Team -:doctype: manpage -:revnumber: 1.0.0 -:revdate: 2024-04-22 -:mansource: rad {revnumber} -:manmanual: Radicle CLI Manual - -== Name - -rad-id - Manage changes to a Radicle repository's identity. - -== Synopsis - -*rad id* [