Commit Graph
3471 Commits
Author SHA1 Message Date
Rūdolfs Ošiņš 520e20c835 Run CI only for the components a push changes
Desktop-only patches no longer run the explorer and Rust checks, and
explorer patches no longer run the desktop e2e suite.
2026-10-13 17:23:20 +02:00
Rūdolfs Ošiņš af75a7010e Ask for component labels on patches
With explorer, desktop and httpd in one repo, the labels show at a
glance which projects a patch touches.
2026-10-13 17:23:20 +02:00
Rūdolfs Ošiņš c516cfa9fa Prefix explorer CI with explorer-
Desktop's GitHub workflows are already prefixed `desktop-`. With both
projects in one repo, the prefix shows which project a workflow or
Buildkite step belongs to.
2026-10-13 17:23:20 +02:00
Rūdolfs Ošiņš d83ed92a84 Remove Rust docs from CI
They aren't useful to us, and building them is the slowest step. We
did the same for desktop.
2026-10-13 17:23:20 +02:00
Rūdolfs Ošiņš 0442f85d56 Add check:ci script
Runs the checks from the GitHub workflows in one go, like desktop's
`scripts/check-ci`, and logs them to `tests/tmp/check-ci.log`.
2026-10-13 17:23:20 +02:00
Rūdolfs Ošiņš 357f4311f6 Document where the desktop app lives
So both the docs and agents know `desktop/` is its own project, with
commands run from there.
2026-10-13 17:23:20 +02:00
Rūdolfs Ošiņš e5e79605d6 Keep root lint checks out of desktop/
ESLint picks up desktop's own config for its files, which only works
with desktop's dependencies installed. Desktop is linted by its own
`scripts/check-js`.
2026-10-13 16:53:36 +02:00
Rūdolfs Ošiņš 33182fd942 Run desktop CI from the repo root
GitHub only reads workflows from the root `.github/` and ryph only reads
the root `.ryph/`. The desktop workflows now run in `desktop/`, and the
ryph setup installs and warms both projects.
2026-10-13 16:53:36 +02:00
Rūdolfs Ošiņš 7af280d5b4 Fix desktop scripts after the move into desktop/
- release: work on `master`, find radicle-apt-repo next to the monorepo,
  tag `releases/desktop/<version>` and only commit the release files
- install-binaries: use desktop's own `tests/`, not the root one
- build-artifacts: pass `GIT_HEAD` to the Linux builds, which only see
  `desktop/` and have no `.git`
- .envrc: watch `rust-toolchain.toml`
2026-10-13 16:53:36 +02:00
Rūdolfs Ošiņš 5e70f8f2bf httpd: Use releases/httpd/ for release tags
Since desktop was merged in, its `releases/<version>` tags are in our
history too, and `git describe --match='releases/*'` picked up
`releases/0.16.0` as the httpd version. The changelog also leaves out
`desktop/`, otherwise the next one would list its whole history.
2026-10-13 16:53:36 +02:00
Brandon Oxendine d2d24a6ecc Update Mastodon link in footer
The footer linked to an old account. Point it at the current one,
@radicle@toot.radicle.dev.
2026-10-12 22:36:41 +02:00
Rūdolfs Ošiņš 3447a45ac2 Merge radicle-desktop into desktop/
Desktop history is kept as-is, so old commit IDs and signatures stay valid.
2026-10-12 09:27:47 +02:00
Rūdolfs Ošiņš 983fff9006 Move everything into desktop/
In preparation for merging radicle-desktop into radicle-gui. It's a pure rename, so git can follow every file across the move.
2026-10-12 08:41:12 +02:00
Daniel Norman db5442f01d Release v0.17.0 2026-10-09 11:27:01 +02:00
Rūdolfs Ošiņš bbaf0d792b Keep file tree folders open when selecting a file
Opening another file collapsed every folder that didn't contain it,
which made browsing several folders tedious. Folders now stay open
until they're collapsed by hand.
2026-10-09 10:29:32 +02:00
Rūdolfs Ošiņš b3477e0365 Fix file tree folders flickering on file select
Since the browsed file lives in the route, every click reloads the route
and open folders re-rendered their contents, briefly collapsing them.
Folders now load their entries once and the tree is rebuilt only when
the commit changes.
2026-10-09 10:29:32 +02:00
Rūdolfs Ošiņš 1b07495946 Show label validation in a popover
So it looks the same as the assignee input. Both popovers now open
above the input when there's room for the full list and below it
otherwise, instead of switching sides depending on how many results
there are.
2026-10-09 10:29:32 +02:00
Rūdolfs Ošiņš a1515fe4a6 Fix npm audit reported issues 2026-10-09 09:36:03 +02:00
Daniel Norman 040906ba6d Add list_canonical_tags command
- Load the release modal's tags with it
- Sort them with the shared sortedTags helper
- Test that peers' tags are left out
2026-10-08 18:21:48 +02:00
Daniel Norman 6f57b811ef Show rad-artifact CLI version in status
- Probe `rad-artifact --version` in artifact_binaries
- Run artifact_binaries off the main thread
- Show the CLI version in the artifact node popover
2026-10-08 18:21:48 +02:00
Daniel Norman a24dde90de Show artifact node version in status
- Pass the running node's version through ArtifactNodeStatus
- Show it in the artifact node popover
2026-10-08 18:21:48 +02:00
Daniel Norman a3c094fd6c Bump radicle-artifact to 0.23
- Pick up the node version in the status reply
2026-10-08 18:21:48 +02:00
Daniel NormanandRūdolfs Ošiņš f90db0986a Warn about releases and artifacts by others
- Add an UntrustedWarning banner
- Warn on the Others releases list
- Warn on a release by a non-delegate
- Warn on artifacts by non-delegates on a delegate release
- Warn in the download popover for a non-delegate artifact
- Add E2E tests for both release cases

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:21:48 +02:00
Daniel Norman e930bfd397 Link and mention releases
- Route release and release list links to their views
- Offer releases for a pasted ID or link
- List delegate releases in # search
- Show release references as chips
- Cache release lookups for mentions
- Record release mentions in ADR 0003
2026-10-08 18:21:48 +02:00
595a81150b Add Releases and Release views
- Add the Releases list and Release page
- Add modals to create, delete and redact releases
- Register artifacts and add or remove their locations
- Download, seed and unseed artifacts from the release page
- Share one artifact node state and show its status
- Pick the release commit from a list
- Rename Stop seeding to Unseed

Co-authored-by: Daniel Norman <daniel@norman.life>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:21:48 +02:00
837766212e Add artifact node port and commands
- Add the ArtifactNode port over radicle-artifact-client
- Seed, unseed, download and fetch artifacts per release
- Unseed artifacts on redaction and release deletion
- Report artifact node status and installed binaries
- Probe the artifact node alongside the radicle node
- Add node commands and mirror them in test API

Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:20:59 +02:00
7a0b67da64 Add release COB ports and commands
- Add release types and the Releases and ReleasesMut ports
- Create, delete and redact releases
- Register, attest and locate artifacts
- Filter releases with radicle-artifact
- Add release commands and mirror them in test API

Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:20:59 +02:00
Rūdolfs Ošiņš e888a949c2 Link guides to radicle.dev instead of hosting them
The guides live on radicle.dev. The old URLs redirect to the respective
radicle.dev pages.
2026-10-08 17:51:07 +02:00
Georgios Jason Efstathiou 2ffcf1b95a ryph: warm the cargo build in image builds only
At run time the warm steps rebuilt the crates with build scripts on
every start, which took about two minutes. Cargo now builds only what a
command needs, when it runs.
2026-10-08 13:04:16 +02:00
Rūdolfs Ošiņš 840f1b0c08 Only let an AppImage claim the rad: scheme
A dev build or an AppImage registered itself whenever it wasn't already
the handler, replacing the installed app as the target of rad: links.
Now installers own the scheme, and an AppImage only claims it when no
other handler is set. Dev builds never register; the README explains
how to test links in them instead.
2026-10-08 10:35:46 +02:00
Rūdolfs Ošiņš 344e10d967 Give dev builds their own identifier
Since we started opening rad: links in the app, a dev build and an
installed release can't run side by side: they share the identifier, so
whichever starts second hands over to the first and quits. A separate
identifier also keeps dev from sharing window state and logs with the
release.
2026-10-08 10:35:46 +02:00
Rūdolfs Ošiņš 021c9f8a59 Link AsciiDoc cross references to their source
`xref:other.adoc[]` linked to `other.html`, which doesn't exist in the
repository, so following it showed a missing file instead.
2026-10-08 10:29:43 +02:00
Rūdolfs Ošiņš 38279298d1 Keep document links inside the app
Clicking a relative link in a README reloaded the whole app, and links
starting with `/` dropped you in the inbox. Links to files in the repo
now open in the source view, at the linked section if there is one, and
links the app can't follow explain why instead of navigating the window
away.

This also fixes a missing linked file showing the previous file's
content instead of an error, and section links disabling the back
button.
2026-10-08 10:29:43 +02:00
Brandon OxendineandRūdolfs Ošiņš dc1a067396 Render mermaid diagrams
Mermaid code blocks showed up as code. Mermaid is loaded lazily, and
diagrams are redrawn when the app theme changes. DOMPurify's config
moves from a global `setConfig` to each call site, because the global
one stripped mermaid's SVG output.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:56:58 +02:00
Brandon OxendineandRūdolfs Ošiņš ab8300e09a Show repository images in READMEs
Relative images in markdown and AsciiDoc files were broken, nothing
resolved them against the repository. They're read through a new
`repo_blob_bytes` command, which skips the text encoding and last
commit lookup of `repo_blob`. Images now also keep their alt text.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:56:16 +02:00
Brandon OxendineandRūdolfs Ošiņš 70046d0c74 Render GitHub style alerts
A blockquote starting with `[!NOTE]` or one of its siblings showed up
as a plain quote, while GitHub and the web explorer render it as a
titled callout.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:54:00 +02:00
Rūdolfs Ošiņš 1bc5ffa9fe Don't abort blob URLs in e2e tests
The remote request guard read the empty hostname of a `blob:` URL as
remote, so embed previews never loaded in tests.
2026-10-07 16:41:54 +02:00
Rūdolfs Ošiņš 9ca793f393 Suggest assignees by alias as you type
Assigning someone meant finding and pasting their DID. Now the input
searches aliases and lists you, the repo's delegates and other known
peers, so a DID is only needed for someone the node has never seen.
2026-10-07 14:06:15 +02:00
Rūdolfs Ošiņš 66dcf55fd3 Show popovers above modals
The NodeId card opened from an assignee in the new issue modal ended up
underneath the modal's scrim.
2026-10-07 14:06:15 +02:00
Brandon Oxendine 950f83b2e9 Move issue metadata buttons into action row
In the new issue modal, "Add labels" and "Add assignees" sat on their
own row between the description and the action buttons. They now sit at
the left of the action row, opposite Attach, Preview and Save.
2026-10-06 17:18:20 +02:00
Rūdolfs Ošiņš ffb4aa4d3a Raise the chunk size warning limit to 5 MB
The 500 kB default is meant for websites, but Tauri loads the bundle
from disk. The limit stays close to the main chunk's size, so we still
hear about it when it grows noticeably.
2026-10-06 16:49:20 +02:00
Rūdolfs Ošiņš 6eec206caf Silence Asciidoctor warnings in the build 2026-10-06 16:46:06 +02:00
Rūdolfs Ošiņš 5aaf12500e Fix npm audit reported issues 2026-10-06 16:41:49 +02:00
Rūdolfs Ošiņš 67785a8c30 Keep the browsed file in the source view route
Browsing the file tree only changed component state, so no file view
was ever a history entry and back left the repository. The path now
travels as a query parameter, since trailing URL segments are already
consumed by the revision.
2026-10-06 16:28:14 +02:00
Rūdolfs Ošiņš 651af122b2 Render AsciiDoc readmes in repo source view
Uses @asciidoctor/core, lazily imported so the main bundle is
unchanged, with its own DOMPurify instance because the markdown
allowlist is pinned globally via setConfig.

Include directives resolve through a registered HttpCache that maps
Asciidoctor's URI reads onto repo_blob, so tag, line-range and
nesting handling stay upstream. A per-conversion token in base_dir
scopes each read to one repository and commit.
2026-10-06 16:28:10 +02:00
Rūdolfs Ošiņš 2a0dd5a747 Share code block enhancement between renderers
The copy button and syntax highlighting setup for code blocks moves out
of the Markdown component, so other document renderers can reuse it.
2026-10-06 16:27:01 +02:00
Rūdolfs Ošiņš 41eac34ddc Don't reload the dev app on E2E test output
Playwright traces written to tests/artifacts kept reloading the app
running in `npm run tauri dev`.
2026-10-06 15:53:56 +02:00
Rūdolfs Ošiņš b2bbf6f5ad Send embed bytes over IPC without JSON
Embeds went over IPC as JSON number arrays, so a 9MB image turned into
~36MB of JSON. On upload Tauri parses that on the main thread, which
beachballed the app while dropping a large screenshot.
2026-10-06 15:53:56 +02:00
Rūdolfs Ošiņš cd8a32a5e7 Show Retina screenshots at their intended size
macOS saves Retina screenshots at 144 DPI and we rendered them at twice
the size they had on screen. We now scale PNGs with a 2x or 3x density
down; everything else, including 300 DPI print exports, stays 1:1.
2026-10-06 15:53:52 +02:00
Brandon OxendineandRūdolfs Ošiņš 8175823ab8 Fix pasted images not rendering
Pasting a single image went through save_embed_by_clipboard, which
stored the clipboard's raw RGBA pixels instead of an encoded image.
The result could not be decoded, so the embed showed as a broken image.
Always store the pasted file's own bytes instead. Nothing else uses
save_embed_by_clipboard, so it's removed.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-06 15:04:57 +02:00