Commit Graph
2397 Commits
Author SHA1 Message Date
Rūdolfs Ošiņš 6fb702f886 Recover gracefully from mermaid render errors
When mermaid.render fails, suppress mermaid's "Syntax error"
overlay and show our own small warning above the original code
block so the source stays visible. Subsequent diagrams in the
same document still render.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 9ebc5f6b3b Initialize mermaid only once
Hoist the dynamic import and initialize() into a
module-scoped promise. Previous code re-ran initialize()
on every afterUpdate that had a mermaid block.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 0bcc2b4c2d Lazy-load mermaid
Switch to a dynamic import in afterUpdate and drop
manualChunks so Rolldown auto-splits the lazy chunk.
Eager bundle drops from 1.3 MB to 610 KB gzipped.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 3b85f70f88 Force mermaid securityLevel to strict
'loose' allowed HTML and click directives in diagram labels,
bypassing the DOMPurify pass on the surrounding markdown.
2026-05-07 18:31:28 +02:00
Rūdolfs Ošiņš 9e268d9ac0 Scope DOMPurify config to call sites
Replace global setConfig with an exported sanitizeConfig passed
inline. The global config leaked into mermaid's internal
strict-mode sanitization, stripping valid SVG diagrams.
2026-05-07 18:31:28 +02:00
Delioos faadd2906b feat(markdown): mermaid diagram support 2026-05-07 18:31:28 +02:00
Defelo c39af0a8e2 httpd: implement request and response streaming in git handler 2026-05-06 15:09:49 +02:00
Defelo 0b89857f21 httpd: use RequestDecompressionLayer in git handler 2026-05-06 15:09:49 +02:00
Brandon Oxendine a4c6f04028 Link issue and patch breadcrumbs to their status filter 2026-05-06 12:47:25 +02:00
Rūdolfs Ošiņš 9e669eaf05 Decode percent-escapes in OG card route segments 2026-05-06 10:57:21 +02:00
Rūdolfs Ošiņš 3f798744bb Use linkify-it for commit description URLs
Replace the hand-rolled URL regex with `linkify-it` (already a
transitive dep via `marked-linkify-it`). Add unit tests.
2026-05-06 09:54:04 +02:00
Yumin Chen 20be88e5da Allow radicle-external-link components in commit descriptions
To allow some very basic hyperlinking in commit descriptions we can
replace fully specified urls with a valid scheme into
`radicle-external-link` components within patches and git history.
2026-05-05 16:45:14 +02:00
Rūdolfs Ošiņš 613e5e1810 Fix node/user avatar generated wrongly from hostname
It should always be generated from the Node Id.
2026-05-05 16:01:01 +02:00
Defelo 2e19c93a9c Don't show node avatar in user view 2026-05-01 15:46:01 +02:00
Rūdolfs Ošiņš dbe0ed7f77 Add a link to radicle.dev to the node sidebar footer 2026-04-29 15:55:18 +02:00
Rūdolfs Ošiņš 4da9321a1d Revert "Link header Radicle logo to radicle.dev landing page"
This reverts commit 9e9a799c28.
2026-04-29 15:55:06 +02:00
Rūdolfs Ošiņš 9e9a799c28 Link header Radicle logo to radicle.dev landing page 2026-04-29 15:14:20 +02:00
Rūdolfs Ošiņš f472fe892b Add "Sort by activity" toggle to UserReposView 2026-04-29 12:12:35 +02:00
Rūdolfs Ošiņš e64aee34ca Cancel in-flight activity fetches on navigation 2026-04-29 12:12:12 +02:00
Rūdolfs Ošiņš 4ddca81f16 Add "Sort by activity" toggle to repo list 2026-04-29 12:12:03 +02:00
Rūdolfs Ošiņš 4dce10bc66 Show shimmer placeholder while activity loads 2026-04-29 12:11:59 +02:00
Rūdolfs Ošiņš 49274ac88c Load repo activity progressively per card 2026-04-29 12:11:50 +02:00
Shawn WebbandLorenz Leutgeb ad8b0699b4 httpd: Generate a prefix for Git archive downloads
GitHub and GitLab will prefix archive payloads with the name of the repo
and the refspec. This patch naively applies a prefix in similar fashion.

The refspec might contain filesystem path separators, like a forward
slash (`/`). GitHub and GitLab replace that with a hyphen (`-`). This
patch applies that same replacement.

The file name that is suggested to browsers (via the HTTP header
`Content-Disposition`) is changed to match the prefix.

The additional archive formats `tar` and `zip` are now supported as
well.

Users that relied on the archive *not* carrying the prefix introduced
here, may pass the query `?prefix=false` to get the old behavior.
This does not affect the `Content-Disposition` header, though. Users
who relied on the downloaded file be named in a certain way after,
and also used the file name from `Content-Disposition` for the name,
cannot get back the old behavior, but must instead rename the file.

Co-authored-by: Lorenz Leutgeb <lorenz.leutgeb@radicle.dev>
2026-04-27 14:23:23 +02:00
Rūdolfs Ošiņš d0a012dcf9 Revert "Update favicon and app icons"
This reverts commit 2556786a9e.
2026-04-24 13:09:54 +02:00
Brandon Oxendine 2556786a9e Update favicon and app icons 2026-04-24 10:26:38 +02:00
Rūdolfs Ošiņš 5a3337de88 httpd: Release 0.25.0 releases/0.25.0 releases/httpd/0.25.0 2026-04-23 16:04:29 +02:00
Rūdolfs Ošiņš fc648a6392 httpd: Rename endpoint /xyz.radworks.job/ -> /jobs/ 2026-04-23 15:57:54 +02:00
Rūdolfs Ošiņš 269c6e52ea Rename [iris,rosa].radicle.dev -> [iris,rosa].radicle.network 2026-04-23 11:16:56 +02:00
Rūdolfs Ošiņš b21faa104a Rename radicle.xyz -> radicle.dev where possible 2026-04-23 10:21:39 +02:00
Rūdolfs Ošiņš 7e725f3bdf Move public deployment from app.radicle.xyz to radicle.network 2026-04-23 00:08:23 +02:00
Rūdolfs Ošiņš 1003b165e5 ci: Allow binaries to be downloaded via redirect
By specifying `--location`, `curl` will follow redirects.
2026-04-23 00:07:31 +02:00
Daniel Norman b6743c63fc Fix inline emphasis tags in markdown output
- Without strong, **bold** rendered as plain text since marked
  emits <strong> and DOMPurify stripped the unknown tag
- Add strong, b, i, del, s to DOMPurify allow-list
- Cover the other inline emphasis tags authors may write as raw
  HTML or that GFM strikethrough emits (<del>)
2026-04-22 17:53:23 +02:00
Rūdolfs Ošiņš c45c919826 Key Playwright browser cache on Playwright version
To avoid missing browsers in feature branches.
2026-04-22 17:48:45 +02:00
Rūdolfs Ošiņš b2f74ebd15 Upgrade all Javascript dependencies
Changes which were needed after the upgrade:

- Replace vite-plugin-virtual (vite 8 incompatible) with vite's
  built-in `define` for the buildTimeConfig injection

- tsconfig: drop deprecated `baseUrl` (TS 5+ resolves `paths`
  relative to tsconfig)

- Vitest 4: import `defineConfig` from `vitest/config` so `test`
  is valid in vite configs

- Zod 4: rename `.errors` to `.issues`, make `ZodSchema` a
  type-only import, drop the removed `SafeParseReturnType`

- Tighten/loosen generic casts in localStore to match stricter
  zod 4 inference

- ESLint 9 `no-useless-assignment`: remove redundant initializers
  and dead reassignments; disable the rule where Svelte's reactive
  blocks confuse the analyser

- Svelte/eslint `prefer-svelte-reactivity`: disable for legacy
  Svelte usages of URL / Set

- Misc naming-convention and prefer-const fixes
2026-04-22 17:48:45 +02:00
Rūdolfs Ošiņš 9ca1d7973e Fix GitHub actions warnings
Gets rid of "Node.js 20 actions are deprecated".
2026-04-22 15:25:27 +02:00
Rūdolfs Ošiņš ad75d6488c Bump playwright 1.52.0 -> 1.59.1
Playwright 1.52 hangs under Node 24 when loading test files that
transitively import modules with top-level await (tests/support/
support.ts). Node 24 enables require(esm) by default, and the old
CJS-based .ts transformer deadlocks on TLA.

Also update CLAUDE.md: playwright 1.59's --project flag is variadic
and greedily consumes trailing args, so the file path must come
before --project.
2026-04-22 14:36:52 +02:00
Rūdolfs Ošiņš a1b0723908 Bump nodejs 22.12.0 -> 24.15.0
This also drops .tool-versions to keep a single source of truth for the
node version in .nvmrc. We also point the github actions to .nvmrc now.
I'm the only dev who's using asdf to manage my tooling and I decided to
just configure it to fall back to .nvmrc via `legacy_version_file =
yes`.
2026-04-22 11:20:25 +02:00
Rūdolfs Ošiņš ecbea99f56 Show canonical branches and tags in peer selector 2026-04-22 09:45:00 +02:00
Rūdolfs OšiņšandFintan Halpenny 42bc27c1f8 httpd: Add canonical and peer refs to repo API
Co-authored-by: Fintan Halpenny <fintan.halpenny@gmail.com>
2026-04-22 09:45:00 +02:00
Rūdolfs Ošiņš a184186944 Add helper script to run unit tests against local httpd
As opposed to running it against a pre-compiled binary with a pinned
version.
2026-04-22 09:40:47 +02:00
Fintan Halpenny 114b25322e flake.nix: Update flake.nix
The `flake.nix` file used `heartwood` as its source of truth for a lot
of tooling.
The `heartwood` library was pinned to its `1.0.0` version, causing
issues when attempting run `nix develop`.

Instead, modify the inputs to grab the tooling from their source of truth.
The `heartwood` binaries can now be retrieved via the `radicle-node`
entry in the Nix packages registry.
2026-04-21 17:08:57 +01:00
Fintan Halpenny 1884084e12 .gitignore: Add target to ignore set
The `target` folder will be populated by rust-analyzer flycheck tooling.
It can be ignored by `git`.
2026-04-21 17:08:57 +01:00
Rūdolfs Ošiņš 64f91fa41d Show job cobs on repo source and patches 2026-04-21 17:29:39 +02:00
Rūdolfs Ošiņš 7cef0618ce httpd: Add API endpoint for job cobs
Serve them on /repos/{rid}/xyz.radworks.job/{sha}.
2026-04-21 11:38:15 +02:00
Rūdolfs Ošiņš 78ccb93d84 Move header injection to open-graph worker
Remove og-injector middleware that ran on every request. Social crawlers are
redirected to the open-graph worker via a cloudflare rule now.
2026-04-15 14:23:04 +02:00
Rūdolfs Ošiņš 74e15e2535 Add open-graph card generation via Cloudflare Workers
Deploys two workers: og-injector intercepts social crawler requests and
injects Open Graph meta tags; open-graph renders 1200×630 PNG cards
using Satori with repo/user avatars ported from avatar.ts.
2026-04-13 12:45:57 +02:00
Rūdolfs Ošiņš 21dc8a6262 Simplify zod schema 2026-03-26 17:48:48 -06:00
Rūdolfs Ošiņš afb0f903ee Replace last deprecated Avatar with UserAvatar
We missed this one spot in the grand UI redesign.
2026-03-26 17:43:47 -06:00
Rūdolfs Ošiņš cacef2292b Fix breaking schema change in radicle-node 1.7.0 2026-03-18 10:57:01 -06:00
Julien Donck 7d5dd7e8a2 Fix intermittent TypeError during route transitions
Svelte 5's signal system can evaluate derived signals in child
components before parent {#if} blocks destroy them. When the
route store changes (e.g. from repo.commit to repo.patch), the
spread props update before the old component is unmounted, causing
commit to become undefined and Changeset to throw accessing
undefined.files.

Use optional chaining on Commit prop expressions so getters
return undefined instead of throwing, and guard Changeset
template with {#if diff} plus optional chaining on files
lookups.
2026-03-17 12:45:36 -06:00