Giter Club home page Giter Club logo

radicle-cli's Introduction

⚠️ Notice: Development of the Radicle CLI has moved to the Heartwood repository. This repository is being deprecated.


Radicle CLI

✨ Command-line tooling for Radicle.

Documentation

See the getting started guide for setup and usage instructions.

Contributing

The Radicle CLI is still under development. Contributions are always welcome! Please check the contributing page if you want to help.

Installation

📦 From source

You can install the Radicle CLI and supporting tools by running the following command from inside this repository:

cargo install --path cli --force --locked

Or directly from our seed node:

cargo install radicle-cli --force --locked --git https://seed.alt-clients.radicle.xyz/radicle-cli.git

Note It's recommended to install release builds since development builds may be incompatible with the network.

🐳 From Dockerfile

Alternatively you can build the Radicle CLI docker rad by running the following command from inside this repository:

docker build . -t rad

And then to use it:

docker run -it --rm rad --help

Note It's recommended to install release builds since development builds may be incompatible with the network.

🐧 From APT (Debian/Ubuntu)

First, download the package signing key:

curl -fsSL https://europe-west6-apt.pkg.dev/doc/repo-signing-key.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/radicle-archive-keyring.gpg > /dev/null

Then update your sources list with the radicle repository by creating a registry file:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/radicle-archive-keyring.gpg] https://europe-west6-apt.pkg.dev/projects/radicle-services radicle-cli main" | sudo tee -a /etc/apt/sources.list.d/radicle-registry.list

Then update the package list and install radicle-cli:

sudo apt update
sudo apt install radicle-cli

🍺 From Homebrew

brew tap --force-auto-update radicle/cli https://pine.radicle.garden/radicle-cli-homebrew.git
brew install radicle-cli

🐧 From AUR (Arch)

We provide an AUR package containing precompiled binaries. In order to use it, you can follow the official installation instructions, or use any of the AUR Helpers available.

radicle-cli's People

Contributors

adaszko avatar cloudhead avatar erak avatar flolu avatar geigerzaehler avatar jgresham avatar pinkforest avatar rudolfs avatar ryanmtate avatar salim-b avatar sebastinez avatar slack-coder avatar xphoniex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

radicle-cli's Issues

`rad-auth --init` bug

Running rad-auth from a project that isn't in the monorepo gives us this:

     Running `target/debug/rad-auth --init`

Initializing your 🌱 profile and identity

ok Name · seed
ok Passphrase · ********
ok Creating your 🌱 Ed25519 keypair...
ok Adding to ssh-agent...
ok Profile df514f0a-c554-4d49-8200-041b83d9235b created.

ok Writing seed configuration...
== Authentication failed No such file or directory (os error 2)

Redundant error string on push

== Publish failed Error: Error unsealing key: Unable to decrypt secret box using the derived key

Gotta get rid of that first "Error:" somehow.

Rad Commit

This issue should be a draft for an eventual specification to how git commits should be formatted if we want to use multiple git trailers and different types of signatures (gpg, ed25519) to improve the way the verification of the authors, committer and others who participated in a commit.

Status quo

  • Currently, the commit stores regarding the user information a display name and email of author and committer.
  • Anyone can change the display name and email to one of his choosing.

Concept

  • The information to be signed could be created during a pre-commit hook and signed by a HW or with a keystore file.
  • Allow signatures for each author, committer and even reviewers.
  • Signatures instead of being part of the commit header would be part of the commit trailer
  • Signatures could be encoded in some way to reduce size of trailer.
  • Verification of one or multiple commits against a listing of public keys. (eg. Ethereum addresses)

Discussion Points

  • Encoding of the trailer signature (base58, base64, others?)
  • Definition of property names of trailers (eg. Signed-off-by, Committed-by, Co-authored-by, Reviewed-by )
  • To allow various types of signatures I can imagine that we could use some kind of URN similar to the Radicle URN eg. eip155:<sig>, gpg:<sig>

Example


tree d7c7e1e0b8ba6ea8697ea2717d8530d8eeb561da
parent 3e8d2a29ff4165bcad080ea77527bf9c64e5bd3a
author Sebastian Martinez <[email protected]> 1631548042 +0200
committer Sebastian Martinez <[email protected]> 1631548042 +0200

Some tests with trailers
    
Signed-off-by: Sebastian Martinez <eip155:OgY1RkrDksKiw5gqw5PDp3LDpsO7w6rDrcOkw4JBw6jDmwFcwpZZKlhUEMKPwoZ/cDxOw7vDmlPCksKDKT/CnmAuw5dTZ2BPwoPDukbCkn/CpsO7wpE+YwhCSxob>
Reviewed-by: John Doe <eip155:GcOMw6BzCcKKXVTDrcKvwqJ1ZFYqwrVxwqrDl0EHLMOnS8OKQMOGw6nCqMOpccOtDcOMMcKTwqjCkcKnw6giworDoGIAXibCpcK6w5/CpEHCvsKuw7Apw4lQd2LDv03DrsK5HA==>
Committed-by: Alexis Sellier <eip155:XMKFKDjDrcKxwqzCt8KGMsO0B8KXw61QwonClMKPwrhVM1XDiMK/wrUSwohhw4LCt8OKS1xMRgbCj3pzwqNTB8OuNcKFXCvDmcKbw7lNwoU/fMOcbE7CrBvDpsORJxHDphs=>

Prove ownership of an ethereum address

At the moment we allow users to link their Radicle Urns with ENS by storing the Urn on ENS (for which one has to sign a tx) and we sign with the Radicle key the information stored on the local identity document.

We should be able to sign a ETH address with a wallet keypair and store that in the identity doc, and so have a two way proof between a Radicle Id and a ETH address.

This would allow us to point later from a Person -> ETH address -> ENS

Publish to crate.io

Hey guys,

Would be great if this were published to crate.io

afbeelding

Then we won't have to clone this repo nor install it from some other source. It would help a lot with trusting the source (crate.io is a trusted source).

Implement remote project deletion

It should be possible to delete a project remotely. There are two potential ways this could work:

  1. Git: implement deletion via git push, eg. have a rule that if all delegates delete their default branch, the project gets removed
  2. SIWE: use sign-in-with-ethereum plus an api on http-api to remotely delete a project; again, only project delegates would be allowed to do this.

Distributed patch-based collaboration

As a first attempt towards building collaboration tools, we'd like to put together something that would allow for developers to share and discuss patches with each other, and to integrate those patches into git repositories.

This would take the form of a shared inbox, eg. the "Pull requests" tab on GitHub, that anyone could add to, and would be distributed via Git, allowing for it to be replicated through Link, or simply via a git clone. Other replication mechanisms could be explored if they are as convenient as the above.

For a proof-of-concept, we would build a simple CLI that could be used to create patches, discuss them and merge them. For discussions, simply opening $EDITOR and typing comments inline, as when responding to an email, is perfectly sufficient for now.

These shared inboxes are to be scoped at the Radicle Project level, naturally, so each project would have its own inbox of patches.

The requirements for this follow the requirements of most radicle tooling: every object needs to be signed by a key that can be associated with the Radicle Identity, ie. either a Radicle key or an Ethereum key. Verification of the objects should be done client-side, there should be no trust assumptions. As for hosting/distribution, this should be compatible with the client services, ie. the org-node, but doesn't necessarily have to require it, ie. it can work in a "plain" p2p mode.

Cloning fails becuse delegate refs is not found

Since #105 I can’t clone projects anymore for which I don’t have the delegate identity already. For example, the following fails for a fresh profile:

$ rad clone rad://willow.radicle.garden/hnrkjrrz963azhn3cfx4emb941zz5x6cf785y
Git version 2.36.1

Syncing 🌱 project rad:git:hnrkjrrz963azhn3cfx4emb941zz5x6cf785y from https://willow.radicle.garden/

!! Verifying project identity...

== Cloning failed error resolving latest head
== reference 'refs/namespaces/hnrkqrzmhso7a4hryucohqg4ge8wueshs77oy/refs/rad/id' not found; class=Reference (4); code=NotFound (-3)

The issue seems to by that in order to verify the project we need to fetch the identity of its delegate first.

Creation of identity proof GPG <-> ETH

Abstract

This issue is for the debate on the proof of ownership of GPG and ETH identities.
It'll eventually allow for the web app and other services to verify through a cryptographic proof, that a commit was indeed signed by the corresponding Person.
It's heavily based on radicle-dev/radicle-link#525 and radicle-dev/radicle-upstream#965

Update N°1: We moved to a two way signature to sign a message both ways and have a self contained proof, to be stored on any decentralized storage, eg. IPFS, or even on-chain.

Requirements

  • The link must be verifiable with a cryptographic proof.
  • Both directions should be verifiable: GPG -> Radicle and Radicle -> GPG
  • The link and proof must be retrievable with just the GPG key fingerprint
  • The GPG identity must be retrievable with just the Ethereum address.
  • A command-line tool must be provided to create this link, and it should support the Ledger Nano S/X
  • The proof should be published on IPFS or other decentralized storage
  • The web client should integrate with this system and show the Radicle identities of project contributors who have signed their commits and linked their identities.

Attestation Flow

  • The user has to have a GPG keypair, being it a subkey or the primary key, and a ETH keypair to sign a message.
  • Using the GPG keypair we sign a message similar to "As the provable owner of this GPG fingerprint EB17....7EDF, this is my ETH address 0x1234...1233".
  • On the other hand we take a string similar to "As the provable owner of the ETH address 0x1234...1233, this is my GPG fingerprint EB17....7EDF" and sign it with the ETH keypair.
  • Finally we output a JSON object with both cryptographic signatures proving the ownership of both identities.

Verification Flow

  • Using the public key one could verify that the GPG or the ETH signature in the JSON object pointed at to be sure that the identity is the provided one.

Cannot `rad init` a bare git repo

Steps to reproduce

  1. git init --bare .
  2. rad init
  3. fill in desc / default branch

Error message:

== Initialization failed the `master` branch was either not found, or has no commits

`rad-track` fails when identity is not on seed

If a contributor pushes a fork without pushing their identity, and the maintainer tracks the contributor and syncs, he will get an error eg. "could not find remote ref refs/rad/id".

rad push failed

How do I go about debugging a failed push?

❯ rad push
Pushing 🌱 to remote `rad`
$ git push rad
Everything up-to-date

Git version 2.36.1
Select a seed node to sync with...
Selected pine.radicle.garden
== Push failed git signing key is not properly configured
==

I grabbed an existing git repo, installed radicle-cli using the "cargo install from git" command. Ran rad init, filled out the info, then ran rad push and selected pine.radicle.garden and hit the error above.

Running `rad auth` without `--init` flag, creates partial identity

I'm running radicle-cli on a Ubuntu 18.04 system. I've documented my issues with installing and working with radicle-cli, as well as the upgrades I've needed to make in order to make it work, on my radicle research page.

When I run rad push I'm getting this error:

== Push failed
Fatal: no rad/self present and no default identity configured
error: failed to push some refs to 'rad://hnrkjsnux9ns5t4famcga7f4r64a1brh99y1o.git'

But when I run rad self it comes back just fine:

trout@trout-vb:~/work/test-repo-03$ rad self
Profile 7fed6439-8623-4c25-bdfb-f5a7fe9651e5
├── Peer ID    hydjmd3ht8erttcrkczxcak78cg7i3dw9xdcsrtusqwwgstry19odk                           
├── Key (hash) SHA256:D8QH/HaO5ZLF51sKT630gnxlRRwl+507Dmzg2lSqSMU                               
└── Key (full) ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINKx55E6CRiwimXezCunYbtcjp942WJGdnUoa0SAl+A1 

Same with rad auth:

trout@trout-vb:~/work/test-repo-03$ rad auth
Your active profile is 7fed6439-8623-4c25-bdfb-f5a7fe9651e5
ok Signing key already in ssh-agent
ok Signing key configured in git

Any idea what could be causing this issue?

Add ability to edit project name and description

Currently, there's no way to change a project after it is created. We should add the ability to edit the name and description, via an interface like this:

$ cd my-project/
$ rad edit --help
   rad-edit 0.1.0
   Edit project payloads

Usage

   rad edit [--project <urn>]

$ rad edit
  <editor opens>
  {"name": "my-project", "description": "blah blah"}
  <save>
[ok] Project successfully updated to <commit-hash>

The commmand open open your editor via the term::Editor type and allow you to edit the project payload and then save it.

`patch list` fails when there are other tags present

In the Upstream repo we have lightweight tags for releases (e.g. v0.0.1). The following command fails

$ rad patch --list

🌱 Listing patches for radicle-upstream.

== Patch failed
git: the git_object of id 'c11f4a2169bdb21dd6c8b110afeef44bb150ea60' can not be successfully peeled into a tag (git_object_t=4).; class=Object (11); code=InvalidSpec (-12)
== the git_object of id 'c11f4a2169bdb21dd6c8b110afeef44bb150ea60' can not be successfully peeled into a tag (git_object_t=4).; class=Object (11); code=InvalidSpec (-12)

The object ID is mentioned is that of the commit that is tagged as v0.0.1.

Attempting to remove a remote results in error

A regression was introduced in the recent sync merge (b09bffc) causing 'git remote rm' to fail.

For example. as the contributing user (scooby) from the contributor workflow

# rad remote rm cloudhead
== Command failed entry is not unique due to being a multivar; class=Config (7)

rad-remote fails after an untrack --all

The expected behavior is to either list the remaining remotes, or none if they are removed.

▒ rad untrack --all
ok Tracking relationships for rad:git:hnrkrjq98dyjuson9dzuu8utjawenj7x3jjsy removed

▒ rad remote
== Command failed project rad:git:hnrkrjq98dyjuson9dzuu8utjawenj7x3jjsy not found on local device

The root of the error is 'rad untrack --all' unexpectedly deletes the project in the monorepo in addition to untracking peers. This is what 'rad rm' is for.

Bad error message when not authenticated

rad issue
== Command failed the key for hybjsbenr6cq7j4zwszuhuw3jiqppjw83kyaaeqai7tmfbxqjduh4y is not in the ssh-agent, consider adding it via lnk profile ssh add

`rad auth` should create key and identity if profile is empty

rad auth should be able to handle the case where a profile including a monorepo exists but no key and local identity has been created yet. This situation occurs with Upstream at the moment. This would also guard against the case where the user aborts rad auth when asked to type in their passphrase.

Error Installing on Ubuntu

I tried following the directions on the getting started documentation. I'm running Ubuntu 20 OS on a Dell Latitude (amd64 or x86-64) architecture.

After successfully installing Rust and setting the source $HOME/.cargo/env to set the environment variables, I ran the recommended command in the documentation:

  • cargo install --force --locked --git https://seed.alt-clients.radicle.xyz/radicle-cli.git radicle-cli

Here is the output I got:

rout@trout-dev:~/tmp$ cargo install --force --locked --git https://seed.alt-clients.radicle.xyz/radicle-cli.git radicle-cli
    Updating git repository `https://seed.alt-clients.radicle.xyz/radicle-cli.git`
  Installing radicle-cli v0.3.1 (https://seed.alt-clients.radicle.xyz/radicle-cli.git#f7a9314b)
    Updating git repository `https://github.com/radicle-dev/radicle-link`
    Updating git repository `https://github.com/FintanH/thrussh.git`
    Updating crates.io index
    Updating git repository `https://github.com/radicle-dev/radicle-keystore`
    Updating git repository `https://github.com/automerge/automerge-rs.git`
warning: package `crossbeam-channel v0.5.2` in Cargo.lock is yanked in registry `crates-io`, consider running without --locked
  Downloaded adler v1.0.2
  Downloaded cfg-if v1.0.0
  Downloaded base58check v0.1.0
  Downloaded blake2s_simd v0.5.11
  Downloaded data-encoding v2.3.2
  Downloaded byte-slice-cast v1.2.0
  Downloaded bs58 v0.4.0
  Downloaded coins-core v0.2.2
  Downloaded const-oid v0.6.2
  Downloaded bloom-filters v0.1.2
  Downloaded ahash v0.7.6
  Downloaded ryu v1.0.9
  Downloaded directories v3.0.2
  Downloaded dialoguer v0.9.0
  Downloaded cpufeatures v0.2.1
  Downloaded cache-padded v1.2.0
  Downloaded chunked_transfer v1.4.0
  Downloaded constant_time_eq v0.1.5
  Downloaded colored v2.0.0
  Downloaded crc32fast v1.3.2
  Downloaded ethereum-types v0.12.1
  Downloaded ethers v0.6.2
  Downloaded ethers-contract-abigen v0.6.3
  Downloaded bitvec v0.20.4
  Downloaded fancy-regex v0.7.1
  Downloaded byte-unit v4.0.13
  Downloaded concurrent-queue v1.2.2
  Downloaded chacha20 v0.8.1
  Downloaded crossbeam-deque v0.8.1
  Downloaded crossbeam-utils v0.8.7
  Downloaded opaque-debug v0.3.0
  Downloaded curve25519-dalek v3.2.0
  Downloaded parking_lot_core v0.8.5
  Downloaded num_cpus v1.13.1
  Downloaded proc-macro-error v1.0.4
  Downloaded hashbrown v0.8.2
  Downloaded impl-trait-for-tuples v0.2.2
  Downloaded rand_core v0.6.3
  Downloaded ethers-providers v0.6.2
  Downloaded pin-project-lite v0.2.8
  Downloaded ethers-middleware v0.6.2
  Downloaded git-lock v1.0.1
  Downloaded git-url v0.3.5
  Downloaded git-features v0.17.0
  Downloaded rand v0.8.5
  Downloaded impl-codec v0.5.1
  Downloaded coins-bip32 v0.3.0
  Downloaded num-traits v0.2.14
  Downloaded rand_chacha v0.3.1
  Downloaded unicode-bidi v0.3.7
  Downloaded unicode-width v0.1.9
  Downloaded rand v0.7.3
  Downloaded url v2.2.2
  Downloaded vec_map v0.8.2
  Downloaded version_check v0.9.4
  Downloaded crypto-bigint v0.2.11
  Downloaded quanta v0.4.1
  Downloaded aho-corasick v0.7.18
  Downloaded atty v0.2.14
  Downloaded ansi_term v0.12.1
  Downloaded autocfg v1.1.0
  Downloaded serde v1.0.136
  Downloaded pin-utils v0.1.0
  Downloaded serde_derive v1.0.136
  Downloaded mio v0.7.14
  Downloaded pkg-config v0.3.24
  Downloaded rand_chacha v0.2.2
  Downloaded void v1.0.2
  Downloaded uuid v0.8.2
  Downloaded walkdir v2.3.2
  Downloaded serde_json v1.0.79
  Downloaded arrayvec v0.5.2
  Downloaded strsim v0.8.0
  Downloaded async-trait v0.1.52
  Downloaded textwrap v0.11.0
  Downloaded opaque-debug v0.2.3
  Downloaded crunchy v0.2.2
  Downloaded crossbeam v0.8.1
  Downloaded crypto-common v0.1.3
  Downloaded base64 v0.13.0
  Downloaded crossbeam-epoch v0.9.7
  Downloaded rand_core v0.5.1
  Downloaded k256 v0.9.6
  Downloaded leb128 v0.2.5
  Downloaded pkcs8 v0.7.6
  Downloaded sec1 v0.2.1
  Downloaded uluru v3.0.0
  Downloaded salsa20 v0.8.1
  Downloaded crossbeam-channel v0.5.2
  Downloaded oid v0.2.1
  Downloaded unsigned-varint v0.5.1
  Downloaded scrypt v0.7.0
  Downloaded scrypt v0.8.0
  Downloaded zeroize v1.3.0
  Downloaded versions v3.0.3
  Downloaded async-task v4.1.0
  Downloaded base58 v0.1.0
  Downloaded backoff v0.3.0
  Downloaded num_threads v0.1.3
  Downloaded base16ct v0.1.1
  Downloaded polling v2.2.0
  Downloaded serde_bytes v0.11.5
  Downloaded radium v0.6.2
  Downloaded utf8-width v0.1.5
  Downloaded want v0.3.0
  Downloaded untrusted v0.7.1
  Downloaded universal-hash v0.4.1
  Downloaded wasm-bindgen-shared v0.2.79
  Downloaded sct v0.6.1
  Downloaded wasm-bindgen-macro-support v0.2.79
  Downloaded zeroize_derive v1.3.2
  Downloaded waker-fn v1.1.0
  Downloaded wasm-bindgen-backend v0.2.79
  Downloaded wyz v0.2.0
  Downloaded async-stream-impl v0.3.2
  Downloaded arrayref v0.3.6
  Downloaded async-channel v1.6.1
  Downloaded atomic-waker v1.0.0
  Downloaded async-stream v0.3.2
  Downloaded arrayvec v0.7.2
  Downloaded webpki v0.22.0
  Downloaded anyhow v1.0.53
  Downloaded async-io v1.6.0
  Downloaded webpki v0.21.4
  Downloaded remove_dir_all v0.5.3
  Downloaded rustls v0.19.1
  Downloaded pin-project-internal v1.0.10
  Downloaded parity-scale-codec-derive v2.3.1
  Downloaded pin-project-internal v0.4.29
  Downloaded wasm-bindgen-macro v0.2.79
  Downloaded password-hash v0.2.3
  Downloaded ureq v2.4.0
  Downloaded base64 v0.12.3
  Downloaded tracing v0.1.30
  Downloaded rayon v1.5.1
  Downloaded crossbeam-queue v0.3.4
  Downloaded arc-swap v1.5.0
  Downloaded scopeguard v1.1.0
  Downloaded same-file v1.0.6
  Downloaded parking_lot_core v0.9.1
  Downloaded smallvec v1.8.0
  Downloaded wasm-bindgen v0.2.79
  Downloaded synstructure v0.12.6
  Downloaded rustc-hex v2.1.0
  Downloaded subtle v2.4.1
  Downloaded signal-hook v0.3.13
  Downloaded thiserror v1.0.30
  Downloaded tempfile v3.3.0
  Downloaded tinyvec_macros v0.1.0
  Downloaded thiserror-impl v1.0.30
  Downloaded tower-service v0.3.1
  Downloaded tinyvec v1.5.1
  Downloaded tokio-macros v1.7.0
  Downloaded try-lock v0.2.3
  Downloaded time v0.3.7
  Downloaded tokio-util v0.6.9
  Downloaded unicode-xid v0.2.2
  Downloaded toml v0.5.8
  Downloaded typenum v1.15.0
  Downloaded bytesize v1.1.0
  Downloaded block-buffer v0.9.0
  Downloaded syn v1.0.86
  Downloaded prodash v18.0.2
  Downloaded webpki-roots v0.22.2
  Downloaded serde-aux v3.0.1
  Downloaded unicode-segmentation v1.9.0
  Downloaded unicode-normalization v0.1.19
  Downloaded async-process v1.3.0
  Downloaded spin v0.5.2
  Downloaded sct v0.7.0
  Downloaded base-x v0.2.8
  Downloaded regex-syntax v0.6.25
  Downloaded no-std-compat v0.4.1
  Downloaded auto_impl v0.5.0
  Downloaded strum_macros v0.21.1
  Downloaded strum v0.21.0
  Downloaded base64ct v1.3.3
  Downloaded tap v1.0.1
  Downloaded structopt-derive v0.4.18
  Downloaded time-macros v0.2.3
  Downloaded structopt v0.3.26
  Downloaded tokio-native-tls v0.3.0
  Downloaded terminal_size v0.1.17
  Downloaded tracing-attributes v0.1.19
  Downloaded tracing-futures v0.2.5
  Downloaded tokio-rustls v0.23.2
  Downloaded aead v0.4.3
  Downloaded rpassword v4.0.5
  Downloaded Inflector v0.11.4
  Downloaded ahash v0.3.8
  Downloaded tracing-core v0.1.22
  Downloaded aes v0.7.5
  Downloaded colored_json v2.1.0
  Downloaded btoi v0.4.2
  Downloaded tiny-keccak v2.0.2
  Downloaded async-lock v2.4.0
  Downloaded data-encoding-macro v0.1.12
  Downloaded coins-ledger v0.4.5
  Downloaded block-buffer v0.7.3
  Downloaded fnv v1.0.7
  Downloaded secstr v0.3.2
  Downloaded serde_cbor v0.10.2
  Downloaded block-padding v0.1.5
  Downloaded home v0.5.3
  Downloaded ff v0.10.1
  Downloaded maplit v1.0.2
  Downloaded git-actor v0.6.0
  Downloaded flate2 v1.0.22
  Downloaded ethers-signers v0.6.2
  Downloaded governor v0.3.2
  Downloaded nix v0.13.1
  Downloaded git-odb v0.23.0
  Downloaded bstr v0.2.17
  Downloaded filebuffer v0.4.0
  Downloaded ctr v0.7.0
  Downloaded colored v1.9.3
  Downloaded der v0.4.5
  Downloaded js-sys v0.3.56
  Downloaded digest v0.10.3
  Downloaded ed25519-zebra v3.0.0
  Downloaded lazy_static v1.4.0
  Downloaded git-validate v0.5.3
  Downloaded memmap2 v0.5.3
  Downloaded git-ref v0.11.0
  Downloaded once_cell v1.9.0
  Downloaded foreign-types v0.3.2
  Downloaded petgraph v0.5.1
  Downloaded rlp v0.5.1
  Downloaded sha-1 v0.9.8
  Downloaded num-iter v0.1.42
  Downloaded parking_lot v0.11.2
  Downloaded sized-vec v0.3.0
  Downloaded ethers-contract v0.6.2
  Downloaded deadpool v0.7.0
  Downloaded os_str_bytes v6.0.0
  Downloaded hex v0.4.3
  Downloaded ff v0.11.0
  Downloaded cargo_metadata v0.14.1
  Downloaded git-object v0.15.1
  Downloaded bit-vec v0.6.3
  Downloaded rayon-core v1.9.1
  Downloaded memchr v2.4.1
  Downloaded if-watch v0.2.2
  Downloaded http v0.2.6
  Downloaded form_urlencoded v1.0.1
  Downloaded pin-project v1.0.10
  Downloaded git-object v0.17.1
  Downloaded git-hash v0.9.2
  Downloaded keccak v0.1.0
  Downloaded impl-serde v0.3.2
  Downloaded half v1.8.2
  Downloaded fxhash v0.2.1
  Downloaded futures-channel v0.3.21
  Downloaded rlp-derive v0.1.0
  Downloaded openssl-sys v0.9.72
  Downloaded clru v0.5.0
  Downloaded console v0.15.0
  Downloaded k256 v0.10.2
  Downloaded xorf v0.7.2
  Downloaded itoa v1.0.1
  Downloaded ecdsa v0.13.4
  Downloaded either v1.6.1
  Downloaded git-odb v0.26.0
  Downloaded num-cmp v0.1.0
  Downloaded futures-sink v0.3.21
  Downloaded poly1305 v0.7.2
  Downloaded filetime v0.2.15
  Downloaded ethers-core v0.6.3
  Downloaded git-diff v0.13.0
  Downloaded git-diff v0.11.1
  Downloaded futures-util v0.3.21
  Downloaded jwalk v0.6.0
  Downloaded mime v0.3.16
  Downloaded rand_pcg v0.3.1
  Downloaded futures-io v0.3.21
  Downloaded num-bigint v0.2.6
  Downloaded slab v0.4.5
  Downloaded socket2 v0.4.4
  Downloaded httpdate v1.0.2
  Downloaded sha1 v0.6.1
  Downloaded native-tls v0.2.8
  Downloaded sha1_smol v1.0.0
  Downloaded block-buffer v0.10.2
  Downloaded blake2 v0.9.2
  Downloaded dashmap v5.1.0
  Downloaded blocking v1.1.0
  Downloaded digest v0.9.0
  Downloaded sha2 v0.10.2
  Downloaded fixedbitset v0.2.0
  Downloaded getrandom v0.2.4
  Downloaded matches v0.1.9
  Downloaded lru v0.7.2
  Downloaded bumpalo v3.9.1
  Downloaded openssl-probe v0.1.5
  Downloaded futures v0.3.21
  Downloaded ripemd160 v0.9.1
  Downloaded cc v1.0.72
  Downloaded coins-bip32 v0.6.0
  Downloaded git-pack v0.13.0
  Downloaded hyper-tls v0.5.0
  Downloaded jobserver v0.1.24
  Downloaded data-encoding-macro-internal v0.1.10
  Downloaded cryptovec v0.6.1
  Downloaded dirs-sys v0.3.6
  Downloaded dirs v4.0.0
  Downloaded eth-keystore v0.3.0
  Downloaded quinn v0.7.2
  Downloaded sha2 v0.8.2
  Downloaded ethers-contract-derive v0.6.3
  Downloaded idna v0.2.3
  Downloaded bincode v1.3.3
  Downloaded generic-array v0.14.5
  Downloaded getrandom v0.1.16
  Downloaded quinn-proto v0.7.3
  Downloaded bitvec v0.17.4
  Downloaded bytecount v0.6.2
  Downloaded git-tempfile v1.0.6
  Downloaded block-padding v0.2.1
  Downloaded inotify v0.7.1
  Downloaded git-transport v0.13.1
  Downloaded mio-extras v2.0.6
  Downloaded net2 v0.2.37
  Downloaded futures-executor v0.3.21
  Downloaded heck v0.3.3
  Downloaded instant v0.1.12
  Downloaded git-features v0.19.1
  Downloaded regex v1.5.4
  Downloaded mio v0.6.23
  Downloaded minimal-lexical v0.2.1
  Downloaded hyper v0.14.17
  Downloaded convert_case v0.4.0
  Downloaded chacha20poly1305 v0.9.0
  Downloaded crypto-mac v0.11.1
  Downloaded nom v5.1.2
  Downloaded static_assertions v1.1.0
  Downloaded futures-macro v0.3.21
  Downloaded ethbloom v0.11.1
  Downloaded dyn-clone v1.0.4
  Downloaded pbkdf2 v0.8.0
  Downloaded pbkdf2 v0.9.0
  Downloaded notify v4.0.17
  Downloaded event-listener v2.5.2
  Downloaded ethers-etherscan v0.2.2
  Downloaded group v0.10.0
  Downloaded lexopt v0.2.0
  Downloaded git-actor v0.8.1
  Downloaded foreign-types-shared v0.1.1
  Downloaded indexmap v1.8.0
  Downloaded web-sys v0.3.56
  Downloaded im v15.0.0
  Downloaded reqwest v0.11.9
  Downloaded blake2b_simd v0.5.11
  Downloaded digest v0.8.1
  Downloaded iso8601 v0.4.1
  Downloaded fake-simd v0.1.2
  Downloaded der v0.5.1
  Downloaded os_str_bytes v3.1.0
  Downloaded multibase v0.9.1
  Downloaded cargo-platform v0.1.2
  Downloaded camino v1.0.7
  Downloaded git-traverse v0.10.1
  Downloaded elliptic-curve v0.11.12
  Downloaded rand_xoshiro v0.4.0
  Downloaded pin-project v0.4.29
  Downloaded num-complex v0.2.4
  Downloaded number_prefix v0.4.0
  Downloaded funty v1.1.0
  Downloaded hyper-rustls v0.23.0
  Downloaded ethabi v15.0.0
  Downloaded fraction v0.9.0
  Downloaded byte-tools v0.3.1
  Downloaded iovec v0.1.4
  Downloaded git-pack v0.16.1
  Downloaded rustls-pemfile v0.2.1
  Downloaded bitmaps v2.1.0
  Downloaded bytes v0.5.6
  Downloaded http-body v0.4.4
  Downloaded httparse v1.6.0
  Downloaded const-oid v0.7.1
  Downloaded human_format v1.0.3
  Downloaded git-packetline v0.12.3
  Downloaded picky-asn1-der v0.2.5
  Downloaded socket2 v0.3.19
  Downloaded futures-task v0.3.21
  Downloaded impl-rlp v0.3.0
  Downloaded git-config v0.1.11
  Downloaded regex-automata v0.1.10
  Downloaded itoa v0.4.8
  Downloaded tokio v1.16.1
  Downloaded git-protocol v0.12.1
  Downloaded git-repository v0.14.0
  Downloaded miniz_oxide v0.4.4
  Downloaded sha3 v0.9.1
  Downloaded percent-encoding v2.1.0
  Downloaded num-rational v0.2.4
  Downloaded hashbrown v0.11.2
  Downloaded nom v7.1.0
  Downloaded num-integer v0.1.44
  Downloaded primitive-types v0.10.1
  Downloaded hmac v0.11.0
  Downloaded bech32 v0.7.3
  Downloaded memoffset v0.6.5
  Downloaded parking v2.0.0
  Downloaded byteorder v1.4.3
  Downloaded prodash v16.1.3
  Downloaded futures-timer v3.0.2
  Downloaded coins-bip39 v0.3.0
  Downloaded group v0.11.0
  Downloaded h2 v0.3.11
  Downloaded cfg-if v0.1.10
  Downloaded git-traverse v0.12.0
  Downloaded ecdsa v0.12.4
  Downloaded rfc6979 v0.1.0
  Downloaded inotify-sys v0.1.5
  Downloaded lazycell v1.3.0
  Downloaded jsonschema v0.15.0
  Downloaded md-5 v0.9.1
  Downloaded fastrand v1.7.0
  Downloaded generic-array v0.12.4
  Downloaded futures_codec v0.4.1
  Downloaded similar v2.1.0
  Downloaded git-hash v0.8.0
  Downloaded futures-core v0.3.21
  Downloaded pkcs8 v0.8.0
  Downloaded minicbor-derive v0.8.0
  Downloaded fixed-hash v0.7.0
  Downloaded ipnet v2.3.1
  Downloaded crypto-mac v0.8.0
  Downloaded bytes v1.1.0
  Downloaded picky-asn1 v0.3.3
  Downloaded semver v1.0.5
  Downloaded sha2 v0.9.9
  Downloaded proc-macro-crate v1.1.3
  Downloaded bitflags v1.3.2
  Downloaded parking_lot v0.12.0
  Downloaded lexical-core v0.7.6
  Downloaded parity-scale-codec v2.3.1
  Downloaded proc-macro2 v1.0.36
  Downloaded multihash v0.11.4
  Downloaded cmake v0.1.48
  Downloaded glob v0.3.0
  Downloaded git-ref v0.9.1
  Downloaded dashmap v4.0.2
  Downloaded quote v1.0.15
  Downloaded quick-error v2.0.1
  Downloaded nonempty v0.6.0
  Downloaded maybe-async v0.2.6
  Downloaded sized-chunks v0.6.5
  Downloaded futures-lite v1.12.0
  Downloaded radium v0.3.0
  Downloaded num v0.2.1
  Downloaded git2 v0.13.25
  Downloaded smol_str v0.1.21
  Downloaded minicbor v0.13.2
  Downloaded proc-macro-error-attr v1.0.4
  Downloaded globset v0.4.8
  Downloaded signature v1.3.2
  Downloaded openssl v0.10.38
  Downloaded indicatif v0.16.2
  Downloaded cipher v0.3.0
  Downloaded git-chunk v0.3.0
  Downloaded elliptic-curve v0.10.6
  Downloaded clap v2.34.0
  Downloaded signal-hook-registry v1.4.0
  Downloaded ppv-lite86 v0.2.16
  Downloaded lock_api v0.4.6
  Downloaded uint v0.9.3
  Downloaded picky-asn1-x509 v0.6.1
  Downloaded rustls v0.20.3
  Downloaded spki v0.5.4
  Downloaded bit-set v0.5.2
  Downloaded nonzero_ext v0.2.0
  Downloaded hidapi-rusb v1.3.0
  Downloaded rustc-hash v1.1.0
  Downloaded serde_urlencoded v0.7.1
  Downloaded sha2-asm v0.6.2
  Downloaded crypto-bigint v0.3.2
  Downloaded spki v0.4.1
  Downloaded rusb v0.9.0
  Downloaded encoding_rs v0.8.30
  Downloaded itertools v0.10.3
  Downloaded itertools v0.9.0
  Downloaded log v0.4.14
  Downloaded winapi v0.3.9
  Downloaded libusb1-sys v0.6.0
  Downloaded libssh2-sys v0.2.23
  Downloaded libc v0.2.118
  Downloaded ring v0.16.20
  Downloaded libz-sys v1.1.3
  Downloaded libgit2-sys v0.12.26+1.3.0
  Downloaded ethers-solc v0.1.2
  Downloaded 491 crates (33.2 MB) in 20.40s (largest was `ring` at 5.1 MB)
   Compiling libc v0.2.118
   Compiling proc-macro2 v1.0.36
   Compiling syn v1.0.86
   Compiling unicode-xid v0.2.2
   Compiling serde_derive v1.0.136
   Compiling serde v1.0.136
   Compiling version_check v0.9.4
   Compiling cfg-if v1.0.0
   Compiling autocfg v1.1.0
   Compiling memchr v2.4.1
   Compiling typenum v1.15.0
   Compiling pkg-config v0.3.24
   Compiling log v0.4.14
   Compiling lazy_static v1.4.0
   Compiling futures-core v0.3.21
   Compiling once_cell v1.9.0
   Compiling hex v0.4.3
   Compiling crossbeam-utils v0.8.7
   Compiling pin-project-lite v0.2.8
   Compiling subtle v2.4.1
   Compiling crossbeam-epoch v0.9.7
   Compiling futures-task v0.3.21
   Compiling futures-channel v0.3.21
   Compiling futures-util v0.3.21
   Compiling rayon-core v1.9.1
   Compiling byteorder v1.4.3
   Compiling crossbeam-queue v0.3.4
   Compiling itoa v1.0.1
   Compiling opaque-debug v0.3.0
   Compiling crc32fast v1.3.2
   Compiling cpufeatures v0.2.1
   Compiling block-padding v0.2.1
   Compiling futures-io v0.3.21
   Compiling slab v0.4.5
   Compiling scopeguard v1.1.0
   Compiling ppv-lite86 v0.2.16
   Compiling serde_json v1.0.79
   Compiling parking_lot_core v0.9.1
   Compiling quick-error v2.0.1
   Compiling tinyvec_macros v0.1.0
   Compiling futures-sink v0.3.21
   Compiling smallvec v1.8.0
   Compiling regex-automata v0.1.10
   Compiling parking_lot_core v0.8.5
   Compiling signal-hook v0.3.13
   Compiling ryu v1.0.9
   Compiling minimal-lexical v0.2.1
   Compiling pin-utils v0.1.0
   Compiling bitflags v1.3.2
   Compiling arrayvec v0.7.2
   Compiling matches v0.1.9
   Compiling fastrand v1.7.0
   Compiling adler v1.0.2
   Compiling same-file v1.0.6
   Compiling async-trait v0.1.52
   Compiling getrandom v0.1.16
   Compiling spin v0.5.2
   Compiling untrusted v0.7.1
   Compiling percent-encoding v2.1.0
   Compiling human_format v1.0.3
   Compiling bytesize v1.1.0
   Compiling keccak v0.1.0
   Compiling sha1_smol v1.0.0
   Compiling unicode-bidi v0.3.7
   Compiling crunchy v0.2.2
   Compiling radium v0.6.2
   Compiling static_assertions v1.1.0
   Compiling anyhow v1.0.53
   Compiling base64 v0.13.0
   Compiling openssl-probe v0.1.5
   Compiling remove_dir_all v0.5.3
   Compiling waker-fn v1.1.0
   Compiling arrayvec v0.5.2
   Compiling parking v2.0.0
   Compiling regex-syntax v0.6.25
   Compiling tiny-keccak v2.0.2
   Compiling base64ct v1.3.3
   Compiling itoa v0.4.8
   Compiling cache-padded v1.2.0
   Compiling fnv v1.0.7
   Compiling time-macros v0.2.3
   Compiling minicbor v0.13.2
   Compiling openssl v0.10.38
   Compiling arrayref v0.3.6
   Compiling httparse v1.6.0
   Compiling home v0.5.3
   Compiling constant_time_eq v0.1.5
   Compiling num_threads v0.1.3
   Compiling wasm-bindgen-shared v0.2.79
   Compiling clru v0.5.0
   Compiling event-listener v2.5.2
   Compiling rustls v0.20.3
   Compiling semver v1.0.5
   Compiling camino v1.0.7
   Compiling convert_case v0.4.0
   Compiling unicode-segmentation v1.9.0
   Compiling winapi v0.3.9
   Compiling native-tls v0.2.8
   Compiling const-oid v0.7.1
   Compiling bumpalo v3.9.1
   Compiling const-oid v0.6.2
   Compiling arc-swap v1.5.0
   Compiling async-task v4.1.0
   Compiling rustc-hex v2.1.0
   Compiling atomic-waker v1.0.0
   Compiling data-encoding v2.3.2
   Compiling cfg-if v0.1.10
   Compiling wyz v0.2.0
   Compiling funty v1.1.0
   Compiling wasm-bindgen v0.2.79
   Compiling tap v1.0.1
   Compiling ipnet v2.3.1
   Compiling os_str_bytes v3.1.0
   Compiling rustc-hash v1.1.0
   Compiling unsigned-varint v0.5.1
   Compiling half v1.8.2
   Compiling lexical-core v0.7.6
   Compiling byte-slice-cast v1.2.0
   Compiling radicle-std-ext v0.1.0 (https://github.com/radicle-dev/radicle-link?tag=cycle/2022-02-15#91381773)
   Compiling encoding_rs v0.8.30
   Compiling base-x v0.2.8
   Compiling base16ct v0.1.1
   Compiling foreign-types-shared v0.1.1
   Compiling nonzero_ext v0.2.0
   Compiling maplit v1.0.2
   Compiling bit-vec v0.6.3
   Compiling dyn-clone v1.0.4
   Compiling futures-timer v3.0.2
   Compiling nonempty v0.6.0
   Compiling byte-tools v0.3.1
   Compiling leb128 v0.2.5
   Compiling try-lock v0.2.3
   Compiling pin-project-internal v0.4.29
   Compiling num-cmp v0.1.0
   Compiling bytecount v0.6.2
   Compiling ahash v0.3.8
   Compiling unicode-width v0.1.9
   Compiling tower-service v0.3.1
   Compiling httpdate v1.0.2
   Compiling fixedbitset v0.2.0
   Compiling opaque-debug v0.2.3
   Compiling fake-simd v0.1.2
   Compiling lazycell v1.3.0
   Compiling bytes v0.5.6
   Compiling base58 v0.1.0
   Compiling base64 v0.12.3
   Compiling mime v0.3.16
   Compiling ansi_term v0.12.1
   Compiling rusb v0.9.0
   Compiling bech32 v0.7.3
   Compiling vec_map v0.8.2
   Compiling bs58 v0.4.0
   Compiling nix v0.13.1
   Compiling strsim v0.8.0
   Compiling radium v0.3.0
   Compiling void v1.0.2
   Compiling number_prefix v0.4.0
   Compiling utf8-width v0.1.5
   Compiling glob v0.3.0
   Compiling similar v2.1.0
   Compiling lexopt v0.2.0
   Compiling chunked_transfer v1.4.0
   Compiling instant v0.1.12
   Compiling generic-array v0.14.5
   Compiling nom v7.1.0
   Compiling ahash v0.7.6
   Compiling proc-macro-error-attr v1.0.4
   Compiling proc-macro-error v1.0.4
   Compiling im v15.0.0
   Compiling nom v5.1.2
   Compiling num-traits v0.2.14
   Compiling memoffset v0.6.5
   Compiling miniz_oxide v0.4.4
   Compiling rayon v1.5.1
   Compiling indexmap v1.8.0
   Compiling num-integer v0.1.44
   Compiling num-bigint v0.2.6
   Compiling num-iter v0.1.42
   Compiling num-rational v0.2.4
   Compiling num-complex v0.2.4
   Compiling hashbrown v0.8.2
   Compiling tracing-core v0.1.22
   Compiling fxhash v0.2.1
   Compiling lock_api v0.4.6
   Compiling git-hash v0.8.0
   Compiling git-hash v0.9.2
   Compiling git-chunk v0.3.0
   Compiling tinyvec v1.5.1
   Compiling uluru v3.0.0
   Compiling walkdir v2.3.2
   Compiling form_urlencoded v1.0.1
   Compiling prodash v16.1.3
   Compiling prodash v18.0.2
   Compiling sha1 v0.6.1
   Compiling rustls-pemfile v0.2.1
   Compiling concurrent-queue v1.2.2
   Compiling blake2b_simd v0.5.11
   Compiling blake2s_simd v0.5.11
   Compiling async-lock v2.4.0
   Compiling heck v0.3.3
   Compiling der v0.5.1
   Compiling der v0.4.5
   Compiling foreign-types v0.3.2
   Compiling bit-set v0.5.2
   Compiling block-padding v0.1.5
   Compiling textwrap v0.11.0
   Compiling byte-unit v4.0.13
   Compiling unicode-normalization v0.1.19
   Compiling spki v0.4.1
   Compiling spki v0.5.4
   Compiling jobserver v0.1.24
   Compiling num_cpus v1.13.1
   Compiling getrandom v0.2.4
   Compiling socket2 v0.4.4
   Compiling signal-hook-registry v1.4.0
   Compiling tempfile v3.3.0
   Compiling filebuffer v0.4.0
   Compiling quote v1.0.15
   Compiling time v0.3.7
   Compiling rpassword v4.0.5
   Compiling secstr v0.3.2
   Compiling atty v0.2.14
   Compiling dirs-sys v0.3.6
   Compiling net2 v0.2.37
   Compiling iovec v0.1.4
   Compiling inotify-sys v0.1.5
   Compiling filetime v0.2.15
   Compiling socket2 v0.3.19
   Compiling quanta v0.4.1
   Compiling memmap2 v0.5.3
   Compiling terminal_size v0.1.17
   Compiling bstr v0.2.17
   Compiling aho-corasick v0.7.18
   Compiling os_str_bytes v6.0.0
   Compiling mio v0.7.14
   Compiling polling v2.2.0
   Compiling want v0.3.0
   Compiling futures-lite v1.12.0
   Compiling async-channel v1.6.1
   Compiling crossbeam-channel v0.5.2
   Compiling bitmaps v2.1.0
   Compiling generic-array v0.12.4
   Compiling sized-vec v0.3.0
   Compiling uint v0.9.3
   Compiling bitvec v0.20.4
   Compiling idna v0.2.3
   Compiling cryptovec v0.6.1
   Compiling pkcs8 v0.7.6
   Compiling cc v1.0.72
   Compiling dashmap v4.0.2
   Compiling rand_core v0.6.3
   Compiling parking_lot v0.12.0
   Compiling rand_core v0.5.1
   Compiling parking_lot v0.11.2
   Compiling clap v2.34.0
   Compiling colored v2.0.0
   Compiling colored v1.9.3
   Compiling directories v3.0.2
   Compiling dirs v4.0.0
   Compiling mio v0.6.23
   Compiling inotify v0.7.1
   Compiling git-validate v0.5.3
   Compiling regex v1.5.4
   Compiling iso8601 v0.4.1
   Compiling btoi v0.4.2
   Compiling no-std-compat v0.4.1
   Compiling async-io v1.6.0
   Compiling git-packetline v0.12.3
   Compiling blocking v1.1.0
   Compiling digest v0.8.1
   Compiling block-buffer v0.7.3
   Compiling sized-chunks v0.6.5
   Compiling cmake v0.1.48
   Compiling rand_chacha v0.3.1
   Compiling ff v0.10.1
   Compiling ff v0.11.0
   Compiling dashmap v5.1.0
   Compiling rand_xoshiro v0.4.0
   Compiling openssl-sys v0.9.72
   Compiling sha2-asm v0.6.2
   Compiling ring v0.16.20
   Compiling libssh2-sys v0.2.23
   Compiling libgit2-sys v0.12.26+1.3.0
   Compiling libusb1-sys v0.6.0
   Compiling hidapi-rusb v1.3.0
   Compiling rand_pcg v0.3.1
   Compiling password-hash v0.2.3
   Compiling rand_chacha v0.2.2
   Compiling git-config v0.1.11
   Compiling synstructure v0.12.6
   Compiling wasm-bindgen-backend v0.2.79
   Compiling mio-extras v2.0.6
   Compiling fancy-regex v0.7.1
   Compiling globset v0.4.8
   Compiling Inflector v0.11.4
   Compiling console v0.15.0
   Compiling thiserror-impl v1.0.30
   Compiling futures-macro v0.3.21
   Compiling tracing-attributes v0.1.19
   Compiling tokio-macros v1.7.0
   Compiling pin-project-internal v1.0.10
   Compiling impl-trait-for-tuples v0.2.2
   Compiling maybe-async v0.2.6
   Compiling minicbor-derive v0.8.0
   Compiling data-encoding-macro-internal v0.1.10
   Compiling strum_macros v0.21.1
   Compiling rlp-derive v0.1.0
   Compiling link-canonical-derive v0.1.0 (https://github.com/radicle-dev/radicle-link?tag=cycle/2022-02-15#91381773)
   Compiling async-stream-impl v0.3.2
   Compiling crossbeam-deque v0.8.1
   Compiling git-actor v0.6.0
   Compiling async-process v1.3.0
   Compiling if-watch v0.2.2
   Compiling sha2 v0.8.2
   Compiling group v0.10.0
   Compiling rand v0.8.5
   Compiling group v0.11.0
   Compiling libz-sys v1.1.3
   Compiling git-tempfile v1.0.6
error: failed to run custom build command for `openssl-sys v0.9.72`

Caused by:
  process didn't exit successfully: `/tmp/cargo-install2593UP/release/build/openssl-sys-70fb941bb4b41862/build-script-main` (exit status: 101)
  --- stdout
  cargo:rustc-cfg=const_fn
  cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR
  X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
  OPENSSL_LIB_DIR unset
  cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR
  X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
  OPENSSL_INCLUDE_DIR unset
  cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR
  X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_DIR
  OPENSSL_DIR unset
  cargo:rerun-if-env-changed=OPENSSL_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=OPENSSL_STATIC
  cargo:rerun-if-env-changed=OPENSSL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
  cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_PATH
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
  cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
  run pkg_config fail: "`\"pkg-config\" \"--libs\" \"--cflags\" \"openssl\"` did not exit successfully: exit status: 1\nerror: could not find system library 'openssl' required by the 'openssl-sys' crate\n\n--- stderr\nPackage openssl was not found in the pkg-config search path.\nPerhaps you should add the directory containing `openssl.pc'\nto the PKG_CONFIG_PATH environment variable\nNo package 'openssl' found\n"

  --- stderr
  thread 'main' panicked at '

  Could not find directory of OpenSSL installation, and this `-sys` crate cannot
  proceed without this knowledge. If OpenSSL is installed and this crate had
  trouble finding it,  you can set the `OPENSSL_DIR` environment variable for the
  compilation process.

  Make sure you also have the development packages of openssl installed.
  For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora.

  If you're in a situation where you think the directory *should* be found
  automatically, please open a bug at https://github.com/sfackler/rust-openssl
  and include information about your system as well as this message.

  $HOST = x86_64-unknown-linux-gnu
  $TARGET = x86_64-unknown-linux-gnu
  openssl-sys = 0.9.72

  ', /home/trout/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-sys-0.9.72/build/find_normal.rs:180:5
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: failed to compile `radicle-cli v0.3.1 (https://seed.alt-clients.radicle.xyz/radicle-cli.git#f7a9314b)`, intermediate artifacts can be found at `/tmp/cargo-install2593UP`

Caused by:
  build failed

`rad-init` does not accept path to git repo

What Happened

./rad-init ~/some-path-to-git-repo/
== Error: rad-init: unexpected argument "/Users/gsaslis/some-path-to-git-repo"

What Should Happen

I would expect that I could invoke rad-init passing it a path to be initialized (and not always assume the current working directory).

Notes

Just a nice to have feature - but something I wanted to make a note of somewhere. ;)

Warn if LNK_HOME contains invalid profile

When calling rad auth in that case, profiles can't be loaded and CLI suggests to just run rad auth:

$ rad auth
== Authentication failed failed to load radicle profile
To setup your radicle profile, run `rad auth`.

Verify authenticity of peer refs when fetching from seeds

At the moment, rad sync does not verify the authenticity of references of remote peers it fetches from a seed. As a result seeds can manipulate references of a project which can be used to inject malicious code.

Specifically, rad sync should verify that all references for a project by a certain peer match the content of rad/signed_refs for that peer and the content itself is signed with the peer’s key.

`rad-comment`

New command to comment on both issues and patches.

For the first version, it should be a port of the commenting feature in rad-issue (which should be removed in favor of this). It should take a cob-id, check if it's an issue and then check if it's a patch.

For patches, the comment should be added to the discussion of the latest revision of the patch (patch.revisions.last()).
For isssues it should just be added to the issue discussion.

Replies can be supported with a --reply-to <comment-index> flag.

Confusion on `username` vs. `name` terminology

On rad auth --init, the prompt asks for a username.

On rad self, the "profile" information shown, lists a name.

It seems these are both referring to the same field and it would be good to agree which of the two terms should be used.

[rad-org-project-init] Implement Radicle Organization Project Creation using the CLI

Currently the org-nod does not have a way to create a new project for an organization. It is desired that a CLI exists that will provide the interface for creating a new project with the org-node.

The proposed name of the executable is a subcommand from the main rad CLI, such as: rad org project init

The naming convention is subject to change.

Show issue details

Description

Consider implementing rad issue show <id> which renders a detailed view of an existing issue. This should contain:

  • Header with title, state, author, date, labels and assignee (maybe some additonal statistics)
  • all comments, sorted by oldest first
  • reactions to comments if they exist
  • link to web UI

Example from Github CLI

Improve the switching between states #160
Open • sebastinez opened about 4 months ago • 3 comments
1 🚀
Assignees: sebastinez
Labels: enhancement


  At the moment when switching branches, or views in the project component we
  don't have a desktop experience.
  This can be solved by prefetching the information instead of going into a
  loading state.


sebastinez (Member) • Jan 21, 2022

  A first step avoiding the moving of the page when the scrollbar pops in, is
  commit 9a9f4687ddd6f12a95828b0f3720927cddf70f78 on the  sebastinez/commit-
  detail  branch.
  A next step would be to improve the loading states.

sebastinez (Member) • Mar 21, 2022

  I think this issue can be solved with implementing more SSR, explained in
  issue #218

cloudhead (Member) • Mar 21, 2022 • Newest comment
1 👍

  I'm not sure, isn't SSR only used for the initial page load in this case?
  The issue is solvable by preloading though.


View this issue on GitHub: https://github.com/radicle-dev/radicle-interface/issues/160

`post-receive` is only run on changes

Though this is expected git behavior, it creates a problem when the pre-receive hook succeeds but the post-receive hook fails. The next time we push, the post-receive hook isn't retried. This is only in cases where the hook has a bug that is later fixed, but this can happen.

Though we could fix this by having a commnand run the script, it's probably best to wait for replication-v3 to be merged.

Tests don't seem to set up the ssh agent properly

I'm running into this failure from tests:

running 1 test
** Passing a plain-text password is considered insecure. Please only use for testing purposes.

Initializing your 🌱 profile and identity

ok Creating your 🌱 Ed25519 keypair...
== Authentication failed could not add ssh key
== Unable to connect to ssh-agent. The environment variable `SSH_AUTH_SOCK` was set, but it points to a nonexistent file or directory.

thread 'main' panicked at 'assertion failed: status?.success()', tests/cli.rs:24:9
stack backtrace:
   0: rust_begin_unwind
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/std/src/panicking.rs:584:5
   1: core::panicking::panic_fmt
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/panicking.rs:143:14
   2: core::panicking::panic
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/panicking.rs:48:5
   3: cli::auth::can_be_initialized::child::{{closure}}
             at /home/viraptor/Projects/radicle-cli/tests/cli.rs:24:9
   4: cli::auth::can_be_initialized::child
             at /home/viraptor/Projects/radicle-cli/tests/cli.rs:16:5
   5: core::ops::function::FnOnce::call_once
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/ops/function.rs:227:5
   6: rusty_fork::fork::fork::{{closure}}
             at /home/viraptor/.asdf/installs/rust/1.58.1/registry/src/github.com-1ecc6299db9ec823/rusty-fork-0.3.0/src/fork.rs:107:23
   7: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/ops/function.rs:280:13
   8: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/panic/unwind_safe.rs:271:9
   9: std::panicking::try::do_call
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/std/src/panicking.rs:492:40
  10: __rust_try
  11: std::panicking::try
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/std/src/panicking.rs:456:19
  12: std::panic::catch_unwind
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/std/src/panic.rs:137:14
  13: rusty_fork::fork::fork_impl
             at /home/viraptor/.asdf/installs/rust/1.58.1/registry/src/github.com-1ecc6299db9ec823/rusty-fork-0.3.0/src/fork.rs:117:15
  14: rusty_fork::fork::fork
             at /home/viraptor/.asdf/installs/rust/1.58.1/registry/src/github.com-1ecc6299db9ec823/rusty-fork-0.3.0/src/fork.rs:103:5
  15: cli::auth::can_be_initialized
             at /home/viraptor/Projects/radicle-cli/tests/cli.rs:16:5
  16: cli::auth::can_be_initialized::{{closure}}
             at /home/viraptor/Projects/radicle-cli/tests/cli.rs:16:5
  17: core::ops::function::FnOnce::call_once
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/ops/function.rs:227:5
  18: core::ops::function::FnOnce::call_once
             at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.


failures:
    auth::can_be_initialized

It seems like the expected agent state is not properly managed. Maybe an explicit new agent with the sock in TMP would work?

rad-gov crate not compiling

The rad-gov create fails to build with the following error.

error[E0433]: failed to resolve: could not find `ethereum` in `term`
   --> gov/src/lib.rs:131:48
    |
131 |     let (wallet, provider) = rt.block_on(term::ethereum::get_wallet(signer_opts, provider))?;
    |                                                ^^^^^^^^ could not find `ethereum` in `term`

error[E0433]: failed to resolve: could not find `ethereum` in `term`
   --> gov/src/lib.rs:159:11
    |
159 |     term::ethereum::transaction(call).await?;
    |           ^^^^^^^^ could not find `ethereum` in `term`

error[E0433]: failed to resolve: could not find `ethereum` in `term`
   --> gov/src/lib.rs:241:11
    |
241 |     term::ethereum::transaction(call).await?;
    |           ^^^^^^^^ could not find `ethereum` in `term`

error[E0433]: failed to resolve: could not find `ethereum` in `term`
   --> gov/src/lib.rs:252:11
    |
252 |     term::ethereum::transaction(call).await?;
    |           ^^^^^^^^ could not find `ethereum` in `term`

error[E0433]: failed to resolve: could not find `ethereum` in `term`
   --> gov/src/lib.rs:282:15
    |
282 |         term::ethereum::transaction(call).await?;
    |               ^^^^^^^^ could not find `ethereum` in `term`

Figure out what to do with the multiple remotes

Currently when we track a peer we get this:

> git remote
cloudhead@hybre451s1a7c9ftf9ag4fj3hna9ssp8fea4ob1qeqy6m4hx4cbdt6
peers/cloudhead

We should only have one remote per peer, not sure why we have two 🤔

What we want is, as long as there is no ambiguity: peers/<name> and if there is ambiguity, peers/<name>@<peer-id>

Implement `rad rm` properly

We have a rad rm command but it's experimental and doesn't properly delete all refs in case they are packed by git. We should update the command to properly delete all the refs, and only then delete the folder. See context:

image


One way to do this is via git for-each-ref refs/namespaces/<project>/ and delete all the refs returned, but ideally there is a way to do this with the git2 library.

NFT Reward Contribution Mechanism

Abstract

This issue details the implementation of a proof of contribution mechanism, that would allow a user to claim a NFT showing his contribution through a commit to a specific organization.

Glossary

  • Message = The message describing the contribution.
  • Proof = The hashed and by the Orgs member(s) signed message.
  • NFT factory = The smart contract responsible to mint and transfer the contribution rewards.

Discovery

  • A org MAY, using the CLI search their repos for signed commits, in the commit header and in the trailers of the commit message.
    $ rad-reward discover --path <path-to-repo>
    Commits                                    Contributions
    f673cf386bc01688c53b51b4c2eedcf2945d70ea > committed-by  0CE7AA44C56AE6A8C43978663E3C1B6185AC4475
    ef27096c91f95791dccaf9992ef772b28a76558e > committed-by  0x8152237402E0f194176154c3a6eA1eB99b611482
                                               authored-by   0x5E813e48a81977c6Fdd565ed5097eb600C73C4f0
    f179aab522d746735d73a8342a12a276be0e6cb8 > committed-by  ABAF11C65A2970B130ABE3C479BE3E4300411886
    
  • The CLI MUST show a listing of all the eligible commits, and all the signed contributions that were made.

Creation

  • With a commit found through the discovery mechanism, an org MAY create an offchain proof.

    $ rad-reward create \
      --receiver <receiver-address> \
      --org <org-address> 
      --project-urn <project-urn> \
      --commit <commit-hash> // provided or selected through CLI
    
  • The message to be signed MUST follow this pattern:

    The org {org_address} wants to reward {receiver_address} for the contribution of commit {commit_hash} in the project {project_id}
    

    Example:

    The org 0x8152237402E0f194176154c3a6eA1eB99b611482 wants to reward 0x5E813e48a81977c6Fdd565ed5097eb600C73C4f0 for the contribution of commit b90bf64 in the project rad:git:hnrkybhzyqzg37cmaoyh7qs8uayjzf4qn7w1y

  • The org MUST hash the message with SHA256, sign the resulting hash by all its members and provide the resulting signatures:

    • In the case of a single owner, the owner MUST sign the hashed data.
    • In the case of a gnosis safe each member of the safe MUST sign the hashed data.

    Example of a proof for a single owner org

    {
      "address": "0x5e813e48a81977c6fdd565ed5097eb600c73c4f0",
      "msg": "0x546865206F7267203078383135323233373430324530663139343137363135346333613665413165423939623631313438322077616E747320746F207265776172642030783545383133653438613831393737633646646435363565643530393765623630304337334334663020666F722074686520636F6E747269627574696F6E206F6620636F6D6D6974206239306266363462616662363535643565386233306663643135366230313463333932323932316220696E207468652070726F6A656374207261643A6769743A686E726B7962687A79717A673337636D616F7968377173387561796A7A6634716E37773179",
      "sig": "0x10fcfb6c28bbe91550647bf1bb1db4accc95f03d18bfb7786390844b0e135687416ffea2a3012ff279cae44383028d89ca6fb093016aab591f50d620bfbb9ad51c"
    }

    Example of a proof for a multi-sig org

    {
      "address": [
        "0x8f49efe8ce86420221536c3cc97f00de593e0ad3",
        "0x0eB0778dA82972b6bAbef3147201096255ca05BA"
      ],
      "msg": "0x546865206F7267203078383135323233373430324530663139343137363135346333613665413165423939623631313438322077616E747320746F207265776172642030783545383133653438613831393737633646646435363565643530393765623630304337334334663020666F722074686520636F6E747269627574696F6E206F6620636F6D6D6974206239306266363462616662363535643565386233306663643135366230313463333932323932316220696E207468652070726F6A656374207261643A6769743A686E726B7962687A79717A673337636D616F7968377173387561796A7A6634716E37773179",
      "sig": [
        "0xa74820fc4df36e0e317d78c0b6636f8010f8ce81fee43fa1e30ffc689f36c10b3cf1e326868088a9e6e497650389c3cba54d6bf03942508103006cb3cb760ec21b",
        "0x822a9bf4c17e6143d00b0120bcb13b2ce112f8f09c06f0fd996acff4b58a1bf762b83cf013951875bd8e13967e5b754b80fbab4da2123096348aa8e5fafe3c9c00"
      ]
    }
  • Once signed by all the members, the proof MAY be stored as git-notes in the corresponding repository.

    • These proofs are being stored encoded in base58 in /refs/notes/contributions/, and can be seen in the git commit for example:
    $ git show --show-signature
    commit 1388152c68c835dd27b5ca962e018f0e557080a0 (HEAD -> master)
    gpg: Signature made jue 23 sep 2021 09:45:54 CEST
    gpg:                using EDDSA key BEAAF7F416675528064B5DEF379319A763C7C0F5
    gpg:                issuer "[email protected]"
    gpg: Good signature from "Sebastian Martinez <[email protected]>" [ultimate]
    gpg:                 aka "Sebastian Martinez <[email protected]>" [ultimate]
    Author: Sebastian Martinez <[email protected]>
    Date:   Thu Sep 23 09:45:54 2021 +0200
    
      initial commit
      
      Signed-off-by: Sebastian Martinez <[email protected]>
    
    Notes (contributions):
      JsHiVteQVKXj3mV43TkVLtDqbiPF3ZhWPLKVCHF8HgcFkyj66FUqRQ6FDhBYEundYsRobYD1T9zZ453CGwMG2qViiiJ2z2LGcpGFxfqbLxGT7tYY5AmZddg6iYHQW85jdwLPMcFTegvUsp98GrQQP5NgWehiJyRwu28JXUNJLFUZZZCDJV73iAvGVGYiRejr1xFhC2HpQXhX5SSoCEtjotv81w24d93Gi8hKp1P8QS6hj5vjVFNFLNMiXTkgaMHT5wyqn4GWZp2AAA1EHZ3cKjk1WUZSnZqdK9ZTSD8KQ2DNLc1DzLyW1YsqAjfnWDYxGojXKSffDkqEao6XjC2q2osmBKtGmnnx6rmrGjq7hYN9DkvZAsCctDvy86apCPnGdfKDZe6J92qyJpsx4wh11WSFRRv6paJcyTwhfr4MT8N9mSmGG8TPEKfLqa9yDdWpazByioVkqxTEqCY9zLz7DXGCXNbToHugSwitWTv4q4GFsDMYxVyHeAvFmxHXJwZ4ECg5uw4WYA9Q5KP18AUhDwFztS225A4C2qJi3DsefJMqEHVAm3mwV7m2SMNPcG6tTrg7iiLoG9FcayjNo4CWe8XmLr9MWoJBCaJtpVPLtSP6F1Sb8zHBJBTbrhx3KRTRGuRWfzsgSq3VcFRXng5DjCykbTh7KaSgCP6QLzaiBHLvfFnTtZCfcswrLLw4aNfwnWeRSYtLxPLugFdU5php4WGaLjeSqi85mhcnqXGocQudhi12B7RHzqWFvXDKYiegahWXF7aucmaJpf1viAxN2Lh3GQj8HiSC6ZSVum2CsGrr2eEXU3cKHJ1yUW2tWFt1cJEg8bUWe9nXtKcRRU23WTFAmjCaG5qk1qV16moHY5JcTrbn7xdRbrJoBYk24B27Rwr2Ls3CGpWAquHqvxET2BQzdVy5SfdVN3h6TYHbm4p85W4s1uZ764Wh2J2rYDhEPH1GnZ6zhEJB9FGj1dunvy64vuyg3bRj2XjhRQigdjUUg9LD5o1VdmUyzK2fqJRjb7tqMfiW8QUR2X5FBvXaYzFQ4arhD7X5n2pmgHFeyKXP1PtP61fLnFcecQtJBpK5j7i6qcmKeBXYbLR5ZZ28wRT68uWcDy3343mQW31hhEcXyVN7teKY5STDcxhzBjbFTp19oEizoXqqVSPY1dKM4zU9CReiRTdoyovZvyh3n6VbWv1bVZgScK273xKTTDie11Xk6yr7C7pa6a2R1vVoMGP2rFeJ4sZtq4xL5xi7NBCARkTT55QhwdTrDJ8gc
    

Claim

  • The contributor can obtain the proofs created by a org, when searching with the CLI through the git repository, looking for proofs where the org assigned him as receiver, he should receive a listing of all the eligible commits and select the commit, or provide the base58 encoded proof as argument
$ rad-reward claim \
  --repo ~/repo \
  --rpc-url <rpc-json-provider-url>

Eligible Commits
  2821409 Show Seed ID on project page
> fd5b617 Move 'Clone' button so the pop-up doesn't spill
  85042ab Use websocket provider for additional performance
  af3ace3 Use existing resolver in getRegistration
  • Once identified the commit the contributor wants to mint a NFT for, he creates and sends a ETH transaction through the CLI where the CLI uses the proof to encode the information into a ETH transaction, the contributor signs the transaction and sends it to the NFT factory.
$ rad-reward claim \
  --proof <base58-encoded-proof> \
  --rpc-url <rpc-json-provider-url>
 
Claiming reward for commit fd5b617...

Mint

  • The NFT factory receives the transaction and checks the following things:
    • msg.sender == proof.receiver
    • For checking the provided signature we have to take the following precautions:
      • In case of a single owner org, it should be enough with org.owner == ecreover(proof.msg, proof.sig)
      • If the org is a safe, we MUST check with the Gnosis Safe checkSignatures function, if all signatures provided with the proof are valid and correspond to the safe members.
  • Once the contract verifies the signatures, and the origin of the proof he creates the payload of the token with the following structure.
    • Example:
      struct Reward
        {
          address org;
          address receiver;
          bytes32 commit;
          Project project;
        }
      struct Project {
          // A tag that can be used to discriminate between project types.
          uint32 tag;
          // The project id in multihash format.
          bytes multihash;
      }
  • A new tokenId gets created on-chain and the payload gets assigned as tokenURI of the token.
  • After the creation of the token the Transfer event gets emitted and the CLI will display the tokenId for the contributor.

rad-mock

I propose to implement, maybe behind a feature flag, a way to seed a mocked state to a local dev seed node, to allow a faster development of the http-api and the web ui and maybe at some point to allow a truly E2E tests for radicle-interface where we can mock a seed state to be displayed by the web ui during a test.

I was thinking something like
rad-mock [--issue | --patch] --file

With file I was thinking to provide a JSON as follows, that can be deserialized into a cobs issue or patch object.

{
    "id": "hnrkq5ayixzif5wa18dsrw49qrqjgqp3oyjqo",
    "author": {
      "urn": "rad:git:hnrkqztof5o51ctzjyre6tyxe45cixrydjj4o",
      "name": "cloudhead",
      "ens": null
    },
    "peer": "hyy7jcc8jnifdpf8m36wyf9j8t5an4rtz4cx6tr4uu6jecxaa36n3n",
    "title": "Update README",
    "state": "proposed",
    "target": "upstream",
    "labels": [
      
    ],
    "revisions": [
      {
        "author": {
          "urn": "rad:git:hnrkqztof5o51ctzjyre6tyxe45cixrydjj4o",
          "name": "cloudhead",
          "ens": null
        },
        "peer": "hyy7jcc8jnifdpf8m36wyf9j8t5an4rtz4cx6tr4uu6jecxaa36n3n",
        "version": 0,
        "tag": "1ccb64c5614ef5cd6b0eb0ed512907cf983bb606",
        "comment": {
          "author": {
            "urn": "rad:git:hnrkqztof5o51ctzjyre6tyxe45cixrydjj4o",
            "name": "cloudhead",
            "ens": null
          },
          "body": "",
          "reactions": {
            
          },
          "replies": null,
          "timestamp": 1654861969
        },
        "discussion": [
          
        ],
        "reviews": {
          
        },
        "merges": [
          
        ],
        "timestamp": 1654861969
      }
    ],
    "timestamp": 1654861969
  }

Feel free to provide feedback.

Setup `.gitsigners` globally

Currently, we create a .gitsigners file upon rad init. This can be annoying as it either adds an untracked file, or we have to modify .gitignore. If we could by default include or point to a signers file in the monorepo, it would alleviate the need to add a file in each repo.

Radicle Authorized Keys CLI Tool

radicle-dev/radicle-client-services#38 introduces authorizing git pushes using signed push certificates with an OpenPGP key, looking for a file at the top level git repository .rad/keys/ directory.

This introduces the need for having a tool for adding and removing authorized keys for the .rad/keys/ folder, and for verifying the correctness of the public key that is being added.

Additionally, there are other keyring sources that may be used in the future to authorize a request made to a git repository, such as using ed25519 or Ethereum public addresses mapped to GPG keys for verifying requests.

The proposed CLI should be extensible to handle additional keyring sources.

Manage project delegates

Description

Implement rad delegate with the following commands:

  • rad delegate: alias for rad delegate list
  • rad delegate list: list delegates of current project
  • rad delegate add <peer-id>: adds delegate to current project, do not re-add own peer id
  • rad delegate remove <peer-id>: removes peer from delegates, do not remove own peer id

Patch improvements

While working through the patch workflow, we encounted some issues.

  • rad-patch --list should fetch refs from monorepo, not working copy, so that it can be run anywhere
  • rad-review doesn't have an option to sync review
  • rad-patch --list doesn't have option to sync, so it's out of date unless you rad sync --fetch first
  • rad-patch pushes code before patch is confirmed
  • rad-patch --list doesn't show branch names
  • rad-remote rm has no output if it doesn't remove anything
  • rad-untrack should have the option to remove working copy refs/branches/remotes (on by default)
  • rad-track doesn't tell user that it setup branch and remote
  • rad-track --local should show non-default branches too (eg. patch feature branches)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.