explore: Plugin to generate Radicle Explorer URLs

This commit is contained in:
Lorenz Leutgeb
2025-11-06 15:31:09 +01:00
parent 62f9b1606c
commit a9932d6b79
14 changed files with 52 additions and 38 deletions
+7 -8
View File
@@ -822,9 +822,8 @@ collaboration.
[git-v2]: https://git-scm.com/docs/protocol-v2
[Tor]: https://torproject.org/
[Ed25519]: https://ed25519.cr.yp.to/
[iris.radicle.xyz]: https://app.radicle.xyz/nodes/iris.radicle.xyz
[rosa.radicle.xyz]: https://app.radicle.xyz/nodes/rosa.radicle.xyz
[seed.radicle.xyz]: https://app.radicle.xyz/nodes/seed.radicle.xyz
[iris.radicle.xyz]: {{ "iris.radicle.xyz " | explore }}
[rosa.radicle.xyz]: {{ "rosa.radicle.xyz " | explore }}
[reverse-dns]: https://en.wikipedia.org/wiki/Reverse_domain_name_notation
[tuf]: https://theupdateframework.github.io/specification/latest/
[noise]: http://www.noiseprotocol.org/noise.html
@@ -835,15 +834,15 @@ collaboration.
[causality]: https://en.wikipedia.org/wiki/Causal_consistency
[dag]: https://en.wikipedia.org/wiki/Directed_acyclic_graph
[topo]: https://en.wikipedia.org/wiki/Topological_sorting
[rip-1]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0001-heartwood.md
[rip-2]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0002-identity.md
[rip-3]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0003-storage-layout.md
[rip-1]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0001-heartwood.md" | explore }}
[rip-2]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0002-identity.md" | explore }}
[rip-3]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0003-storage-layout.md" | explore }}
[nat]: https://en.wikipedia.org/wiki/Network_address_translation
[framing]: https://en.wikipedia.org/wiki/Frame_(networking)
[fs]: https://en.wikipedia.org/wiki/Forward_secrecy
[ecdh]: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
[rips]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[rips]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82" | explore }}
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[did]: https://www.w3.org/TR/did-core/
[seed]: /guides/seeder/
[peer-to-peer]: https://en.wikipedia.org/wiki/Peer-to-peer
+2 -2
View File
@@ -133,7 +133,7 @@ This command runs an installer script that automates the setup process, by:
> compile from the [source code][heartwood] or get the [binaries] if you
> prefer.
[heartwood]: https://app.radicle.xyz/seeds/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[binaries]: {{ site.url }}/download
Once you've installed Radicle, you can make sure that it was successful by
@@ -2087,7 +2087,7 @@ to resolve `.onion` addresses.
[tor]: https://www.torproject.org
[install-tor]: https://community.torproject.org/onion-services/setup/install/
[cyph-man]: https://www.activism.net/cypherpunk/manifesto.html
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[cobs]: /guides/protocol/#collaborative-objects
[ch1]: /guides/user/#1-getting-started
[ch2]: /guides/user/#2-collaborating-the-radicle-way
+1 -1
View File
@@ -9,7 +9,7 @@
<body>
<img class="desktop" width="160" height="160" id="ribbon" src="/assets/images/ribbon.svg" usemap="#ribbon-map"/>
<map name="ribbon-map">
<area shape="poly" coords="10,0,55,0,160,95,160,160,10,0" href="https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" target="_blank">
<area shape="poly" coords="10,0,55,0,160,95,160,160,10,0" href="{{ 'rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5' | explore }}" target="_blank">
</map>
{% include header.html %}
<main>
+1 -1
View File
@@ -19,7 +19,7 @@
</main>
<aside>
<p><strong>Follow us</strong> on 🐘 <a href="{{ site.fedi | fedi_to_https }}">Mastodon</a> or 🦋 <a href="https://bsky.app/profile/{{ site.atproto }}">Bluesky</a>.</p>
<p><strong>Contribute</strong> to Radicle as a 🌱 <a href="/guides/seeder">seeder</a>, 🧙 <a href="https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5">developer</a> or by 🪞 <a href="/guides/user/#git-going-with-repositories">mirroring</a> your repositories on the Radicle network.</p>
<p><strong>Contribute</strong> to Radicle as a 🌱 <a href="/guides/seeder">seeder</a>, 🧙 <a href="{{ 'rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5' | explore }}">developer</a> or by 🪞 <a href="/guides/user/#git-going-with-repositories">mirroring</a> your repositories on the Radicle network.</p>
<p><strong>Join</strong> our community on 💬 <a href="https://radicle.zulipchat.com">Zulip</a> and discuss your ideas to improve Radicle.</p>
</aside>
{% include footer.html %}
+2 -2
View File
@@ -37,7 +37,7 @@ the problem for over 4 years in total. Previous iterations of Radicle can be
found online, but are considered deprecated in favor of [Heartwood][heartwood],
the latest generation of the protocol.
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
# Technical Questions
@@ -85,7 +85,7 @@ Radicle checks this automatically, by verifying changes to the maintainer set
through the repository identity document. All you need to know is that you have
the correct Repository ID (RID). See [RIP-2][rip-2] for more information.
[rip-2]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0002-identity.md
[rip-2]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0002-identity.md" | explore }}
## Isn't SHA-1 broken? How do you handle hash collisions?
+2 -2
View File
@@ -73,8 +73,8 @@ developer stack.
[radworks]: https://radworks.org
[ipfs]: https://ipfs.tech/
[heartwood]: https://app.radicle.xyz/seeds/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[web]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[web]: {{ "rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5" | explore }}
[689]: https://github.com/radicle-dev/radicle-alpha/issues/689
[as]: https://cloudhead.io
[ed]: https://eleftherios.io/
+4 -4
View File
@@ -2,8 +2,8 @@
title: Work for Radicle
subtitle: Everything you ever wanted to know
---
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[rips]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[rips]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82" | explore }}
[zulip]: https://radicle.zulipchat.com
# Work for Radicle
@@ -61,7 +61,7 @@ We are looking for a protocol developer to push the Radicle protocol forward.
- Design [Radicle Improvement Proposals][rips] to help define the future of Radicle.
- Integrate design decisions into the existing implementation in the [`heartwood`][heartwood] repository.
- [Collaborate](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/patches?status=merged) with external contributors to help maintain the project.
- [Collaborate]({{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/patches?status=merged" | explore }}) with external contributors to help maintain the project.
- Improve and debug the existing implementation of the protocol.
#### Experience
@@ -88,7 +88,7 @@ We are looking for a developer, who is interested in UX/DX, to push Radicle tool
#### Key Responsibilities
- Provide new changes into the [`heartwood`](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5) repository.
- Provide new changes into the [`heartwood`]({{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}) repository.
- Improve `rad`, the Radicle CLI.
- Improving the workflows of other developers using Radicle.
- Collaborate with external contributors to help maintain the project.
+15
View File
@@ -0,0 +1,15 @@
module Jekyll
module Explorer
def explore(input)
base = "https://app.radicle.xyz/nodes"
if input.include?(' ')
prefix, suffix = input.split(' ', 2)
"#{base}/#{prefix}/#{suffix}"
else
"#{base}/iris.radicle.xyz/#{input}"
end
end
end
end
Liquid::Template.register_filter(Jekyll::Explorer)
+2 -2
View File
@@ -117,9 +117,9 @@ Together, we can make significant progress towards reclaiming the internet.
[cobs]: /guides/protocol#collaborative-objects
[vscode]: https://app.radicle.at/nodes/seed.radicle.gr/rad:z3Makm6fsQQXmpSFE43DZqwupaEhk
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[jetbrains]: https://app.radicle.at/nodes/seed.radicle.gr/rad:z3WHS4GSf8hChLjGYfPkJY7vCxsBK
[fe]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
[fe]: {{ "rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5" | explore }}
[rc1]: https://x.com/radicle/status/1772659708978991605?s=20
[website]: /
[guides]: /guides
@@ -5,7 +5,7 @@ author: rudolfs
layout: blog
---
A chat with [burrito](https://app.radicle.xyz/nodes/iris.radicle.xyz/users/did:key:z6MkrubmdTJKR42YZd7yDYysyx4JRez1wmvxjpmhzhTMKxsr) aka [Dietrich Ayala](https://metafluff.com) today sparked the idea to write down how we started dogfooding Radicle before we had our native Radicle CI going. He also encouraged me to just set a deadline for writing blog posts in general, so this had to be written and published by the end of today.
A chat with [burrito]({{ "users/did:key:z6MkrubmdTJKR42YZd7yDYysyx4JRez1wmvxjpmhzhTMKxsr" | explore }}) aka [Dietrich Ayala](https://metafluff.com) today sparked the idea to write down how we started dogfooding Radicle before we had our native Radicle CI going. He also encouraged me to just set a deadline for writing blog posts in general, so this had to be written and published by the end of today.
We wanted to dogfood Radicle as soon as possible, but there was one caveat: we didn't have a solution for CI at the time. So what we did was just reuse our existing GitHub actions and push both to Radicle and GitHub. The code review would happen in Radicle, and GitHub would run our tests. For easy visual indication, we used workflow status badges generated for each branch pushed to GitHub.
@@ -56,4 +56,4 @@ sed -e "s|<branchName>|$branchName|g" \
EOF
```
This is how we used to run tests and builds. Now, we're dogfooding [our own CI solution](https://app.radicle.xyz/nodes/rosa.radicle.xyz/rad:zwTxygwuz5LDGBq255RA2CbNGrz8) together with [Woodpecker](https://app.radicle.xyz/nodes/iris.radicle.xyz/rad:z39Cf1XzrvCLRZZJRUZnx9D1fj5ws). If you want to learn more about CI in Radicle, check out the conversations on [Zulip](https://radicle.zulipchat.com/#narrow/channel/452370-radicle-ci).
This is how we used to run tests and builds. Now, we're dogfooding [our own CI solution]({{ "rad:zwTxygwuz5LDGBq255RA2CbNGrz8" | explore }}) together with [Woodpecker]({{ "rad:z39Cf1XzrvCLRZZJRUZnx9D1fj5ws" | explore }}). If you want to learn more about CI in Radicle, check out the conversations on [Zulip](https://radicle.zulipchat.com/#narrow/channel/452370-radicle-ci).
@@ -47,7 +47,7 @@ I have written a CI engine for myself,
There are adapters for running CI locally on the host or in a
container, GitHub actions, Woodpecker, and several others. See [`CI
broker
README.md`](https://app.radicle.xyz/nodes/radicle.liw.fi/rad:zwTxygwuz5LDGBq255RA2CbNGrz8/tree/README.md)
README.md`]({{ "radicle.liw.fi rad:zwTxygwuz5LDGBq255RA2CbNGrz8/tree/README.md" | explore }})
and [integration
documentation](https://explorer.radicle.gr/nodes/seed.radicle.gr/rad:z4Uh671FzoooaHjLvmtW9BtGMF9qm)
for a more complete list. The adapter interface is intentionally easy
@@ -182,7 +182,7 @@ To push changes, run `git push`.
There you go. I now have a Radicle repository to play with. As of
publishing this blog post, the repository is alive on the Radicle
network, if you want to [look at
it](https://app.radicle.xyz/nodes/radicle.liw.fi/rad:z3dhWQMH8J6nX3Qo97o5oSFMTfgyr)
it]({{ "radicle.liw.fi rad:z3dhWQMH8J6nX3Qo97o5oSFMTfgyr" | explore }})
or clone it.
# CI configuration in the repository
@@ -212,7 +212,7 @@ I find the most frustrating part of using CI to be to wait for a CI
run to finish on a server and then try to deduce from the run log what
went wrong. I've alleviated this by writing an extension to `rad` to
run CI locally:
[`rad-ci`](https://app.radicle.xyz/nodes/radicle.liw.fi/rad%3Az6QuhJTtgFCZGyQZhRMZmZKJ3SVG).
[`rad-ci`]({{ "radicle.liw.fi rad:z6QuhJTtgFCZGyQZhRMZmZKJ3SVG" | explore }}).
It can produce a huge amount of output, so I've abbreviated that
below.
@@ -481,7 +481,7 @@ but not other systems, since I only use Debian. I would very much
appreciate help with expanding that documentation.
It's probably easiest to install
[`rad-ci`](https://app.radicle.xyz/nodes/radicle.liw.fi/rad:z6QuhJTtgFCZGyQZhRMZmZKJ3SVG)
[`rad-ci`]({{ "radicle.liw.fi rad:z6QuhJTtgFCZGyQZhRMZmZKJ3SVG" | explore }})
from source code or with `cargo install`, but I have a `deb` package
for those using Debian or derivatives in my [APT
repository](http://apt.liw.fi/).
+3 -3
View File
@@ -184,10 +184,10 @@ your hearts content ❤️🌱
[^1]: Here we are using the term in the sense that some content made may not be considered part of the canon of some story or universe. For example, some Star Wars content may be considered as canon by George Lucas, but some may not be.
[^2]: [RIP-4 Canonical References](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/patches/1d1ce874f7c39ecdcd8c318bbae46ffd02fe1ea8?tab=changes)
[^2]: [RIP-4 Canonical References]({{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82/patches/1d1ce874f7c39ecdcd8c318bbae46ffd02fe1ea8?tab=changes" | explore }})
[^3]: [First patch attempting to implement canonical references](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/patches/c54883e5ffb1f8a99f432e3ac79c0b728cd0dab3)
[^3]: [First patch attempting to implement canonical references]({{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/patches/c54883e5ffb1f8a99f432e3ac79c0b728cd0dab3" | explore }})
[^4]: [Second patch implementing canonical references using the identity payload](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/patches/bea09df15505cfcebc72ad40f629747d2e82f670)
[^4]: [Second patch implementing canonical references using the identity payload]({{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/patches/bea09df15505cfcebc72ad40f629747d2e82f670" | explore }})
[^5]: [Git ref format and reference patterns](https://git-scm.com/docs/git-check-ref-format)
+3 -3
View File
@@ -565,11 +565,11 @@ Come help in discussion on our [Zulip], and enjoy being Radicle 🌱👾
[git-remote-helpers]: https://git-scm.com/docs/gitremote-helpers
<!-- Radicle -->
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[Zulip]: https://radicle.zulipchat.com
[download]: /download
[guide-user-cobs]: /guides/user#2-collaborating-the-radicle-way
[guide-user-patch]: /guides/user#working-with-patches
[guides]: /guides
[rip-storage]: https://app.radicle.xyz/nodes/rosa.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0003-storage-layout.md
[rip-storage-namespace]: https://app.radicle.xyz/nodes/rosa.radicle.xyz/rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0003-storage-layout.md#layout
[rip-storage]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0003-storage-layout.md" | explore }}
[rip-storage-namespace]: {{ "rad:z3trNYnLWS11cJWC6BbxDs5niGo82/tree/0003-storage-layout.md#layout" | explore }}
+4 -4
View File
@@ -12,7 +12,7 @@ Unlike centralized code hosting platforms, there is no single entity
controlling the network. Repositories are replicated across peers in a
decentralized manner, and users are in full control of their data and workflow.
<a class="screenshot" href="https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" target="_blank" title="Heartwood is the latest generation of the Radicle protocol">
<a class="screenshot" href="{{ 'rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5' | explore }}" target="_blank" title="Heartwood is the latest generation of the Radicle protocol">
<img class="screenshot" src="/assets/images/web-app-screenshot.png"/>
</a>
<small class="caption">
@@ -99,14 +99,14 @@ and other clients can be developed.
└────────────────┘└─────────────────┘
</pre>
<a class="button" href="https://app.radicle.xyz/nodes/seed.radicle.xyz">Browse our repositories ↗</a>
<a class="button" href="{{ '' | explore }}">Browse our repositories ↗</a>
# Contributing
Radicle is *free and open source* software under the MIT and Apache 2.0
licenses. Get involved by [contributing code][contribute].
[contribute]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/CONTRIBUTING.md
[contribute]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/CONTRIBUTING.md" | explore }}
# Updates
@@ -168,7 +168,7 @@ channel on Zulip.
[bsky]: https://bsky.app/profile/{{ site.atproto }}
[mast]: {{ site.fedi | fedi_to_https }}
[zulip]: https://radicle.zulipchat.com
[heartwood]: https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
[heartwood]: {{ "rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5" | explore }}
[desktop]: /desktop
[cobs]: /guides/protocol#collaborative-objects
[local-first]: https://www.inkandswitch.com/local-first/