245 Commits
Author SHA1 Message Date
Daniel Norman db5442f01d Release v0.17.0 2026-10-09 11:27:01 +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
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ņš 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
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
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ņš 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
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
Rūdolfs Ošiņš 118abffdea Drop files only into the textarea under the cursor 2026-10-06 14:44:28 +02:00
Rūdolfs Ošiņš dee73cb8f8 Fetch a new seed from preferred and known seeds
Seeding a repo only fetched from seeds we were already connected to, so
one nobody had announced to us yet stayed in the fetching state. Also
try the preferred seeds and connect to known ones, like `rad seed`.
2026-10-06 11:16:14 +02:00
Rūdolfs Ošiņš e010517b79 Sort merged patches by merge time
When looking at merged patches you want to see what landed recently, not
what was opened recently. We take the earliest merge, which is exact for
repos that need a single delegate to merge.
2026-10-06 11:13:39 +02:00
Rūdolfs Ošiņš 94413587ba Show latest revision's diffstat in patch list 2026-10-06 11:00:51 +02:00
Rūdolfs Ošiņš 2f283f1047 Open rad: links in the app 2026-10-05 17:37:03 +02:00
Brandon OxendineandRūdolfs Ošiņš 91ab693b4b Link Radicle entities from comments
References are picked or pasted in the composer, stored as `rad:` URIs
with a readable label, and shown as chips or links that open in-app when
the entity is here.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Brandon OxendineandRūdolfs Ošiņš bee84e9d40 Search node aliases for mentions
Mentioning someone starts from their alias, but aliases are
self-declared and unrelated nodes often share one. Results say who is
followed or is you, so the composer can tell them apart.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Rūdolfs Ošiņš eaf2740907 Drop unused radicle-surf leftovers 2026-10-01 19:56:53 +02:00
Rūdolfs Ošiņš 331a3d5432 Fetch a repo right after seeding it
Seeding only set the policy, so a repo stayed unreplicated until a
seed happened to announce it again. Fetch from connected seeds in the
background, like `rad seed` does.
2026-10-01 18:20:24 +02:00
Rūdolfs Ošiņš b0fcde4d4b Drop redundant steps from the checks
svelte-check already type-checks what tsc did, clippy already runs cargo
check, and radicle-tauri has no doc tests. Linting all targets also
covers test code, which cargo test builds but never lints.
2026-10-01 18:16:29 +02:00
Rūdolfs Ošiņš 851fbc54be Read request bodies before test-http-api handlers run
Hyper closes a keep-alive connection when a handler leaves the body unread,
and browsers don't retry the next POST on it, which made e2e tests flaky.
2026-10-01 18:16:29 +02:00
Rūdolfs Ošiņš b0a519d1c5 Mirror every Tauri command in test-http-api
Several commands had no route or returned stubs, so e2e tests silently got
null or empty data. A missing route now fails loudly, the profile loads on
first use so onboarding works, and node status is polled over HTTP. A
parity test keeps the routes from drifting from the Tauri handlers again;
it also caught revisions_by_patch being registered twice.
2026-10-01 18:16:29 +02:00
Rūdolfs Ošiņš aed733ade6 Move command logic from Tauri handlers into radicle-types
Auth, inbox, CLI detection and cache rebuilds lived only in the Tauri
commands, so test-http-api couldn't share them and stubbed them instead.
2026-10-01 10:20:19 +02:00
Rūdolfs Ošiņš 6b1f0e601c Handle failed CI job lookups 2026-09-29 17:28:46 +02:00
Rūdolfs Ošiņš 73bea06ee1 Serialize writes in the test HTTP API
Parallel e2e tests hit the repo's sigrefs lock when creating COBs
concurrently, which the Tauri avoids by running these commands on
the main thread serially.
2026-09-29 17:28:34 +02:00
Brandon Oxendine 1d2cdaf033 Align issue page design with patch page
Rebuild the issue page as a single column matching the patch page:
the state dropdown sits next to the title, with author, issue ID,
labels and assignees in a row beneath it.

Let issue authors change the state, not only delegates. Add a
delete_issue command so authors can delete their own issues.

Share the delete confirmation and ID chip with the patch page.
2026-09-25 12:48:35 +02:00
Brandon OxendineandRūdolfs Ošiņš 54835363a9 Add a repository identity document view
Adds a read-only page for a repository's identity document. It shows the
current document together with its full revision history. The data and
wording follow heartwood and the rad id / rad inspect CLI.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-24 17:04:54 +02:00
Rūdolfs Ošiņš 0d5213a047 Remove Arch Linux packaging from release scripts 2026-09-23 10:47:57 +02:00
Rūdolfs Ošiņš 06a84ebc14 Release v0.16.0 2026-09-14 11:01:05 +02:00
Rūdolfs Ošiņš 092f3354ee Distinguish local repos from seeded ones
A repository can sit in storage without being seeded, which `rad ls`
hides and `rad ls --all` shows as "local". A new Settings preference
picks the `Show` passed to `list_repos_summary`, defaulting to seeded.
2026-09-09 14:51:21 +02:00
Rūdolfs Ošiņš 4c899537ab Mark private repos with a lock in the sidebar 2026-09-09 14:51:14 +02:00
Rūdolfs Ošiņš 5f86b10f05 Fix unseed error paths and seeded repo filter
Unseeding only deletes the policy row, so a node defaulting to `allow`
keeps seeding: `unseed` now reports `DefaultPolicySeeds` instead of
claiming success, and both callers refresh in a `finally` so a failed
`clean` no longer leaves a stale row behind.
2026-09-09 14:50:28 +02:00
Rūdolfs Ošiņš 535f5e2a18 Show the detected git binary in the settings 2026-09-08 10:04:49 +02:00
Rūdolfs Ošiņš f6050ecae9 Log to a file when not launched from a terminal 2026-09-08 10:04:09 +02:00
Rūdolfs Ošiņš f8faec2c9b Resolve git outside the session PATH
A desktop launch inherits a `PATH` that holds none of the user's own
install locations, so `Command::new("git")` finds nothing usable, or on
macOS finds Apple's shim and only prompts to install the developer
tools.

Resolve git to an absolute path instead, searching `PATH` first and the
usual install locations after, and cache the result for the process.
`rad` is looked for the same way, which also fixes the CLI check for a
Homebrew or Nix install.
2026-09-08 09:30:14 +02:00
Brandon OxendineandRūdolfs Ošiņš fe37d6a85c Add Stop seeding to the sidebar context menu
`rad unseed` only drops the seeding policy and leaves the repository in
storage, so while `list_repos_summary` listed everything on disk an
unseeded repository never left the sidebar and unseeding looked like it
had done nothing. That call now filters by seeding policy.

The confirmation dialog also offers to delete the files, running the
equivalent of `rad clean` after the unseed.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-03 19:21:16 +02:00
Rūdolfs Ošiņš 6cb6443cbd Fix patch diff for merge-commit revisions
`list_commits` walked back from the revision head and stopped at the
first commit equal to `base`. A merge commit reaches `base` through one
of its parents, so the walk truncated there and dropped everything the
other parent contributed: a revision whose head merges the target branch
in looked like a single-commit revision.
2026-09-03 18:22:43 +02:00
Rūdolfs Ošiņš 3688218060 Resolve the patch target branch in the API
Serve `targetBranch` so the UI can tell where a patch is headed. Editing
a title no longer sends its own target, which reset branch-targeted
patches to the default branch.
2026-09-03 16:46:29 +02:00
Rūdolfs Ošiņš e3ac6cad0e Release v0.15.0 2026-08-14 18:37:02 +02:00
Rūdolfs Ošiņš 1ca4f76575 Trim the diff payload to a manifest
The tree-sitter highlighter goes with it: the hunk types name its
`Paint` spans and it implements `ToPretty` for them, so neither side
can be removed on its own.
2026-08-14 17:30:46 +02:00
Rūdolfs Ošiņš 42a141bd8b Render patch changes with Pierre 2026-08-14 17:30:46 +02:00
Rūdolfs Ošiņš 7a5fa363be Remove unused patch read commands and diff helper
`revision_by_patch_and_id` and `review_by_patch_and_revision_and_id`
were registered as Tauri commands but never invoked: the patch view
resolves a revision or review from the revisions it already holds. Drop
the commands, their registrations and the `revision_by_id` / `review_by_id`
port methods, which had no other callers.

`fileDiffName` in `diffText` has had no callers since it was added.
2026-08-10 12:54:39 +02:00
Brandon Oxendine d19d1f21f1 Add patch deletion 2026-08-10 12:54:39 +02:00
Brandon Oxendine 62e150c29a Rebuild the patch page, review UI, and activity timeline 2026-08-10 12:54:39 +02:00
Rūdolfs Ošiņš d559015e3d Remove redundant surf Oid conversions
radicle-surf 0.29 switched from radicle-git-ext to radicle-oid for
its Oid type, making radicle_surf::Oid and radicle::git::Oid the
same type. The crate::oid::{from_surf, into_surf} helpers were
therefore no-op round-trips through git2::Oid.
2026-07-28 09:25:52 +02:00
Rūdolfs Ošiņš 6e1472d8ab Release v0.14.0 2026-07-27 17:13:31 +02:00
Rūdolfs Ošiņš 935b02308a Upgrade rust dependencies
Upgrade all radicle-* dependencies to the latest versions regardless of
cooldown and the remaining rust dependencies honoring cooldown period.
2026-07-27 15:19:45 +02:00