mirror of
https://seed.radicle.dev/rad:z371PVmDHdjJucejRoRYJcDEvD5pp.git
synced 2026-10-18 19:10:34 +08:00
178 lines
9.0 KiB
Markdown
178 lines
9.0 KiB
Markdown
---
|
||
title: "Radicle 1.3.0"
|
||
image: radicle-1.png
|
||
---
|
||
|
||
The Radicle team is delighted to announce the release of Radicle 1.3.0
|
||
(29043134a). This release contains 48 commits by 7 contributors. We would like
|
||
to thank everyone for their continued effort in helping us improve the Radicle
|
||
protocol and tooling via their contributions and usage reports 👾
|
||
|
||
## Installation
|
||
|
||
```
|
||
curl -sSf {{ site.url }}/install | sh -s -- --no-modify-path --version=1.3.0
|
||
```
|
||
|
||
## Canonical References
|
||
|
||
This feature has been under way for quite some time, and we are proud to
|
||
announce that it's ready for you to use!
|
||
|
||
Canonical reference rules have been introduced via an identity payload entry
|
||
under the identifier `xyz.radicle.crefs`. Here's an example of the payload that
|
||
includes a single rule for tags that live under `refs/tags/releases/*`:
|
||
|
||
```
|
||
"xyz.radicle.crefs": {
|
||
"rules": {
|
||
"refs/tags/releases/*": {
|
||
"allow": [
|
||
"did:key:z6MkkPvBfjP4bQmco5Dm7UGsX2ruDBieEHi8n9DVJWX5sTEz",
|
||
"did:key:z6MkgFq6z5fkF2hioLLSNu1zP2qEL1aHXHZzGH1FLFGAnBGz",
|
||
"did:key:z6MkireRatUThvd3qzfKht1S44wpm4FEWSSa4PRMTSQZ3voM"
|
||
],
|
||
"threshold": 2
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
The canonical reference rules are now used to check for canonical updates. The
|
||
rule for the `defaultBranch` of an `xyz.radicle.project` is synthesized from the
|
||
identity document fields: `threshold` and `delegates`. This means that a rule
|
||
for that reference is not allowed within the rule set. This is checked when
|
||
performing a `rad id update`.
|
||
|
||
For a more detailed history and usage of canonical references, check out the
|
||
accompanying [post](/2025/08/12/canonical-references.html).
|
||
|
||
## Introducing `radicle-protocol`
|
||
|
||
This set of changes is mostly cosmetic for the time being. A new crate,
|
||
`radicle-protocol`, was introduced to provide a home for a [sans I/O][sans-io]
|
||
implementation of the Radicle protocol. The crate currently defines the inner
|
||
workings of the protocol, and `radicle-node` depends on this.
|
||
|
||
Note here that we switched to use the `bytes` crate, and we witnessed a panic
|
||
from this crate while using a pre-release. It has not showed up again, but we
|
||
introduced the use of backtraces to help identify the issue further. So, please
|
||
report a backtrace if the `radicle-node` stops due to this issue.
|
||
|
||
## Path to Windows
|
||
|
||
We made an effort to start paving some of the way to being able to use Radicle
|
||
on Windows. The first step was taken for this, and you can now use the `rad` CLI
|
||
on a Windows machine – without WSL.
|
||
|
||
Currently, `git-remote-rad` and `radicle-node` are blockers for full Windows
|
||
support. However, the sans I/O approach mentioned above will provide a way
|
||
forward for implementing a `radicle-node` that works on Windows, and we will
|
||
continue to look into other fixes required for getting full Windows support.
|
||
|
||
## Improved Log Rotation
|
||
|
||
The rotation of logs under `.radicle/node` now works using a numbered system,
|
||
i.e. `node.log.1`, `node.log.2`, etc. The current running node will log to
|
||
`node.log`, which is a symlink to most recent number.
|
||
|
||
This means that logs will be persisted between runs, which will require
|
||
occasional cleanup.
|
||
|
||
## Display Full Node ID
|
||
|
||
We have improved the formatting for Node IDs and node addresses. The CLI
|
||
will output shortened forms of NIDs and addresses when the output is transient,
|
||
and the full form where it is presented to the user. This will allow you to be
|
||
able to copy and paste these identifiers.
|
||
|
||
## Stable Order for Pinned Repositories
|
||
|
||
The pinned repositories now maintain their insertion order, meaning that they
|
||
should not be reordered by any other factors other than the user's decision on
|
||
which repositories should appear first.
|
||
|
||
## Relax Pushes for `git-remote-rad`
|
||
|
||
The `git-remote-rad` would always expect a working copy and a reference when
|
||
performing pushes. These constraints are relaxed to allow a bare Git repository
|
||
and any kind of Git revision. This should improve the experience for users of
|
||
`jj`.
|
||
|
||
## Connect Attempts will Error
|
||
|
||
If a connection attempt would not happen due to an error, the result of the
|
||
error was never returned. This would often lead to timeouts when using `rad node
|
||
connect`. We now return the error and can report it instead of waiting for a
|
||
timeout.
|
||
|
||
## Default Branch Picker
|
||
|
||
When running `rad init` the default value for the `defaultBranch` of the
|
||
repository is now by provided the branch you are on or the Git configuration
|
||
option `init.defaultBranch`.
|
||
|
||
## Changelog
|
||
|
||
For a full list of changes, see below:
|
||
|
||
* `7a9d4512f` **radicle: fix Canonical::quorum doc link** *<fintan.halpenny@gmail.com>*
|
||
* `5d467418b` **term: Revert using inquire to spawn editor** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `4934473b8` **cli/node: Improve log rotation** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `3d352f23e` **canonical: Support Annotated Tags** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `54fd8c40a` **node: clean up logging** *<erik@zirkular.io>*
|
||
* `174792813` **node: register backtrace** *<fintan.halpenny@gmail.com>*
|
||
* `0aaa81f82` **cli: mention binary names as part of unknown** *<fintan.halpenny@gmail.com>*
|
||
* `fdb1ac4e3` **radicle: Fix clippy::result_large_err** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `5bab3f9cc` **clippy: Allow doc_overindented_list_items** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `906803378` **chore: Automated fixes generated by clippy** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `586eefc3e` **rust-toolchain: 1.85 → 1.88** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `efeefd0da` **chore(debian/changelog): update package version to match upstream** *<me@sebastinez.dev>*
|
||
* `2a47bc0c7` **term: provide default HELP message** *<fintan.halpenny@gmail.com>*
|
||
* `a998ce691` **ssh: provide path on connect error** *<fintan.halpenny@gmail.com>*
|
||
* `8224819fe` **radicle/profile: Enable home detection on Windows** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `1e0a14ddc` **ssh: Remove dependency on log** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `8e6279a38` **ssh: Remove dependency on byteorder** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `95b3303eb` **term: Remove unused dependency shlex** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `009436efa` **ssh: Use winpipe for SSH agent on Windows** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `070550153` **radicle: Depend on winpipe for Windows support** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `08b535d56` **radicle: Only set file limits on Unix** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `e7fb5647a` **term: Remove dependency on libc** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `70fb0d3fe` **term: Use inquire for spawning the editor** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `a28fd65e8` **term/ansi: Remove unused Windows module** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `d46d36ece` **term/spinner: Only handle signals on Unix** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `92d77f9ec` **crypto/ssh/keystore: Reduce scope of DirBuilderExt** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `37ea81766` **cli: improve default branch pick** *<sekhat@temporus.me>*
|
||
* `85ddcace0` **docs: fix installation instructions in README.md** *<istankovic@posteo.net>*
|
||
* `7c4b71ab8` **radicle: Keep pinned repos ordered in config** *<tobias.hunger@gmail.com>*
|
||
* `1fa30e2e8` **cli: test missing commits for canonical quorum** *<fintan.halpenny@gmail.com>*
|
||
* `afe64d517` **remote-helper: improve canonical handling** *<fintan.halpenny@gmail.com>*
|
||
* `14444a43e` **remote-helper: refactor pushing action** *<fintan.halpenny@gmail.com>*
|
||
* `a9f75d47e` **remote-helper: allow any revision in push src** *<tobias.hunger@gmail.com>*
|
||
* `da72557cf` **git-remote-rad: Allow pushing from bare repositories** *<tobias.hunger@gmail.com>*
|
||
* `271ef497d` **crypto: Fix scope of `ssh-key` dependency** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `0e3f3f03d` **cli: Improve formatting of Node IDs and addresses** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `010d5134e` **protocol: fix `Frame` docstring** *<fintan.halpenny@gmail.com>*
|
||
* `3c5668edd` **protocol: Reimplement encoding on top of `bytes`** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `1c20f64a2` **node, protocol: Refactor** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `61c468778` **protocol: Create skeleton by moving from radicle-node** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `b9759c586` **radicle: Make `node::Link` copy and add `is_*`** *<lorenz.leutgeb@radicle.xyz>*
|
||
* `408d4f27e` **chore: add canonical references to CHANGELOG** *<fintan.halpenny@gmail.com>*
|
||
* `820122516` **cli: test canonical tags** *<fintan.halpenny@gmail.com>*
|
||
* `ff365e2d8` **radicle: disallow default branch** *<fintan.halpenny@gmail.com>*
|
||
* `a69397386` **cli: extract document update logic** *<fintan.halpenny@gmail.com>*
|
||
* `7f646666b` **radicle: canonical references payload** *<fintan.halpenny@gmail.com>*
|
||
* `af6cf03ac` **radicle: canonical reference rules** *<fintan.halpenny@gmail.com>*
|
||
* `fb8681f5b` **radicle: `connect` returns `ConnectError`** *<fintan.halpenny@gmail.com>*
|
||
|
||
## Checksums
|
||
|
||
```
|
||
f09b4203a47611e1e6a78ea9087b5cae2f94cacc649ed195840a0869d821c861 radicle-1.3.0-x86_64-apple-darwin.tar.xz
|
||
a25c67276a86c9fbadadbacbd2ea9763202e99701aa85cf7fe5815662696988d radicle-1.3.0-x86_64-unknown-linux-musl.tar.xz
|
||
3a615bb99bc998b3fca5ad8582599c8dfb3cffb0beec291f5939d4b559270227 radicle-1.3.0-aarch64-unknown-linux-musl.tar.xz
|
||
7939e1d1bce232730843d8975f205558b0885479c6666b630abb1500b67756db radicle-1.3.0-aarch64-apple-darwin.tar.xz
|
||
```
|
||
|
||
[sans-io]: https://sans-io.readthedocs.io
|