Commits
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
fat fingers!
Signed-off-by: oppiliappan <me@oppi.li>
Adds an inline search widget to the topbar.
On desktop, a search input appears directly in the nav with a
dropdown of quick results (keyboard-navigable with ↑↓/Enter/Escape,
⌘K to focus). On mobile, a search button opens a fullscreen overlay
with the same results.
Signed-off-by: eti <eti@eti.tf>
the PIPELINE prefix is to match TANGLED_PIPELINE_ID, and the `_KIND` is
because we refer to this as trigger "kind" everywhere else.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Seongmin Lee <git@boltless.me>
only happens on the first round of submissions.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Fabricio Silva <hi@fabricio.dev>
Native accent-color approach didn't match the Figma design system.
Custom appearance-none implementation covers all six states: default,
hover, checked, disabled, disabled-checked, and indeterminate.
Uses Lucide check/minus paths as readable SVG data URIs.
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: oppiliappan <me@oppi.li>
hopefully this can improve error handling in clones
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Matías Insaurralde <matias@insaurral.de>
Signed-off-by: oppiliappan <me@oppi.li>
Group consecutive timeline events (defined as being the same action and
operating on the same target) together so that the same target is not
seen multiple times in a row. This notably does not completely aggregate
all events together, so the timeline may still appear as "A B A" if
several instances of event A were broken up by event B.
For collapsed groups, we render "and N other user(s)" in the description
of the event, with a popover that shows the collapsed users if "N other
user(s)" is hovered. The number of events fetched was increased so that
`limit` refers to the number of items in the timeline post-grouping.
Signed-off-by: Kevin Yap <me@kevinyap.ca>
Signed-off-by: oppiliappan <me@oppi.li>
only blobs used repoDIDs, this patches the permalinkShortcut template to
make this work on tree views as well.
Signed-off-by: oppiliappan <me@oppi.li>
Let mobile browsers display optimized keyboards for easier login.
Signed-off-by: Benedikt Müller <bene@diktomat.dev>
Signed-off-by: eti <eti@eti.tf>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Add a channel-based semaphore (SPINDLE_SERVER_MAX_CONCURRENT_WORKFLOWS,
default 8) that blocks workflow goroutines from starting a container until
a slot is free. Each workflow acquires a slot before SetupWorkflow and
releases it on exit via defer.
Combined with the 6 GiB per-container limit (MAX_JOB_MEMORY_MB), this
bounds total container memory to ~48 GiB on the current 64 GiB host.
MAX_JOB_COUNT still controls pipeline-level concurrency at the queue.
Without this semaphore, max workflows were effectively unbounded and
(wrongly) assumed to be capped at MAX_JOB_COUNT.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: Felix Schneider <did:plc:pbjvqaziagcyv2vqodldn5op>
If session has expired, start auth flow.
Signed-off-by: Seongmin Lee <git@boltless.me>
Lewis: May this revision serve well! <lewis@tangled.org>
Signed-off-by: Carl 'Subzidion' Hiltbrunner <git@carl.hiltbrunner.email>
Lewis: May this revision serve well! <lewis@tangled.org>
Lewis: May this revision serve well! <lewis@tangled.org>
Lewis: May this revision serve well! <lewis@tangled.org>
Lewis: May this revision serve well! <lewis@tangled.org>
Lewis: May this revision serve well! <lewis@tangled.org>
Lewis: May this revision serve well! <lewis@tangled.org>
Lewis: May this revision serve well! <lewis@tangled.org>
Lewis: May this revision serve well! <lewis@tangled.org>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Signed-off-by: oppiliappan <me@oppi.li>
caused funky behavior with popups
Signed-off-by: oppiliappan <me@oppi.li>
also removes the gray shield indicator for profiles that are not vouched
for.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
drop-shadow seems to create a new stacking context and that messes with
z-index
Signed-off-by: oppiliappan <me@oppi.li>
stopgap to deter bots
Signed-off-by: oppiliappan <me@oppi.li>
Default to 6GB.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
The nix module var and go struct env tag don't match. This updates
the config struct since it seems to have been the inconsistent one.
Signed-off-by: Kevin <tangled-jj@paeth.xyz>
Signed-off-by: Seongmin Lee <git@boltless.me>
Signed-off-by: atixnotfound.tngl.sh <atsharma623@gmail.com>
Adds `RemoveSource` to stop streaming from a previously registered
source. Removing a source cancels its connection loop and closes any
in-flight websocket so the loop exits promptly instead of waiting for
the next reconnect tick.
Per-source runtime state (the loop's cancel func and the active
websocket conn) was previously split across two sync.Maps and a
separate map of registered sources, each with its own locking. That
left several races, e.g. the conn was stored in connMap only after a successful
dial, so a remove during the dial would miss it.
The new design collapses everything into a single
`sources map[Source]*sourceState` guarded by `sourcesMu`. The lock is only
held for short, non-blocking map mutations and is always released before
any side effect possibly-blocking calls.
`runConnection` now re-checks under the lock that the source is still
registered (and the ctx not cancelled) before installing a freshly
dialed conn, and its deferred cleanup only clears the conn slot if the
entry still points at the conn it installed. This makes 'remove
during dial' and 'remove during read' both deterministic: the cancel
cuts the loop, the close breaks ReadMessage, and a concurrent
runConnection cannot resurrect state for a removed source.
Signed-off-by: Seongmin Lee <git@boltless.me>
also use octet-stream for blobs larger than 1MB to avoid OOM
Signed-off-by: Seongmin Lee <git@boltless.me>
Group consecutive timeline events (defined as being the same action and
operating on the same target) together so that the same target is not
seen multiple times in a row. This notably does not completely aggregate
all events together, so the timeline may still appear as "A B A" if
several instances of event A were broken up by event B.
For collapsed groups, we render "and N other user(s)" in the description
of the event, with a popover that shows the collapsed users if "N other
user(s)" is hovered. The number of events fetched was increased so that
`limit` refers to the number of items in the timeline post-grouping.
Signed-off-by: Kevin Yap <me@kevinyap.ca>
Add a channel-based semaphore (SPINDLE_SERVER_MAX_CONCURRENT_WORKFLOWS,
default 8) that blocks workflow goroutines from starting a container until
a slot is free. Each workflow acquires a slot before SetupWorkflow and
releases it on exit via defer.
Combined with the 6 GiB per-container limit (MAX_JOB_MEMORY_MB), this
bounds total container memory to ~48 GiB on the current 64 GiB host.
MAX_JOB_COUNT still controls pipeline-level concurrency at the queue.
Without this semaphore, max workflows were effectively unbounded and
(wrongly) assumed to be capped at MAX_JOB_COUNT.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>
Adds `RemoveSource` to stop streaming from a previously registered
source. Removing a source cancels its connection loop and closes any
in-flight websocket so the loop exits promptly instead of waiting for
the next reconnect tick.
Per-source runtime state (the loop's cancel func and the active
websocket conn) was previously split across two sync.Maps and a
separate map of registered sources, each with its own locking. That
left several races, e.g. the conn was stored in connMap only after a successful
dial, so a remove during the dial would miss it.
The new design collapses everything into a single
`sources map[Source]*sourceState` guarded by `sourcesMu`. The lock is only
held for short, non-blocking map mutations and is always released before
any side effect possibly-blocking calls.
`runConnection` now re-checks under the lock that the source is still
registered (and the ctx not cancelled) before installing a freshly
dialed conn, and its deferred cleanup only clears the conn slot if the
entry still points at the conn it installed. This makes 'remove
during dial' and 'remove during read' both deterministic: the cancel
cuts the loop, the close breaks ReadMessage, and a concurrent
runConnection cannot resurrect state for a removed source.