Skip to content

add middleware for request prioritization #33951

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Apr 14, 2025
Merged

Conversation

bohde
Copy link
Contributor

@bohde bohde commented Mar 20, 2025

This adds a middleware for overload protection, that is intended to help protect against malicious scrapers. It does this via codel, which will perform the following:

  1. Limit the number of in-flight requests to some user defined max
  2. When in-flight requests have reached their max, begin queuing requests, with logged in requests having priority above logged out requests
  3. Once a request has been queued for too long, it has a percentage chance to be rejected based upon how overloaded the entire system is.

When a server experiences more traffic than it can handle, this has the effect of keeping latency low for logged in users, while rejecting just enough requests from logged out users to keep the service from being overloaded.

Below are benchmarks showing a system at 100% capacity and 200% capacity in a few different configurations. The 200% capacity is shown to highlight an extreme case. I used hey to simulate the bot traffic:

hey -z 1m -c 10 "http://localhost:3000/rowan/demo/issues?state=open&type=all&labels=&milestone=0&project=0&assignee=0&poster=0&q=fix"

The concurrency of 10 was chosen from experiments where my local server began to experience higher latency.

Results

Method Concurrency p95 latency Successful RPS Requests Dropped
QoS Off 10 0.2960s 44 rps 0%
QoS Off 20 0.5667s 44 rps 0%
QoS On 20 0.4409s 48 rps 10%
QoS On 50% Logged In* 10 0.3891s 33 rps 7%
QoS On 50% Logged Out* 10 2.0388s 13 rps 6%

Logged in users were given the additional parameter -H "Cookie: i_like_gitea=<session>.

Tests with * were run at the same time, representing a workload with mixed logged in & logged out users. Results are separated to show prioritization, and how logged in users experience a 100ms latency increase under load, compared to the 1.6 seconds logged out users see.

@GiteaBot GiteaBot added the lgtm/need 2 This PR needs two approvals by maintainers to be considered for merging. label Mar 20, 2025
@github-actions github-actions bot added modifies/go Pull requests that update Go code modifies/dependencies docs-update-needed The document needs to be updated synchronously labels Mar 20, 2025
@bohde bohde force-pushed the rb/request-qos branch 3 times, most recently from f3096c1 to 6c499a9 Compare March 20, 2025 18:14
@wxiaoguang
Copy link
Contributor

Results ....

TBH, according to your test result, I do not see it is really useful .......

Copy link
Member

@a1012112796 a1012112796 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think at first step, just distinguish between login and not is enough. and looks it can be added for the api router also.

@bohde
Copy link
Contributor Author

bohde commented Mar 21, 2025

TBH, according to your test result, I do not see it is really useful .......

We've been running this patch for awhile, and while it takes a bit of tuning to get the right settings for a given server it has alleviated a lot of outage concerns from waves of scrapers that don't respect robots.txt.

I think at first step, just distinguish between login and not is enough. and looks it can be added for the api router also.

This was in my initial version we ran, but then users who are attempting to login can still experience lower priority traffic. Since the major source of traffic for public code hosting are scrapers trying to download content, deprioritizing those routes mitigates that concern.

@wxiaoguang
Copy link
Contributor

TBH, according to your test result, I do not see it is really useful .......

We've been running this patch for awhile, and while it takes a bit of tuning to get the right settings for a given server it has alleviated a lot of outage concerns from waves of scrapers that don't respect robots.txt.

So the original intention is to fight with crawlers/spiders/robots?

@bohde
Copy link
Contributor Author

bohde commented Mar 21, 2025

TBH, according to your test result, I do not see it is really useful .......

We've been running this patch for awhile, and while it takes a bit of tuning to get the right settings for a given server it has alleviated a lot of outage concerns from waves of scrapers that don't respect robots.txt.

So the original intention is to fight with crawlers/spiders/robots?

Yes, I mentioned this in my description

This adds a middleware for overload protection, that is intended to help protect against malicious scrapers

@wxiaoguang
Copy link
Contributor

wxiaoguang commented Mar 21, 2025

Yes, I mentioned this in my description

Sorry, missed that part. The "perform the following" part and "result" part attracted my attention .....

If the intention is to "protect against malicious scrapers", I think the parts := []string{ could be improved, a similar function like ParseGiteaSiteURL could help the route path handling. And I think we need some tests to cover the new middleware's behavior.


Or like https://github.com/go-gitea/gitea/pull/33951/files#r2006668195 said, mark the routes with priority

@wxiaoguang
Copy link
Contributor

I think I have some ideas about how to handle these "route paths" clearly. Could I push some commits into your branch?

@bohde
Copy link
Contributor Author

bohde commented Mar 21, 2025

I think I have some ideas about how to handle these "route paths" clearly. Could I push some commits into your branch?

Could you send a PR to my branch, or sketch it out in another commit? This would prevent merge conflicts on my branch

@wxiaoguang
Copy link
Contributor

wxiaoguang commented Mar 21, 2025

sketch it out in another commit

Sorry, don't quite understand what it exactly means ....

Could you send a PR to my branch

We can use chi router's "RoutePattern", and make code testable.

@wxiaoguang wxiaoguang added the type/feature Completely new functionality. Can only be merged if feature freeze is not active. label Mar 21, 2025
@wxiaoguang wxiaoguang added this to the 1.24.0 milestone Mar 21, 2025
@bohde
Copy link
Contributor Author

bohde commented Apr 7, 2025

update: Close since there is no interest after 2 weeks

Just getting back to this now as I was dealing with other priorities. I could incorporate the above changes, but the near complete rewrite of my PR makes it difficult to isolate the changes you are asking, and makes it incompatible with the production implementation we are running. This makes it difficult to test these changes against the live traffic we are seeing to ensure they still perform well.

This adds a middleware for overload protection, that is intended to help protect against malicious scrapers. It does this by via  [`codel`](https://github.com/bohde/codel), which will perform the following:

1. Limit the number of in-flight requests to some user defined max
2. When in-flight requests have reached their max, begin queuing requests, with logged in requests having priority above logged out requests
3. Once a request has been queued for too long, it has a percentage chance to be rejected based upon how overloaded the entire system is.

When a server experiences more traffic than it  can handle, this has the effect of keeping latency low for logged in users, while rejecting just enough requests from logged out users to keep the service from being overloaded.

Below are benchmarks showing a system at 100% capacity and 200% capacity in a few different configurations. The 200% capacity is shown to highlight an extreme case. I used [hey](https://github.com/rakyll/hey) to simulate the bot traffic:

```
hey -z 1m -c 10 "http://localhost:3000/rowan/demo/issues?state=open&type=all&labels=&milestone=0&project=0&assignee=0&poster=0&q=fix"
```

The concurrency of 10 was chosen from experiments where my local server began to experience higher latency.

Results

| Method | Concurrency |  p95 latency | Successful RPS | Requests Dropped |
|--------|--------|--------|--------|--------|
| QoS Off | 10 | 0.2960s | 44 rps | 0% |
| QoS Off | 20 | 0.5667s | 44 rps | 0%|
| QoS On | 20 |  0.4409s | 48 rps | 10% |
| QoS On 50% Logged In* | 10 | 0.3891s | 33 rps | 7% |
| QoS On 50% Logged Out* | 10  | 2.0388s | 13 rps | 6% |

Logged in users were given the additional parameter ` -H "Cookie: i_like_gitea=<session>`.

Tests with `*` were run at the same time, representing a workload with mixed logged in & logged out users. Results are separated to show prioritization, and how logged in users experience a 100ms latency increase under load, compared to the 1.6 seconds logged out users see.
@bohde bohde force-pushed the rb/request-qos branch 2 times, most recently from 351be38 to 7cbcef3 Compare April 7, 2025 22:57
@bohde
Copy link
Contributor Author

bohde commented Apr 7, 2025

I applied review feedback, and synthesized into something that is easily backportable to 1.23 by avoiding APIs added in main. @wxiaoguang's PR did miss some important endpoints we sometimes see heavy traffic on since it didn't check every possible delimited portion of the subpath against the string in my original implementation. However, because the RoutePattern can be pulled directly in this middleware using @wxiaoguang's method, this can all be simplified to the following priority scheme:

Logged In Repo Context Priority
Yes - High
No Yes Low
No No Default

This allows key flows such as login and explore to still be prioritized well, with only the repo specific endpoints likely to be throttled. In my experience, this catches the vast majority of what scrapers are targeting.

@bohde bohde requested review from wxiaoguang and a1012112796 April 7, 2025 23:18
a1012112796 added a commit to a1012112796/gitea that referenced this pull request Apr 8, 2025
a early draft to try split registerWebRoutes, it's too long
now. maybe this change will be usefull for
go-gitea#1872 ,
go-gitea#33951 ...

Signed-off-by: a1012112796 <1012112796@qq.com>
@wxiaoguang
Copy link
Contributor

And, one more thing, I just found this your new commit: if the client requests HTML, render an HTML 503 Service Unavailable page : 5078f67 , it is almost my "code" to render the template from another PR: if you complain I copied your code, to be honest : have your new commit included my authorship? Could I say or complain that you copied my code?

These are more appropriate for slower hardware
@bohde
Copy link
Contributor Author

bohde commented Apr 11, 2025

Asking @go-gitea/maintainers to look at this. I think it has addressed all feedback, and other potential proposals do not address the same use cases as this. This is a general purpose load shedder that will help prevent a server from crashing in any overload scenario, that prioritizes traffic from logged users and deprioritizes traffic that is likely from a crawler. While it certainly helps a server that experiences significant crawler traffic, it also protects servers in a general denial of service cases, either from heavy usage from logged in users or targeted attacks.

I've been running versions of this a production public server for a couple months now, and it has significantly improved the experience for logged in users.

The conversation has gotten quite long at this point, so I'll do my best to summarize the feedback and the status of it:

Copy link
Member

@denyskon denyskon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've read through this PR and the conversation, and I think this feature is more than complete enough for the goal it's trying to achieve. Further refinements could be done later, but it's crucial that we can ship this in 1.24, as many servers, including gitea.com, experience problems with high load recently.

@GiteaBot GiteaBot added lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. and removed lgtm/need 1 This PR needs approval from one additional maintainer to be merged. labels Apr 11, 2025
@bohde
Copy link
Contributor Author

bohde commented Apr 12, 2025

Documentation PR is at https://gitea.com/gitea/docs/pulls/208, and the app.example.ini is updated to match in 6fb0021

@delvh delvh added reviewed/wait-merge This pull request is part of the merge queue. It will be merged soon. and removed docs-update-needed The document needs to be updated synchronously labels Apr 13, 2025
@github-actions github-actions bot added the docs-update-needed The document needs to be updated synchronously label Apr 13, 2025
@delvh
Copy link
Member

delvh commented Apr 13, 2025

Since this PR seems to have some discussion but is ready otherwise, let's wait a day to see if anything changes.
If there's none, I'll merge this PR tomorrow.

@delvh delvh merged commit c57304a into go-gitea:main Apr 14, 2025
26 checks passed
@GiteaBot GiteaBot removed the reviewed/wait-merge This pull request is part of the merge queue. It will be merged soon. label Apr 14, 2025
@delvh delvh removed the docs-update-needed The document needs to be updated synchronously label Apr 14, 2025
zjjhot added a commit to zjjhot/gitea that referenced this pull request Apr 15, 2025
* giteaofficial/main:
  bump vite to 6.2.6 (go-gitea#34202)
  feat: add riscv64 support (go-gitea#34199)
  Update RepoContributors.vue (go-gitea#34194)
  Add middleware for request prioritization (go-gitea#33951)
  Update protected_branch.tmpl (go-gitea#34193)
  Fix package upload temp path (go-gitea#34196)
  Fix bug when migrating repository (go-gitea#34182)
chris-sanders pushed a commit to chris-sanders/argocd that referenced this pull request Jun 23, 2025
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [gitea/gitea](https://github.com/go-gitea/gitea) | minor | `1.22.6` -> `1.24.2` |

---

### Release Notes

<details>
<summary>go-gitea/gitea (gitea/gitea)</summary>

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

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.24.1...v1.24.2)

This is a quick release to resolve docker images push bug

- BUGFIXES
  - Fix container range bug ([#&#8203;34795](https://github.com/go-gitea/gitea/issues/34795)) ([#&#8203;34796](https://github.com/go-gitea/gitea/issues/34796))
  - Upgrade chi to v5.2.2 ([#&#8203;34798](https://github.com/go-gitea/gitea/issues/34798)) ([#&#8203;34799](https://github.com/go-gitea/gitea/issues/34799))
- BUILD
  - Bump poetry feature to new url for dev container ([#&#8203;34787](https://github.com/go-gitea/gitea/issues/34787)) ([#&#8203;34790](https://github.com/go-gitea/gitea/issues/34790))

Instances on **[Gitea Cloud](https://cloud.gitea.com)** will be automatically upgraded to this version during the specified maintenance window.

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

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.24.0...v1.24.1)

- ENHANCEMENTS

  - Improve alignment of commit status icon on commit page ([#&#8203;34750](https://github.com/go-gitea/gitea/issues/34750)) ([#&#8203;34757](https://github.com/go-gitea/gitea/issues/34757))
  - Support title and body query parameters for new PRs ([#&#8203;34537](https://github.com/go-gitea/gitea/issues/34537)) ([#&#8203;34752](https://github.com/go-gitea/gitea/issues/34752))

- BUGFIXES
  - When using rules to delete packages, remove unclean bugs ([#&#8203;34632](https://github.com/go-gitea/gitea/issues/34632)) ([#&#8203;34761](https://github.com/go-gitea/gitea/issues/34761))
  - Fix ghost user in feeds when pushing in an actions, it should be gitea-actions ([#&#8203;34703](https://github.com/go-gitea/gitea/issues/34703)) ([#&#8203;34756](https://github.com/go-gitea/gitea/issues/34756))
  - Prevent double markdown link brackets when pasting URL ([#&#8203;34745](https://github.com/go-gitea/gitea/issues/34745)) ([#&#8203;34748](https://github.com/go-gitea/gitea/issues/34748))
  - Prevent duplicate form submissions when creating forks ([#&#8203;34714](https://github.com/go-gitea/gitea/issues/34714)) ([#&#8203;34735](https://github.com/go-gitea/gitea/issues/34735))
  - Fix markdown wrap ([#&#8203;34697](https://github.com/go-gitea/gitea/issues/34697)) ([#&#8203;34702](https://github.com/go-gitea/gitea/issues/34702))
  - Fix pull requests API convert panic when head repository is deleted. ([#&#8203;34685](https://github.com/go-gitea/gitea/issues/34685)) ([#&#8203;34687](https://github.com/go-gitea/gitea/issues/34687))
  - Fix commit message rendering and some UI problems ([#&#8203;34680](https://github.com/go-gitea/gitea/issues/34680)) ([#&#8203;34683](https://github.com/go-gitea/gitea/issues/34683))
  - Fix container range bug ([#&#8203;34725](https://github.com/go-gitea/gitea/issues/34725)) ([#&#8203;34732](https://github.com/go-gitea/gitea/issues/34732))
  - Fix incorrect cli default values ([#&#8203;34765](https://github.com/go-gitea/gitea/issues/34765)) ([#&#8203;34766](https://github.com/go-gitea/gitea/issues/34766))
  - Fix dropdown filter ([#&#8203;34708](https://github.com/go-gitea/gitea/issues/34708)) ([#&#8203;34711](https://github.com/go-gitea/gitea/issues/34711))
  - Hide href attribute of a tag if there is no target\_url ([#&#8203;34556](https://github.com/go-gitea/gitea/issues/34556)) ([#&#8203;34684](https://github.com/go-gitea/gitea/issues/34684))
  - Fix tag target ([#&#8203;34781](https://github.com/go-gitea/gitea/issues/34781)) [#&#8203;34783](https://github.com/go-gitea/gitea/issues/34783)

Instances on **[Gitea Cloud](https://cloud.gitea.com)** will be automatically upgraded to this version during the specified maintenance window.

### [`v1.24.0`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1240---2025-05-26)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.8...v1.24.0)

- BREAKING
  - Make Gitea always use its internal config, ignore `/etc/gitconfig` ([#&#8203;33076](https://github.com/go-gitea/gitea/issues/33076))
  - Improve log format ([#&#8203;33814](https://github.com/go-gitea/gitea/issues/33814))
  - Fix markdown render behaviors ([#&#8203;34122](https://github.com/go-gitea/gitea/issues/34122))
  - Add package version api endpoints ([#&#8203;34173](https://github.com/go-gitea/gitea/issues/34173))

- FEATURES
  - Enforce two-factor auth (2FA: TOTP or WebAuthn) ([#&#8203;34187](https://github.com/go-gitea/gitea/issues/34187))
  - Add fullscreen mode as a more efficient operation way to view projects ([#&#8203;34081](https://github.com/go-gitea/gitea/issues/34081))
  - Add anonymous access support for private/unlisted repositories ([#&#8203;34051](https://github.com/go-gitea/gitea/issues/34051))
  - Support public code/issue access for private repositories ([#&#8203;33127](https://github.com/go-gitea/gitea/issues/33127))
  - Add middleware for request prioritization ([#&#8203;33951](https://github.com/go-gitea/gitea/issues/33951))
  - Add cli flags LDAP group configuration ([#&#8203;33933](https://github.com/go-gitea/gitea/issues/33933))
  - Add file tree to file view page ([#&#8203;32721](https://github.com/go-gitea/gitea/issues/32721))
  - Add material icons for file list ([#&#8203;33837](https://github.com/go-gitea/gitea/issues/33837))
  - Artifacts download api for artifact actions v4 ([#&#8203;33510](https://github.com/go-gitea/gitea/issues/33510))
  - Support choose email when creating a commit via web UI ([#&#8203;33432](https://github.com/go-gitea/gitea/issues/33432))
  - Add basic auth support to rss/atom feeds ([#&#8203;33371](https://github.com/go-gitea/gitea/issues/33371))
  - Add sorting by exclusive labels (issue priority) ([#&#8203;33206](https://github.com/go-gitea/gitea/issues/33206))
  - Add sub issue list support ([#&#8203;32940](https://github.com/go-gitea/gitea/issues/32940))
  - Private README.md for organization ([#&#8203;32872](https://github.com/go-gitea/gitea/issues/32872))
  - Email option to embed images as base64 instead of link ([#&#8203;32061](https://github.com/go-gitea/gitea/issues/32061))
  - Option to delay conflict checking of old pull requests until page view ([#&#8203;27779](https://github.com/go-gitea/gitea/issues/27779))
  - Worktime tracking for the organization level ([#&#8203;19808](https://github.com/go-gitea/gitea/issues/19808))

- PERFORMANCE
  - Add cache for common package queries ([#&#8203;22491](https://github.com/go-gitea/gitea/issues/22491))
  - Move issue pin to an standalone table for querying performance ([#&#8203;33452](https://github.com/go-gitea/gitea/issues/33452))
  - Improve commits list performance to reduce unnecessary database queries ([#&#8203;33528](https://github.com/go-gitea/gitea/issues/33528))
  - Optimize total count of feed when loading activities in user dashboard. ([#&#8203;33841](https://github.com/go-gitea/gitea/issues/33841))
  - Optimize heatmap query ([#&#8203;33853](https://github.com/go-gitea/gitea/issues/33853))
  - Only use prev and next buttons for pagination on user dashboard ([#&#8203;33981](https://github.com/go-gitea/gitea/issues/33981))
  - Improve pull request list API performance ([#&#8203;34052](https://github.com/go-gitea/gitea/issues/34052))
  - Cache GPG keys, emails and users when list commits ([#&#8203;34086](https://github.com/go-gitea/gitea/issues/34086))
  - Refactor Git Attribute & performance optimization ([#&#8203;34154](https://github.com/go-gitea/gitea/issues/34154))
  - Performance optimization for tags synchronization ([#&#8203;34355](https://github.com/go-gitea/gitea/issues/34355)) [#&#8203;34522](https://github.com/go-gitea/gitea/issues/34522)

- ENHANCEMENTS
  - Code
    - Display when a release attachment was uploaded ([#&#8203;34261](https://github.com/go-gitea/gitea/issues/34261))
    - Support creating relative link to raw path in markdown ([#&#8203;34105](https://github.com/go-gitea/gitea/issues/34105))
    - Improve code block readability and isolate copy button ([#&#8203;34009](https://github.com/go-gitea/gitea/issues/34009))
    - Improve repository commit view ([#&#8203;33877](https://github.com/go-gitea/gitea/issues/33877))
    - Full-file syntax highlighting for diff pages ([#&#8203;33766](https://github.com/go-gitea/gitea/issues/33766))
    - Clone repository with Tea CLI ([#&#8203;33725](https://github.com/go-gitea/gitea/issues/33725))
    - Improve sync fork behavior ([#&#8203;33319](https://github.com/go-gitea/gitea/issues/33319))
    - Make git clone URL could use current signed-in user ([#&#8203;33091](https://github.com/go-gitea/gitea/issues/33091))
    - Add submodule diff links ([#&#8203;33097](https://github.com/go-gitea/gitea/issues/33097))
    - Link to tree views of submodules if possible ([#&#8203;33424](https://github.com/go-gitea/gitea/issues/33424))
    - Only keep popular licenses ([#&#8203;33832](https://github.com/go-gitea/gitea/issues/33832))
    - De-emphasize signed commits ([#&#8203;31160](https://github.com/go-gitea/gitea/issues/31160))

  - Actions
    - Add flat-square action badge style ([#&#8203;34062](https://github.com/go-gitea/gitea/issues/34062))
    - Update action status badge layout ([#&#8203;34018](https://github.com/go-gitea/gitea/issues/34018))
    - Download actions job logs from API ([#&#8203;33858](https://github.com/go-gitea/gitea/issues/33858))
    - Always show the "rerun" button for action jobs ([#&#8203;33692](https://github.com/go-gitea/gitea/issues/33692))
    - Add auto-expanding running actions step ([#&#8203;30058](https://github.com/go-gitea/gitea/issues/30058))
    - Update status check for all supported on.pull\_request.types in Gitea ([#&#8203;33117](https://github.com/go-gitea/gitea/issues/33117))
    - Workflow\_dispatch use workflow from trigger branch ([#&#8203;33098](https://github.com/go-gitea/gitea/issues/33098))
    - Add action auto-scroll ([#&#8203;30057](https://github.com/go-gitea/gitea/issues/30057))
    - Add workflow\_job webhook ([#&#8203;33694](https://github.com/go-gitea/gitea/issues/33694))
    - Add a button editing action secret ([#&#8203;34462](https://github.com/go-gitea/gitea/issues/34462))

  - Pull Request
    - Auto expand "New PR" form ([#&#8203;33971](https://github.com/go-gitea/gitea/issues/33971))
    - Mark parent directory as viewed when all files are viewed ([#&#8203;33958](https://github.com/go-gitea/gitea/issues/33958))
    - Show info about maintainers are allowed to edit a PR ([#&#8203;33738](https://github.com/go-gitea/gitea/issues/33738))
    - Automerge supports deleting branch automatically after merging ([#&#8203;32343](https://github.com/go-gitea/gitea/issues/32343))
    - Add additional command hints for PowerShell & CMD ([#&#8203;33548](https://github.com/go-gitea/gitea/issues/33548))

  - Issues
    - Allow filtering issues by any assignee ([#&#8203;33343](https://github.com/go-gitea/gitea/issues/33343))
    - Show warning on navigation if currently editing comment or title ([#&#8203;32920](https://github.com/go-gitea/gitea/issues/32920))
    - Make tracked time representation display as hours ([#&#8203;33315](https://github.com/go-gitea/gitea/issues/33315))
    - Add No Results Prompt Message on Issue List Page ([#&#8203;33699](https://github.com/go-gitea/gitea/issues/33699))
    - Add sort option recentclose for issues and pulls ([#&#8203;34525](https://github.com/go-gitea/gitea/issues/34525)) [#&#8203;34539](https://github.com/go-gitea/gitea/issues/34539)

  - Packages
    - Link to nuget dependencies ([#&#8203;26554](https://github.com/go-gitea/gitea/issues/26554))
    - Add composor source field ([#&#8203;33502](https://github.com/go-gitea/gitea/issues/33502))

  - Administration
    - Improve navbar: add "admin" tip, add "active" style ([#&#8203;32927](https://github.com/go-gitea/gitea/issues/32927))
    - Add a option "--user-type bot" to admin user create, improve role display ([#&#8203;27885](https://github.com/go-gitea/gitea/issues/27885))
    - Improve admin user view page ([#&#8203;33735](https://github.com/go-gitea/gitea/issues/33735))
    - Support performance trace ([#&#8203;32973](https://github.com/go-gitea/gitea/issues/32973))
    - Change pprof labels to be prometheus compatible ([#&#8203;32865](https://github.com/go-gitea/gitea/issues/32865))
    - Allow admins and org owners to change org member public status ([#&#8203;28294](https://github.com/go-gitea/gitea/issues/28294))
    - Optimize the installation page ([#&#8203;32994](https://github.com/go-gitea/gitea/issues/32994))
    - Make public URL generation configurable ([#&#8203;34250](https://github.com/go-gitea/gitea/issues/34250))
    - Add a --fullname arg to gitea admin user create. ([#&#8203;34241](https://github.com/go-gitea/gitea/issues/34241))

  - Others
    - Improve oauth2 error handling ([#&#8203;33969](https://github.com/go-gitea/gitea/issues/33969))
    - Fail mirroring more gracefully ([#&#8203;34002](https://github.com/go-gitea/gitea/issues/34002))
    - Align User Details Page Header Layout with Design Specifications ([#&#8203;34192](https://github.com/go-gitea/gitea/issues/34192))
    - Webhook add X-Gitea-Hook-Installation-Target-Type Header ([#&#8203;33752](https://github.com/go-gitea/gitea/issues/33752))
    - Optimize the dashboard ([#&#8203;32990](https://github.com/go-gitea/gitea/issues/32990))
    - Improve button layout on small screens ([#&#8203;33633](https://github.com/go-gitea/gitea/issues/33633))
    - Add cropping support when modifying the user/org/repo avatar ([#&#8203;33498](https://github.com/go-gitea/gitea/issues/33498))
    - Make ROOT\_URL support using request Host header ([#&#8203;32564](https://github.com/go-gitea/gitea/issues/32564))
    - Add `show more` organizations icon in user's profile ([#&#8203;32986](https://github.com/go-gitea/gitea/issues/32986))
    - Introduce `--page-space-bottom` at 64px ([#&#8203;30692](https://github.com/go-gitea/gitea/issues/30692))
    - Improve theme display ([#&#8203;30671](https://github.com/go-gitea/gitea/issues/30671))
    - Add alphabetical project sorting ([#&#8203;33504](https://github.com/go-gitea/gitea/issues/33504))
    - Add global lock for migrations to make upgrade more safe with multiple replications ([#&#8203;33706](https://github.com/go-gitea/gitea/issues/33706))
    - Add descriptions for private repo public access settings and improve the UI ([#&#8203;34057](https://github.com/go-gitea/gitea/issues/34057))

- API
  - Actions Runner rest api ([#&#8203;33873](https://github.com/go-gitea/gitea/issues/33873))
  - Inclusion of rename organization api ([#&#8203;33303](https://github.com/go-gitea/gitea/issues/33303))
  - Add API to support link package to repository and unlink it ([#&#8203;33481](https://github.com/go-gitea/gitea/issues/33481))
  - Add API endpoint to request contents of multiple files simultaniously ([#&#8203;34139](https://github.com/go-gitea/gitea/issues/34139))
  - Actions artifacts API list/download check status upload confirmed ([#&#8203;34273](https://github.com/go-gitea/gitea/issues/34273))
  - Add API routes to lock and unlock issues ([#&#8203;34165](https://github.com/go-gitea/gitea/issues/34165))
  - Fix some user name usages ([#&#8203;33689](https://github.com/go-gitea/gitea/issues/33689))
  - Allow filtering /repos/{owner}/{repo}/pulls by target base branch queryparam ([#&#8203;33684](https://github.com/go-gitea/gitea/issues/33684))
  - Improve swagger generation ([#&#8203;33664](https://github.com/go-gitea/gitea/issues/33664))
  - Support Ephemeral action runners ([#&#8203;33570](https://github.com/go-gitea/gitea/issues/33570))
  - Support workflow event dispatch via API ([#&#8203;33545](https://github.com/go-gitea/gitea/issues/33545))
  - Support workflow event dispatch via API ([#&#8203;32059](https://github.com/go-gitea/gitea/issues/32059))
  - Added Description Field for Secrets and Variables  ([#&#8203;33526](https://github.com/go-gitea/gitea/issues/33526))
  - Reject star-related requests if stars are disabled ([#&#8203;33208](https://github.com/go-gitea/gitea/issues/33208))
  - Let API create and edit system webhooks, attempt 2 ([#&#8203;33180](https://github.com/go-gitea/gitea/issues/33180))
  - Use `Project-URL` metadata field to get a PyPI package's homepage URL ([#&#8203;33089](https://github.com/go-gitea/gitea/issues/33089))
  - Add `last_committer_date` and `last_author_date` for file contents API ([#&#8203;32921](https://github.com/go-gitea/gitea/issues/32921))

- REFACTORS
  - Remove context from git struct ([#&#8203;33793](https://github.com/go-gitea/gitea/issues/33793))
  - Refactor admin/common.ts ([#&#8203;33788](https://github.com/go-gitea/gitea/issues/33788))
  - Refactor repo-settings.ts ([#&#8203;33785](https://github.com/go-gitea/gitea/issues/33785))
  - Refactor repo-issue.ts ([#&#8203;33784](https://github.com/go-gitea/gitea/issues/33784))
  - Small refactor to reduce unnecessary database queries and remove duplicated functions ([#&#8203;33779](https://github.com/go-gitea/gitea/issues/33779))
  - Refactor initRepoBranchTagSelector to use new init framework ([#&#8203;33776](https://github.com/go-gitea/gitea/issues/33776))
  - Refactor buttons to use new init framework ([#&#8203;33774](https://github.com/go-gitea/gitea/issues/33774))
  - Refactor markup and pdf-viewer to use new init framework ([#&#8203;33772](https://github.com/go-gitea/gitea/issues/33772))
  - Refactor error system ([#&#8203;33771](https://github.com/go-gitea/gitea/issues/33771))
  - Refactor mail code ([#&#8203;33768](https://github.com/go-gitea/gitea/issues/33768))
  - Update TypeScript types ([#&#8203;33799](https://github.com/go-gitea/gitea/issues/33799))
  - Refactor older tests to use testify ([#&#8203;33140](https://github.com/go-gitea/gitea/issues/33140))
  - Move notifywatch to service layer ([#&#8203;33825](https://github.com/go-gitea/gitea/issues/33825))
  - Decouple context from repository related structs ([#&#8203;33823](https://github.com/go-gitea/gitea/issues/33823))
  - Remove context from mail struct ([#&#8203;33811](https://github.com/go-gitea/gitea/issues/33811))
  - Refactor dropdown ellipsis ([#&#8203;34123](https://github.com/go-gitea/gitea/issues/34123))
  - Refactor functions to reduce repopath expose ([#&#8203;33892](https://github.com/go-gitea/gitea/issues/33892))
  - Refactor repo-diff.ts ([#&#8203;33746](https://github.com/go-gitea/gitea/issues/33746))
  - Refactor web route handler ([#&#8203;33488](https://github.com/go-gitea/gitea/issues/33488))
  - Refactor user & avatar ([#&#8203;33433](https://github.com/go-gitea/gitea/issues/33433))
  - Refactor user package ([#&#8203;33423](https://github.com/go-gitea/gitea/issues/33423))
  - Refactor decouple context from migration structs ([#&#8203;33399](https://github.com/go-gitea/gitea/issues/33399))
  - Refactor context flash msg and global variables ([#&#8203;33375](https://github.com/go-gitea/gitea/issues/33375))
  - Refactor response writer & access logger ([#&#8203;33323](https://github.com/go-gitea/gitea/issues/33323))
  - Refactor ref type ([#&#8203;33242](https://github.com/go-gitea/gitea/issues/33242))
  - Refactor context repository ([#&#8203;33202](https://github.com/go-gitea/gitea/issues/33202))
  - Refactor legacy JS ([#&#8203;33115](https://github.com/go-gitea/gitea/issues/33115))
  - Refactor legacy line-number and scroll code ([#&#8203;33094](https://github.com/go-gitea/gitea/issues/33094))
  - Refactor env var related code ([#&#8203;33075](https://github.com/go-gitea/gitea/issues/33075))
  - Move SetMerged to service layer ([#&#8203;33045](https://github.com/go-gitea/gitea/issues/33045))
  - Merge updatecommentattachment functions ([#&#8203;33044](https://github.com/go-gitea/gitea/issues/33044))
  - Refactor pull-request compare\&create page ([#&#8203;33071](https://github.com/go-gitea/gitea/issues/33071))
  - Refactor repo-new.ts ([#&#8203;33070](https://github.com/go-gitea/gitea/issues/33070))
  - Refactor pagination ([#&#8203;33037](https://github.com/go-gitea/gitea/issues/33037))
  - Refactor tests ([#&#8203;33021](https://github.com/go-gitea/gitea/issues/33021))
  - Refactor markup render to fix various path problems ([#&#8203;34114](https://github.com/go-gitea/gitea/issues/34114))
  - Refactor Branch struct in package modules/git ([#&#8203;33980](https://github.com/go-gitea/gitea/issues/33980))
  - Don't create duplicated functions for code repositories and wiki repositories ([#&#8203;33924](https://github.com/go-gitea/gitea/issues/33924))
  - Move git references checking to gitrepo packages to reduce expose of repository path ([#&#8203;33891](https://github.com/go-gitea/gitea/issues/33891))
  - Refactor cache-control ([#&#8203;33861](https://github.com/go-gitea/gitea/issues/33861))
  - Decouple diff stats query from actual diffing ([#&#8203;33810](https://github.com/go-gitea/gitea/issues/33810))
  - Move part of updating protected branch logic to service layer ([#&#8203;33742](https://github.com/go-gitea/gitea/issues/33742))
  - Decouple Batch from git.Repository to simplify usage without requiring the creation of a Repository struct. ([#&#8203;34001](https://github.com/go-gitea/gitea/issues/34001))
  - Refactor tmpl and blob\_excerpt ([#&#8203;32967](https://github.com/go-gitea/gitea/issues/32967))
  - Refactor template & test related code ([#&#8203;32938](https://github.com/go-gitea/gitea/issues/32938))
  - Refactor db package and remove unnecessary `DumpTables` ([#&#8203;32930](https://github.com/go-gitea/gitea/issues/32930))
  - Refactor pprof labels and process desc ([#&#8203;32909](https://github.com/go-gitea/gitea/issues/32909))
  - Refactor repo-projects.ts ([#&#8203;32892](https://github.com/go-gitea/gitea/issues/32892))
  - Refactor getpatch/getdiff functions and remove unnecessary fallback ([#&#8203;32817](https://github.com/go-gitea/gitea/issues/32817))
  - Uniform all temporary directories and allow customizing temp path ([#&#8203;32352](https://github.com/go-gitea/gitea/issues/32352))
  - Remove context from retry downloader ([#&#8203;33871](https://github.com/go-gitea/gitea/issues/33871))
  - Refactor global init code and add more comments ([#&#8203;33755](https://github.com/go-gitea/gitea/issues/33755))
  - Remove some unnecessary template helpers ([#&#8203;33069](https://github.com/go-gitea/gitea/issues/33069))
  - Move and rename UpdateRepository ([#&#8203;34136](https://github.com/go-gitea/gitea/issues/34136))
  - Move hooks function to gitrepo and reduce expose repopath ([#&#8203;33890](https://github.com/go-gitea/gitea/issues/33890))
  - Add abstraction layer to delete repository from disk ([#&#8203;33879](https://github.com/go-gitea/gitea/issues/33879))
  - Add abstraction layer to check if the repository exists on disk ([#&#8203;33874](https://github.com/go-gitea/gitea/issues/33874))
  - Move ParseCommitWithSSHSignature to service layer ([#&#8203;34087](https://github.com/go-gitea/gitea/issues/34087))
  - Move duplicated functions ([#&#8203;33977](https://github.com/go-gitea/gitea/issues/33977))
  - Extract code to their own functions for push update ([#&#8203;33944](https://github.com/go-gitea/gitea/issues/33944))
  - Move gitgraph from modules to services layer ([#&#8203;33527](https://github.com/go-gitea/gitea/issues/33527))
  - Move commits signature and verify functions to service layers ([#&#8203;33605](https://github.com/go-gitea/gitea/issues/33605))
  - Use `CloseIssue` and `ReopenIssue` instead of `ChangeStatus` ([#&#8203;32467](https://github.com/go-gitea/gitea/issues/32467))
  - Refactor arch route handlers ([#&#8203;32993](https://github.com/go-gitea/gitea/issues/32993))
  - Refactor "string truncate" ([#&#8203;32984](https://github.com/go-gitea/gitea/issues/32984))
  - Refactor arch route handlers ([#&#8203;32972](https://github.com/go-gitea/gitea/issues/32972))
  - Clarify path param naming ([#&#8203;32969](https://github.com/go-gitea/gitea/issues/32969))
  - Refactor request context ([#&#8203;32956](https://github.com/go-gitea/gitea/issues/32956))
  - Move some errors to their own sub packages ([#&#8203;32880](https://github.com/go-gitea/gitea/issues/32880))
  - Move RepoTransfer from models to models/repo sub package ([#&#8203;32506](https://github.com/go-gitea/gitea/issues/32506))
  - Move delete deploy keys into service layer ([#&#8203;32201](https://github.com/go-gitea/gitea/issues/32201))
  - Refactor webhook events ([#&#8203;33337](https://github.com/go-gitea/gitea/issues/33337))
  - Move some Actions related functions from `routers` to `services` ([#&#8203;33280](https://github.com/go-gitea/gitea/issues/33280))
  - Refactor RefName ([#&#8203;33234](https://github.com/go-gitea/gitea/issues/33234))
  - Refactor context RefName and RepoAssignment ([#&#8203;33226](https://github.com/go-gitea/gitea/issues/33226))
  - Refactor repository transfer ([#&#8203;33211](https://github.com/go-gitea/gitea/issues/33211))
  - Refactor error system ([#&#8203;33626](https://github.com/go-gitea/gitea/issues/33626))
  - Refactor error system ([#&#8203;33610](https://github.com/go-gitea/gitea/issues/33610))
  - Refactor package (routes and error handling, npm peer dependency) ([#&#8203;33111](https://github.com/go-gitea/gitea/issues/33111))
  - Use test context in tests and new loop system in benchmarks ([#&#8203;33648](https://github.com/go-gitea/gitea/issues/33648))
  - Some small refactors ([#&#8203;33144](https://github.com/go-gitea/gitea/issues/33144))
  - Simplify context ref name ([#&#8203;33267](https://github.com/go-gitea/gitea/issues/33267))

- BUGFIXES
  - Fix some dropdown problems on the issue sidebar ([#&#8203;34308](https://github.com/go-gitea/gitea/issues/34308)) [#&#8203;34327](https://github.com/go-gitea/gitea/issues/34327)
  - Do not return archive download URLs in API if downloads are disabled ([#&#8203;34324](https://github.com/go-gitea/gitea/issues/34324)) [#&#8203;34338](https://github.com/go-gitea/gitea/issues/34338)
  - Fix LFS files being editable in web UI ([#&#8203;34356](https://github.com/go-gitea/gitea/issues/34356)) [#&#8203;34362](https://github.com/go-gitea/gitea/issues/34362)
  - Fix only text/\* being viewable in web UI ([#&#8203;34374](https://github.com/go-gitea/gitea/issues/34374)) [#&#8203;34378](https://github.com/go-gitea/gitea/issues/34378)
  - Fix LFS file not stored in LFS when uploaded/edited via API or web UI ([#&#8203;34367](https://github.com/go-gitea/gitea/issues/34367))
  - Grey out expired artifact on Artifacts list ([#&#8203;34314](https://github.com/go-gitea/gitea/issues/34314)) [#&#8203;34404](https://github.com/go-gitea/gitea/issues/34404)
  - Fix incorrect divergence cache after switching default branch ([#&#8203;34370](https://github.com/go-gitea/gitea/issues/34370)) [#&#8203;34406](https://github.com/go-gitea/gitea/issues/34406)
  - Refactor commit message rendering and fix bugs ([#&#8203;34412](https://github.com/go-gitea/gitea/issues/34412)) [#&#8203;34414](https://github.com/go-gitea/gitea/issues/34414)
  - Merge and tweak markup editor expander CSS ([#&#8203;34409](https://github.com/go-gitea/gitea/issues/34409)) [#&#8203;34415](https://github.com/go-gitea/gitea/issues/34415)
  - Fix GetUsersByEmails ([#&#8203;34423](https://github.com/go-gitea/gitea/issues/34423)) [#&#8203;34425](https://github.com/go-gitea/gitea/issues/34425)
  - Only git operations should update last changed of a repository ([#&#8203;34388](https://github.com/go-gitea/gitea/issues/34388)) [#&#8203;34427](https://github.com/go-gitea/gitea/issues/34427)
  - Fix comment textarea scroll issue in Firefox ([#&#8203;34438](https://github.com/go-gitea/gitea/issues/34438)) [#&#8203;34446](https://github.com/go-gitea/gitea/issues/34446)
  - Fix repo broken check ([#&#8203;34444](https://github.com/go-gitea/gitea/issues/34444)) [#&#8203;34452](https://github.com/go-gitea/gitea/issues/34452)
  - Fix remove org user failure on mssql ([#&#8203;34449](https://github.com/go-gitea/gitea/issues/34449)) [#&#8203;34453](https://github.com/go-gitea/gitea/issues/34453)
  - Fix Workflow run Not Found page ([#&#8203;34459](https://github.com/go-gitea/gitea/issues/34459)) [#&#8203;34466](https://github.com/go-gitea/gitea/issues/34466)
  - When updating comment, if the content is the same, just return and not update the database ([#&#8203;34422](https://github.com/go-gitea/gitea/issues/34422)) [#&#8203;34464](https://github.com/go-gitea/gitea/issues/34464)
  - Fix project board view ([#&#8203;34470](https://github.com/go-gitea/gitea/issues/34470)) [#&#8203;34475](https://github.com/go-gitea/gitea/issues/34475)
  - Fix get / delete runner to use consistent http 404 and 500 status ([#&#8203;34480](https://github.com/go-gitea/gitea/issues/34480)) [#&#8203;34488](https://github.com/go-gitea/gitea/issues/34488)
  - Fix url validation in webhook add/edit API ([#&#8203;34492](https://github.com/go-gitea/gitea/issues/34492)) [#&#8203;34496](https://github.com/go-gitea/gitea/issues/34496)
  - Fix edithook api can not update package, status and workflow\_job events ([#&#8203;34495](https://github.com/go-gitea/gitea/issues/34495)) [#&#8203;34499](https://github.com/go-gitea/gitea/issues/34499)
  - Fix ephemeral runner deletion ([#&#8203;34447](https://github.com/go-gitea/gitea/issues/34447)) [#&#8203;34513](https://github.com/go-gitea/gitea/issues/34513)
  - Don't display error log when .git-blame-ignore-revs doesn't exist ([#&#8203;34457](https://github.com/go-gitea/gitea/issues/34457))
  - Only allow admins to rename default/protected branches ([#&#8203;33276](https://github.com/go-gitea/gitea/issues/33276))
  - Improve "lock conversation" UI ([#&#8203;34207](https://github.com/go-gitea/gitea/issues/34207))
  - Fix incorrect file links ([#&#8203;34189](https://github.com/go-gitea/gitea/issues/34189))
  - Optimize Overflow Menu ([#&#8203;34183](https://github.com/go-gitea/gitea/issues/34183))
  - Check user/org repo limit instead of doer ([#&#8203;34147](https://github.com/go-gitea/gitea/issues/34147))
  - Make markdown render match GitHub's behavior ([#&#8203;34129](https://github.com/go-gitea/gitea/issues/34129))
  - Fix team permission ([#&#8203;34128](https://github.com/go-gitea/gitea/issues/34128))
  - Correctly handle submodule view and avoid throwing 500 error ([#&#8203;34121](https://github.com/go-gitea/gitea/issues/34121))
  - Fix users being able bypass limits with repo transfers ([#&#8203;34031](https://github.com/go-gitea/gitea/issues/34031))
  - Avoid creating unnecessary temporary cat file sub process ([#&#8203;33942](https://github.com/go-gitea/gitea/issues/33942))
  - Refactor organization menu ([#&#8203;33928](https://github.com/go-gitea/gitea/issues/33928))
  - Fix various Fomantic UI and htmx problems ([#&#8203;33851](https://github.com/go-gitea/gitea/issues/33851))
  - Fix 500 error when error occurred in migration page ([#&#8203;33256](https://github.com/go-gitea/gitea/issues/33256))
  - Validate that the tag doesn't exist when creating a tag via the web ([#&#8203;33241](https://github.com/go-gitea/gitea/issues/33241))
  - Add missed transaction on setmerged ([#&#8203;33079](https://github.com/go-gitea/gitea/issues/33079))
  - Rework create/fork/adopt/generate repository to make sure resources will be cleanup once failed ([#&#8203;31035](https://github.com/go-gitea/gitea/issues/31035))
  - Valid email address should only start with alphanumeric ([#&#8203;28174](https://github.com/go-gitea/gitea/issues/28174))
  - Fix webhook url ([#&#8203;34186](https://github.com/go-gitea/gitea/issues/34186))
  - Fix "toAbsoluteLocaleDate" test when system locale is not en-US ([#&#8203;33939](https://github.com/go-gitea/gitea/issues/33939))
  - Fix file name could not be searched if the file was not a text file when using the Bleve indexer ([#&#8203;33959](https://github.com/go-gitea/gitea/issues/33959))
  - Fix cannot delete runners via the modal dialog ([#&#8203;33895](https://github.com/go-gitea/gitea/issues/33895))
  - Fix unpin hint on the pinned pull requests ([#&#8203;33207](https://github.com/go-gitea/gitea/issues/33207))
  - Fix parentCommit invalid memory address or nil pointer dereference. ([#&#8203;33204](https://github.com/go-gitea/gitea/issues/33204))
  - Fix comment header padding ([#&#8203;33377](https://github.com/go-gitea/gitea/issues/33377))
  - Fix some migration and repo name problems ([#&#8203;33986](https://github.com/go-gitea/gitea/issues/33986))
  - Fix various trivial frontend problems ([#&#8203;34263](https://github.com/go-gitea/gitea/issues/34263))
  - Fix Set Email Preference dropdown and button placement ([#&#8203;34255](https://github.com/go-gitea/gitea/issues/34255))
  - Fix quoted replies incorrectly render user input as part of the quote ([#&#8203;34216](https://github.com/go-gitea/gitea/issues/34216))
  - Fix button alignments and remove unnecessary styles ([#&#8203;34206](https://github.com/go-gitea/gitea/issues/34206))
  - Restore form inputs on organization create error ([#&#8203;34201](https://github.com/go-gitea/gitea/issues/34201))
  - Try to fix ACME (3rd) ([#&#8203;33807](https://github.com/go-gitea/gitea/issues/33807))
  - Fix incorrect ref "blob" ([#&#8203;33240](https://github.com/go-gitea/gitea/issues/33240))
  - Fix dynamic content loading init problem ([#&#8203;33748](https://github.com/go-gitea/gitea/issues/33748))
  - Fix git empty check and HEAD request ([#&#8203;33690](https://github.com/go-gitea/gitea/issues/33690))
  - Fix Untranslated Text on Actions Page ([#&#8203;33635](https://github.com/go-gitea/gitea/issues/33635))
  - Fix issue label delete incorrect labels webhook payload ([#&#8203;34575](https://github.com/go-gitea/gitea/issues/34575))
  - Fix incorrect page navigation with up and down arrow on last item of dashboard repos ([#&#8203;34570](https://github.com/go-gitea/gitea/issues/34570))
  - Fix/improve avatar sync from LDAP ([#&#8203;34573](https://github.com/go-gitea/gitea/issues/34573))
  - Fix some trivial problems ([#&#8203;34579](https://github.com/go-gitea/gitea/issues/34579))
  - Retain issue sort type when a keyword search is introduced ([#&#8203;34559](https://github.com/go-gitea/gitea/issues/34559))
  - Always use an empty line to separate the commit message and trailer ([#&#8203;34512](https://github.com/go-gitea/gitea/issues/34512))
  - Fix line-button issue after file selection in file tree ([#&#8203;34574](https://github.com/go-gitea/gitea/issues/34574))
  - Fix doctor deleting orphaned issues attachments ([#&#8203;34142](https://github.com/go-gitea/gitea/issues/34142))
  - Add webhook assigning test and fix possible bug ([#&#8203;34420](https://github.com/go-gitea/gitea/issues/34420))
  - Fix possible nil description of pull request when migrating from CodeCommit ([#&#8203;34541](https://github.com/go-gitea/gitea/issues/34541))
  - Refactor commit reader ([#&#8203;34542](https://github.com/go-gitea/gitea/issues/34542))
  - Fix possible pull request broken when leave the page immediately after clicking the update button [#&#8203;34509](https://github.com/go-gitea/gitea/issues/34509)
  - Ignore "Close" error when uploading container blob ([#&#8203;34620](https://github.com/go-gitea/gitea/issues/34620))
  - Fix missed merge commit sha and time when migrating from codecommit ([#&#8203;34645](https://github.com/go-gitea/gitea/issues/34645))
  - Fix GetUsersByEmails ([#&#8203;34643](https://github.com/go-gitea/gitea/issues/34643))
  - Misc CSS fixes ([#&#8203;34638](https://github.com/go-gitea/gitea/issues/34638))
  - Add codecommit to supported services in api docs ([#&#8203;34626](https://github.com/go-gitea/gitea/issues/34626))
  - Validate hex colors when creating/editing labels ([#&#8203;34623](https://github.com/go-gitea/gitea/issues/34623))
  - Fix possible pull request broken when leave the page immediately after clicking the update button ([#&#8203;34509](https://github.com/go-gitea/gitea/issues/34509))
  - Fix margin issue in markup paragraph rendering ([#&#8203;34599](https://github.com/go-gitea/gitea/issues/34599))
  - Fix migration pull request title too long ([#&#8203;34577](https://github.com/go-gitea/gitea/issues/34577))
  - Fix footnote jump behavior on the issue page. ([#&#8203;34621](https://github.com/go-gitea/gitea/issues/34621))
  - Fix "oras" OCI client compatibility ([#&#8203;34666](https://github.com/go-gitea/gitea/issues/34666))
  - Fix last admin check when syncing users ([#&#8203;34649](https://github.com/go-gitea/gitea/issues/34649))
  - Fix skip paths check on tag push events in workflows ([#&#8203;34602](https://github.com/go-gitea/gitea/issues/34602)) [#&#8203;34670](https://github.com/go-gitea/gitea/issues/34670)

- MISC

  - Bump to alpine 3.22 ([#&#8203;34613](https://github.com/go-gitea/gitea/issues/34613))
  - Make pull request and issue history more compact ([#&#8203;34588](https://github.com/go-gitea/gitea/issues/34588))
  - Run integration tests against postgres 14 ([#&#8203;34514](https://github.com/go-gitea/gitea/issues/34514)) [#&#8203;34536](https://github.com/go-gitea/gitea/issues/34536)
  - Enable addtional linters ([#&#8203;34085](https://github.com/go-gitea/gitea/issues/34085))
  - Enable testifylint rules ([#&#8203;34075](https://github.com/go-gitea/gitea/issues/34075))
  - Enable staticcheck QFxxxx rules ([#&#8203;34064](https://github.com/go-gitea/gitea/issues/34064))
  - Improve Actions test ([#&#8203;32883](https://github.com/go-gitea/gitea/issues/32883))
  - Drop fomantic build ([#&#8203;33845](https://github.com/go-gitea/gitea/issues/33845))
  - Go1.24 ([#&#8203;33562](https://github.com/go-gitea/gitea/issues/33562))
  - Run yamllint with strict mode, fix issue ([#&#8203;33551](https://github.com/go-gitea/gitea/issues/33551))
  - Disable cron task to update license ([#&#8203;33486](https://github.com/go-gitea/gitea/issues/33486))
  - Optimize makefile help information generation ([#&#8203;33390](https://github.com/go-gitea/gitea/issues/33390))
  - Convert github.com/xanzy/go-gitlab into gitlab.com/gitlab-org/api/client-go ([#&#8203;33126](https://github.com/go-gitea/gitea/issues/33126))
  - Add missed changelogs ([#&#8203;33649](https://github.com/go-gitea/gitea/issues/33649))
  - Update .changelog file to add performance label group ([#&#8203;33472](https://github.com/go-gitea/gitea/issues/33472))
  - Add missing POPULATE\_SQUASH\_COMMENT\_WITH\_COMMIT\_MESSAGES in app.example.ini ([#&#8203;33363](https://github.com/go-gitea/gitea/issues/33363))
  - Update README screenshots ([#&#8203;33347](https://github.com/go-gitea/gitea/issues/33347))
  - Update unrs-resolver ([#&#8203;34279](https://github.com/go-gitea/gitea/issues/34279))
  - Update go\&js dependencies ([#&#8203;34262](https://github.com/go-gitea/gitea/issues/34262))
  - Optimize the calling code of queryElems ([#&#8203;34235](https://github.com/go-gitea/gitea/issues/34235))
  - Update protected\_branch.tmpl ([#&#8203;34193](https://github.com/go-gitea/gitea/issues/34193))
  - Feat/optimize span svg layout ([#&#8203;34185](https://github.com/go-gitea/gitea/issues/34185))
  - Set MERMAID\_MAX\_SOURCE\_CHARACTERS to 50000 ([#&#8203;34152](https://github.com/go-gitea/gitea/issues/34152))
  - Update JS and PY deps ([#&#8203;34143](https://github.com/go-gitea/gitea/issues/34143))
  - Add Chinese translations for README files ([#&#8203;34132](https://github.com/go-gitea/gitea/issues/34132))
  - Use `overflow-wrap: anywhere` to replace `word-break: break-all` ([#&#8203;34126](https://github.com/go-gitea/gitea/issues/34126))
  - Clarify ownership in password change error messages ([#&#8203;34092](https://github.com/go-gitea/gitea/issues/34092))
  - Add toggleClass function in dom.ts ([#&#8203;34063](https://github.com/go-gitea/gitea/issues/34063))
  - Update to golangci-lint v2 ([#&#8203;34054](https://github.com/go-gitea/gitea/issues/34054))
  - Update Makefile test comments ([#&#8203;34013](https://github.com/go-gitea/gitea/issues/34013))
  - Update go mod dependencies ([#&#8203;33988](https://github.com/go-gitea/gitea/issues/33988))
  - Use filepath.Join instead of path.Join for file system file operations ([#&#8203;33978](https://github.com/go-gitea/gitea/issues/33978))
  - Prepare common tmpl functions in a middleware ([#&#8203;33957](https://github.com/go-gitea/gitea/issues/33957))
  - Remove unused or abused styles ([#&#8203;33918](https://github.com/go-gitea/gitea/issues/33918))
  - Update JS and PY deps, misc tweaks ([#&#8203;33903](https://github.com/go-gitea/gitea/issues/33903))
  - Try to figure out attribute checker problem ([#&#8203;33901](https://github.com/go-gitea/gitea/issues/33901))
  - Add lock for a repository pull mirror ([#&#8203;33876](https://github.com/go-gitea/gitea/issues/33876))
  - Fine tune push mirror UI ([#&#8203;33866](https://github.com/go-gitea/gitea/issues/33866))
  - Improve issue & code search ([#&#8203;33860](https://github.com/go-gitea/gitea/issues/33860))
  - Use pullrequestlist instead of \[]\*pullrequest ([#&#8203;33765](https://github.com/go-gitea/gitea/issues/33765))
  - Upgrade act to 0.261.4 and actions-proto-go to v0.4.1 ([#&#8203;33760](https://github.com/go-gitea/gitea/issues/33760))
  - Align sidebar gears to the right ([#&#8203;33721](https://github.com/go-gitea/gitea/issues/33721))
  - Update Go dependencies (skip blevesearch, meilisearch) ([#&#8203;33655](https://github.com/go-gitea/gitea/issues/33655))
  - Add migrations and doctor fixes ([#&#8203;33556](https://github.com/go-gitea/gitea/issues/33556))
  - Remove "class-name" from svg icon ([#&#8203;33540](https://github.com/go-gitea/gitea/issues/33540))
  - Update MAINTAINERS ([#&#8203;33529](https://github.com/go-gitea/gitea/issues/33529))
  - Add "No data available" display when list is empty ([#&#8203;33517](https://github.com/go-gitea/gitea/issues/33517))
  - Use `git diff-tree` for `DiffFileTree` on diff pages ([#&#8203;33514](https://github.com/go-gitea/gitea/issues/33514))
  - Give organisation members access to organisation feeds ([#&#8203;33508](https://github.com/go-gitea/gitea/issues/33508))
  - Update feishu icon ([#&#8203;33470](https://github.com/go-gitea/gitea/issues/33470))
  - Hide/disable unusable UI elements when a repository is archived ([#&#8203;33459](https://github.com/go-gitea/gitea/issues/33459))
  - Update `@github/text-expander-element` to 2.9.0 ([#&#8203;33435](https://github.com/go-gitea/gitea/issues/33435))
  - Do not access GitRepo when a repo is being created ([#&#8203;33380](https://github.com/go-gitea/gitea/issues/33380))
  - Fix incorrect ref usages ([#&#8203;33301](https://github.com/go-gitea/gitea/issues/33301))
  - Prepare for support performance trace ([#&#8203;33286](https://github.com/go-gitea/gitea/issues/33286))
  - Enable Typescript `noImplicitThis` ([#&#8203;33250](https://github.com/go-gitea/gitea/issues/33250))
  - Remove unused CSS styles and move some styles to proper files ([#&#8203;33217](https://github.com/go-gitea/gitea/issues/33217))
  - Add .run to gitignore ([#&#8203;33175](https://github.com/go-gitea/gitea/issues/33175))
  - Fix typo in gitea downloader test and add missing codebase in `ToGitServiceType` ([#&#8203;33146](https://github.com/go-gitea/gitea/issues/33146))
  - Remove extended glob pattern from branch protection UI ([#&#8203;33125](https://github.com/go-gitea/gitea/issues/33125))
  - Clean up legacy form CSS styles ([#&#8203;33081](https://github.com/go-gitea/gitea/issues/33081))
  - Unset XDG\_HOME\_CONFIG as gitea manages configuration locations ([#&#8203;33067](https://github.com/go-gitea/gitea/issues/33067))
  - Add IntelliJ Gateway's .uuid to gitignore ([#&#8203;33052](https://github.com/go-gitea/gitea/issues/33052))
  - User facing messages for AGit errors ([#&#8203;33012](https://github.com/go-gitea/gitea/issues/33012))
  - Always show assignees on right ([#&#8203;33006](https://github.com/go-gitea/gitea/issues/33006))
  - Fix eslint ([#&#8203;33002](https://github.com/go-gitea/gitea/issues/33002))
  - Update JS dependencies ([#&#8203;32914](https://github.com/go-gitea/gitea/issues/32914))
  - Bump x/net ([#&#8203;32896](https://github.com/go-gitea/gitea/issues/32896)) ([#&#8203;32900](https://github.com/go-gitea/gitea/issues/32900))
  - Only activity tab needs heatmap data loading ([#&#8203;34652](https://github.com/go-gitea/gitea/issues/34652))

### [`v1.23.8`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1238---2025-05-11)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.7...v1.23.8)

- SECURITY
  - Fix a bug when uploading file via lfs ssh command ([#&#8203;34408](https://github.com/go-gitea/gitea/issues/34408)) ([#&#8203;34411](https://github.com/go-gitea/gitea/issues/34411))
  - Update net package ([#&#8203;34228](https://github.com/go-gitea/gitea/issues/34228)) ([#&#8203;34232](https://github.com/go-gitea/gitea/issues/34232))
- BUGFIXES
  - Fix releases sidebar navigation link ([#&#8203;34436](https://github.com/go-gitea/gitea/issues/34436)) [#&#8203;34439](https://github.com/go-gitea/gitea/issues/34439)
  - Fix bug webhook milestone is not right. ([#&#8203;34419](https://github.com/go-gitea/gitea/issues/34419)) [#&#8203;34429](https://github.com/go-gitea/gitea/issues/34429)
  - Fix two missed null value checks on the wiki page. ([#&#8203;34205](https://github.com/go-gitea/gitea/issues/34205)) ([#&#8203;34215](https://github.com/go-gitea/gitea/issues/34215))
  - Swift files can be passed either as file or as form value ([#&#8203;34068](https://github.com/go-gitea/gitea/issues/34068)) ([#&#8203;34236](https://github.com/go-gitea/gitea/issues/34236))
  - Fix bug when API get pull changed files for deleted head repository ([#&#8203;34333](https://github.com/go-gitea/gitea/issues/34333)) ([#&#8203;34368](https://github.com/go-gitea/gitea/issues/34368))
  - Upgrade github v61 -> v71 to fix migrating bug ([#&#8203;34389](https://github.com/go-gitea/gitea/issues/34389))
  - Fix bug when visiting comparation page ([#&#8203;34334](https://github.com/go-gitea/gitea/issues/34334)) ([#&#8203;34364](https://github.com/go-gitea/gitea/issues/34364))
  - Fix wrong review requests when updating the pull request ([#&#8203;34286](https://github.com/go-gitea/gitea/issues/34286)) ([#&#8203;34304](https://github.com/go-gitea/gitea/issues/34304))
  - Fix github migration error when using multiple tokens ([#&#8203;34144](https://github.com/go-gitea/gitea/issues/34144)) ([#&#8203;34302](https://github.com/go-gitea/gitea/issues/34302))
  - Explicitly not update indexes when sync database schemas ([#&#8203;34281](https://github.com/go-gitea/gitea/issues/34281)) ([#&#8203;34295](https://github.com/go-gitea/gitea/issues/34295))
  - Fix panic when comment is nil ([#&#8203;34257](https://github.com/go-gitea/gitea/issues/34257)) ([#&#8203;34277](https://github.com/go-gitea/gitea/issues/34277))
  - Fix project board links to related Pull Requests ([#&#8203;34213](https://github.com/go-gitea/gitea/issues/34213)) ([#&#8203;34222](https://github.com/go-gitea/gitea/issues/34222))
  - Don't assume the default wiki branch is master in the wiki API ([#&#8203;34244](https://github.com/go-gitea/gitea/issues/34244)) ([#&#8203;34245](https://github.com/go-gitea/gitea/issues/34245))
- DOCUMENTATION
  - Update token creation API swagger documentation ([#&#8203;34288](https://github.com/go-gitea/gitea/issues/34288)) ([#&#8203;34296](https://github.com/go-gitea/gitea/issues/34296))
- MISC
  - Fix CI Build ([#&#8203;34315](https://github.com/go-gitea/gitea/issues/34315))
  - Add riscv64 support ([#&#8203;34199](https://github.com/go-gitea/gitea/issues/34199)) ([#&#8203;34204](https://github.com/go-gitea/gitea/issues/34204))
  - Bump go version in go.mod ([#&#8203;34160](https://github.com/go-gitea/gitea/issues/34160))
  - remove hardcoded 'code' string in clone\_panel.tmpl ([#&#8203;34153](https://github.com/go-gitea/gitea/issues/34153)) ([#&#8203;34158](https://github.com/go-gitea/gitea/issues/34158))

### [`v1.23.7`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1237---2025-04-07)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.6...v1.23.7)

- Enhancements
  - Add a config option to block "expensive" pages for anonymous users ([#&#8203;34024](https://github.com/go-gitea/gitea/issues/34024)) ([#&#8203;34071](https://github.com/go-gitea/gitea/issues/34071))
  - Also check default ssh-cert location for host ([#&#8203;34099](https://github.com/go-gitea/gitea/issues/34099)) ([#&#8203;34100](https://github.com/go-gitea/gitea/issues/34100)) ([#&#8203;34116](https://github.com/go-gitea/gitea/issues/34116))
- BUGFIXES
  - Fix discord webhook 400 status code when description limit is exceeded ([#&#8203;34084](https://github.com/go-gitea/gitea/issues/34084)) ([#&#8203;34124](https://github.com/go-gitea/gitea/issues/34124))
  - Get changed files based on merge base when checking `pull_request` actions trigger ([#&#8203;34106](https://github.com/go-gitea/gitea/issues/34106)) ([#&#8203;34120](https://github.com/go-gitea/gitea/issues/34120))
  - Fix invalid version in RPM package path ([#&#8203;34112](https://github.com/go-gitea/gitea/issues/34112)) ([#&#8203;34115](https://github.com/go-gitea/gitea/issues/34115))
  - Return default avatar url when user id is zero rather than updating database ([#&#8203;34094](https://github.com/go-gitea/gitea/issues/34094)) ([#&#8203;34095](https://github.com/go-gitea/gitea/issues/34095))
  - Add additional ReplaceAll in pathsep to cater for different pathsep ([#&#8203;34061](https://github.com/go-gitea/gitea/issues/34061)) ([#&#8203;34070](https://github.com/go-gitea/gitea/issues/34070))
  - Try to fix check-attr bug ([#&#8203;34029](https://github.com/go-gitea/gitea/issues/34029)) ([#&#8203;34033](https://github.com/go-gitea/gitea/issues/34033))
  - Git client will follow 301 but 307 ([#&#8203;34005](https://github.com/go-gitea/gitea/issues/34005)) ([#&#8203;34010](https://github.com/go-gitea/gitea/issues/34010))
  - Fix block expensive for 1.23 ([#&#8203;34127](https://github.com/go-gitea/gitea/issues/34127))
  - Fix markdown frontmatter rendering ([#&#8203;34102](https://github.com/go-gitea/gitea/issues/34102)) ([#&#8203;34107](https://github.com/go-gitea/gitea/issues/34107))
  - Add new CLI flags to set name and scopes when creating a user with access token ([#&#8203;34080](https://github.com/go-gitea/gitea/issues/34080)) ([#&#8203;34103](https://github.com/go-gitea/gitea/issues/34103))
  - Do not show 500 error when default branch doesn't exist ([#&#8203;34096](https://github.com/go-gitea/gitea/issues/34096)) ([#&#8203;34097](https://github.com/go-gitea/gitea/issues/34097))
  - Hide activity contributors, recent commits and code frequrency left tabs if there is no code permission ([#&#8203;34053](https://github.com/go-gitea/gitea/issues/34053)) ([#&#8203;34065](https://github.com/go-gitea/gitea/issues/34065))
  - Simplify emoji rendering ([#&#8203;34048](https://github.com/go-gitea/gitea/issues/34048)) ([#&#8203;34049](https://github.com/go-gitea/gitea/issues/34049))
  - Adjust the layout of the toolbar on the Issues/Projects page ([#&#8203;33667](https://github.com/go-gitea/gitea/issues/33667)) ([#&#8203;34047](https://github.com/go-gitea/gitea/issues/34047))
  - Pull request updates will also trigger code owners review requests ([#&#8203;33744](https://github.com/go-gitea/gitea/issues/33744)) ([#&#8203;34045](https://github.com/go-gitea/gitea/issues/34045))
  - Fix org repo creation being limited by user limits ([#&#8203;34030](https://github.com/go-gitea/gitea/issues/34030)) ([#&#8203;34044](https://github.com/go-gitea/gitea/issues/34044))
  - Fix git client accessing renamed repo ([#&#8203;34034](https://github.com/go-gitea/gitea/issues/34034)) ([#&#8203;34043](https://github.com/go-gitea/gitea/issues/34043))
  - Fix the issue with error message logging for the `check-attr` command on Windows OS. ([#&#8203;34035](https://github.com/go-gitea/gitea/issues/34035)) ([#&#8203;34036](https://github.com/go-gitea/gitea/issues/34036))
  - Polyfill WeakRef ([#&#8203;34025](https://github.com/go-gitea/gitea/issues/34025)) ([#&#8203;34028](https://github.com/go-gitea/gitea/issues/34028))

### [`v1.23.6`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1236---2025-03-24)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.5...v1.23.6)

- SECURITY
  - Fix LFS URL ([#&#8203;33840](https://github.com/go-gitea/gitea/issues/33840)) ([#&#8203;33843](https://github.com/go-gitea/gitea/issues/33843))
  - Update jwt and redis packages ([#&#8203;33984](https://github.com/go-gitea/gitea/issues/33984)) ([#&#8203;33987](https://github.com/go-gitea/gitea/issues/33987))
  - Update golang crypto and net ([#&#8203;33989](https://github.com/go-gitea/gitea/issues/33989))
- BUGFIXES
  - Drop timeout for requests made to the internal hook api ([#&#8203;33947](https://github.com/go-gitea/gitea/issues/33947)) ([#&#8203;33970](https://github.com/go-gitea/gitea/issues/33970))
  - Fix maven panic when no package exists ([#&#8203;33888](https://github.com/go-gitea/gitea/issues/33888)) ([#&#8203;33889](https://github.com/go-gitea/gitea/issues/33889))
  - Fix markdown render ([#&#8203;33870](https://github.com/go-gitea/gitea/issues/33870)) ([#&#8203;33875](https://github.com/go-gitea/gitea/issues/33875))
  - Fix auto concurrency cancellation skips commit status updates ([#&#8203;33764](https://github.com/go-gitea/gitea/issues/33764)) ([#&#8203;33849](https://github.com/go-gitea/gitea/issues/33849))
  - Fix oauth2 auth ([#&#8203;33961](https://github.com/go-gitea/gitea/issues/33961)) ([#&#8203;33962](https://github.com/go-gitea/gitea/issues/33962))
  - Fix incorrect 1.23 translations ([#&#8203;33932](https://github.com/go-gitea/gitea/issues/33932))
  - Try to figure out attribute checker problem ([#&#8203;33901](https://github.com/go-gitea/gitea/issues/33901)) ([#&#8203;33902](https://github.com/go-gitea/gitea/issues/33902))
  - Ignore trivial errors when updating push data ([#&#8203;33864](https://github.com/go-gitea/gitea/issues/33864)) ([#&#8203;33887](https://github.com/go-gitea/gitea/issues/33887))
  - Fix some UI problems for 1.23 ([#&#8203;33856](https://github.com/go-gitea/gitea/issues/33856))
  - Removing unwanted ui container ([#&#8203;33833](https://github.com/go-gitea/gitea/issues/33833)) ([#&#8203;33835](https://github.com/go-gitea/gitea/issues/33835))
  - Support disable passkey auth ([#&#8203;33348](https://github.com/go-gitea/gitea/issues/33348)) ([#&#8203;33819](https://github.com/go-gitea/gitea/issues/33819))
  - Do not call "git diff" when listing PRs ([#&#8203;33817](https://github.com/go-gitea/gitea/issues/33817))
  - Try to fix ACME (3rd) ([#&#8203;33807](https://github.com/go-gitea/gitea/issues/33807)) ([#&#8203;33808](https://github.com/go-gitea/gitea/issues/33808))
  - Fix incorrect code search indexer options ([#&#8203;33992](https://github.com/go-gitea/gitea/issues/33992)) [#&#8203;33999](https://github.com/go-gitea/gitea/issues/33999)

### [`v1.23.5`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1235---2025-03-04)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.4...v1.23.5)

- SECURITY
  - Bump x/oauth2 & x/crypto ([#&#8203;33704](https://github.com/go-gitea/gitea/issues/33704)) ([#&#8203;33727](https://github.com/go-gitea/gitea/issues/33727))
- PERFORMANCE
  - Optimize user dashboard loading ([#&#8203;33686](https://github.com/go-gitea/gitea/issues/33686)) ([#&#8203;33708](https://github.com/go-gitea/gitea/issues/33708))
- BUGFIXES
  - Fix navbar dropdown item align ([#&#8203;33782](https://github.com/go-gitea/gitea/issues/33782))
  - Fix inconsistent closed issue list icon ([#&#8203;33722](https://github.com/go-gitea/gitea/issues/33722)) ([#&#8203;33728](https://github.com/go-gitea/gitea/issues/33728))
  - Fix for Maven Package Naming Convention Handling ([#&#8203;33678](https://github.com/go-gitea/gitea/issues/33678)) ([#&#8203;33679](https://github.com/go-gitea/gitea/issues/33679))
  - Improve Open-with URL encoding ([#&#8203;33666](https://github.com/go-gitea/gitea/issues/33666)) ([#&#8203;33680](https://github.com/go-gitea/gitea/issues/33680))
  - Deleting repository should unlink all related packages ([#&#8203;33653](https://github.com/go-gitea/gitea/issues/33653)) ([#&#8203;33673](https://github.com/go-gitea/gitea/issues/33673))
  - Fix omitempty bug ([#&#8203;33663](https://github.com/go-gitea/gitea/issues/33663)) ([#&#8203;33670](https://github.com/go-gitea/gitea/issues/33670))
  - Upgrade go-crypto from 1.1.4 to 1.1.6 ([#&#8203;33745](https://github.com/go-gitea/gitea/issues/33745)) ([#&#8203;33754](https://github.com/go-gitea/gitea/issues/33754))
  - Fix OCI image.version annotation for releases to use full semver ([#&#8203;33698](https://github.com/go-gitea/gitea/issues/33698)) ([#&#8203;33701](https://github.com/go-gitea/gitea/issues/33701))
  - Try to fix ACME path when renew ([#&#8203;33668](https://github.com/go-gitea/gitea/issues/33668)) ([#&#8203;33693](https://github.com/go-gitea/gitea/issues/33693))
  - Fix mCaptcha bug ([#&#8203;33659](https://github.com/go-gitea/gitea/issues/33659)) ([#&#8203;33661](https://github.com/go-gitea/gitea/issues/33661))
  - Git graph: don't show detached commits ([#&#8203;33645](https://github.com/go-gitea/gitea/issues/33645)) ([#&#8203;33650](https://github.com/go-gitea/gitea/issues/33650))
  - Use MatchPhraseQuery for bleve code search ([#&#8203;33628](https://github.com/go-gitea/gitea/issues/33628))
  - Adjust appearence of commit status webhook ([#&#8203;33778](https://github.com/go-gitea/gitea/issues/33778)) [#&#8203;33789](https://github.com/go-gitea/gitea/issues/33789)
  - Upgrade golang net from 0.35.0 -> 0.36.0 ([#&#8203;33795](https://github.com/go-gitea/gitea/issues/33795)) [#&#8203;33796](https://github.com/go-gitea/gitea/issues/33796)

### [`v1.23.4`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1234---2025-02-16)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.3...v1.23.4)

- SECURITY
  - Enhance routers for the Actions variable operations ([#&#8203;33547](https://github.com/go-gitea/gitea/issues/33547)) ([#&#8203;33553](https://github.com/go-gitea/gitea/issues/33553))
  - Enhance routers for the Actions runner operations ([#&#8203;33549](https://github.com/go-gitea/gitea/issues/33549)) ([#&#8203;33555](https://github.com/go-gitea/gitea/issues/33555))
  - Fix project issues list and counting ([#&#8203;33594](https://github.com/go-gitea/gitea/issues/33594)) [#&#8203;33619](https://github.com/go-gitea/gitea/issues/33619)
- PERFORMANCES
  - Performance optimization for pull request files loading comments attachments ([#&#8203;33585](https://github.com/go-gitea/gitea/issues/33585)) ([#&#8203;33592](https://github.com/go-gitea/gitea/issues/33592))
- BUGFIXES
  - Add a transaction to `pickTask` ([#&#8203;33543](https://github.com/go-gitea/gitea/issues/33543)) ([#&#8203;33563](https://github.com/go-gitea/gitea/issues/33563))
  - Fix mirror bug ([#&#8203;33597](https://github.com/go-gitea/gitea/issues/33597)) ([#&#8203;33607](https://github.com/go-gitea/gitea/issues/33607))
  - Use default Git timeout when checking repo health ([#&#8203;33593](https://github.com/go-gitea/gitea/issues/33593)) ([#&#8203;33598](https://github.com/go-gitea/gitea/issues/33598))
  - Fix PR's target branch dropdown ([#&#8203;33589](https://github.com/go-gitea/gitea/issues/33589)) ([#&#8203;33591](https://github.com/go-gitea/gitea/issues/33591))
  - Fix various problems (artifact order, api empty slice, assignee check, fuzzy prompt, mirror proxy, adopt git) ([#&#8203;33569](https://github.com/go-gitea/gitea/issues/33569)) ([#&#8203;33577](https://github.com/go-gitea/gitea/issues/33577))
  - Rework suggestion backend ([#&#8203;33538](https://github.com/go-gitea/gitea/issues/33538)) ([#&#8203;33546](https://github.com/go-gitea/gitea/issues/33546))
  - Fix context usage ([#&#8203;33554](https://github.com/go-gitea/gitea/issues/33554)) ([#&#8203;33557](https://github.com/go-gitea/gitea/issues/33557))
  - Only show the latest version in the Arch index ([#&#8203;33262](https://github.com/go-gitea/gitea/issues/33262)) ([#&#8203;33580](https://github.com/go-gitea/gitea/issues/33580))
  - Skip deletion error for action artifacts ([#&#8203;33476](https://github.com/go-gitea/gitea/issues/33476)) ([#&#8203;33568](https://github.com/go-gitea/gitea/issues/33568))
  - Make actions URL in commit status webhooks absolute ([#&#8203;33620](https://github.com/go-gitea/gitea/issues/33620)) [#&#8203;33632](https://github.com/go-gitea/gitea/issues/33632)
  - Add missing locale ([#&#8203;33641](https://github.com/go-gitea/gitea/issues/33641)) [#&#8203;33642](https://github.com/go-gitea/gitea/issues/33642)

### [`v1.23.3`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1233---2025-02-06)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.2...v1.23.3)

- Security
  - Build Gitea with Golang v1.23.6 to fix security bugs
- BUGFIXES
  - Fix a bug caused by status webhook template [#&#8203;33512](https://github.com/go-gitea/gitea/issues/33512)

### [`v1.23.2`](https://github.com/go-gitea/gitea/blob/HEAD/CHANGELOG.md#1232---2025-02-04)

[Compare Source](https://github.com/go-gitea/gitea/compare/v1.23.1...v1.23.2)

- BREAKING
  - Add tests for webhook and fix some webhook bugs ([#&#8203;33396](https://github.com/go-gitea/gitea/issues/33396)) ([#&#8203;33442](https://github.com/go-gitea/gitea/issues/33442))
    - Package webhook’s Organization was incorrectly used as the User struct. This PR fixes the issue.
    - This changelog is just a hint. The change is not really breaking because most fields are the same, most users are not affected.
- ENHANCEMENTS
  - Clone button enhancements ([#&#8203;33362](https://github.com/go-gitea/gitea/issues/33362)) ([#&#8203;33404](https://github.com/go-gitea/gitea/issues/33404))
  - Repo homepage styling tweaks ([#&#8203;33289](https://github.com/go-gitea/gitea/issues/33289)) ([#&#8203;33381](https://github.com/go-gitea/gitea/issues/33381))
  - Add a confirm dialog for "sync fork" ([#&#8203;33270](https://github.com/go-gitea/gitea/issues/33270)) ([#&#8203;33273](https://github.com/go-gitea/gitea/issues/33273))
  - Make tracked time representation display as hours ([#&#8203;33315](https://github.com/go-gitea/gitea/issues/33315)) ([#&#8203;33334](https://github.com/go-gitea/gitea/issues/33334))
  - Improve sync fork behavior ([#&#8203;33319](https://github.com/go-gitea/gitea/issues/33319)) ([#&#8203;33332](https://github.com/go-gitea/gitea/issues/33332))
- BUGFIXES
  - Fix code button alignment ([#&#8203;33345](https://github.com/go-gitea/gitea/issues/33345)) ([#&#8203;33351](https://github.com/go-gitea/gitea/issues/33351))
  - Correct bot label `vertical-align` ([#&#8203;33477](https://github.com/go-gitea/gitea/issues/33477)) ([#&#8203;33480](https://github.com/go-gitea/gitea/issues/33480))
  - Fix SSH LFS memory usage ([#&#8203;33455](https://github.com/go-gitea/gitea/issues/33455)) ([#&#8203;33460](https://github.com/go-gitea/gitea/issues/33460))
  - Fix issue sidebar dropdown keyboard support ([#&#8203;33447](https://github.com/go-gitea/gitea/issues/33447)) ([#&#8203;33450](https://github.com/go-gitea/gitea/issues/33450))
  - Fix user avatar ([#&#8203;33439](https://github.com/go-gitea/gitea/issues/33439))
  - Fix `GetCommitBranchStart` bug ([#&#8203;33298](https://github.com/go-gitea/gitea/issues/33298)) ([#&#8203;33421](https://github.com/go-gitea/gitea/issues/33421))
  - Add pubdate for repository rss and add some tests ([#&#8203;33411](https://github.com/go-gitea/gitea/issues/33411)) ([#&#8203;33416](https://github.com/go-gitea/gitea/issues/33416))
  - Add missed auto merge feed message on dashboard ([#&#8203;33309](https://github.com/go-gitea/gitea/issues/33309)) ([#&#8203;33405](https://github.com/go-gitea/gitea/issues/33405))
  - Fix issue suggestion bug ([#&#8203;33389](https://github.com/go-gitea/gitea/issues/33389)) ([#&#8203;33391](https://github.com/go-gitea/gitea/issues/33391))
  - Make issue suggestion work for all editors ([#&#8203;33340](https://github.com/go-gitea/gitea/issues/33340)) ([#&#8203;33342](https://github.com/go-gitea/gitea/issues/33342))
  - Fix issue count ([#&#8203;33338](https://github.com/go-gitea/gitea/issues/33338)) ([#&#8203;33341](https://github.com/go-gitea/gitea/issues/33341))
  - Fix Account linking page ([#&#8203;33325](https://github.com/go-gitea/gitea/issues/33325)) ([#&#8203;33327](https://github.com/go-gitea/gitea/issues/33327))
  - Fix closed dependency title ([#&#8203;33285](https://github.com/go-gitea/gitea/issues/33285)) ([#&#8203;33287](https://github.com/go-gitea/gitea/issues/33287))
  - Fix sidebar milestone link ([#&#8203;33269](https://github.com/go-gitea/gitea/issues/33269)) ([#&#8203;33272](https://github.com/go-gitea/gitea/issues/33272))
  - Fix missing license when sync mirror ([#&#8203;33255](https://github.com/go-gitea/gitea/issues/33255)) ([#&#8203;33258](https://github.com/go-gitea/gitea/issues/33258))
  - Fix upload file form ([#&#8203;33230](https://github.com/go-gitea/gitea/issues/33230)) ([#&#8203;33233](https://github.com/go-gitea/gitea/issues/33233))
  - Fix mirror bug ([#&#8203;33224](https://github.com/go-gitea/gitea/issues/33224)) ([#&#8203;33225](https://git…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
lgtm/done This PR has enough approvals to get merged. There are no important open reservations anymore. modifies/dependencies modifies/go Pull requests that update Go code modifies/templates This PR modifies the template files modifies/translation type/feature Completely new functionality. Can only be merged if feature freeze is not active.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants