commits
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
content occupies 8 columns on medium screens and above, and blocks are
defined for left and right sides of content, with col spans of 2 each
(and contentAfter).
Signed-off-by: oppiliappan <me@oppi.li>
do not use the empty string, but use the calculated default branch
instead.
Signed-off-by: oppiliappan <me@oppi.li>
this falls back to calling RepoLanguages on the knot, and caches that
info at the appview.
Signed-off-by: oppiliappan <me@oppi.li>
and db helpers to set and get.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
commit-count calculation for initial ref-creation pushes failed silently
because the underlying call to `rev-list` would fail.
Signed-off-by: oppiliappan <me@oppi.li>
not many portions of the site use darkend backgrounds. this is very much
WIP.
Signed-off-by: oppiliappan <me@oppi.li>
Builds on the last commit to introduce a variant of the time component but for durations. I added a verbose/long duration fmt function based on the existing short duration fmt one, and also renamed the other time fmt functions for clarity.
Creates a new template fragment, repo/fragments/time, that is a component based on the <time> HTML element. The <time> element is already used for most datetimes, but inconsistently; some define `title` attributes and/or `datetime` attributes, most don't. The goal here is to standardize with a single component so every date has a consistent interaction. The datetime is ISO 8601 formatted as per the spec, the `title` (shown on hover) is a modified long format similar to GitHub's, and the content is a relative format %s ago (`timeFmt` - two `shortTimeFmt` variants also exist to preserve existing behavior).
regexes were recompiled on each router visit.
Signed-off-by: oppiliappan <me@oppi.li>
Change-Id: lwznzstzpoqqlvxnxsoulpokwxwkuwzw
Change-Id: lonyknzlzukqqowkslrmzkszszuktyzy
also fixes a small UI bug with pipeline symbols on stacked PRs
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Also fixes OrderedReactionKinds breaking patch/interdiff pages.
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Renames user/fragments/picHandle to user/fragments/picHandleLink, since it now wraps a simpler user/fragments/picHandle that doesn't include the link. The topbar should now display the avatar next to the handle in the same style, without the link as it was before.
Add `sh.tangled.feed.reaction` lexicon and UI to *react* to issues/PRs
close #65
close #113
Signed-off-by: Seongmin Lee <boltlessengineer@proton.me>
Fixes error:
```
time=2025-07-13T15:01:04.268Z level=WARN msg="failed to setup step logger; logs will not be persisted" component=spindle error="creating log file: open /var/log/spindle/knot1.tangled.sh-3ltu5bpvgwt22-fix-todos.yaml.log: no such file or directory"
```
Signed-off-by: John Andersen <johnandersenpdx@gmail.com>
time=2025-07-13T14:35:21.719Z level=ERROR msg="pipeline failed!" component=spindle image=nixery.tangled.sh/python/bash/git/coreutils/nix workflowId=knot1.tangled.sh-3ltu3twqimw22-fix-todos.yaml error="Error response from daemon: received unexpected HTTP status: 500 Internal Server Error
Related: https://discord.com/channels/1361963801993285692/1393783888530243647/1393964321431617586
Signed-off-by: John Andersen <johnandersenpdx@gmail.com>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Signed-off-by: oppiliappan <me@oppi.li>
The build command was out of date, needed path change to `./cmd/spindle/main.go` and mod download
appview/ingester: invalidate identity only if the account was deactivated on an account event
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
use git fetch instead of git clone. git clone is lacking in that it does
not permit cloning at a specific rev. when paired with `--branch` flag,
there is no guarantee if the required rev is available in the shallow
clone.
with git fetch however, we are able to fetch a specific rev. the steps
are a little more involved however:
git init
git remote add origin <url>
git fetch --depth=<d> --recurse-submodules=<yes|no> <sha>
git checkout FETCH_HEAD
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
also rename jetstream consumer to ingester
Signed-off-by: oppiliappan <me@oppi.li>
refers to the tip of the branch that this PR was opened from. this
addition permits us to associate a CI run with a branch or fork based
pull request.
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Signed-off-by: oppiliappan <me@oppi.li>
reference forgejo's language analysis a bit more, and calculate ratios
based on number of bytes
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: oppiliappan <me@oppi.li>
the previous retry mechanism had a slight flaw: successful connections
did not reset the exponent on the retry interval. this results in
constantly growing retry intervals:
attempt #1 - wait 5s
attempt #2 - wait 10s
attempt #3 - success!
.
.
.
disconnect
attempt #4 - wait 20s
what we want to see however, is a pattern like so:
attempt #1 - wait 5s
attempt #2 - wait 10s
attempt #3 - success!
.
.
.
disconnect
attempt #1 - wait 5s
this is solved by slapping the retry logic around DialConnection, which
is a more atomic point of connection attempt. retry logic is also
offloaded to the github.com/avast-go/retry package
Signed-off-by: oppiliappan <me@oppi.li>
Signed-off-by: Seongmin Lee <boltlessengineer@proton.me>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
Signed-off-by: oppiliappan <me@oppi.li>
Creates a new template fragment, repo/fragments/time, that is a component based on the <time> HTML element. The <time> element is already used for most datetimes, but inconsistently; some define `title` attributes and/or `datetime` attributes, most don't. The goal here is to standardize with a single component so every date has a consistent interaction. The datetime is ISO 8601 formatted as per the spec, the `title` (shown on hover) is a modified long format similar to GitHub's, and the content is a relative format %s ago (`timeFmt` - two `shortTimeFmt` variants also exist to preserve existing behavior).
Fixes error:
```
time=2025-07-13T15:01:04.268Z level=WARN msg="failed to setup step logger; logs will not be persisted" component=spindle error="creating log file: open /var/log/spindle/knot1.tangled.sh-3ltu5bpvgwt22-fix-todos.yaml.log: no such file or directory"
```
Signed-off-by: John Andersen <johnandersenpdx@gmail.com>
time=2025-07-13T14:35:21.719Z level=ERROR msg="pipeline failed!" component=spindle image=nixery.tangled.sh/python/bash/git/coreutils/nix workflowId=knot1.tangled.sh-3ltu3twqimw22-fix-todos.yaml error="Error response from daemon: received unexpected HTTP status: 500 Internal Server Error
Related: https://discord.com/channels/1361963801993285692/1393783888530243647/1393964321431617586
Signed-off-by: John Andersen <johnandersenpdx@gmail.com>
Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.sh>
use git fetch instead of git clone. git clone is lacking in that it does
not permit cloning at a specific rev. when paired with `--branch` flag,
there is no guarantee if the required rev is available in the shallow
clone.
with git fetch however, we are able to fetch a specific rev. the steps
are a little more involved however:
git init
git remote add origin <url>
git fetch --depth=<d> --recurse-submodules=<yes|no> <sha>
git checkout FETCH_HEAD
Signed-off-by: oppiliappan <me@oppi.li>
the previous retry mechanism had a slight flaw: successful connections
did not reset the exponent on the retry interval. this results in
constantly growing retry intervals:
attempt #1 - wait 5s
attempt #2 - wait 10s
attempt #3 - success!
.
.
.
disconnect
attempt #4 - wait 20s
what we want to see however, is a pattern like so:
attempt #1 - wait 5s
attempt #2 - wait 10s
attempt #3 - success!
.
.
.
disconnect
attempt #1 - wait 5s
this is solved by slapping the retry logic around DialConnection, which
is a more atomic point of connection attempt. retry logic is also
offloaded to the github.com/avast-go/retry package
Signed-off-by: oppiliappan <me@oppi.li>