Commit Graph

21985 Commits

Author SHA1 Message Date
GiteaBot
b8b270bac9 [skip ci] Updated translations via Crowdin 2026-11-07 00:31:59 +00:00
Alan Hsu
df4544a58b fix(web): handle TypeCastError when building form validation messages (#40212)
Fixes https://github.com/go-gitea/gitea/issues/40210

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-06 23:27:06 +00:00
silverwind
ede9ec3e10 fix: stop discarding file close and test setup errors (#39987)
- Fix
https://github.com/go-gitea/gitea/security/quality/rules/go%2Funhandled-writable-file-close,
ignored close errors hide failed flushes, which could lose rotated logs
and truncate authorized_keys
- Fix `TestProjects` fixture reset, from
https://github.com/go-gitea/gitea/security/quality/ai-findings,
`TruncateBeans` rejected the table names and the ignored error let the
test run against fixture data
2026-11-06 20:45:17 +00:00
silverwind
24700dca2a test(e2e): retry clipboard reads rejected by Firefox (#40155)
The Firefox mermaid e2e test fails intermittently with `Clipboard read
operation is not allowed.`, for example in
https://github.com/go-gitea/gitea/actions/runs/41281998298/job/124776072700.

Firefox rejects `readText()` when it overlaps the page's still pending
clipboard write, and `expect.poll` does not retry errors thrown by its
callback, so one overlapping read fails the test.
https://github.com/go-gitea/gitea/pull/39838 only removed the paste
prompt, not this rejection.

- A new `assertClipboardText` helper treats a rejected read as a
mismatch so it is polled again
- The bot token copy test had the same race and uses it too

_Written by Claude (Opus 5.5)._
2026-11-06 20:44:00 +00:00
silverwind
7e18e81c7d refactor: remove duplicated and dead Go code (#40244)
Pure refactors with no behavior change, mostly reusing existing helpers
and dropping duplicated or dead code. Net −222 lines.

- Reuse existing helpers instead of inlined copies: `getIssueIndex`,
`NewLabel`, `ToCommitUser`, `GetPackageFileDescriptors`,
`util.SplitTrimSpace`
- Merge copy-pasted blocks in review comment deletion, project deletion
and the pre/post-receive hook templates
- Drop dead code: an error `toStringKeys` never returned, impossible
`bytes.Buffer` write errors, redundant nil-map branches, a `base64`
wrapper
- Use stdlib where it fits: `strings.Cut`, `bytes.IndexAny`,
`cmp.Compare`, `min`/`max`, `slices.Concat`, map lookups instead of key
scans
2026-11-06 11:59:49 +00:00
Shivansh Garg
a5201dc427 feat(release): allow setting a release as the latest (#40214)
Gitea picks the latest release by commit date, while GitHub keeps an
explicit pointer, so repositories migrated from GitHub could show a
different latest release than their source. Fixes
https://github.com/go-gitea/gitea/issues/35273.

- Add a "Set as Latest Release" checkbox and GitHub's `make_latest` API
option. Without them, the newest stable release by commit date stays the
latest.
- Migrations from GitHub and Gitea carry over the source's latest
release.
- Migrated releases are dated by their commit like native ones, and
equally dated ones keep the source's order.

<img width="355" height="122" alt="Set as Latest Release checkbox"
src="https://github.com/user-attachments/assets/d35f5324-7ae0-4e9f-b73c-d3c90496fb00"
/>

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-06 08:23:13 +00:00
Lazizbek Ergashev
98c937170f fix(repo): reject unparsable required approvals in branch protection (#40213)
Saving a branch protection rule with a "Required approvals" value that
can't be parsed as an integer (like `99999999999999999999` or `abc`)
showed the success message and stored 0, because the binding error was
never checked. The form now uses `form-fetch-action` with
`GetFetchActionForm`, so invalid input is rejected and nothing is saved.
Dev mode still answers unparsable numbers with a 500 until
`TypeCastError` gets a message, see
https://github.com/go-gitea/gitea/pull/40212.

- Validation errors show on the page and highlight the offending field,
keeping the form input
- Negative approvals are rejected before any rule lookup, and the input
gets `min="0"`

Fixes https://github.com/go-gitea/gitea/issues/40211

Assisted-by: Claude Code:claude-opus-5-5

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-06 08:08:20 +00:00
silverwind
09922e4ae1 ci: update giteabot to v1.5.1, label conflict-free backports (#40247)
Bump `giteabot` to
[`v1.5.1`](https://github.com/go-gitea/giteabot/releases/tag/v1.5.1) to
label PRs with a `backport/<version>` label that would cherry-pick
cleanly onto the latest release branch with `backport/conflict-free`.

The backport workflow's concurrency group is now per ref, so release
branch pushes can't cancel a pending backport run from `main`.

_Written by Claude (Opus 5.5)._
2026-11-06 07:55:55 +00:00
Basavaraj S m
8d14c9af20 fix(pull): enforce user blocks on pull request reviews (#40194)
Code review never checked user blocks, so a user blocked by the poster
or repository owner could still post reviews, code comments and replies
through the web, API and email.

- `CreateCodeComment` and `SubmitReview` now check blocks, with the repo
admin exemption issue comments have.
- Official reviewers blocked only by the author can still review, so an
author can't keep a maintainer from requesting changes.
- Review requests are handled in
https://github.com/go-gitea/gitea/pull/39296.

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-06 07:31:58 +00:00
silverwind
87ebf3b1ba feat(auth)!: remove support for obsolete OpenID 2.0 draft (#40231)
Remove OpenID 2.0 authentication. The spec is an obsolete draft, major
providers dropped it years ago, and the code keeps needing security
fixes like https://github.com/go-gitea/gitea/pull/39642. OpenID Connect
and OAuth2 are unaffected. Docs: https://gitea.com/gitea/docs/pulls/633.

- The `[openid]` settings, OpenID sign-in, sign-up and account
association are gone
- A migration drops the `user_open_id` table with all user OpenID URIs
- Accounts registered via OpenID have a random password and regain
access via password reset

Fixes: https://github.com/go-gitea/gitea/issues/1310
Fixes: https://github.com/go-gitea/gitea/issues/3521
2026-11-06 07:21:19 +00:00
wxiaoguang
fd98ab5472 enhance(codeowners): support section / glob / file view display / skip review request (#40243)
Document: https://gitea.com/gitea/docs/pulls/634 ([doc PR
preview](955ae7d75c/docs/usage/repository/code-owners.md))

1. If the pattern starts with `*` or contains `/*`, use our glob package
to parse it as glob to regexp
* Make it easier to use. Otherwise it's really ugly to keep writing a
lot of backslash escapes
2. Add GitLab-style "section" support
   * Fix #28926

```codeowners
[Section] @user
*.js
```

3. Add our annotation support, at the moment only need to support
review-request=true/false
    * Fix #40241

```codeowners
## review-request=false # this is global

*.js $user ## review-request=true # this is line-level

[Section] @user ## review-request=true # this is section-level
*.md
```

4. Add GitHub/GitLab-style "show codeowner when viewing a file"
    * Fix #28137
2026-11-06 07:19:51 +00:00
silverwind
0d59b737aa fix: upgrade Alpine base packages in Docker images (#40252)
The `alpine:3.24` base image lags behind fixes published to the Alpine
repository.

Both images now run `apk upgrade` before `apk add`. Packages from `apk
add` are already current, so this only affects the preinstalled base
packages.

_Written by Claude (Opus 5.5)._
2026-11-06 07:19:07 +00:00
Giteabot
917badaae6 fix(deps): update module github.com/andybalholm/brotli to v1.2.7 [security] (#40246)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[github.com/andybalholm/brotli](https://redirect.github.com/andybalholm/brotli)
| `v1.2.1` → `v1.2.7` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fandybalholm%2fbrotli/v1.2.7?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fandybalholm%2fbrotli/v1.2.1/v1.2.7?slim=true)
|

---

### Excessive memory allocation when decompressing crafted streams in
github.com/andybalholm/brotli
BIT-brotli-2026-111497 / BIT-dotnet-2026-111497 /
BIT-dotnet-sdk-2026-111497 / BIT-node-2026-111497 /
BIT-node-min-2026-111497 / BIT-powershell-2026-111497 /
[CVE-2026-111497](https://nvd.nist.gov/vuln/detail/CVE-2026-111497) /
[GHSA-9v8h-qqgm-4m35](https://redirect.github.com/advisories/GHSA-9v8h-qqgm-4m35)
/
[GHSA-c9gr-gmg4-2vqv](https://redirect.github.com/advisories/GHSA-c9gr-gmg4-2vqv)
/ [GO-2026-6888](https://pkg.go.dev/vuln/GO-2026-6888) / PYSEC-2026-4322
/ PYSEC-2026-4323

<details>
<summary>More information</summary>

#### Details
In github.com/andybalholm/brotli before v1.2.7, the decompressor
allocates memory for Huffman tables and block-type trees on every
meta-block header without bounding the cumulative allocations relative
to the input size. A small crafted brotli stream containing many empty
meta-blocks with new Huffman trees can trigger hundreds of megabytes of
allocations per kilobyte of input, leading to denial of service.

#### Severity
Unknown

#### References
-
[https://github.com/andybalholm/brotli/security/advisories/GHSA-c9gr-gmg4-2vqv](https://redirect.github.com/andybalholm/brotli/security/advisories/GHSA-c9gr-gmg4-2vqv)
-
[33c2a98842)
-
[https://github.com/andybalholm/brotli/releases/tag/v1.2.7](https://redirect.github.com/andybalholm/brotli/releases/tag/v1.2.7)
-
[0ed4268a44)

This data is provided by
[OSV](https://osv.dev/vulnerability/GO-2026-6888) and the [Go
Vulnerability Database](https://redirect.github.com/golang/vulndb)
([CC-BY 4.0](https://redirect.github.com/golang/vulndb#license)).
</details>

---

### Release Notes

<details>
<summary>andybalholm/brotli (github.com/andybalholm/brotli)</summary>

###
[`v1.2.7`](https://redirect.github.com/andybalholm/brotli/compare/v1.2.6...v1.2.7)

[Compare
Source](https://redirect.github.com/andybalholm/brotli/compare/v1.2.6...v1.2.7)

###
[`v1.2.6`](https://redirect.github.com/andybalholm/brotli/compare/v1.2.5...v1.2.6)

[Compare
Source](https://redirect.github.com/andybalholm/brotli/compare/v1.2.5...v1.2.6)

###
[`v1.2.5`](https://redirect.github.com/andybalholm/brotli/compare/v1.2.4...v1.2.5)

[Compare
Source](https://redirect.github.com/andybalholm/brotli/compare/v1.2.4...v1.2.5)

###
[`v1.2.4`](https://redirect.github.com/andybalholm/brotli/compare/v1.2.3...v1.2.4)

[Compare
Source](https://redirect.github.com/andybalholm/brotli/compare/v1.2.3...v1.2.4)

###
[`v1.2.3`](https://redirect.github.com/andybalholm/brotli/compare/v1.2.2...v1.2.3)

[Compare
Source](https://redirect.github.com/andybalholm/brotli/compare/v1.2.2...v1.2.3)

###
[`v1.2.2`](https://redirect.github.com/andybalholm/brotli/compare/v1.2.1...v1.2.2)

[Compare
Source](https://redirect.github.com/andybalholm/brotli/compare/v1.2.1...v1.2.2)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend Renovate
CLI](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xOTAuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjE5MC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
2026-11-06 01:55:15 +00:00
Lazizbek Ergashev
288d54951e fix(perm): keep read access for restricted collaborators on public repos (#40234)
Adding a restricted user as a read collaborator to a public repo gave
them no access when the owner isn't fully public, like a limited org.
Restricted users get no default read there, and `RecalculateUserAccess`
dropped their read access row.

- `RecalculateUserAccess` now keeps the same read rows as
`refreshAccesses`, on org-owned repos and for restricted users.
- Re-saving an unchanged collaborator permission recalculates access,
repairing collaborators affected before this fix.

Fixes https://github.com/go-gitea/gitea/issues/40233

Assisted-by: Claude Code:claude-opus-5-5

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-05 23:48:55 +00:00
silverwind
b81b50be55 fix(build): pass # test patterns to go test -run unchanged (#39977)
The `test-backend#` and `test-integration#` targets rewrote every `.`
into `/`, because GNU make pattern rules never match goals containing
`/`. That broke regexes like `make 'test-backend#TestA.*'`, which
silently selected subtests instead.

Static pattern rules built from the goals accept `/` directly, so the
pattern reaches `go test -run` unchanged. Subtests are now selected like
`make 'test-backend#TestA/sub'`, on GNU make 3.81 and 4.x.
2026-11-05 23:44:33 +00:00
silverwind
c62db5b2a3 perf: reduce git processes and queries on pull request view (#40224)
Removes redundant work from the pull request conversation tab.

- Base and head refs resolve through the `cat-file` batch of the git
repos the callers already hold, instead of two `git rev-parse`
processes, reducing the number of git processes from 9 to 7 per page,
about 17 ms faster locally.
- Sidebar reviewers are batch-loaded and code-review comments reuse
their loaded poster, reducing the number of SQL queries from 387 to 358
on a PR with 169 timeline entries and 15 reviews.

Also fixes the commit list of merged pull requests, which resolved the
merge base as a branch name and returned 500.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-05 21:58:17 +00:00
Andrew Barnes
4a9d49bb46 fix(dump): --file extension is ignored when --type is not set (#40235)
`gitea dump -f backup.tar.gz` without `--type` wrote a zip archive under
that name. Detecting the type from the file name was requested in
https://github.com/go-gitea/gitea/issues/24622 and intended in
https://github.com/go-gitea/gitea/pull/30240, but the check read the
still-empty result instead of `--file`, so every name fell back to zip.

A supported extension now selects the type, other names like `backup` or
`gitea.bak` still default to zip. An explicit `--type` still wins, and
its help text now mentions the detection.

AI disclosure: written with Claude Code (claude-opus-5-5).

---------

Signed-off-by: silverwind <me@silverwind.io>
Co-authored-by: silverwind <me@silverwind.io>
2026-11-05 18:30:31 +00:00
silverwind
b7c1fb2a39 enhance: enable DEFAULT_DELETE_BRANCH_AFTER_MERGE by default for new repos (#39975)
Switch the `DEFAULT_DELETE_BRANCH_AFTER_MERGE` default from
https://github.com/go-gitea/gitea/pull/36917 to `true`, saving users a
click on merge for the most common action that deletes the PR branch on
merge.

Docs: https://gitea.com/gitea/docs/pulls/608
2026-11-05 18:26:32 +00:00
rafał przypek
3b9b8a8976 fix(packages): return empty Chef dependencies instead of null (#40237)
Fixes #40230

Cookbooks without dependencies are served with `"dependencies": null`
from the universe and version metadata endpoints. This happens because
`omitempty` drops the empty map when the metadata is stored. Chef
clients iterate over this value and Policyfile resolution crashes.

Supermarket returns `{}` for these cookbooks, Gitea now does too. The
fix checks whether dependencies are `nil` while building response,
returns an empty map if true. This way cookbooks that are already stored
are covered without a re-upload.

Tested with the Chef integration test and `chef-cli install`.

Assisted by Claude Code (claude-opus-5-5).
2026-11-05 15:19:09 +00:00
Lunny Xiao
565f1b7d52 fix(migrations): Do not fail Bitbucket Server migration when pull request activities cannot be loaded (#40205)
Bitbucket Server can answer 500 for `/pull-requests/{id}/activities` of
some pull requests. That error aborted the whole repository migration:

`bitbucket server API .../pull-requests/128/activities returned status
500`

Now a 500 is logged as a warning and that pull request's comments,
reviews and merge commit are skipped, cached so the endpoint is not hit
again. Other errors are still returned, so the migration retries them as
before.

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-05 07:28:12 +00:00
silverwind
e87ac3a0f4 chore(deps): update go.yaml.in/yaml/v4 to v4.0.0 (#40222)
Update go-yaml from the rc.6 pseudo-version to the stable v4.0.0
release, and actionslib to v1.5.2, which does the same in
https://gitea.com/gitea/actionslib/pulls/32. The bump also brings in
actionslib v1.5.1.

v4 double-quotes the `on` key like yaml.v3 did, so one jobparser fixture
changes. Runner counterpart: https://gitea.com/gitea/runner/pulls/1381.

Fixes: https://github.com/go-gitea/gitea/issues/40145
2026-11-05 07:25:10 +00:00
GiteaBot
4477d47d07 [skip ci] Updated translations via Crowdin 2026-11-04 20:23:49 +00:00
Mark
bfbf8cd366 fix: fix missing accessible name on static Fomantic combobox dropdowns (#40163)
Fixes https://github.com/go-gitea/gitea/issues/40107

Static Fomantic dropdowns get `role="combobox"` or `role="menu"`, and
neither role takes its accessible name from child contents (`nameFrom:
author` only). Dropdowns like Filter and Sort on `/explore/repos`
without `data-tooltip-content`, `aria-label` or `aria-labelledby`
therefore had an empty accessible name.

If the focusable element still has no `aria-label` or `aria-labelledby`
after the tooltip check, link `aria-labelledby` to the dropdown's direct
`.text` or `span` child. Selection dropdowns are skipped because their
`.text` holds the current value, not a label.

---------

Co-authored-by: Mark <14371969+malfunctionAI@users.noreply.github.com>
Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 19:55:29 +00:00
silverwind
dfe6db6149 fix(web): build issue popup request from parsed link (#40207)
The issue reference popup built its `/info` request from the raw link
path, so a link ending in `/owner/repo/issues/N` queried an unrelated
location.

It now builds the request from the owner, repo, type and index parsed
from the link, with `parseIssueHref` anchored to the pathname under
`appSubUrl`.
2026-11-04 19:40:27 +00:00
Lazizbek Ergashev
d1c980cf8b fix(web): inline the site manifest (#40198)
Inline the web app manifest as a `data:` URL instead of serving it from
`/assets/site-manifest.json`. That endpoint has been linked through
`STATIC_URL_PREFIX` since https://github.com/go-gitea/gitea/pull/37405
and fails to load when:

1. a reverse proxy checks auth on every request, because browsers fetch
manifests without cookies
2. `STATIC_URL_PREFIX` serves the `public/` directory from disk, which
has no such file
3. `STATIC_URL_PREFIX` is cross-origin, because the endpoint sends no
CORS headers

The manifest is built per request so `start_url` follows
`PUBLIC_URL_DETECTION`. A reverse proxy that adds a stricter CSP must
allow `manifest-src data:`.

Fixes https://github.com/go-gitea/gitea/issues/40197

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 18:11:25 +00:00
silverwind
1152bc0cf2 fix(actions): evaluate job if: against needs finished in the same pass (#40126)
The job emitter resolves a dependency chain in several rounds in memory,
but a job's `if:` reads its needs' results from the database, where a
need skipped or failed earlier in the same pass was still blocked. A job
with `if: always() && needs.build.result == 'skipped'` was therefore
skipped instead of started.

Finished statuses are now persisted at the end of each round, which also
replaces the separate handling of skipped and failed reusable workflow
callers.
2026-11-04 18:10:56 +00:00
silverwind
159e6d7e75 test(actions): run repo Actions API tests as a non-owner repo admin (#40183)
The repo-level runner, secret and variable API tests ran as the repo
owner, who bypasses the repo admin check. That's how the regression
fixed in https://github.com/go-gitea/gitea/pull/40174 slipped through.
As suggested in
https://github.com/go-gitea/gitea/pull/40174#issuecomment-6591991824,
they now run as an admin collaborator, which replaces the duplicate
subtest added there.

The tests are also trimmed to one case per status code, because
`services/secrets/validation_test.go` already unit tests name
validation.
2026-11-04 17:34:29 +00:00
Paul van der lei
f29eedad83 fix(pull): code owner team is requested again after a member reviewed (#40187)
When a member of a CODEOWNERS team approves or rejects a pull request,
`SubmitReview` removes the team's review request. On the next push,
`PullRequestCodeOwnersReview` finds no request for that team and adds it
again, so every team member except the author gets a new "Requested to
review" mail. This happens even when the push doesn't change the PR's
diff (for example, merging the base branch into the PR branch) and the
approval is still valid.

Individual code owners don't have this problem: they are skipped when
they already have a review. This PR applies the same rule to teams. A
team is not requested again while one of its members has an approve or
reject review on the PR that hasn't been dismissed. If that review is
dismissed (for example by "Dismiss stale approvals"), the team is
requested again as before.

Testing: `TestPullView_CodeOwnerTeamAnsweredByMember` creates an org
repo with `README.md @org3/team1`, opens a PR, and checks three things:
the team is requested; after a member approves, a code owner pass (what
a push runs) doesn't request the team again; after the approval is
dismissed, the team is requested again. The test fails without the
change. `make lint-backend` and the `TestPull*` integration tests pass
locally on SQLite.

AI disclosure: I used Claude to help trace the cause and draft the
change, test and description. I reviewed and tested it myself and can
explain every line.

Fixes #34884.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-04 17:34:13 +00:00
Basavaraj S m
e9c5804075 fix(issues): hide unreadable issue types in search and milestone views (#40192)
The repository issue search JSON route sits behind the issues reader
check only, and the milestone page is open to anyone who can read either
issues or pull requests, since the issue routes have to tolerate pull
request permissions. Neither handler narrows the issue type to what the
viewer may read: the search route takes `type=pulls` straight from the
query or lists both types when it is absent, and the milestone page
always lists both. A team member granted only the Issues unit on a
private repository can therefore fetch every pull request's title and
body as JSON and see pull requests on milestone pages, while a
pull-requests-only reader sees issues there. I noticed it while
comparing these routes with the API `ListIssues` handler and the web
issue suggestions endpoint, which both already narrow the type. The
narrowing now lives in one small helper used by all three handlers, with
the search route answering 404 for a requested type the viewer cannot
read, like the API does. A unit test covers both handlers with an
issues-only permission.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-04 17:31:24 +00:00
Shivansh Garg
be297b7e05 fix(webhook): fire repository event on repository transfer (#40200)
Transferring a repository fired no `repository` webhook. It now sends a
`transferred` action shaped like GitHub's, with the previous owner in
`changes.owner.from.user` or `changes.owner.from.organization`. Like
GitHub, it goes to the new owner's webhooks, plus the repository's own
and system webhooks.

- Chat webhooks render "Repository transferred from <owner>".
- Actions workflows are unaffected, no trigger matches `repository`
events.

Fixes https://github.com/go-gitea/gitea/issues/33584

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 17:25:51 +00:00
Lunny Xiao
fca64e7330 perf: reuse request-scoped git repo in pull request conversion (#40208)
Reuse the request-scoped base git repository in `ToAPIPullRequest`,
`ToPayloadPullRequest` and `ToAPIPullRequests` instead of reopening it
for each conversion, so conversions share the request's `cat-file`
process.

- Same-repo PRs reuse the base repository for the head instead of
opening it a second time.
- Drop a redundant second open of the base repository.
- Fork head repositories stay opened per call. A request-cached fork
keeps its `cat-file` running until the request ends, which blocks
deleting the fork on Windows and keeps one process per fork alive in
batch status changes.

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 17:24:49 +00:00
Myers Carpenter
58279e39fd fix(actions): match pull_request unlabeled on label removal (#40215)
Fixes https://github.com/go-gitea/gitea/issues/34317

Removing a label from a pull request still started workflows with
`types: [labeled]` and never matched `types: [unlabeled]`.
https://github.com/go-gitea/gitea/pull/34316 derived
`labeled`/`unlabeled` from the added and removed labels for issues only,
while pull requests kept mapping every `label_updated` to `labeled`.
Both events now share one conversion, so they cannot drift apart again.

Two other label changes also triggered the wrong workflows:

- Clearing all labels started no `unlabeled` workflow, because the
Actions notifier ignored it
- Replacing labels reported every old label as removed, so a replace
that kept a label also matched `unlabeled`

AI disclosure: written with Claude Code (claude-opus-5-5), session
https://claude.ai/code/session_01Kw9ySGNd4ynmyX9GcVdUfw

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 17:24:33 +00:00
Nico Schlömer
ab295e62e4 fix(markup): make heading anchors match GitHub for whitespace and combining marks (#40195)
Heading anchors now keep the same characters as GitHub: letters, marks,
decimal and letter numbers, connector punctuation and alphabetic
symbols, with ASCII spaces turned into `-`. The rule follows
[github-slugger](https://github.com/Flet/github-slugger), whose fixtures
are generated from real GitHub renders.

- Other whitespace, including newlines in multi-line headings, is
dropped instead of becoming `-`, so `1<em space>ab` gets `#1ab`
- Combining marks are kept, so `हिन्दी` no longer becomes `हनद`
- Other numbers like `²` and `①` are dropped

Fixes https://github.com/go-gitea/gitea/issues/27754

This PR was written with Claude Code.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 05:51:12 +00:00
wxiaoguang
d919301d36 refactor: remove UnmarshalHandleDoubleEncode patch and fix repo unit TODO (#39998)
Remove the `UnmarshalHandleDoubleEncode` runtime workaround for an old
xorm bug, and normalize legacy double-encoded JSON in `repo_unit.config`
and `login_source.cfg` with a migration instead.

- Config `FromDB` no longer fails on corrupted values. A broken auth
source is deactivated, so admins can still fix it in the admin panel
- Remove `ProjectsConfig.GetProjectsMode`, `FromDB` already defaults
`ProjectsMode`

Actually it doesn't need so many changes, just because AI thinks it
should handle "corrupted database value" for auth sources.

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 05:28:49 +00:00
Alan Hsu
666e6e2d17 fix(web): allow clearing the full name in profile settings (#40186)
Clearing "Full Name" in the profile settings shows success but keeps the
old value: since #31959 it is only updated when non-empty, because the
input is disabled (not submitted) when `change_full_name` is disabled.

Use `*string` for the field, so a missing field keeps the value and an
empty one clears it. With `change_full_name` disabled, any submitted
value (including empty) is now rejected. Not `optional.Option[string]`,
because `MaxSize` would count slice elements instead of characters.

Fixes #40185

---
AI disclosure: written with Claude Code (claude-opus-5-5) and tested
locally.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
2026-11-04 01:42:41 +00:00
Jon Fuller
4d00ed2a1e fix(notifications): avoid deadlock when creating issue notifications concurrently (#40166)
Concurrent `notification-service` workers can deadlock in the
transaction for-loop.

The transaction is useless, so it is removed to avoid deadlock.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-03 16:33:39 +00:00
silverwind
ce0da8a378 build: cross-compile in docker (#40136)
Building the backend under QEMU takes 46 to 54 minutes per foreign
platform in the nightly image build, against 7 minutes natively. The
backend stage now runs on the build platform and cross-compiles with
`GOOS`/`GOARCH`/`GOARM`, so every platform builds at native speed.

- `go generate` runs once instead of once per platform.
- The PR docker dry run builds all three platforms in a single job, on
any docker-related change.

---------

Signed-off-by: silverwind <me@silverwind.io>
2026-11-03 16:20:48 +00:00
Gaurav Dubey
f26a314636 fix(api): keep wiki page name when editing with an empty title (#40153)
Match `PATCH /repos/{owner}/{repo}/wiki/page/{pageName}` document "leave
empty to keep unchanged"

Fixes #39179

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-03 16:20:39 +00:00
Jon Fuller
5c68ba3e0a fix(repo): avoid deadlock when updating language stats concurrently (#40167)
The `repo_stats_update` queue only deduplicates waiting items, so
several workers can index the same repository at once, then
`UpdateLanguageStats` can lead to transaction deadlock.

Use a global lock to avoid concurrent updates, and also helps
https://github.com/go-gitea/gitea/pull/39342 to avoid duplicate updates.

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-03 16:18:27 +00:00
silverwind
78eb95ab19 fix: enable more djlint rules and improve keyboard navigation (#40081)
Enable djlint's [H018](https://djlint.com/docs/linter/#h018),
[H046](https://djlint.com/docs/linter/#h046) and
[H054](https://djlint.com/docs/linter/#h054) rules, fix their findings
and the keyboard navigation problems around them. H054 found links
nested in `<button>` dropdowns and radio inputs nested in links, both
invalid HTML.

- "Add File" and "More Operations" in the repo file list become `div`
dropdowns, the disabled state stays unfocusable
- The diff whitespace menu marks the current option with a check and
`aria-current` instead of radios, which made our dropdown aria patch
announce it as a combobox
- Sign-in moves "Forgot password?" below "Sign In" and drops the
positive tabindexes from https://github.com/go-gitea/gitea/pull/31689,
so the tab order follows the DOM: username, password, remember, sign in,
forgot
- The focus ring on primary, red and green buttons is near-white on dark
themes and near-black on light ones, the primary-colored ring was
invisible on primary buttons

<img width="500" alt="Whitespace menu, before and after"
src="https://github.com/user-attachments/assets/d22a423d-95e5-434c-aec4-59264c7132b7"
/>

<img width="600" alt="Sign-in form, main and this PR"
src="https://github.com/user-attachments/assets/d6780690-d906-4791-8a2b-8d80fb03067a"
/>

<img width="215" height="132" alt="Keyboard-focused primary and red
buttons, dark and light theme"
src="https://github.com/user-attachments/assets/a2400b18-4802-4383-8560-7e8267a7f02f"
/>

---------

Signed-off-by: silverwind <me@silverwind.io>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-03 15:30:59 +00:00
silverwind
5c723ee0fd refactor(markdown): remove goldmark-highlighting (#39751)
Render fenced code blocks with Gitea's own code block renderer instead
of `goldmark-highlighting`, using the managed lexer lookup from
`modules/highlight`. Indented and fenced blocks now share one rendering
path.

Rendered output is unchanged. The trailing newline is stripped on copy
in the frontend since https://github.com/go-gitea/gitea/pull/39755.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-03 12:25:31 +00:00
Giteabot
12b20c7c99 chore(deps): update dependencies (#40168)
> [!NOTE]
> This PR body was truncated due to platform limits.

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) | Type |
Update | Pending |
|---|---|---|---|---|---|---|
| [@primer/octicons](https://primer.style/octicons)
([source](https://redirect.github.com/primer/octicons)) | [`19.41.0` →
`19.42.0`](https://renovatebot.com/diffs/npm/@primer%2focticons/19.41.0/19.42.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@primer%2focticons/19.42.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@primer%2focticons/19.41.0/19.42.0?slim=true)
| dependencies | minor | |
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`8.72.0` →
`8.72.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.72.0/8.72.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.72.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.72.0/8.72.1?slim=true)
| devDependencies | patch | |
| @&#8203;vitest/eslint-plugin | [`1.6.27` →
`1.6.28`](https://renovatebot.com/diffs/npm/@vitest%2feslint-plugin/1.6.27/1.6.28)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@vitest%2feslint-plugin/1.6.28?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@vitest%2feslint-plugin/1.6.27/1.6.28?slim=true)
| devDependencies | patch | |
| [astral-sh/setup-uv](https://redirect.github.com/astral-sh/setup-uv) |
`v10.3.0` → `v10.3.2` |
![age](https://developer.mend.io/api/mc/badges/age/github-tags/astral-sh%2fsetup-uv/v10.3.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/astral-sh%2fsetup-uv/v10.3.0/v10.3.2?slim=true)
| action | patch | `v10.3.3` |
| [chart.js](https://www.chartjs.org)
([source](https://redirect.github.com/chartjs/Chart.js)) | [`4.5.1` →
`4.6.1`](https://renovatebot.com/diffs/npm/chart.js/4.5.1/4.6.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/chart.js/4.6.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/chart.js/4.5.1/4.6.1?slim=true)
| dependencies | minor | |
| [cli/cli](https://redirect.github.com/cli/cli) | `2.103.2` → `2.103.3`
|
![age](https://developer.mend.io/api/mc/badges/age/github-releases/cli%2fcli/2.103.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/github-releases/cli%2fcli/2.103.2/2.103.3?slim=true)
| | patch | |
|
[connectrpc.com/connect/v2](https://redirect.github.com/connectrpc/connect-go)
| `v2.0.1` → `v2.0.2` |
![age](https://developer.mend.io/api/mc/badges/age/go/connectrpc.com%2fconnect%2fv2/v2.0.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/connectrpc.com%2fconnect%2fv2/v2.0.1/v2.0.2?slim=true)
| require | patch | |
|
[crowdin/github-action](https://redirect.github.com/crowdin/github-action)
| `v3.4.0` → `v3.5.0` |
![age](https://developer.mend.io/api/mc/badges/age/github-tags/crowdin%2fgithub-action/v3.5.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/crowdin%2fgithub-action/v3.4.0/v3.5.0?slim=true)
| action | minor | |
| [djlint](https://redirect.github.com/djlint/djLint) | `==1.46.6` →
`==1.47.1` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/djlint/1.47.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/djlint/1.46.6/1.47.1?slim=true)
| dependency-groups | minor | `1.49.2` (+4) |
| [docker/login-action](https://redirect.github.com/docker/login-action)
| `v4.6.0` → `v4.7.0` |
![age](https://developer.mend.io/api/mc/badges/age/github-tags/docker%2flogin-action/v4.7.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/docker%2flogin-action/v4.6.0/v4.7.0?slim=true)
| action | minor | |
| [elasticsearch](https://hub.docker.com/_/elasticsearch)
([source](https://redirect.github.com/elastic/dockerfiles)) | `3f4d63c`
→ `ef5cafd` | | | service | digest | |
|
[eslint-plugin-unicorn](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn)
| [`78.0.0` →
`79.0.0`](https://renovatebot.com/diffs/npm/eslint-plugin-unicorn/78.0.0/79.0.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-unicorn/79.0.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-unicorn/78.0.0/79.0.0?slim=true)
| devDependencies | major | |
| [eslint-plugin-vue](https://eslint.vuejs.org)
([source](https://redirect.github.com/vuejs/eslint-plugin-vue)) |
[`10.11.1` →
`10.12.0`](https://renovatebot.com/diffs/npm/eslint-plugin-vue/10.11.1/10.12.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-vue/10.12.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-vue/10.11.1/10.12.0?slim=true)
| devDependencies | minor | |
|
[getmeili/meilisearch](https://redirect.github.com/meilisearch/meilisearch)
| `c94e58c` → `1f578fa` | | | service | digest | |
| [gitea.dev/sdk](https://gitea.com/gitea/go-sdk) | `v1.3.0` → `v1.5.0`
|
![age](https://developer.mend.io/api/mc/badges/age/go/gitea.dev%2fsdk/v1.5.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/gitea.dev%2fsdk/v1.3.0/v1.5.0?slim=true)
| require | minor | `v1.5.1` |
|
[github.com/buildkite/terminal-to-html/v3](https://redirect.github.com/buildkite/terminal-to-html)
| `v3.17.1` → `v3.17.3` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fbuildkite%2fterminal-to-html%2fv3/v3.17.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fbuildkite%2fterminal-to-html%2fv3/v3.17.1/v3.17.3?slim=true)
| require | patch | |
|
[github.com/dlclark/regexp2/v2](https://redirect.github.com/dlclark/regexp2)
| `v2.9.1` → `v2.11.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fdlclark%2fregexp2%2fv2/v2.11.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fdlclark%2fregexp2%2fv2/v2.9.1/v2.11.0?slim=true)
| require | minor | `v2.12.0` |
|
[github.com/getkin/kin-openapi](https://redirect.github.com/getkin/kin-openapi)
| `v0.151.0` → `v0.152.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgetkin%2fkin-openapi/v0.152.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgetkin%2fkin-openapi/v0.151.0/v0.152.0?slim=true)
| require | minor | |
|
[github.com/go-co-op/gocron/v2](https://redirect.github.com/go-co-op/gocron)
| `v2.22.0` → `v2.23.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgo-co-op%2fgocron%2fv2/v2.23.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgo-co-op%2fgocron%2fv2/v2.22.0/v2.23.0?slim=true)
| require | minor | |
|
[github.com/go-redsync/redsync/v4](https://redirect.github.com/go-redsync/redsync)
| `v4.18.0` → `v4.18.1` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgo-redsync%2fredsync%2fv4/v4.18.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgo-redsync%2fredsync%2fv4/v4.18.0/v4.18.1?slim=true)
| require | patch | |
| [github.com/google/pprof](https://redirect.github.com/google/pprof) |
`1facf8f` → `dbd0ed3` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgoogle%2fpprof/v0.0.0-20261026192309-dbd0ed30aa88?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgoogle%2fpprof/v0.0.0-20261016150608-1facf8f91b50/v0.0.0-20261026192309-dbd0ed30aa88?slim=true)
| require | digest | |
|
[gitlab.com/gitlab-org/api/client-go/v3](https://gitlab.com/gitlab-org/api/client-go)
| `v3.29.0` → `v3.39.1` |
![age](https://developer.mend.io/api/mc/badges/age/go/gitlab.com%2fgitlab-org%2fapi%2fclient-go%2fv3/v3.39.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/gitlab.com%2fgitlab-org%2fapi%2fclient-go%2fv3/v3.29.0/v3.39.1?slim=true)
| require | minor | `v3.40.2` (+3) |
| [google.golang.org/grpc](https://redirect.github.com/grpc/grpc-go) |
`v1.84.0` → `v1.85.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fgrpc/v1.85.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fgrpc/v1.84.0/v1.85.0?slim=true)
| require | minor | |
| [katex](https://katex.org)
([source](https://redirect.github.com/KaTeX/KaTeX)) | [`0.19.0` →
`0.19.1`](https://renovatebot.com/diffs/npm/katex/0.19.0/0.19.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/katex/0.19.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/katex/0.19.0/0.19.1?slim=true)
| dependencies | patch | |
|
[markdownlint-cli](https://redirect.github.com/igorshubovych/markdownlint-cli)
| [`0.49.1` →
`0.50.0`](https://renovatebot.com/diffs/npm/markdownlint-cli/0.49.1/0.50.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/markdownlint-cli/0.50.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/markdownlint-cli/0.49.1/0.50.0?slim=true)
| devDependencies | minor | |
|
[material-icon-theme](https://redirect.github.com/material-extensions/vscode-material-icon-theme/blob/main/README.md)
([source](https://redirect.github.com/material-extensions/vscode-material-icon-theme))
| [`5.39.0` →
`5.40.0`](https://renovatebot.com/diffs/npm/material-icon-theme/5.39.0/5.40.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/material-icon-theme/5.40.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/material-icon-theme/5.39.0/5.40.0?slim=true)
| devDependencies | minor | |
| [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `v1.60.1` →
`v1.61.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/modernc.org%2fsqlite/v1.61.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/modernc.org%2fsqlite/v1.60.1/v1.61.0?slim=true)
| require | minor | `v1.61.1` |
| [pnpm](https://pnpm.io)
([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm/npm/pnpm))
| [`12.14.0` →
`12.16.1`](https://renovatebot.com/diffs/npm/pnpm/12.14.0/12.16.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/12.16.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/12.14.0/12.16.1?slim=true)
| packageManager | minor | |
| [pnpm](https://pnpm.io)
([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm/npm/pnpm))
| [`>= 12.14.0` → `>=
12.16.1`](https://renovatebot.com/diffs/npm/pnpm/12.14.0/12.16.1) |
![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/12.16.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/12.14.0/12.16.1?slim=true)
| engines | minor | |
| [postcss](https://postcss.org/)
([source](https://redirect.github.com/postcss/postcss)) | [`8.5.31` →
`8.5.32`](https://renovatebot.com/diffs/npm/postcss/8.5.31/8.5.32) |
![age](https://developer.mend.io/api/mc/badges/age/npm/postcss/8.5.32?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss/8.5.31/8.5.32?slim=true)
| dependencies | patch | |
| [renovate](https://renovatebot.com)
([source](https://redirect.github.com/renovatebot/renovate)) |
[`44.172.2` →
`44.190.1`](https://octochangelog.com/compare?repo=renovatebot%2Frenovate&from=44.172.2&to=44.190.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/renovate/44.190.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/renovate/44.172.2/44.190.1?slim=true)
| | minor | `44.200.0` (+21) |
|
[renovatebot/github-action](https://redirect.github.com/renovatebot/github-action)
| `v46.3.9` → `v46.3.10` |
![age](https://developer.mend.io/api/mc/badges/age/github-tags/renovatebot%2fgithub-action/v46.3.10?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/renovatebot%2fgithub-action/v46.3.9/v46.3.10?slim=true)
| action | patch | `v46.3.12` (+1) |
|
[typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint)
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint))
| [`8.72.0` →
`8.72.1`](https://renovatebot.com/diffs/npm/typescript-eslint/8.72.0/8.72.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.72.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.72.0/8.72.1?slim=true)
| devDependencies | patch | |
| [vite](https://vite.dev)
([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite))
| [`8.3.4` →
`8.3.5`](https://renovatebot.com/diffs/npm/vite/8.3.4/8.3.5) |
![age](https://developer.mend.io/api/mc/badges/age/npm/vite/8.3.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/8.3.4/8.3.5?slim=true)
| dependencies | patch | |

---

### Release Notes

<details>
<summary>primer/octicons (@&#8203;primer/octicons)</summary>

###
[`v19.42.0`](https://redirect.github.com/primer/octicons/releases/tag/%40primer/octicons%4019.42.0)

[Compare
Source](https://redirect.github.com/primer/octicons/compare/@primer/octicons@19.41.0...@primer/octicons@19.42.0)

##### Minor Changes

- [#&#8203;1381](https://redirect.github.com/primer/octicons/pull/1381)
[`d25ce68df9d08abd65431a8a48b45446432f1b45`](d25ce68df9)
Thanks [@&#8203;edokoa](https://redirect.github.com/edokoa)! - Add the
16px `git-draft-agent`, `git-pull-request-agent`, `check-agent`,
`git-que-merge-agent`, `git-closed-agent`, and `git-merge-agent` icons
for agent-assisted draft, open, ready-to-merge, queued, closed, and
merged pull request states.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v8.72.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8721-2026-10-26)

[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.72.0...v8.72.1)

This was a version bump only for parser to align it with other projects,
there were no code changes.

See [GitHub
Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.72.1)
for more information.

You can read about our [versioning
strategy](https://typescript-eslint.io/users/versioning) and
[releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>astral-sh/setup-uv</summary>

###
[`v10.3.2`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v10.3.2):
🌈 update known checksums for 0.13.5

[Compare
Source](https://redirect.github.com/astral-sh/setup-uv/compare/v10.3.1...v10.3.2)

#### Changes

#### 🧰 Maintenance

- chore: update known checksums for 0.13.5
@&#8203;[github-actions\[bot\]](https://redirect.github.com/apps/github-actions)
([#&#8203;1103](https://redirect.github.com/astral-sh/setup-uv/issues/1103))

#### 📚 Documentation

- docs: update version references to v10.3.1
@&#8203;[github-actions\[bot\]](https://redirect.github.com/apps/github-actions)
([#&#8203;1102](https://redirect.github.com/astral-sh/setup-uv/issues/1102))

###
[`v10.3.1`](https://redirect.github.com/astral-sh/setup-uv/releases/tag/v10.3.1):
🌈 preserve cache error class names in save-cache bundle

[Compare
Source](https://redirect.github.com/astral-sh/setup-uv/compare/v10.3.0...v10.3.1)

#### Changes

This release includes a fix so that multiple concurrent workflows trying
to upload the same cache no longer warn

`##[warning]Failed to save: Unable to reserve cache with key ...,
another job may be creating this cache.`

#### 🐛 Bug fixes

- fix: preserve cache error class names in save-cache bundle
[@&#8203;dannyward630](https://redirect.github.com/dannyward630)
([#&#8203;1093](https://redirect.github.com/astral-sh/setup-uv/issues/1093))

#### 🧰 Maintenance

- chore: update known checksums for 0.13.4
@&#8203;[github-actions\[bot\]](https://redirect.github.com/apps/github-actions)
([#&#8203;1099](https://redirect.github.com/astral-sh/setup-uv/issues/1099))
- chore: update known checksums for 0.13.2/0.13.3
@&#8203;[github-actions\[bot\]](https://redirect.github.com/apps/github-actions)
([#&#8203;1098](https://redirect.github.com/astral-sh/setup-uv/issues/1098))
- chore: update known checksums for 0.13.1
@&#8203;[github-actions\[bot\]](https://redirect.github.com/apps/github-actions)
([#&#8203;1094](https://redirect.github.com/astral-sh/setup-uv/issues/1094))
- Verify npm dependency signatures before builds
[@&#8203;zaniebot](https://redirect.github.com/zaniebot)
([#&#8203;1027](https://redirect.github.com/astral-sh/setup-uv/issues/1027))

#### 📚 Documentation

- docs: cache-dependency-glob matches relative to the working directory
[@&#8203;flange-ipb](https://redirect.github.com/flange-ipb)
([#&#8203;1092](https://redirect.github.com/astral-sh/setup-uv/issues/1092))
- docs: update version references to v10.3.0
@&#8203;[github-actions\[bot\]](https://redirect.github.com/apps/github-actions)
([#&#8203;1090](https://redirect.github.com/astral-sh/setup-uv/issues/1090))

#### ⬆️ Dependency updates

- chore(deps): roll up Dependabot updates
[@&#8203;eifinger](https://redirect.github.com/eifinger)
([#&#8203;1101](https://redirect.github.com/astral-sh/setup-uv/issues/1101))

</details>

<details>
<summary>chartjs/Chart.js (chart.js)</summary>

###
[`v4.6.1`](https://redirect.github.com/chartjs/Chart.js/releases/tag/v4.6.1)

[Compare
Source](https://redirect.github.com/chartjs/Chart.js/compare/v4.5.1...v4.6.1)

### Essential Links

- [npm](https://www.npmjs.com/package/chart.js)
- [Migration
guide](https://www.chartjs.org/docs/4.6.1/migration/v4-migration.html)
- [Docs](https://www.chartjs.org/docs/4.6.1/)
- [API](https://www.chartjs.org/docs/4.6.1/api/)
- [Samples](https://www.chartjs.org/docs/4.6.1/samples/information.html)

*
[#&#8203;12355](https://redirect.github.com/chartjs/Chart.js/issues/12355)
fix: trusted publishing fix + version 4.6.1 bump

Thanks to [@&#8203;etimberg](https://redirect.github.com/etimberg)

</details>

<details>
<summary>cli/cli</summary>

###
[`v2.103.3`](https://redirect.github.com/cli/cli/releases/tag/v2.103.3):
GitHub CLI 2.103.3

[Compare
Source](https://redirect.github.com/cli/cli/compare/v2.103.2...v2.103.3)

##### What's Changed

##### 🐛 Fixes

- fix(gh auth status): explain expired expiring tokens with
`--no-refresh` by [@&#8203;babakks](https://redirect.github.com/babakks)
in [#&#8203;14815](https://redirect.github.com/cli/cli/pull/14815)

**Full Changelog**:
<https://github.com/cli/cli/compare/v2.103.2...v2.103.3>

</details>

<details>
<summary>connectrpc/connect-go (connectrpc.com/connect/v2)</summary>

###
[`v2.0.2`](https://redirect.github.com/connectrpc/connect-go/releases/tag/v2.0.2)

[Compare
Source](https://redirect.github.com/connectrpc/connect-go/compare/v2.0.1...v2.0.2)

#### What's Changed

##### Bugfixes

- Fix data race reading ClientInfo after a cancelled call by
[@&#8203;emcfarlane](https://redirect.github.com/emcfarlane) in
[#&#8203;1036](https://redirect.github.com/connectrpc/connect-go/pull/1036)
- List JSON charset variants in Accept-Post by
[@&#8203;emcfarlane](https://redirect.github.com/emcfarlane) in
[#&#8203;1037](https://redirect.github.com/connectrpc/connect-go/pull/1037)
- Flush response headers in ServerStream.SendHeaders over HTTP by
[@&#8203;raveesh-me](https://redirect.github.com/raveesh-me) in
[#&#8203;1035](https://redirect.github.com/connectrpc/connect-go/pull/1035)
- Stop reading oversized messages after rejecting them by
[@&#8203;stefanvanburen](https://redirect.github.com/stefanvanburen) in
[#&#8203;1039](https://redirect.github.com/connectrpc/connect-go/pull/1039)

#### New Contributors

- [@&#8203;raveesh-me](https://redirect.github.com/raveesh-me) made
their first contribution in
[#&#8203;1035](https://redirect.github.com/connectrpc/connect-go/pull/1035)

**Full Changelog**:
<https://github.com/connectrpc/connect-go/compare/v2.0.1...v2.0.2>

</details>

<details>
<summary>crowdin/github-action</summary>

###
[`v3.5.0`](https://redirect.github.com/crowdin/github-action/releases/tag/v3.5.0)

[Compare
Source](https://redirect.github.com/crowdin/github-action/compare/v3.4.0...v3.5.0)

#### What's Changed

- CLI
[5.5.0](https://redirect.github.com/crowdin/crowdin-cli/releases/tag/5.5.0)
by [@&#8203;andrii-bodnar](https://redirect.github.com/andrii-bodnar)

**Full Changelog**:
<https://github.com/crowdin/github-action/compare/v3.4.0...v3.5.0>

</details>

<details>
<summary>djlint/djLint (djlint)</summary>

###
[`v1.47.1`](https://redirect.github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1471---2026-10-26)

[Compare
Source](https://redirect.github.com/djlint/djLint/compare/v1.47.0...v1.47.1)

##### Fix

- `preserve-inline` in the `js` setting `brace_style` takes effect, so
`{ bubbles: true }` stays on one line in a `<script>` or in an attribute
formatted with `--format-attribute-js-json`. It used to be dropped
before the code was formatted.
- The json schema allows any option under `css` and `js`, so a strict
validator such as Tombi no longer reports `indent_size` there.

###
[`v1.47.0`](https://redirect.github.com/djlint/djLint/blob/HEAD/CHANGELOG.md#1470---2026-10-22)

[Compare
Source](https://redirect.github.com/djlint/djLint/compare/v1.46.6...v1.47.0)

##### Feature

- New option `--sort-load-tags` / `sort_load_tags` sorts the libraries
in a `{% load %}` tag and drops the ones written twice, so `{% load
static i18n %}` becomes `{% load i18n static %}`. In `{% load a b from
library %}` the names before `from` are sorted. It is off by default:
where two libraries define a tag or filter of the same name, the one
loaded last wins, so sorting can change which one a template uses.
- The formatter drops the spaces `H012` reports around an attribute's
`=`, so `<div class = "a">` becomes `<div class="a">`.

##### Changed

- `H010` reports the names the formatter lowercases, in any mix of case,
so `Width="3"` is now reported. A framework binding such as `:itemID` or
`@ID` and a longer name such as `data-ID` no longer are, since the
formatter leaves their case alone.
- `H018` is not reported under `--close-void-tags`, since the formatter
then writes the `/>` ending the rule reports. `--ignore-case` already
worked this way for `H009` and `H010`.

##### Fix

- `H020` reports an empty pair whose end tag has whitespace before its
`>`, such as `<div></div\n>`.
- `H026` reports a `class` or `id` holding only whitespace, such as
`class=" "`, and one written with spaces around the `=`.
- `H033` reports an action padded at both ends once. It used to report
it twice, unless an attribute before `action` happened to make the two
reports look the same.
- Markup written inside an attribute value, as in `<p title="<img
src='a'>">`, is text, and `H005`, `H008`, `H010`, `H012`, `D018`,
`J018`, `H024`, `H026`, `H029` and `H033` no longer report it. `H046`
and `H051` read `tabindex` and `role` from the tag's own attributes, so
`tabindex=1` written in a value or in the page text is not reported
either.
- `T001` and `T027` read a tag holding a dict, such as `{{ f({"a": {"b":
1}}) }}`, up to the `}}` that closes it rather than the first `}}`
inside it.
- `T032` steps over an escaped quote in a string, so the spaces in `{{
x|default:"a \"b c\"" }}` are not reported.
- `H015` reports a heading followed by a tag on the same line anywhere
in the file. It used to look only at the last line.
- The rules that read a tag's attributes step over a template tag
written in it, including a handlebars `{{{attrs}}}` and a dict as in `{{
{'class': 'x'}|xmlattr }}`, so `<img {{ attrs }} src='a'>` is reported
by `H008`, which used to stop reading at the `{{`.
- `T038` steps over a string in a block tag, so the `{%` in `{% with
a="{%" %}` does not cut the tag short.

##### Performance

- The rules that read a tag's attributes stop at a stray `<`, and
`H015`, `H030`, `H036`, `T001`, `T027`, `T038` and `T039` no longer read
the rest of the document again for each tag. A file holding thousands of
unclosed tags or headings on one line is linted in a fraction of a
second, where it used to take minutes.

</details>

<details>
<summary>docker/login-action</summary>

###
[`v4.7.0`](https://redirect.github.com/docker/login-action/releases/tag/v4.7.0)

[Compare
Source](https://redirect.github.com/docker/login-action/compare/v4.6.0...v4.7.0)

- Preserve explicit ECR settings in `registry-auth` by
[@&#8203;crazy-max](https://redirect.github.com/crazy-max) in
[#&#8203;1089](https://redirect.github.com/docker/login-action/pull/1089)
- Use registry hosts for scoped credentials by
[@&#8203;crazy-max](https://redirect.github.com/crazy-max) in
[#&#8203;1088](https://redirect.github.com/docker/login-action/pull/1088)
- Raise Docker Hub OIDC max expiry to 6 hours by
[@&#8203;crazy-max](https://redirect.github.com/crazy-max) in
[#&#8203;1068](https://redirect.github.com/docker/login-action/pull/1068)
- Log Docker Hub OIDC token exchange progress by
[@&#8203;crazy-max](https://redirect.github.com/crazy-max) in
[#&#8203;1061](https://redirect.github.com/docker/login-action/pull/1061)
- Bump
[@&#8203;aws-sdk/client-ecr](https://redirect.github.com/aws-sdk/client-ecr)
and
[@&#8203;aws-sdk/client-ecr-public](https://redirect.github.com/aws-sdk/client-ecr-public)
to 3.1154.0 in
[#&#8203;1093](https://redirect.github.com/docker/login-action/pull/1093)
- Bump
[@&#8203;docker/actions-toolkit](https://redirect.github.com/docker/actions-toolkit)
from 0.94.0 to 0.107.0 in
[#&#8203;1100](https://redirect.github.com/docker/login-action/pull/1100)
- Bump [@&#8203;humanfs/node](https://redirect.github.com/humanfs/node)
from 0.16.7 to 0.16.8 in
[#&#8203;1077](https://redirect.github.com/docker/login-action/pull/1077)
- Bump csv-parse from 7.0.1 to 7.0.3 in
[#&#8203;1078](https://redirect.github.com/docker/login-action/pull/1078)
- Bump handlebars from 4.7.9 to 4.7.10 in
[#&#8203;1091](https://redirect.github.com/docker/login-action/pull/1091)
- Bump js-yaml from 5.2.2 to 5.5.0 in
[#&#8203;1066](https://redirect.github.com/docker/login-action/pull/1066)
- Bump postcss from 8.5.22 to 8.5.26 in
[#&#8203;1071](https://redirect.github.com/docker/login-action/pull/1071)
- Bump postcss-selector-parser from 7.1.1 to 7.1.6 in
[#&#8203;1092](https://redirect.github.com/docker/login-action/pull/1092)
- Bump source-map-js from 1.2.1 to 1.2.2 in
[#&#8203;1090](https://redirect.github.com/docker/login-action/pull/1090)
- Bump undici from 6.27.0 to 6.29.1 in
[#&#8203;1085](https://redirect.github.com/docker/login-action/pull/1085)
- Bump uuid from 14.0.1 to 14.0.3 in
[#&#8203;1096](https://redirect.github.com/docker/login-action/pull/1096)

**Full Changelog**:
<https://github.com/docker/login-action/compare/v4.6.0...v4.7.0>

</details>

<details>
<summary>sindresorhus/eslint-plugin-unicorn
(eslint-plugin-unicorn)</summary>

###
[`v79.0.0`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/releases/tag/v79.0.0)

[Compare
Source](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/compare/v78.0.0...v79.0.0)

#### Breaking

- `no-top-level-side-effects`: Focus on mutations of globals, and remove
it from the `unopinionated` preset
([#&#8203;3915](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3915))
[`24abac4`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/24abac48)
- Unknown calls are no longer reported by default. Enable the new
[`checkUnknownCalls`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-top-level-side-effects.md#checkunknowncalls)
option for stricter checking.
- Mutations of globals, like `document.title = 'x'` and
`Object.assign(globalThis, …)`, are now reported, also in declarations
and default exports. You may see new reports.

#### Improvements

- Infer types from JSDoc `@type`, `@param`, and `@returns` annotations
in rules that use type information
([#&#8203;3941](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3941))
[`2b4bfab`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/2b4bfab0)
- Handle template literals without expressions like strings in more
rules
([#&#8203;3943](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3943))
[`8bd8c06`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/8bd8c063)
- Autofix more code that contains comments, while keeping the comments
([#&#8203;3939](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3939))
[`87baf82`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/87baf82f)
- Fix autofixes in many rules that could produce broken code or wrong
parentheses
([#&#8203;3917](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3917))
[`fed7eac`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/fed7eac2)
- Make autofixes safer in many rules
- Fixes that can change behavior in rare cases are now suggestions, for
example in `prefer-spread`, `prefer-math-min-max`,
`prefer-modern-dom-apis`, and `prefer-switch`.
- Improve performance
[`175efaf`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/175efaf1)
[`3dd8fd2`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/3dd8fd28)
- `comment-content`: Add
[`ignore`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/comment-content.md#ignore)
option
([#&#8203;3950](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3950))
[`3fe046e`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/3fe046e6)
- `consistent-function-scoping`: Ignore functions in Vitest hoisted
factories
([#&#8203;3905](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3905))
[`98912a9`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/98912a91)
- `custom-error-definition`: Ignore abstract TypeScript classes
([#&#8203;3934](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3934))
[`ee3501f`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/ee3501fb)
- `no-non-function-verb-prefix`: Ignore shorthand destructuring
([#&#8203;3926](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3926))
[`76e5760`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/76e5760b)
- `no-top-level-side-effects`: Recognize more config helpers
([#&#8203;3916](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3916))
[`d459c51`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/d459c511)
- `no-useless-coercion`: Preserve boolean return types in TypeScript
([#&#8203;3904](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3904))
[`bef1571`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/bef15714)
- `prefer-array-some`: Check `.find()` results used as booleans
([#&#8203;3913](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3913))
[`c957bf3`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/c957bf3d)
- `prefer-default-parameters`: Skip unsafe logical OR fallbacks
([#&#8203;3951](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3951))
[`bcec97a`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/bcec97a4)
- `prefer-includes`: Skip incompatible TypeScript search values
([#&#8203;3927](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3927))
[`d66441a`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/d66441aa)
- `prefer-includes-over-repeated-comparisons`: Report negated and typed
loose comparisons
([#&#8203;3935](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3935))
[`6e21cb1`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/6e21cb1b)
- `prefer-includes-over-repeated-comparisons`: Preserve TypeScript union
narrowing
([#&#8203;3910](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3910))
[`b5c479d`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/b5c479d8)
- `prefer-literal-ascii`: Preserve escaped trailing spaces in templates
([#&#8203;3911](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3911))
[`360094b`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/360094bb)
- `prefer-minimal-ternary`: Skip minimizations that break types
([#&#8203;3892](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3892))
[`f022d6d`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/f022d6d1)
- `prefer-modern-math-apis`: Use suggestions for changes that can affect
numeric results
([#&#8203;3914](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3914))
[`8af7c17`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/8af7c172)
- `prefer-simple-condition-first`: Improve `typeof` comparisons and
guards
([#&#8203;3948](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3948))
[`ee3edf0`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/ee3edf06)
- `prefer-simplified-conditions`: Handle equivalent logical expressions
([#&#8203;3938](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3938))
[`a0b2788`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/a0b2788b)
- `prefer-simplified-conditions`: Factor common terms in longer chains
and static templates
([#&#8203;3942](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3942))
[`0d8c8bc`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/0d8c8bcb)
- `prefer-smaller-scope`: Check TypeScript type aliases
([#&#8203;3928](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3928))
[`290d922`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/290d922c)
- `prefer-string-raw`: Preserve TypeScript literal types in autofixes
([#&#8203;3912](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3912))
[`0611546`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/06115464)
- `prefer-ternary`: Preserve consecutive early-return guards
([#&#8203;3945](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3945))
[`3fa840f`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/3fa840fe)
- `require-post-message-target-origin`: Skip incompatible typed methods
([#&#8203;3925](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3925))
[`387194b`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/387194bd)
- `throw-new-error`: Ignore calls that return functions
([#&#8203;3894](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/issues/3894))
[`5e35def`](https://redirect.github.com/sindresorhus/eslint-plugin-unicorn/commit/5e35def7)

***

</details>

<details>
<summary>vuejs/eslint-plugin-vue (eslint-plugin-vue)</summary>

###
[`v10.12.0`](https://redirect.github.com/vuejs/eslint-plugin-vue/blob/HEAD/CHANGELOG.md#10120)

[Compare
Source](https://redirect.github.com/vuejs/eslint-plugin-vue/compare/v10.11.1...v10.12.0)

##### New rules

- Added new
[`vue/no-content-outside-block`](https://eslint.vuejs.org/rules/no-content-outside-block.html)
rule
([#&#8203;3119](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3119))
- Added new
[`vue/no-define-model-default`](https://eslint.vuejs.org/rules/no-define-model-default.html)
rule
([#&#8203;3146](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3146))
- Added new
[`vue/no-props-shadow`](https://eslint.vuejs.org/rules/no-props-shadow.html)
rule
([#&#8203;3118](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3118))

##### New rule options

- Added `required` option to
[`vue/block-lang`](https://eslint.vuejs.org/rules/block-lang.html) to
report components that omit a required block entirely
([#&#8203;3125](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3125))
- Added `ignoreMixins` option to
[`vue/require-explicit-emits`](https://eslint.vuejs.org/rules/require-explicit-emits.html)
rule
([#&#8203;3141](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3141))

##### Fixed false negatives (may result in more lint issues)

- Added support for refs detected by type information, such as refs
returned from composables, to
[`vue/no-ref-as-operand`](https://eslint.vuejs.org/rules/no-ref-as-operand.html)
rule
([#&#8203;3144](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3144))
- Fixed
[`vue/no-dupe-keys`](https://eslint.vuejs.org/rules/no-dupe-keys.html)
not reporting `defineModel()` names that collide with a prop, another
model, or a `<script setup>` variable
([#&#8203;3163](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3163))
- Fixed
[`vue/no-dupe-keys`](https://eslint.vuejs.org/rules/no-dupe-keys.html)
not reporting `<script setup>` variables that shadow a prop while
aliasing a different one, such as `const foo = toRef(props, 'bar')`
([#&#8203;3124](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3124))
- Fixed
[`vue/no-multi-spaces`](https://eslint.vuejs.org/rules/no-multi-spaces.html)
not reporting multiple spaces in the tags of some top-level blocks, e.g.
`<script setup>`
([#&#8203;3162](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3162))
- Fixed
[`vue/no-ref-as-operand`](https://eslint.vuejs.org/rules/no-ref-as-operand.html)
and
[`vue/no-ref-object-reactivity-loss`](https://eslint.vuejs.org/rules/no-ref-object-reactivity-loss.html)
to also check refs created with `useTemplateRef()`
([#&#8203;3154](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3154))
- Fixed
[`vue/no-unused-properties`](https://eslint.vuejs.org/rules/no-unused-properties.html)
not reporting unused non-props properties in components that use
`$props` as a whole (e.g. `v-bind="$props"`)
([#&#8203;3161](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3161))
- Fixed
[`vue/padding-lines-in-component-definition`](https://eslint.vuejs.org/rules/padding-lines-in-component-definition.html)
to check every pair of adjacent properties, not only the first, when
`withinOption` or `withinEach` is not set
([#&#8203;3155](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3155))
- Fixed
[`vue/require-default-prop`](https://eslint.vuejs.org/rules/require-default-prop.html),
[`vue/no-boolean-default`](https://eslint.vuejs.org/rules/no-boolean-default.html),
[`vue/no-required-prop-with-default`](https://eslint.vuejs.org/rules/no-required-prop-with-default.html)
and
[`vue/require-valid-default-prop`](https://eslint.vuejs.org/rules/require-valid-default-prop.html)
not handling defaults that are passed to `withDefaults()` by reference
or spread instead of an inline object literal
([#&#8203;3114](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3114))

##### Fixed false positives (may result in fewer lint issues)

- Changed
[`vue/singleline-html-element-content-newline`](https://eslint.vuejs.org/rules/singleline-html-element-content-newline.html)
and
[`vue/multiline-html-element-content-newline`](https://eslint.vuejs.org/rules/multiline-html-element-content-newline.html)
rules to ignore `router-link` and `nuxt-link` elements by default
([#&#8203;3165](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3165))
- Fixed
[`vue/no-undef-properties`](https://eslint.vuejs.org/rules/no-undef-properties.html)
false positives for properties returned via `...toRefs(reactive({ ...
}))` from `setup()`
([#&#8203;3134](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3134))
- Fixed
[`vue/require-typed-ref`](https://eslint.vuejs.org/rules/require-typed-ref.html)
false positives when an explicit type annotation already applies to the
`ref()` call
([#&#8203;3123](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3123))
- Fixed
[`vue/v-if-else-key`](https://eslint.vuejs.org/rules/v-if-else-key.html)
false positive for components with a bound `:key`
([#&#8203;3150](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3150))

##### Other changes

- Removed Reactivity Transform support from
[`vue/no-ref-object-reactivity-loss`](https://eslint.vuejs.org/rules/no-ref-object-reactivity-loss.html),
since the Reactivity Transform proposal was dropped from Vue
([#&#8203;3126](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3126))
- Changed
[`vue/html-self-closing`](https://eslint.vuejs.org/rules/html-self-closing.html)
to treat Vue's special `<slot>` and `<template>` elements as components
(`html.component` option) instead of normal HTML elements
([#&#8203;3164](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3164))
- Changed
[`vue/attributes-order`](https://eslint.vuejs.org/rules/attributes-order.html)
rule to provide a suggestion instead of an autofix when the fix would
move a binding across `v-bind="object"`
([#&#8203;3145](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3145))
- Improved performance of
[`vue/no-reserved-component-names`](https://eslint.vuejs.org/rules/no-reserved-component-names.html)
by no longer rebuilding its reserved name sets for every file
([#&#8203;3147](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3147))

</details>

<details>
<summary>gitea/go-sdk (gitea.dev/sdk)</summary>

### [`v1.5.0`](https://gitea.com/gitea/go-sdk/releases/tag/v1.5.0)

[Compare Source](https://gitea.com/gitea/go-sdk/compare/v1.4.0...v1.5.0)

#### What's Changed

- feat: allow PAT-authenticated clients to manage access tokens in
[#&#8203;840](https://gitea.com/gitea/go-sdk/pulls/840)
- fix(pull): surface the server's error when a merge is refused in
[#&#8203;870](https://gitea.com/gitea/go-sdk/pulls/870)
- feat(hook): add name option to webhooks in
[#&#8203;867](https://gitea.com/gitea/go-sdk/pulls/867)
- feat: cover the API options gitea-cli still calls raw in
[#&#8203;862](https://gitea.com/gitea/go-sdk/pulls/862)
- ci: implement gitea's cache-seeder in
[#&#8203;866](https://gitea.com/gitea/go-sdk/pulls/866)
- Add bitbucketserver and forgejo migration service types in
[#&#8203;868](https://gitea.com/gitea/go-sdk/pulls/868)
- chore(deps): update dependencies in
[#&#8203;869](https://gitea.com/gitea/go-sdk/pulls/869)
- chore: remove the Client wrapper generator in
[#&#8203;865](https://gitea.com/gitea/go-sdk/pulls/865)
- feat: add force push and stale approval fields to branch protections
in [#&#8203;864](https://gitea.com/gitea/go-sdk/pulls/864)

#### Contributors

- [@&#8203;sedlund](https://redirect.github.com/sedlund)
- [@&#8203;Svtter](https://redirect.github.com/Svtter)
- [@&#8203;SudhanshuSingh](https://redirect.github.com/SudhanshuSingh)
- [@&#8203;bircni](https://redirect.github.com/bircni)
- [@&#8203;silverwind](https://redirect.github.com/silverwind)
- [@&#8203;lunny](https://redirect.github.com/lunny)
- [@&#8203;renovate-bot](https://redirect.github.com/renovate-bot)

#### New Contributors

- [@&#8203;Svtter](https://redirect.github.com/Svtter) made their first
contribution in [#&#8203;870](https://gitea.com/gitea/go-sdk/pulls/870)
- [@&#8203;bircni](https://redirect.github.com/bircni) made their first
contribution in [#&#8203;862](https://gitea.com/gitea/go-sdk/pulls/862)
- [@&#8203;SudhanshuSingh](https://redirect.github.com/SudhanshuSingh)
made their first contribution in
[#&#8203;864](https://gitea.com/gitea/go-sdk/pulls/864)

**Full Changelog**:
[v1.4.0...v1.5.0](https://gitea.com/gitea/go-sdk/compare/v1.4.0...v1.5.0)

### [`v1.4.0`](https://gitea.com/gitea/go-sdk/releases/tag/v1.4.0)

[Compare Source](https://gitea.com/gitea/go-sdk/compare/v1.3.0...v1.4.0)

#### What's Changed

- fix: retry server version lookup after failure in
[#&#8203;829](https://gitea.com/gitea/go-sdk/pulls/829)
- chore(deps): update dependencies, adapt to Gitea 28 in
[#&#8203;863](https://gitea.com/gitea/go-sdk/pulls/863)
- chore: update golangci-lint for Go 1.27.2, exclude dagger from
Renovate in [#&#8203;861](https://gitea.com/gitea/go-sdk/pulls/861)

**Note**: Gitea skipped 1.28, so the project and workflow run
approve/cancel/logs APIs are now gated on Gitea 28.0.0. Clients pinning
`SetGiteaVersion("1.28.0")` must switch to `"28.0.0"`.

#### Contributors

- [@&#8203;noeljackson](https://redirect.github.com/noeljackson)
- [@&#8203;silverwind](https://redirect.github.com/silverwind)
- [@&#8203;renovate-bot](https://redirect.github.com/renovate-bot)

**Full Changelog**:
[v1.3.0...v1.4.0](https://gitea.com/gitea/go-sdk/compare/v1.3.0...v1.4.0)

Written by Claude.

</details>

<details>
<summary>buildkite/terminal-to-html
(github.com/buildkite/terminal-to-html/v3)</summary>

###
[`v3.17.3`](https://redirect.github.com/buildkite/terminal-to-html/releases/tag/v3.17.3)

[Compare
Source](https://redirect.github.com/buildkite/terminal-to-html/compare/v3.17.2...v3.17.3)

####
[v3.17.3](https://redirect.github.com/buildkite/terminal-to-html/tree/v3.17.3)

[Full
Changelog](https://redirect.github.com/buildkite/terminal-to-html/compare/v3.17.2...v3.17.3)

This release provides the Linux, macOS, and Windows binaries missing
from v3.17.2. Apart from the version number, application code is
unchanged from v3.17.2.

##### Changed

- Prepare versioned binaries for v3.17.3.
[#&#8203;293](https://redirect.github.com/buildkite/terminal-to-html/pull/293)
([@&#8203;wolfeidau](https://redirect.github.com/wolfeidau))
- Document the draft-first binary release process, including artifact
verification and immutable release restrictions.
[#&#8203;292](https://redirect.github.com/buildkite/terminal-to-html/pull/292)
([@&#8203;wolfeidau](https://redirect.github.com/wolfeidau))

##### Included from v3.17.2

- Remove `html/template` from the rendering path to avoid a runtime trap
when rendering with TinyGo, while preserving the generated HTML.
[#&#8203;282](https://redirect.github.com/buildkite/terminal-to-html/pull/282)
([@&#8203;dannymidnight](https://redirect.github.com/dannymidnight))
- Raise the minimum supported Go version to **1.26.10** and update the
development/CI Go Docker image.
[#&#8203;290](https://redirect.github.com/buildkite/terminal-to-html/pull/290)
([@&#8203;wolfeidau](https://redirect.github.com/wolfeidau))
- Bump `golang.org/x/sys` to 0.47.0.
[#&#8203;280](https://redirect.github.com/buildkite/terminal-to-html/pull/280)
([@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot])

###
[`v3.17.2`](https://redirect.github.com/buildkite/terminal-to-html/releases/tag/v3.17.2)

[Compare
Source](https://redirect.github.com/buildkite/terminal-to-html/compare/v3.17.1...v3.17.2)

####
[v3.17.2](https://redirect.github.com/buildkite/terminal-to-html/tree/v3.17.2)

[Full
Changelog](https://redirect.github.com/buildkite/terminal-to-html/compare/v3.17.1...v3.17.2)

##### Fixed

- Remove `html/template` from the rendering path to avoid a runtime trap
when rendering with TinyGo, while preserving the generated HTML.
[#&#8203;282](https://redirect.github.com/buildkite/terminal-to-html/pull/282)
([@&#8203;dannymidnight](https://redirect.github.com/dannymidnight))

##### Changed

- Raise the minimum supported Go version from 1.25.0 to 1.26.10.
[#&#8203;290](https://redirect.github.com/buildkite/terminal-to-html/pull/290)
([@&#8203;wolfeidau](https://redirect.github.com/wolfeidau))

##### Dependency updates

- Update the development/CI Go Docker image from 1.26.4 to 1.26.10.
[#&#8203;281](https://redirect.github.com/buildkite/terminal-to-html/pull/281),
[#&#8203;290](https://redirect.github.com/buildkite/terminal-to-html/pull/290)
- Bump `golang.org/x/sys` from 0.46.0 to 0.47.0.
[#&#8203;280](https://redirect.github.com/buildkite/terminal-to-html/pull/280)
([@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot])

</details>

<details>
<summary>dlclark/regexp2 (github.com/dlclark/regexp2/v2)</summary>

###
[`v2.11.0`](https://redirect.github.com/dlclark/regexp2/compare/v2.10.1...v2.11.0)

[Compare
Source](https://redirect.github.com/dlclark/regexp2/compare/v2.10.1...v2.11.0)

###
[`v2.10.1`](https://redirect.github.com/dlclark/regexp2/compare/v2.10.0...v2.10.1)

[Compare
Source](https://redirect.github.com/dlclark/regexp2/compare/v2.10.0...v2.10.1)

###
[`v2.10.0`](https://redirect.github.com/dlclark/regexp2/compare/v2.9.1...v2.10.0)

[Compare
Source](https://redirect.github.com/dlclark/regexp2/compare/v2.9.1...v2.10.0)

</details>

<details>
<summary>getkin/kin-openapi (github.com/getkin/kin-openapi)</summary>

###
[`v0.152.0`](https://redirect.github.com/getkin/kin-openapi/releases/tag/v0.152.0)

[Compare
Source](https://redirect.github.com/getkin/kin-openapi/compare/v0.151.0...v0.152.0)

#### What's Changed

- openapi2conv: push path-level body/formData parameters into operations
by [@&#8203;Yi-111-a](https://redirect.github.com/Yi-111-a) in
[#&#8203;1340](https://redirect.github.com/getkin/kin-openapi/pull/1340)
- fix(openapi3): resolve transitive component refs in JSON Schema
2020-12 validation by
[@&#8203;Yi-111-a](https://redirect.github.com/Yi-111-a) in
[#&#8203;1342](https://redirect.github.com/getkin/kin-openapi/pull/1342)
- openapi3: honor readOnly/writeOnly from allOf schemas in required
checks by [@&#8203;ybai08](https://redirect.github.com/ybai08) in
[#&#8203;1343](https://redirect.github.com/getkin/kin-openapi/pull/1343)
- openapi3: resolve $refs of Components.Links by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1344](https://redirect.github.com/getkin/kin-openapi/pull/1344)
- openapi3: marshal a schema's empty type list as absent rather than
null by [@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1345](https://redirect.github.com/getkin/kin-openapi/pull/1345)
- openapi3: drop the Header dump from its content/schema error by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1346](https://redirect.github.com/getkin/kin-openapi/pull/1346)
- openapi3gen: always propagate field tag by
[@&#8203;phooijenga](https://redirect.github.com/phooijenga) in
[#&#8203;1347](https://redirect.github.com/getkin/kin-openapi/pull/1347)
- routers/gorillamux: return an error instead of panicking when
registering routes by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1348](https://redirect.github.com/getkin/kin-openapi/pull/1348)
- openapi3: report $refs to null nodes as unresolved instead of
panicking by [@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1349](https://redirect.github.com/getkin/kin-openapi/pull/1349)
- openapi3: validate null servers, server variables, tags and components
without panicking by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1351](https://redirect.github.com/getkin/kin-openapi/pull/1351)
- openapi2conv: fix FromV3Parameter panics on binary schema refs and
value-less schemas by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1352](https://redirect.github.com/getkin/kin-openapi/pull/1352)
- openapi3filter: parse integer values as base 10 by
[@&#8203;LuisFigueroaG](https://redirect.github.com/LuisFigueroaG) in
[#&#8203;1353](https://redirect.github.com/getkin/kin-openapi/pull/1353)
- openapi3filter: decode spaceDelimited and pipeDelimited query objects
by [@&#8203;ybai08](https://redirect.github.com/ybai08) in
[#&#8203;1350](https://redirect.github.com/getkin/kin-openapi/pull/1350)
- Case-sensitive usmarshalling with json/v2 by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1355](https://redirect.github.com/getkin/kin-openapi/pull/1355)
- openapi3filter: decode deepObject and non-exploded form object
properties of urlencoded bodies by
[@&#8203;ybai08](https://redirect.github.com/ybai08) in
[#&#8203;1354](https://redirect.github.com/getkin/kin-openapi/pull/1354)
- openapi3: keep $ref siblings on a schema reached through a cycle by
[@&#8203;Yi-111-a](https://redirect.github.com/Yi-111-a) in
[#&#8203;1357](https://redirect.github.com/getkin/kin-openapi/pull/1357)
- tests: go around encoding/json/v2's randomness in error message by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1361](https://redirect.github.com/getkin/kin-openapi/pull/1361)
- tests: remove actual network calls from tests by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1362](https://redirect.github.com/getkin/kin-openapi/pull/1362)
- tests: run more in parallel by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1363](https://redirect.github.com/getkin/kin-openapi/pull/1363)
- openapi3: ignore reference siblings in OpenAPI 3.0 by
[@&#8203;lucky798213](https://redirect.github.com/lucky798213) in
[#&#8203;1268](https://redirect.github.com/getkin/kin-openapi/pull/1268)
- openapi3: WalkSchemas and WalkParameters stop on a callback cycle by
[@&#8203;reuvenharrison](https://redirect.github.com/reuvenharrison) in
[#&#8203;1364](https://redirect.github.com/getkin/kin-openapi/pull/1364)
- openapi3filter: validate response headers described with content by
[@&#8203;LuisFigueroaG](https://redirect.github.com/LuisFigueroaG) in
[#&#8203;1358](https://redirect.github.com/getkin/kin-openapi/pull/1358)
- openapi3filter: honor ExcludeRequestQueryParams for path item
parameters by
[@&#8203;LuisFigueroaG](https://redirect.github.com/LuisFigueroaG) in
[#&#8203;1365](https://redirect.github.com/getkin/kin-openapi/pull/1365)
- openapi3: handle fields next to $ref as OpenAPI 3.0, 3.1 and 3.2
specify by [@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1371](https://redirect.github.com/getkin/kin-openapi/pull/1371)
- changelog: fixup rebased messes by
[@&#8203;fenollp](https://redirect.github.com/fenollp) in
[#&#8203;1372](https://redirect.github.com/getkin/kin-openapi/pull/1372)

#### New Contributors

- [@&#8203;ybai08](https://redirect.github.com/ybai08) made their first
contribution in
[#&#8203;1343](https://redirect.github.com/getkin/kin-openapi/pull/1343)
- [@&#8203;phooijenga](https://redirect.github.com/phooijenga) made
their first contribution in
[#&#8203;1347](https://redirect.github.com/getkin/kin-openapi/pull/1347)

**Full Changelog**:
<https://github.com/getkin/kin-openapi/compare/v0.151.0...v0.152.0>

</details>

<details>
<summary>go-co-op/gocron (github.com/go-co-op/gocron/v2)</summary>

###
[`v2.23.0`](https://redirect.github.com/go-co-op/gocron/releases/tag/v2.23.0)

[Compare
Source](https://redirect.github.com/go-co-op/gocron/compare/v2.22.0...v2.23.0)

#### What's Changed

- feat(scheduler): WithStartAtGrace opt-in tolerance for late first-run
dispatch by
[@&#8203;JohnRoesler](https://redirect.github.com/JohnRoesler) in
[#&#8203;945](https://redirect.github.com/go-co-op/gocron/pull/945)
- fix(executor,scheduler): use injected clock for job timing and guard
reschedule loop by
[@&#8203;JohnRoesler](https://redirect.github.com/JohnRoesler) in
[#&#8203;946](https://redirect.github.com/go-co-op/gocron/pull/946)
- fix(executor): attribute scheduling delay to the tick that actually
fired by [@&#8203;JohnRoesler](https://redirect.github.com/JohnRoesler)
in [#&#8203;948](https://redirect.github.com/go-co-op/gocron/pull/948)
- refactor(scheduler): extract shared first-run logic from
selectNewJob/selectStart by
[@&#8203;JohnRoesler](https://redirect.github.com/JohnRoesler) in
[#&#8203;947](https://redirect.github.com/go-co-op/gocron/pull/947)
- build(deps): bump actions/setup-go from 6 to 7 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;949](https://redirect.github.com/go-co-op/gocron/pull/949)
- build(deps): bump actions/setup-python from 6 to 7 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;950](https://redirect.github.com/go-co-op/gocron/pull/950)
- ci: updating golangci-lint to 2.13.1 to support go 1.27 by
[@&#8203;manuelarte](https://redirect.github.com/manuelarte) in
[#&#8203;954](https://redirect.github.com/go-co-op/gocron/pull/954)
- Exclude stable Go version in CI workflow by
[@&#8203;JohnRoesler](https://redirect.github.com/JohnRoesler) in
[#&#8203;968](https://redirect.github.com/go-co-op/gocron/pull/968)
- docs: removing retired go report badge by
[@&#8203;manuelarte](https://redirect.github.com/manuelarte) in
[#&#8203;952](https://redirect.github.com/go-co-op/gocron/pull/952)
- build(deps): bump github.com/stretchr/testify from 1.11.1 to 1.12.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203

> [!IMPORTANT]
> ✂ PR body was truncated to here.


</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - Between 12:00 AM and 03:59 AM, only on Monday (`* 0-3 * * 1`)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend Renovate
CLI](https://redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNzIuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE3Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-02 19:30:55 +00:00
wxiaoguang
cdadd0c788 fix(actions): make Actions API work with repo admin permission (#40174)
The web route already uses "repo admin" for repo-level Actions
management.

* Fix #40173

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-02 19:29:49 +00:00
Abdellatif Anaflous
2ed6a6f61b fix(web): read the wiki blob excerpt from the wiki repository (#40165)
The "load more lines" button in wiki diffs returned 404. `ExcerptBlob`
loads the commit from the wiki repo but read the blob from
`ctx.Repo.GitRepo`, a regression from
https://github.com/go-gitea/gitea/pull/38464.

Read the blob from the repo the commit was loaded from.

---------

Co-authored-by: Abdel <hktitof@users.noreply.github.com>
Co-authored-by: silverwind <me@silverwind.io>
2026-11-02 14:30:41 +00:00
silverwind
1f51d2c318 test: run e2e tests in WebKit on Linux (#40152)
WebKit was removed from the e2e tests in
https://github.com/go-gitea/gitea/pull/37315 because Linux WebKit kept
crashing. The crashes came from a use-after-free in the libsoup bundled
with WebKit, which killed the network process and surfaced as `WebKit
encountered an internal error`. macOS WebKit never had them because it
does not use libsoup. Playwright 1.64 bundles libsoup 3.6.6 with the fix
(https://github.com/microsoft/playwright/issues/42803), so WebKit now
runs on all platforms. Builds on
https://github.com/go-gitea/gitea/pull/40140.

The e2e job ran 50 times on `ubuntu-latest` with WebKit enabled, and all
runs passed without WebKit errors. The third browser adds about 1.5 to 2
minutes per run.

1. Playwright installs its system dependencies on GitHub runners too,
which only come with the Chromium and Firefox libraries
1. The passkey test skips Linux WebKit, which has no WebAuthn,
Playwright only stubs `PublicKeyCredential` there

---------

Signed-off-by: silverwind <me@silverwind.io>
2026-11-01 15:24:41 +00:00
bircni
d3021b69ee enhance: replace tea CLI with gt (#40036)
tea has been replaced by [gitea-cli](https://gitea.com/gitea/cli)
(`gt`), which reuses tea's OAuth2 client ID.

- The repository clone panel now offers `gt repo clone owner/repo` under
a "Gitea CLI" tab.
- The built-in OAuth2 application is renamed from `tea` to `gitea-cli`.
`tea` in `[oauth2] DEFAULT_APPLICATIONS` is still accepted as an alias,
so existing configs keep working.
- Instances that already registered the app keep its stored display name
"tea".
2026-11-01 12:47:10 +00:00
silverwind
c62e07f18a fix(projects): only require project write to move board cards (#40161)
Follow-up to https://github.com/go-gitea/gitea/pull/30205, per
https://github.com/go-gitea/gitea/pull/30205#discussion_r4435046605.
Moving a card on a project board is a project operation, so project
write is enough again. Repository boards already show every card to
project writers, who then got a 404 when moving one.

The per-card archived check is removed too. The frontend sends every
card of the target column, so one card from an archived repository
rejected all drops and reorders into that column, silently. Project
workflows already skip archived repositories, and an archived
repository's own board is read-only.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-11-01 10:46:53 +00:00
bircni
51368e1997 ci: use GitHub merge queue (#40130)
Requiring branches to be up to date reruns the full CI matrix on every
waiting PR after each merge, which saturates our 20 concurrent jobs. A
merge queue still tests against the latest `main`, but once per batch.

This runs the PR workflows on `merge_group` and reports `giteabot/lgtm`
on queue commits, since GiteaBot only sets it on PR heads. Mergers queue
PRs with "Merge when ready" instead of `reviewed/wait-merge`, so
giteabot no longer updates branches. Nothing changes until the
`merge-queue` ruleset is enabled and "Require branches to be up to date"
is turned off. Backport to `release/v28` before the ruleset covers it.

---------

Co-authored-by: silverwind <me@silverwind.io>
2026-11-01 11:23:51 +01:00
silverwind
eba3a81c9a ci: build snap nightlies every 12 hours instead of on every push (#40150)
The snap nightly ran on every push to `main`, about 58 runs and 520 job
minutes a week on GitHub-hosted runners, which share the concurrent job
limit with PR CI.

It now runs as a job in `release-nightly.yml`, reusing its 12-hourly
check for new commits on `main`, like
https://github.com/go-gitea/gitea/pull/40138 did for the other
nightlies. A new release tag is still published by the first build after
`main` changes.
2026-11-01 08:44:50 +00:00
silverwind
2a5c34c379 fix(pull): reject pull requests without common history (#39872)
Pull requests between branches without a common history show no commits
and can never be merged. The web form already rejects them, but the API
and crafted `..` compare POSTs did not.

The API compared with `..` since
https://github.com/go-gitea/gitea/pull/36105, it now uses `...` again
and returns 422 when there is no merge base.
2026-11-01 07:53:22 +00:00