Commit Graph

2081 Commits

Author SHA1 Message Date
Lunny Xiao
33923a4d7c fix(web): enforce token scopes on raw, media, and attachment downloads (#37698)
This PR tightens token-scope enforcement for non-API download endpoints
in the web layer.

What it changes:

- require `read:repository` for repository content downloads served from
web routes such as:
  - `/raw/...`
  - `/media/...`
- enforce attachment-specific scopes in `ServeAttachment`:
  - issue / pull request attachments require `read:issue`
  - release attachments require `read:repository`
- centralize token-scope checks for web handlers with a shared context
helper
- add matrix-style integration coverage for:
  - public and private repository content downloads
  - `blob`, `branch`, `tag`, and `commit` download routes
  - global and repo-scoped attachment routes
  - `public-only` token behavior on public vs private resources

Why:

API tokens and OAuth access tokens can be used on some non-API web
endpoints. Before this change, those endpoints relied on repository
visibility and unit permissions, but did not consistently enforce the
token’s declared scope. That allowed scoped tokens to access resources
beyond their intended category through web download routes.

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: Nicolas <bircni@icloud.com>
2026-05-16 14:50:41 +00:00
Nicolas
eb93981d45 feat: Add bypass allowlist for branch protection (#36514)
- Introduce a “Bypass Protection Allowlist” on branch rules
(users/teams) alongside admins, with BlockAdminMergeOverride
  still respected.
- Surface the allowlist in API (create/edit options, structs) and
settings UI; merge box now shows the red button +
  message for bypass-capable users.
- Apply bypass logic to merge checks and pre-receive so allowlisted
users can override unmet approvals/status checks/
  protected files when force-merging.
- Add migration for new columns, locale strings, and unit tests (bypass
helper; queue test tweak).

<img width="1069" height="218" alt="image"
src="https://github.com/user-attachments/assets/0b61bc2a-a27f-47f3-a923-613688008e65"
/>


Fixes #36476

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Giteabot <teabot@gitea.io>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Codex GPT-5.3 <codex@openai.com>
Co-authored-by: GPT-5.2 <noreply@openai.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-05-16 14:23:42 +00:00
Tom T
96e0dc15a3 feat(oauth): Support AWS Cognito OAuth2 provider (#37607)
Using the standard OpenID Connect OAuth2 provider type doesn't work well
for AWS Cognito. Most of the functionality works absolutely fine,
however the query parameter `post_logout_redirect_uri` is not understood
by Cognito and results in a bad experience when logging out.

To combat this i've added a new `AWS Cognito` provider which is almost
identical to the `Open ID Connect` type except it overrides the query
parameter to `logout_uri` which is what Cognito expects.
<img width="647" height="272" alt="image"
src="https://github.com/user-attachments/assets/d4bb30e2-f25e-41a1-91cb-4efa67137c57"
/>

This then results in a nice experience logging out with no errors seen -
even though the logout does succeed. Why AWS thought they would deviate
from the OAuth spec in this particular area is beyond me...

---------

Co-authored-by: Tom Thornton <tom.thornton@sony.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Nicolas <bircni@icloud.com>
2026-05-16 10:41:11 +00:00
Nicolas
34fd3c9f06 feat: Add default PR branch update style setting (#37410)
Adds repository-level settings for pull request branch updates so admins
can choose the default update method and disable merge or rebase
updates.

<img width="1025" height="158"
src="https://github.com/user-attachments/assets/d030973b-0ddd-4035-b04f-145c445084d7"
/>

---------

Co-authored-by: OpenAI Codex (GPT-5) <codex@openai.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-16 10:06:40 +00:00
Copilot
4e837fed97 chore(doctor): remove four obsolete doctor check implementations (#37728)
Removed check names:
- disable-mirror-actions-unit
- check-old-archives
- synchronize-repo-heads
- authorized-keys

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: wxiaoguang <2114189+wxiaoguang@users.noreply.github.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-16 07:19:25 +00:00
Copilot
3607516ce2 refactor(org): simplify owner-team org repo creation logic (#37727)
This change cleans up org repo-creation authorization by making
owner-team membership sufficient regardless of `can_create_org_repo`,
and removes the now-obsolete doctor fix for owner teams.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: wxiaoguang <2114189+wxiaoguang@users.noreply.github.com>
2026-05-16 14:26:33 +08:00
Zettat123
cf0f25b798 fix(actions): deadlock between PrepareRunAndInsert and UpdateTaskByState (#37692)
Fix #36234

## Bug

Logs show `PrepareRunAndInsert: InsertRun: Error 1213: Deadlock found`,
which `handleWorkflows` silently swallows via `log.Error + continue`, so
the triggered run is dropped.

## Root cause

The path `UpdateRun -> UpdateRepoRunsNumbers` runs the following SQL
inside every status-changing transaction:

```sql
UPDATE repository
SET num_action_runs        = (SELECT count(*) FROM action_run WHERE repo_id = N),
    num_closed_action_runs = (SELECT count(*) FROM action_run WHERE repo_id = N AND status IN (...))
WHERE id = N;
```

On any DB that treats subqueries inside an UPDATE as locking reads, this
statement takes locks in two steps:

1. The outer UPDATE acquires an X lock on `repository[id=N]`
2. The embedded SELECT subqueries are evaluated as locking reads, taking
S locks on every `action_run` row matching `repo_id = N`

Two such concurrent transactions form a cycle via `repository[N]`:

| Tx | Holds | Wants | Blocked by |
|---|---|---|---|
| A: `PrepareRunAndInsert` (push trigger) | X on inserted `action_run`
row R_A; X on `repository[N]` (outer UPDATE already through step 1) | S
on `action_run` rows for repo N (subquery, step 2) | B's X lock on R_B |
| B: `UpdateTaskByState` (runner callback) | X on `action_run` row R_B
(from `UpdateRun`) | X on `repository[N]` (outer UPDATE, step 1) | A's X
lock on `repository[N]` |
| **Cycle** | A waits for R_B; B waits for `repository[N]` | | deadlock
error -> `handleWorkflows` swallows -> run lost |


PostgreSQL's MVCC reads do not take these locks and SQLite serializes
writers, so the symptom only surfaces on MySQL/MSSQL.

## Fix

Split `UpdateRepoRunsNumbers` into small SQLs to avoid locking reads and
move it out of DB transactions.

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Nicolas <bircni@icloud.com>
2026-05-15 08:39:18 +00:00
Lunny Xiao
f9b7b65371 fix(security): enforce wiki git writes and LFS token access at request time (#37695)
This PR fixes two permission-checking gaps in Git and LFS request
handling.

## What it changes

- keep wiki Git HTTP pushes on the normal write-permission path, even
when proc-receive support is enabled
- revalidate LFS bearer token requests against the current user state
and current repository permissions before allowing access
- add regression coverage for unauthorized wiki HTTP pushes
- add LFS tests for blocked users, revoked repository access, read-only
upload attempts, and valid write access

## Why

- wiki repositories should not inherit the relaxed refs/for handling
used for normal code repositories
- LFS authorization tokens should not remain usable after a user is
disabled or loses repository access

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-15 08:12:59 +00:00
agyss
5b3575a8be fix(repo): /generate must sync the branch table for the new repo (#37693)
Two bugs in GenerateGitContent, the function behind
`POST /api/v1/repos/{owner}/{template}/generate`:

1. The new repository's refs were not written `branch` DB table
2. The function re-fetched the new repo row from the database
    but reassigned its local pointer

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-15 07:24:40 +00:00
Kausthubh J Rao
5c887d68ca feat(api): encrypt AWS creds (#37679)
## Description

As mentioned in #37654 `AWSSecretAccessKey` are not encrypted and stored as is.

## Update

Follow the existing `AuthToken` flow of setting the `Encrypted` fields,
`Decrypting` them later and `Clearing` them at the end.

Closes #37654

---------

Signed-off-by: Kausthubh J Rao <105716675+Exgene@users.noreply.github.com>
Co-authored-by: Lauris B <lauris@nix.lv>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-05-14 15:46:20 +03:00
Giteabot
510b729212 fix(deps): update go dependencies (major) (#37639)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[github.com/dlclark/regexp2](https://redirect.github.com/dlclark/regexp2)
| `v1.12.0` → `v2.0.1` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fdlclark%2fregexp2/v2.0.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fdlclark%2fregexp2/v1.12.0/v2.0.1?slim=true)
|
|
[github.com/google/go-github/v84](https://redirect.github.com/google/go-github)
| `v84.0.0` → `v85.0.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgoogle%2fgo-github%2fv84/v85.0.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgoogle%2fgo-github%2fv84/v84.0.0/v85.0.0?slim=true)
|
|
[gitlab.com/gitlab-org/api/client-go](https://gitlab.com/gitlab-org/api/client-go)
| `v1.46.0` → `v2.24.1` |
![age](https://developer.mend.io/api/mc/badges/age/go/gitlab.com%2fgitlab-org%2fapi%2fclient-go/v2.24.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/gitlab.com%2fgitlab-org%2fapi%2fclient-go/v1.46.0/v2.24.1?slim=true)
|

---

### Release Notes

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

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

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

###
[`v2.0.0`](https://redirect.github.com/dlclark/regexp2/compare/v1.12.0...v2.0.0)

[Compare
Source](https://redirect.github.com/dlclark/regexp2/compare/v1.12.0...v2.0.0)

</details>

<details>
<summary>google/go-github (github.com/google/go-github/v84)</summary>

###
[`v85.0.0`](https://redirect.github.com/google/go-github/releases/tag/v85.0.0)

[Compare
Source](https://redirect.github.com/google/go-github/compare/v84.0.0...v85.0.0)

This release contains the following breaking API changes:

- fix!: Resolve inconsistent options for `create` and `update` on custom
org role
([#&#8203;4075](https://redirect.github.com/google/go-github/issues/4075))
BREAKING CHANGE: `GetOrgRole`, `CreateCustomOrgRole`, and
`UpdateCustomOrgRole` have new params and return values.
- fix!: Change `id` from `int64` to `string` in
`ActivityService.MarkThreadDone`
([#&#8203;4056](https://redirect.github.com/google/go-github/issues/4056))
BREAKING CHANGE: `ActivityService.MarkThreadDone` accepts `string` `id`
instead of `int64`.

...and the following additional changes:

- chore: Bump version of go-github to v85.0.0
([#&#8203;4173](https://redirect.github.com/google/go-github/issues/4173))
- chore: Update `openapi_operations.yaml`
([#&#8203;4172](https://redirect.github.com/google/go-github/issues/4172))
- security: Reject cross-host redirects to prevent Authorization leak
([#&#8203;4171](https://redirect.github.com/google/go-github/issues/4171))
- chore: Improve GitHub Actions workflows lint and testing
([#&#8203;4169](https://redirect.github.com/google/go-github/issues/4169))
- chore: Switch legacy redirect handling to new pattern
([#&#8203;4161](https://redirect.github.com/google/go-github/issues/4161))
- feat: Add `CodeSecurity` to `SecurityAndAnalysis`
([#&#8203;4155](https://redirect.github.com/google/go-github/issues/4155))
- fix: Reject URL path segments containing ".." in all request methods
([#&#8203;4150](https://redirect.github.com/google/go-github/issues/4150))
- feat: Refactor repositories download contents
([#&#8203;4153](https://redirect.github.com/google/go-github/issues/4153))
- chore: Bump google.org/x/tools to v0.44.0 in /tools
([#&#8203;4168](https://redirect.github.com/google/go-github/issues/4168))
- docs: Fix broken blog post link
([#&#8203;4160](https://redirect.github.com/google/go-github/issues/4160))
- build(deps): Bump github.com/sigstore/timestamp-authority/v2 from
2.0.3 to 2.0.6 in /example
([#&#8203;4156](https://redirect.github.com/google/go-github/issues/4156))
- chore: Update openapi\_operations.yaml
([#&#8203;4157](https://redirect.github.com/google/go-github/issues/4157))
- feat: Remove Google App Engine standard support
([#&#8203;4152](https://redirect.github.com/google/go-github/issues/4152))
- feat: Add `DownloadCopilotMetrics` helper method
([#&#8203;4149](https://redirect.github.com/google/go-github/issues/4149))
- docs: Add `apiVersion` to GitHub API link
([#&#8203;4147](https://redirect.github.com/google/go-github/issues/4147))
- chore: Simplify `redundantptr` custom linter
([#&#8203;4148](https://redirect.github.com/google/go-github/issues/4148))
- docs: Deprecate old Copilot metrics endpoints closed on April 2, 2026
([#&#8203;4137](https://redirect.github.com/google/go-github/issues/4137))
- refactor: Remove redundant `github.Ptr` calls
([#&#8203;4145](https://redirect.github.com/google/go-github/issues/4145))
- fix: Add missing `User` fields
([#&#8203;4146](https://redirect.github.com/google/go-github/issues/4146))
- fix: Preserve `Marketplace.Stubbed` during client copy
([#&#8203;4144](https://redirect.github.com/google/go-github/issues/4144))
- refactor: Simplify array copying
([#&#8203;4143](https://redirect.github.com/google/go-github/issues/4143))
- build(deps): Bump golang.org/x/crypto from 0.49.0 to 0.50.0 in
/example
([#&#8203;4141](https://redirect.github.com/google/go-github/issues/4141))
- build(deps): Bump github.com/getkin/kin-openapi from 0.134.0 to
0.135.0 in /tools
([#&#8203;4142](https://redirect.github.com/google/go-github/issues/4142))
- build(deps): Bump golang.org/x/term from 0.41.0 to 0.42.0 in /example
([#&#8203;4140](https://redirect.github.com/google/go-github/issues/4140))
- build(deps): Bump golang.org/x/net from 0.52.0 to 0.53.0 in /scrape
([#&#8203;4139](https://redirect.github.com/google/go-github/issues/4139))
- build(deps): Bump go.opentelemetry.io/otel to v1.43.0
([#&#8203;4135](https://redirect.github.com/google/go-github/issues/4135))
- fix: Expand `sanitizeURL` secrets redactions
([#&#8203;4126](https://redirect.github.com/google/go-github/issues/4126))
- build(deps): Bump github.com/alecthomas/kong from 1.14.0 to 1.15.0 in
/tools
([#&#8203;4132](https://redirect.github.com/google/go-github/issues/4132))
- build(deps): Bump actions/setup-go from 6.3.0 to 6.4.0 in the actions
group
([#&#8203;4131](https://redirect.github.com/google/go-github/issues/4131))
- feat: Add support for custom names and methods that return structs
with multiple `[]*T` fields in `gen-iterators.go`
([#&#8203;4128](https://redirect.github.com/google/go-github/issues/4128))
- fix: Limit webhook payload size in `ValidatePayloadFromBody`
([#&#8203;4125](https://redirect.github.com/google/go-github/issues/4125))
- build(deps): Bump codecov/codecov-action from 5.5.3 to 6.0.0
([#&#8203;4123](https://redirect.github.com/google/go-github/issues/4123))
- fix: Synchronize `requestCount` in rate limit tests
([#&#8203;4124](https://redirect.github.com/google/go-github/issues/4124))
- chore: Simplify `generate.sh` by removing `git worktree` and using
generator-based check
([#&#8203;4120](https://redirect.github.com/google/go-github/issues/4120))
- docs: Improve comments in /examples
([#&#8203;4122](https://redirect.github.com/google/go-github/issues/4122))
- chore: Use `golangci-lint-action`; remove `newreposecretwithlibsodium`
([#&#8203;4119](https://redirect.github.com/google/go-github/issues/4119))
- feat: Add custom image endpoints for GitHub-hosted runners
([#&#8203;4101](https://redirect.github.com/google/go-github/issues/4101))
- chore: Cache custom golangci-lint binaries in GHA workflow
([#&#8203;4116](https://redirect.github.com/google/go-github/issues/4116))
- build(deps): Bump github.com/ProtonMail/go-crypto from 1.4.0 to 1.4.1
in /example
([#&#8203;4115](https://redirect.github.com/google/go-github/issues/4115))
- build(deps): Bump golang.org/x/tools from 0.29.0 to 0.43.0 in
/tools/extraneous-new
([#&#8203;4114](https://redirect.github.com/google/go-github/issues/4114))
- build(deps): Bump codecov/codecov-action from 5.5.2 to 5.5.3
([#&#8203;4112](https://redirect.github.com/google/go-github/issues/4112))
- build(deps): Bump github.com/golangci/plugin-module-register from
0.1.1 to 0.1.2 in /tools/extraneous-new
([#&#8203;4113](https://redirect.github.com/google/go-github/issues/4113))
- build(deps): Bump github.com/getkin/kin-openapi from 0.133.0 to
0.134.0 in /tools
([#&#8203;4111](https://redirect.github.com/google/go-github/issues/4111))
- build(deps): Bump github.com/PuerkitoBio/goquery from 1.11.0 to 1.12.0
in /scrape
([#&#8203;4110](https://redirect.github.com/google/go-github/issues/4110))
- chore: Upgrade deps for linters using dependabot
([#&#8203;4107](https://redirect.github.com/google/go-github/issues/4107))
- chore: Use `structfield.Settings` in `check-structfield-settings`
([#&#8203;4108](https://redirect.github.com/google/go-github/issues/4108))
- build(deps): Bump google.golang.org/grpc from 1.78.0 to 1.79.3 in
/example
([#&#8203;4109](https://redirect.github.com/google/go-github/issues/4109))
- chore: Remove unnecessary use of `new` and `&SomeStruct{}` and add new
`extraneousnew` custom linter
([#&#8203;4106](https://redirect.github.com/google/go-github/issues/4106))
- feat: Add `NetworkConfigurationID` and `HostedRunnersURL` to
enterprise runner group types
([#&#8203;4099](https://redirect.github.com/google/go-github/issues/4099))
- feat: Generate accessors for all fields
([#&#8203;4105](https://redirect.github.com/google/go-github/issues/4105))
- feat: Add `ListRunnerGroupHostedRunners` for org runner groups
([#&#8203;4100](https://redirect.github.com/google/go-github/issues/4100))
- chore: Enable `default: none` linters; remove duplicated
([#&#8203;4097](https://redirect.github.com/google/go-github/issues/4097))
- fix: Use `Cursor` pagination for `*.ListHookDeliveriesIter`
([#&#8203;4096](https://redirect.github.com/google/go-github/issues/4096))
- chore: Remove duplicated formatters
([#&#8203;4094](https://redirect.github.com/google/go-github/issues/4094))
- chore: Fix typos in comments and tests
([#&#8203;4093](https://redirect.github.com/google/go-github/issues/4093))
- chore: Fix typo in CONTRIBUTING.md
([#&#8203;4092](https://redirect.github.com/google/go-github/issues/4092))
- chore: Update openapi\_operations.yaml
([#&#8203;4091](https://redirect.github.com/google/go-github/issues/4091))
- build(deps): Bump github.com/bradleyfalzon/ghinstallation/v2 from
2.17.0 to 2.18.0 in /example
([#&#8203;4084](https://redirect.github.com/google/go-github/issues/4084))
- chore: Bump go.opentelemetry.io/otel to v1.42.0
([#&#8203;4090](https://redirect.github.com/google/go-github/issues/4090))
- build(deps): Bump golang.org/x/crypto from 0.48.0 to 0.49.0 in
/example
([#&#8203;4081](https://redirect.github.com/google/go-github/issues/4081))
- build(deps): Bump golang.org/x/sync from 0.19.0 to 0.20.0 in /tools
([#&#8203;4078](https://redirect.github.com/google/go-github/issues/4078))
- build(deps): Bump golang.org/x/net from 0.51.0 to 0.52.0 in /scrape
([#&#8203;4079](https://redirect.github.com/google/go-github/issues/4079))
- test: Add fuzz test for `ParseWebHook`
([#&#8203;4076](https://redirect.github.com/google/go-github/issues/4076))
- feat: Add enterprise budgets API
([#&#8203;4069](https://redirect.github.com/google/go-github/issues/4069))
- feat: Add list organization fine-grained permissions
([#&#8203;4072](https://redirect.github.com/google/go-github/issues/4072))
- feat: Make `script/lint.sh` output simpler to read
([#&#8203;4073](https://redirect.github.com/google/go-github/issues/4073))
- chore: Speed up linting
([#&#8203;4071](https://redirect.github.com/google/go-github/issues/4071))
- build(deps): Bump go.opentelemetry.io/otel/sdk from 1.40.0 to 1.41.0
in /otel
([#&#8203;4065](https://redirect.github.com/google/go-github/issues/4065))
- build(deps): Bump go.opentelemetry.io/otel from 1.40.0 to 1.41.0 in
/otel
([#&#8203;4068](https://redirect.github.com/google/go-github/issues/4068))
- build(deps): Bump
go.opentelemetry.io/otel/exporters/stdout/stdouttrace from 1.40.0 to
1.41.0 in /example
([#&#8203;4062](https://redirect.github.com/google/go-github/issues/4062))
- build(deps): Bump go.opentelemetry.io/otel/sdk from 1.40.0 to 1.41.0
in /example
([#&#8203;4064](https://redirect.github.com/google/go-github/issues/4064))
- build(deps): Bump github.com/ProtonMail/go-crypto from 1.3.0 to 1.4.0
in /example
([#&#8203;4063](https://redirect.github.com/google/go-github/issues/4063))
- feat: Add `client_id` field to `App`
([#&#8203;4060](https://redirect.github.com/google/go-github/issues/4060))
- test: Simplify `CopilotService` tests
([#&#8203;4058](https://redirect.github.com/google/go-github/issues/4058))
- test: Fix flaky `TestDo_rateLimit_abuseRateLimitError_xRateLimitReset`
([#&#8203;4057](https://redirect.github.com/google/go-github/issues/4057))
- feat: Add support for enterprise audit log streaming API
([#&#8203;4035](https://redirect.github.com/google/go-github/issues/4035))
- feat: Add repository-level immutable releases settings
([#&#8203;4039](https://redirect.github.com/google/go-github/issues/4039))
- chore: Add `SAS` as a common initialism to `structfield`
([#&#8203;4054](https://redirect.github.com/google/go-github/issues/4054))
- fix: Fix data race on Windows
([#&#8203;4051](https://redirect.github.com/google/go-github/issues/4051))
- docs: Fix grammar in `README.md`
([#&#8203;4053](https://redirect.github.com/google/go-github/issues/4053))
- chore: Simplify form value assertions in tests
([#&#8203;4048](https://redirect.github.com/google/go-github/issues/4048))
- chore: Bump go-github from v83 to v84 in /scrape
([#&#8203;4050](https://redirect.github.com/google/go-github/issues/4050))

</details>

<details>
<summary>gitlab-org/api/client-go
(gitlab.com/gitlab-org/api/client-go)</summary>

###
[`v2.24.1`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.24.1)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.24.0...v2.24.1)

#### 2.24.1

##### 🐛 Bug Fixes

- fix: add FormattedText field to OrbitGraphStatus and OrbitStatus
([!2876](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2876))
by [Dmitry Gruzd](https://gitlab.com/dgruzd)

####
[2.24.1](https://gitlab.com/gitlab-org/api/client-go/compare/v2.24.0...v2.24.1)
(2026-05-05)
##### Bug Fixes

* add FormattedText field to OrbitGraphStatus and OrbitStatus
([9457ddc](9457ddc690))

###
[`v2.24.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.24.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.23.0...v2.24.0)

#### 2.24.0

##### 🚀 Features

- feat: Add search_type as attribute to search endpoints
([!2851](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2851))
by [Heidi Berry](https://gitlab.com/heidi.berry)

###
[2.24.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.23.0...v2.24.0)
(2026-05-04)
##### Features

* Add search_type as attribute to search endpoints
([4d345e9](4d345e9f76))

###
[`v2.23.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.23.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.22.0...v2.23.0)

#### 2.23.0

##### 🚀 Features

- feat: add OrbitService for Knowledge Graph endpoints
([!2870](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2870))
by [Dmitry Gruzd](https://gitlab.com/dgruzd)

##### 🔄 Other Changes

- chore(deps): update module buf.build/go/protovalidate to v1.2.0
([!2865](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2865))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[2.23.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.22.0...v2.23.0)
(2026-05-04)
##### Features

* add OrbitService for Knowledge Graph endpoints
([2ff460f](2ff460f3a8))

###
[`v2.22.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.22.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.21.0...v2.22.0)

#### 2.22.0

##### 🚀 Features

- Add package pipeline data.
([!2834](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2834))
by [Jimmy Spagnola](https://gitlab.com/jspagnola)

##### 🔄 Other Changes

- chore(deps): update module golang.org/x/text to v0.36.0
([!2874](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2874))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update golang docker tag
([!2873](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2873))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update docker docker tag to v29.4.1
([!2869](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2869))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- refactor(no-release): use HTTP status code constants
([!2868](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2868))
by [Oleksandr Redko](https://gitlab.com/alexandear)

###
[2.22.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.21.0...v2.22.0)
(2026-05-04)

###
[`v2.21.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.21.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.20.1...v2.21.0)

#### 2.21.0

##### 🚀 Features

- Add BulkImports API functions and tests
([!2846](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2846))
by [Kalyaan Kanugula](https://gitlab.com/kalyaan09)

##### 🔄 Other Changes

- Add missing `URLVariables` attribute to group_hooks
([!2866](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2866))
by [Mark Nessen](https://gitlab.com/mness)
- docs: fix incorrect phrase 'to that' -> 'so'
([!2861](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2861))
by [Bob Singh](https://gitlab.com/bobsingh.dev)
- docs: fix missing 'of' in contributing guide
([!2860](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2860))
by [Bob Singh](https://gitlab.com/bobsingh.dev)
- style: remove duplicated wording in Go version sentence
([!2859](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2859))
by [Bob Singh](https://gitlab.com/bobsingh.dev)

###
[2.21.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.20.1...v2.21.0)
(2026-04-27)

###
[`v2.20.1`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#2210-2026-04-27)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.20.0...v2.20.1)

#### 2.20.1

##### 🐛 Bug Fixes

- Fix potential panic in MergeRequest.UnmarshalJSON label detail loop
([!2858](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2858))
by [Zubeen](https://gitlab.com/syedzubeen)

####
[2.20.1](https://gitlab.com/gitlab-org/api/client-go/compare/v2.20.0...v2.20.1)
(2026-04-20)

#### 2.20.0

##### 🚀 Features

- Add missing system hook api options
([!2847](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2847))
by [Zack Knight](https://gitlab.com/zachkknowbe4)

##### 🔄 Other Changes

- chore(deps): update docker docker tag to v29.4.0
([!2854](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2854))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update module github.com/google/cel-go to v0.28.0
([!2855](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2855))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[`v2.20.0`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#2210-2026-04-27)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.19.0...v2.20.0)

#### 2.20.1

##### 🐛 Bug Fixes

- Fix potential panic in MergeRequest.UnmarshalJSON label detail loop
([!2858](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2858))
by [Zubeen](https://gitlab.com/syedzubeen)

####
[2.20.1](https://gitlab.com/gitlab-org/api/client-go/compare/v2.20.0...v2.20.1)
(2026-04-20)

#### 2.20.0

##### 🚀 Features

- Add missing system hook api options
([!2847](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2847))
by [Zack Knight](https://gitlab.com/zachkknowbe4)

##### 🔄 Other Changes

- chore(deps): update docker docker tag to v29.4.0
([!2854](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2854))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update module github.com/google/cel-go to v0.28.0
([!2855](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2855))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[`v2.19.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.19.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.18.0...v2.19.0)

#### 2.19.0

##### 🚀 Features

- feat: Add PackageRegistryAccessLevel to Project structs
([!2852](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2852))
by [Caleb Madara](https://gitlab.com/calebmadara58)

###
[2.19.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.18.0...v2.19.0)
(2026-04-15)
##### Features

* Add PackageRegistryAccessLevel to Project structs
([4ce63da](4ce63da952))

###
[`v2.18.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.18.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.17.0...v2.18.0)

#### 2.18.0

##### 🚀 Features

- Feat: Add support for application setting
secret_push_protection_available
([!2849](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2849))
by [Rizart Dona](https://gitlab.com/rizart_d)

##### 🔄 Other Changes

- fix: Correct Example Section in README
([!2850](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2850))
by [Jonathan Bowe](https://gitlab.com/boweflex)

###
[2.18.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.17.0...v2.18.0)
(2026-04-14)
##### Bug Fixes

* Correct Example Section in README
([c0759d9](c0759d99b2))

###
[`v2.17.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.17.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.16.0...v2.17.0)

#### 2.17.0

##### 🚀 Features

- Resolve "Add endpoint support for archiving/unarchiving groups"
([!2848](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2848))
by [Jonathan Bowe](https://gitlab.com/boweflex)

##### 🔄 Other Changes

- chore(deps): update docker docker tag to v29.3.1
([!2841](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2841))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(no-release): enable gocritic linter
([!2842](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2842))
by [Oleksandr Redko](https://gitlab.com/alexandear)
- chore(deps): update module golang.org/x/oauth2 to v0.36.0
([!2835](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2835))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update module golang.org/x/text to v0.35.0
([!2837](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2837))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[2.17.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.16.0...v2.17.0)
(2026-04-10)

###
[`v2.16.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.16.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.15.0...v2.16.0)

#### 2.16.0

##### 🚀 Features

- feat: Add PagesUniqueDomainDefaultEnabled to Settings API
([!2845](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2845))
by [Mohamed Mongy](https://gitlab.com/mohamedmongy96)

###
[2.16.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.15.0...v2.16.0)
(2026-04-04)
##### Features

* Add PagesUniqueDomainDefaultEnabled to Settings API
([d27f3af](d27f3af69a))

###
[`v2.15.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.15.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.14.0...v2.15.0)

#### 2.15.0

##### 🚀 Features

- feat: Add approved_at field in merge request approvals API
([!2844](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2844))
by [Mohamed Asan N](https://gitlab.com/hassyyy)

###
[2.15.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.14.0...v2.15.0)
(2026-04-04)
##### Features

* Add approved_at field in merge request approvals API
([528ac9e](528ac9ea36))

###
[`v2.14.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.14.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.13.0...v2.14.0)

#### 2.14.0

##### 🚀 Features

- feat: add support for
DisablePasswordAuthenticationForUsersWithSSOIdentities...
([!2839](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2839))
by [Lorenz Vonlanthen](https://gitlab.com/loelu)

###
[2.14.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.13.0...v2.14.0)
(2026-04-03)
##### Features

* add support for
DisablePasswordAuthenticationForUsersWithSSOIdentities...
([6b88f05](6b88f05609))

###
[`v2.13.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.13.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.12.0...v2.13.0)

#### 2.13.0

##### 🚀 Features

- feat: Added WithAuthSourceStrategy option to allow configuring
multiple token source priority
([!2815](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2815))
by [Павлов Александр](https://gitlab.com/alexpts)

###
[2.13.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.12.0...v2.13.0)
(2026-04-01)
##### Features

* Added WithAuthSourceStrategy option to allow configuring multiple
token source priority
([2261c80](2261c80c28))

###
[`v2.12.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.12.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.11.0...v2.12.0)

#### 2.12.0

##### 🚀 Features

- fix: update HostKey field name to FingerprintSHA256 for consistency
([!2840](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2840))
by [Oleksandr Redko](https://gitlab.com/alexandear)
- Add push mirror host_keys to the go client.
([!2832](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2832))
by [Jimmy Spagnola](https://gitlab.com/jspagnola)

##### 🔄 Other Changes

- Fix: improve URL validation warning logging context and correct typo
([!2830](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2830))
by [Bob Singh](https://gitlab.com/bobsingh.dev)
- chore(no-release): fix typos in comments and unexported function
([!2831](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2831))
by [Oleksandr Redko](https://gitlab.com/alexandear)

###
[2.12.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.11.0...v2.12.0)
(2026-04-01)
##### Bug Fixes

* update HostKey field name to FingerprintSHA256 for consistency
([1b7fcfb](1b7fcfb0ed))

###
[`v2.11.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.11.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.10.0...v2.11.0)

#### 2.11.0

##### 🚀 Features

- Deprecate project approval password auth, add reauth to approve
([!2825](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2825))
by [Heidi Berry](https://gitlab.com/heidi.berry)

##### 🔄 Other Changes

- Fix typo in UpdateLabel comment
([!2827](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2827))
by [Bob Singh](https://gitlab.com/bobsingh.dev)
- Fix runner comment typo
([!2828](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2828))
by [Bob Singh](https://gitlab.com/bobsingh.dev)

###
[2.11.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.10.0...v2.11.0)
(2026-03-30)

###
[`v2.10.0`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#1380-2026-02-19)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.9.0...v2.10.0)

##### Features

- **events:** Add missing parameters for label operations and update
documentation links
([11b9f08](11b9f08b37))
- **labels:** add missing params and edit links
([ec1b92b](ec1b92bff4))

#### 1.37.0

##### 🚀 Features

- Support system & system\_action fields for merge event attributes
([!2737](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2737))
by [Artem Mikheev](https://gitlab.com/renbou)

##### 🔄 Other Changes

- Update links of geo\_sites.go
([!2782](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2782))
by [Mohamed Mongy](https://gitlab.com/mohamedmongy96)
- chore(deps): update dependency golangci-lint to v2.10.1
([!2770](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2770))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update golangci/golangci-lint docker tag to v2.10.1
([!2771](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2771))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update golangci/golangci-lint docker tag to v2.10.0
([!2769](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2769))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update dependency golangci-lint to v2.10.0
([!2768](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2768))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[`v2.9.0`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#1330-2026-02-13)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.8.0...v2.9.0)

#### 1.32.0

##### 🚀 Features

- Implement endpoints for runner controller scopes
([!2758](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2758))
by [Timo Furrer](https://gitlab.com/timofurrer)

##### 🔄 Other Changes

- test(namespaces): Address test feedback to simplify the test
([!2744](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2744))
by [Patrick Rice](https://gitlab.com/PatrickRice)
- chore(deps): update golangci/golangci-lint docker tag to v2.9.0
([!2755](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2755))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update dependency golangci-lint to v2.9.0
([!2754](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2754))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[`v2.8.0`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#1130-2026-01-12)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.7.0...v2.8.0)

##### Features

- **groups:** add Active parameter to ListGroupProjects
([dec511a](dec511a199))

#### 1.12.0

##### 🚀 Features

- feat: add EmojiEvents field support to Project Webhooks
([!2653](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2653))
by [Yugan](https://gitlab.com/yugannkt)

##### 🔄 Other Changes

- chore(deps): update dependency golangci-lint to v2.8.0
([!2650](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2650))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- refactor(no-release): use errors.New instead of fmt.Errorf
([!2644](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2644))
by [Oleksandr Redko](https://gitlab.com/alexandear)

###
[`v2.7.0`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#170-2025-12-06)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.6.0...v2.7.0)

##### Features

- **users:** Add support for a user to see only one file diff per page
([e2a9e09](e2a9e09e79))

#### 1.6.0

##### 🚀 Features

- feat: add admin compliance policy settings API
([!2610](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2610))
by [Hannes Lange](https://gitlab.com/hlange4)

##### 🔄 Other Changes

- doc: fix typo
([!2603](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2603))
by [Guilhem Bonnefille](https://gitlab.com/gbonnefille)
- chore(deps): update golangci/golangci-lint docker tag to v2.7.1
([!2611](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2611))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update docker docker tag to v29.1.2
([!2609](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2609))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(deps): update golangci/golangci-lint docker tag to v2.7.0
([!2608](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2608))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[`v2.6.0`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#01590-2025-11-04)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.5.0...v2.6.0)

##### Features

- **integrations:** add group integration API endpoints for Jira
([09e18ee](09e18ee598))

#### 0.158.0

##### 🚀 Features

- Add support to send variables for GraphQL queries
([!2562](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2562))
by [rafasf](https://gitlab.com/rafasf)

##### 🔄 Other Changes

- chore(deps): update module cel.dev/expr to v0.25.0
([!2560](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2560))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- chore(no-release): standardize GitLab name capitalization
([!2551](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2551))
by [Zubeen](https://gitlab.com/syedzubeen)
- chore(deps): update golangci/golangci-lint docker tag to v2.6.0
([!2558](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2558))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- refactor: moved comments to interface 2
([!2557](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2557))
by [Zubeen](https://gitlab.com/syedzubeen)
- refactor: moved comments to interface
([!2556](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2556))
by [Zubeen](https://gitlab.com/syedzubeen)
- refactor(test): avoid panic in tests with goroutines
([!2553](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2553))
by [Oleksandr Redko](https://gitlab.com/alexandear)

### [`v2.5.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.5.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.4.0...v2.5.0)

#### 2.5.0

##### 🚀 Features

- feat(workitems): Implement `UpdateWorkItem()`
([!2793](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2793))
by [Carlos Corona](https://gitlab.com/ccorona2)

##### 🔄 Other Changes

- chore(deps): update dependency golangci-lint to v2.11.2
([!2810](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2810))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)
- test(no-release): replace reflect.DeepEqual with testify
([!2809](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2809))
by [Oleksandr Redko](https://gitlab.com/alexandear)
- feat: allow OAuth success callback page to self-close when possible
([!2808](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2808))
by [Case Taintor](https://gitlab.com/case.taintor)
- chore(deps): update dependency golangci-lint to v2.11.1
([!2806](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2806))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[2.5.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.4.0...v2.5.0)
(2026-03-09)
##### Features

* allow OAuth success callback page to self-close when possible
([dca2e12](dca2e12095))
* **workitems:** Implement `UpdateWorkItem()`
([b93a55e](b93a55e316))

### [`v2.4.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.4.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.3.0...v2.4.0)

#### 2.4.0

##### 🚀 Features

- Reflect latest runner controller API changes
([!2803](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2803))
by [Timo Furrer](https://gitlab.com/timofurrer)

##### 🔄 Other Changes

- chore(deps): update docker docker tag to v29.3.0
([!2804](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2804))
by [GitLab Dependency
Bot](https://gitlab.com/gitlab-dependency-update-bot)

###
[2.4.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.3.0...v2.4.0)
(2026-03-06)

### [`v2.3.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.3.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.2.1...v2.3.0)

#### 2.3.0

##### 🚀 Features

- feat: add new endpoint for fetching all the runner manager information
([!2802](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2802))
by [Aayush](https://gitlab.com/Aayush-Saini)

###
[2.3.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.2.1...v2.3.0)
(2026-03-05)
##### Features

* add new endpoint for fetching all the runner manager information
([d4755b7](d4755b7966))

###
[`v2.2.1`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#230-2026-03-05)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.2.0...v2.2.1)

##### Features

- add new endpoint for fetching all the runner manager information
([d4755b7](d4755b7966))

#### 2.2.1

##### 🐛 Bug Fixes

- fix: Add `/v2` suffix to module path.
([!2801](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2801))
by [Florian Forster](https://gitlab.com/fforster)

####
[2.2.1](https://gitlab.com/gitlab-org/api/client-go/compare/v2.2.0...v2.2.1)
(2026-03-04)

##### Bug Fixes

- Add `/v2` suffix to module path.
([4237f6a](4237f6aa29)),
closes
[#&#8203;2239](https://gitlab.com/gitlab-org/api/client-go/issues/2239)

#### 2.2.0

##### 🚀 Features

- feat(workitems): Implement `CreateWorkItem()`.
([!2751](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2751))
by [Florian Forster](https://gitlab.com/fforster)

###
[`v2.2.0`](https://gitlab.com/gitlab-org/api/client-go/blob/HEAD/CHANGELOG.md#230-2026-03-05)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.1.0...v2.2.0)

##### Features

- add new endpoint for fetching all the runner manager information
([d4755b7](d4755b7966))

#### 2.2.1

##### 🐛 Bug Fixes

- fix: Add `/v2` suffix to module path.
([!2801](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2801))
by [Florian Forster](https://gitlab.com/fforster)

####
[2.2.1](https://gitlab.com/gitlab-org/api/client-go/compare/v2.2.0...v2.2.1)
(2026-03-04)

##### Bug Fixes

- Add `/v2` suffix to module path.
([4237f6a](4237f6aa29)),
closes
[#&#8203;2239](https://gitlab.com/gitlab-org/api/client-go/issues/2239)

#### 2.2.0

##### 🚀 Features

- feat(workitems): Implement `CreateWorkItem()`.
([!2751](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2751))
by [Florian Forster](https://gitlab.com/fforster)

### [`v2.1.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.1.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v2.0.0...v2.1.0)

#### 2.1.0

##### 🚀 Features

- feat(workitems): Add more fields to WorkItem
([!2795](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2795))
by [Florian Forster](https://gitlab.com/fforster)

##### 🔄 Other Changes

- Implement body preserver to enable HTTP response body streaming
([!2746](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2746))
by [Timo Furrer](https://gitlab.com/timofurrer)

###
[2.1.0](https://gitlab.com/gitlab-org/api/client-go/compare/v2.0.0...v2.1.0)
(2026-03-03)
##### Features

* **workitems:** Add more fields to WorkItem
([7088f6f](7088f6f229))

### [`v2.0.0`](https://gitlab.com/gitlab-org/api/client-go/tags/v2.0.0)

[Compare
Source](https://gitlab.com/gitlab-org/api/client-go/compare/v1.46.0...v2.0.0)

#### 2.0.0

##### 💥 Breaking Changes

- Release client-go 2.0
([!2763](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2763))
by [Patrick Rice](https://gitlab.com/PatrickRice)

##### 🔄 Other Changes

- Addtl 2 0 changes
([!2796](https://gitlab.com/gitlab-org/api/client-go/-/merge_requests/2796))
by [Patrick Rice](https://gitlab.com/PatrickRice)

###
[2.0.0](https://gitlab.com/gitlab-org/api/client-go/compare/v1.46.0...v2.0.0)
(2026-03-02)

* Release client-go 2.0
([47b65ee](47b65ee907))

##### Bug Fixes

* **ci:** update gocover-cobertura to v1.4.0 for Go 1.24+ compatibility
([1d03b20](1d03b20802))
* **group_members:** using ISOTime instead of time.Time for
BillableUserMembership.ExpiresAt
([e7e58c6](e7e58c69c1))
* package protection access level variable type
([5574bbb](5574bbbf2f))
* **workitems:** Handle absent status widget in `WorkItem`.
([859fb26](859fb26f28))

##### Features

* use Nullable[int64] for label priority
([096ed09](096ed098d1))

##### BREAKING CHANGES

* Release 2.0

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - Only on Monday (`* * * * 1`)
- Automerge
  - At any time (no schedule defined)

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

♻ **Rebasing**: Whenever PR is behind base branch, 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](https://redirect.github.com/renovatebot/renovate).

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

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-05-11 07:00:29 +00:00
pomidorry
67f86bc3fe feat(api): add last_sync to repository API (#37566)
This PR adds a new repository API field, `mirror_last_sync_at`, to
expose the timestamp of the last successful pull mirror sync.

Unlike `mirror_updated`, this field does not affect mirror scheduling
and is updated only after a successful pull sync. Failed sync attempts
leave the value unchanged.

What changed

- added `mirror_last_sync_at` to the repository API response
- updated pull mirror sync flow to persist the timestamp only on
successful sync
- kept `mirror_updated` behavior unchanged for queue/scheduling purposes

`mirror_updated` is currently tied to mirror queue behavior, so it
cannot safely represent the last successful sync time. The new field
makes that state explicit for API consumers without changing scheduling
semantics.

---------

Signed-off-by: pomidorry <106489913+Pomidorry@users.noreply.github.com>
Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Giteabot <teabot@gitea.io>
2026-05-10 20:07:56 +00:00
Copilot
0a3aaeafe7 refactor(log): replace log.Critical with log.Error (#37624)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: wxiaoguang <2114189+wxiaoguang@users.noreply.github.com>
2026-05-09 16:32:49 +00:00
silverwind
ce089f498b fix: improve actions status icons and texts (#37206)
Action runs, jobs and steps have 8 statuses but the UI only showed 5
(from the commit status api) for the latter two. Align all 8 to GitHub
as closely as possible:

  - waiting — `octicon-circle` (hollow circle), gray
  - blocked — `octicon-blocked` (slashed circle), yellow
  - running — `gitea-running` (rotating spinner), yellow
  - cancelled — `octicon-stop` (gray), was `octicon-x` (red)

Descriptions also aligned with GitHub:

  - "Has started running" → "In progress"
  - "Has been cancelled" → "Cancelled after {dur}"
  - "Has been skipped" → "Skipped"

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

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Signed-off-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.6) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Nicolas <bircni@icloud.com>
2026-05-09 15:24:08 +08:00
silverwind
29676adfd3 fix: treat email addresses case-insensitively (#37600)
Fixes #36184 and three more discovered cases.

---
This PR was written with the help of Claude Opus 4.7

---------

Signed-off-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Nicolas <bircni@icloud.com>
2026-05-08 15:14:33 +00:00
Lunny Xiao
7dc3087acd fix(git): Fix smart http request scope bug (#37583)
Co-authored-by: Nicolas <bircni@icloud.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: silverwind <me@silverwind.io>
2026-05-08 08:30:23 +02:00
silverwind
82d40296b0 chore(deps): bump tool deps and pin, update golangci-lint (#37574)
1. Pin all makefile go deps to exact version, renovate will bump them in the future
2. Bump all deps and golangci-lint and fix all new issues, most are from modernize

Signed-off-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-05-08 04:49:34 +00:00
Nicolas
601c6eb1a0 fix(actions): report individual step status in workflow job API response (#37592)
When a workflow job failed, the API response reported all steps as
failed — even steps that had completed successfully before the failing
step. `ToActionWorkflowJob` was calling `ToActionsStatus(job.Status)`
for every step instead of `ToActionsStatus(step.Status)`, so the job's
overall conclusion was propagated to each step.

Each `ActionTaskStep` has its own `Status` field that tracks the actual
outcome of that step independently of the job result.

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-07 20:30:34 +02:00
Nicolas
c9b9e376fb fix: Invalid UTF-8 commit messages in JSON API responses (#37542) 2026-05-07 16:19:45 +02:00
Nicolas
2200ed7499 fix: use consistent GetUser family functions (#37553)
fixes adding collaborative owners in Actions settings when the user or
organization name contains capital letters.

Fixes #37548

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-07 06:10:19 +00:00
silverwind
97211bf0c5 refactor(deps): migrate from nektos/act fork to gitea/runner (#37557)
Migrate to https://gitea.com/gitea/runner/releases/tag/v1.0.0 which
includes the `act` package directory previously referenced by
`nektos/act`.

Signed-off-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-06 05:54:31 +02:00
Sebastian Ertz
89a49de0fd Update go js py dependencies (#37525)
| go | from | to |
| --- | --- | --- |
| connectrpc.com/connect | `1.19.1 ` | `1.19.2` |
| github.com/Azure/go-ntlmssp | `0.1.0` | `0.1.1` |
| github.com/alecthomas/chroma/v2 | `2.23.1` | `2.24.1` |
| github.com/aws/aws-sdk-go-v2/credentials | `1.19.15` | `1.19.16` |
| github.com/aws/aws-sdk-go-v2/service/codecommit | `1.33.13` |
`1.33.14` |
| github.com/blevesearch/bleve/v2 | `2.5.7` | `2.6.0` |
| github.com/caddyserver/certmagic | `0.25.2` | `0.25.3` |
| github.com/fsnotify/fsnotify | `1.9.0` | `1.10.1` |
| github.com/getkin/kin-openapi | `0.134.0` | `0.137.0` |
| github.com/go-co-op/gocron/v2 | `2.21.0` | `2.21.1` |
| github.com/go-sql-driver/mysql | `1.9.3` | `1.10.0` |
| github.com/go-webauthn/webauthn | `0.16.5` | `0.17.2` |
| github.com/klauspost/compress | `1.18.5` | `1.18.6` |
| github.com/mattn/go-isatty | `0.0.21` | `0.0.22` |
| github.com/mattn/go-sqlite3 | `1.14.42` | `1.14.44` |
| github.com/minio/minio-go/v7 | `7.0.100` | `7.1.0` |
| github.com/redis/go-redis/v9 | `9.18.0` | `9.19.0` |
| google.golang.org/grpc | `1.80.0` | `1.81.0` |
| gopkg.in/ini.v1 | `1.67.1` | `1.67.2` |


| js | from | to |
| --- | --- | --- |
| @codemirror/search | `6.6.0` | `6.7.0` |
| @primer/octicons | `19.24.1` | `19.25.0` |
| clippie | `4.1.14` | `4.1.15` |
| easymde | `2.20.0` | `2.21.0` |
| postcss | `8.5.10` | `8.5.13` |
| rolldown-license-plugin | `3.0.1` | `3.0.4` |
| swagger-ui-dist | `5.32.4` | `5.32.5` |
| vite | `8.0.9` | `8.0.10` |
| vite-string-plugin | `2.0.2` | `2.0.4` |
| vue | `3.5.32` | `3.5.33` |
| @typescript-eslint/parser | `8.59.0` | `8.59.1` |
| eslint | `10.2.1` | `10.3.0` |
| eslint-plugin-vue | `10.8.0` | `10.9.0` |
| globals | `17.5.0` | `17.6.0` |
| material-icon-theme | `5.33.1` | `5.34.0` |
| spectral-cli-bundle | `1.0.7` | `1.0.8` |
| stylelint | `17.8.0` | `17.10.0` |
| typescript-eslint | `8.59.0` | `8.59.1` |
| updates | `17.16.3` | `17.16.8` |
| vitest | `4.1.4` | `4.1.5` |
| vue-tsc | `3.2.7` | `3.2.8` |
| pnpm | `10.33.0` | `10.33.2` |

| py | from | to |
| --- | --- | --- |
| click | `8.3.2` | `8.3.3` |
| pathspec | `1.0.4` | `1.1.1` |

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-05-04 19:27:47 +00:00
silverwind
198ef500d2 Don't unblock run-level-concurrency-blocked runs in the resolver (#37461)
Fixes #37446.

The job-status resolver in `checkJobsOfCurrentRunAttempt` only
considered `needs` and job-level concurrency when transitioning jobs out
of `Blocked`. When something drove the resolver against a run blocked
solely by workflow-level concurrency — for example, a sibling run in the
same group entering the queue and triggering `EmitJobsIfReadyByRun` —
the run's job silently became `Waiting` while another run still held the
concurrency group, and the runner could pick it up, defeating the
concurrency guarantee.

The fix bails out of the resolver when the run's latest attempt is still
blocked by run-level concurrency. `checkRunConcurrency` re-evaluates
when the holding run finishes.

Covered by a unit test
(`Test_checkJobsOfCurrentRunAttempt_RunLevelConcurrencyKeepsJobsBlocked`
in `services/actions/job_emitter_test.go`) that sets up a Running holder
attempt and a Blocked sibling attempt in the same concurrency group
directly in the DB, calls `checkJobsOfCurrentRunAttempt`, and asserts
the blocked job stays `Blocked`. Fails on master, passes with the fix.

---
This PR was written with the help of Claude Opus 4.7

---------

Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-05-04 11:10:42 +00:00
Rayan Salhab
c4c50bee7f fix: persist mirror repository metadata (#37519)
The migration repository model now carries Website alongside Description, the GitHub/Gitea downloaders populate it, and mirror finalization persists both description and website so the About section is not empty after creating a mirror.

Fixes #37495

---------

Signed-off-by: cyphercodes <cyphercodes@users.noreply.github.com>
Co-authored-by: cyphercodes <cyphercodes@users.noreply.github.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-03 16:47:02 +00:00
Jason Learst
0385e4783e fix: merge autodetect can't close other PRs but only the last one when multiple PRs are pushed at once (#37512)
Make `getMergeCommit` correctly handle multiple commits output from `git rev-list --ancestry-path --merges ...`

Fixes #37510.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-05-02 18:40:50 +00:00
wxiaoguang
a2a5ef8d0e Fix update branch protection order (#37508)
Regression of changed behavior or Golang JSON v2 package

Fix #37506
2026-05-02 16:32:36 +00:00
rootful
3d838ef96a Fix mCaptcha broken after Vite migration (#37492)
After the Webpack-to-Vite migration (#37002), mCaptcha stopped working
entirely on the registration page, throwing an error:

`TypeError: setting getter-only property "INPUT_NAME"`

This fix stops trying to mutate the read-only INPUT_NAME export. Instead
it probes for the Widget constructor at module.default (direct) or
module.default.default (CJS-wrapped), constructs the widget, and then
renames the hidden input element it creates to m-captcha-response which
is the field name Gitea's backend reads from the submitted form.

Generative AI was used to help with making this PR.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Giteabot <teabot@gitea.io>
2026-05-02 17:21:56 +02:00
Lunny Xiao
48cea1fb79 Fix basic auth bug (#37486) 2026-04-30 20:34:43 -07:00
Icy Avocado
81692ceafa Allow multiple projects per issue and pull requests (#36784)
Add ability to add and remove multiple projects per issue
and pull request.

Resolve #12974

---------

Signed-off-by: Icy Avocado <avocado@ovacoda.com>
Co-authored-by: Tyrone Yeh <siryeh@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: OpenCode (gpt-5.2-codex) <opencode@openai.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-04-30 22:38:05 +08:00
wxiaoguang
2b2ec6af85 Refactor compare diff/pull page (1) (#37481)
1. Rename CompareInfo.MergeBase to CompareBase, it is not merge base
2. Remove unused template variables `ctx.Data["Username"]` and
`ctx.Data["Reponame"]`
3. Decouple some template variable accesses, use typed struct

---------

Co-authored-by: Nicolas <bircni@icloud.com>
2026-04-29 18:32:46 +00:00
Myers Carpenter
9e031eb3df Serve OpenAPI 3.0 spec at /openapi.v1.json (#37038)
Add a build-time conversion step that transforms the existing Swagger
2.0 spec into an OpenAPI 3.0 spec. The OAS3 spec is served alongside the
existing Swagger 2.0 spec, enabling API clients that require OAS3 to
generate code directly from Gitea's API.

This is not to be an answer to how gitea handles OAS3 long term,
but a way to use what we have to move a step forward.

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-04-29 20:47:52 +08:00
Myers Carpenter
18762c7748 Batch-load related data in actions run, job, and task API endpoints (#37032)
Avoid per-item DB queries in ListRuns, ListJobs, and ListActionTasks by
batch-loading trigger users, repositories, and task attributes before
the conversion loop. Remove ReferencesGitRepo from the /actions route
group since no task/run endpoints use it.

Added tests for these endpoints as well.

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-04-29 08:39:43 +00:00
Nicolas
deec2b0929 Fix compare dropdown for branches without common history (#37470) 2026-04-28 23:03:50 +02:00
Nicolas
fedc9dc993 FIX: URL sanitization to handle schemeless credentials (#37440)
Fixes #37435

---------

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Giteabot <teabot@gitea.io>
2026-04-28 23:26:08 +08:00
Rayan Salhab
c8e67799b2 Fix scheduled action panic with null event payload (#37459)
This fixes the scheduled action panic when an event payload is JSON
`null` by initializing the payload map before adding `schedule`. It also
adds regression coverage for the null-payload case.

Fixes #37447.

Testing:
- `go test -tags 'sqlite sqlite_unlock_notify' ./services/actions -run
'^TestWithScheduleInEventPayload$' -count=1`
- Local note: this agent ran the command as root with a temporary
`GITEA_TEST_CONF=custom/conf/app-test-root.ini` file that only set
`I_AM_BEING_UNSAFE_RUNNING_AS_ROOT = true`.

Authorship: cyphercodes; AI assistance disclosed: Hermes Agent
(GPT-5.5).

---------

Co-authored-by: cyphercodes <cyphercodes@users.noreply.github.com>
Co-authored-by: Hermes Agent (GPT-5.5) <hermes-agent@users.noreply.github.com>
Co-authored-by: Nicolas <bircni@icloud.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: Giteabot <teabot@gitea.io>
2026-04-28 01:58:04 +00:00
wxiaoguang
89d358d8a7 Fix script error alert (#37458)
After using CSP nonce, the "onerror" doesn't work anymore. Change it to
use a global variable to detect

Also help users like #37379 to catch errors more easily.

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
2026-04-28 01:08:50 +02:00
wxiaoguang
b45be5b20d Add CurrentURL template variable back (#37444)
Because some custom template users need it, also add a new test and
comments
2026-04-27 14:19:46 +08:00
Copilot
45b4fffae4 refactor: use named Permission field in Repository struct instead of anonymous embedding (#37441)
The `Repository` struct in `services/context/repo.go` embedded
`access_model.Permission` anonymously, causing all permission methods to
be promoted directly onto `Repository`. This made it unclear at call
sites whether a method belonged to `Repository` itself or to its
embedded `Permission`.

### Changes

- **`services/context/repo.go`**: Replace anonymous
`access_model.Permission` with named field `Permission
access_model.Permission`
- **49 files** updated to route permission method calls through the
named field:

```go
// Before
ctx.Repo.IsAdmin()
ctx.Repo.CanWrite(unit.TypeCode)
ctx.Repo.CanReadIssuesOrPulls(isPull)
slices.ContainsFunc(unitTypes, ctx.Repo.CanWrite)

// After
ctx.Repo.Permission.IsAdmin()
ctx.Repo.Permission.CanWrite(unit.TypeCode)
ctx.Repo.Permission.CanReadIssuesOrPulls(isPull)
slices.ContainsFunc(unitTypes, ctx.Repo.Permission.CanWrite)
```

Methods defined directly on `*Repository` (`CanWriteToBranch`,
`CanCreateBranch`, etc.) are unchanged.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: wxiaoguang <2114189+wxiaoguang@users.noreply.github.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: Nicolas <bircni@icloud.com>
2026-04-26 20:18:28 +00:00
wxiaoguang
55c9b936cb Refactor pull request view (3) (#37439)
Move some complex logic to backend

Rename `pr.CanAutoMerge` to `pr.IsStatusMergeable`
2026-04-26 19:03:41 +00:00
wxiaoguang
068b59aa97 Make GetPossibleUserByID can handle deleted user (#37430)
Make sure deleted user won't cause 500 error, simplify the caller's code
2026-04-26 16:57:53 +00:00
Copilot
9b9fb95559 Improve testing init, clean up webhook tests (#37412)
Avoid webhook test fixtures affect other tests (be triggered)

Also fixed more testing problems including path init, global config
pollution & conflict

---------

Signed-off-by: silverwind <me@silverwind.io>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: wxiaoguang <2114189+wxiaoguang@users.noreply.github.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
2026-04-25 18:55:18 +00:00
Copilot
c5c9713ed4 refactor: serve site manifest via /assets/site-manifest.json endpoint (#37405)
Slightly reduce the page size for every request, and don't need to use `href="data:`

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: wxiaoguang <2114189+wxiaoguang@users.noreply.github.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-04-24 13:00:59 +00:00
Sai Asish Y
6826321570 feat(security): set X-Content-Type-Options: nosniff by default (#37354)
Fixes #37316.

---------

Signed-off-by: SAY-5 <SAY-5@users.noreply.github.com>
Co-authored-by: SAY-5 <SAY-5@users.noreply.github.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-04-24 11:21:34 +00:00
wxiaoguang
1483291a87 Refactor pull request view (1) (#37380)
Refactor preparePullViewPullInfo and related functions, split them into
small ones:

* preparePullViewPullInfo creates PullRequestViewInfo struct
* if the PR is merged: prepareView**Merged**PullInfo
* if the PR is open: prepareView**Open**PullInfo

In prepareViewMergedPullInfo and preparePullViewFillInfo: call
preparePullView**FillInfo** consistnently

preparePullViewFillInfo calls preparePullViewFill**CompareInfo** and
preparePullViewFill**CommitStatusInfo**
2026-04-24 10:24:41 +00:00
Nikita Vakula
3b2fd9791c Allow fast-forward-only merge when signed commits are required (#37335)
Fast-forward-only creates no Gitea commit, so skip the "can Gitea sign"
precheck for it. Pre-check head-commit verification for styles that
preserve user commits on the target (merge, fast-forward-only) so a PR
with unsigned commits surfaces a localized error instead of a 500 at the
pre-receive hook. The dropdown still shows every configured style; the
avatar and signing warning toggle per selection via
data-pull-merge-style.

Fixes #12272 

**Note**: Admin force-merge does not bypass the new head-commits check.
This matches the existing `isSignedIfRequired` behavior.

Signed-off-by: Nikita Vakula <programmistov.programmist@gmail.com>
Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-04-24 00:04:32 +00:00
Zettat123
899ede1d55 Introduce ActionRunAttempt to represent each execution of a run (#37119)
This PR introduces a new `ActionRunAttempt` model and makes Actions
execution attempt-scoped.

**Main Changes**

- Each workflow run trigger generates a new `ActionRunAttempt`. The
triggered jobs are then associated with this new `ActionRunAttempt`
record.
- Each rerun now creates:
  - a new `ActionRunAttempt` record for the workflow run
- a full new set of `ActionRunJob` records for the new
`ActionRunAttempt`
- For jobs that need to be rerun, the new job records are created as
runnable jobs in the new attempt.
- For jobs that do not need to be rerun, new job records are still
created in the new attempt, but they reuse the result of the previous
attempt instead of executing again.
- Introduce `rerunPlan` to manage each rerun and refactored rerun flow
into a two-phase plan-based model:
  - `buildRerunPlan`
  - `execRerunPlan`
- `RerunFailedWorkflowRun` and `RerunFailed` no longer directly derives
all jobs that need to be rerun; this step is now handled by
`buildRerunPlan`.
- Converted artifacts from run-scoped to attempt-scoped:
  - uploads are now associated with `RunAttemptID`
  - listing, download, and deletion resolve against the current attempt
- Added attempt-aware web Actions views:
- the default run page shows the latest attempt
(`/actions/runs/{run_id}`)
- previous attempt pages show jobs and artifacts for that attempt
(`/actions/runs/{run_id}/attempts/{attempt_num}`)
- New APIs:
  - `/repos/{owner}/{repo}/actions/runs/{run}/attempts/{attempt}`
  - `/repos/{owner}/{repo}/actions/runs/{run}/attempts/{attempt}/jobs`
- New configuration `MAX_RERUN_ATTEMPTS`
  - https://gitea.com/gitea/docs/pulls/383

**Compatibility**

- Existing legacy runs use `LatestAttemptID = 0` and legacy jobs use
`RunAttemptID = 0`. Therefore, these fields can be used to identify
legacy runs and jobs and provide backward compatibility.
- If a legacy run is rerun, an `ActionRunAttempt` with `attempt=1` will
be created to represent the original execution. Then a new
`ActionRunAttempt` with `attempt=2` will be created for the real rerun.
- Existing artifact records are not backfilled; legacy artifacts
continue to use `RunAttemptID = 0`.

**Improvements**

- It is now easier to inspect and download logs from previous attempts.
-
[`run_attempt`](https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#github-context)
semantics are now aligned with GitHub.
- > A unique number for each attempt of a particular workflow run in a
repository. This number begins at 1 for the workflow run's first
attempt, and increments with each re-run.
- Rerun behavior is now clearer and more explicit.
- Instead of mutating the status of previous jobs in place, each rerun
creates a new attempt with a full new set of job records.
- Artifacts produced by different reruns can now be listed separately.

Signed-off-by: Zettat123 <zettat123@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: Giteabot <teabot@gitea.io>
2026-04-23 23:33:41 +00:00
Lunny Xiao
aedf4e84f5 Move review request functions to a standalone file (#37358)
Assignee functions should be different from review request functions.
2026-04-23 23:01:04 +00:00
wxiaoguang
1af16679c3 Fix repo init README EOL (#37388)
Fix #27120

By the way, refactor ReserveLineBreakForTextarea to NormalizeStringEOL
2026-04-23 18:33:16 +00:00
pisarz77
85192c2e9f Fix org team assignee/reviewer lookups for team member permissions (#37365)
Fix team members missing from assignee list when `team_unit.access_mode`
is 0 but the doer is owner.

Fix  #34871

1. Use `GetTeamUserIDsWithAccessToAnyRepoUnit` for repo assignee list
2. Load assignee list for project issues directly
3. Use `GetTeamUserIDsWithAccessToAnyRepoUnit` for repo reviewer list

Signed-off-by: Jakub Pisarczyk <pisarz77@gmail.com>
Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
Co-authored-by: Giteabot <teabot@gitea.io>
2026-04-23 18:14:29 +02:00
silverwind
7947851e57 Remove external service dependencies in migration tests (#36866)
Fix #36859

Replace live third-party API calls in migration tests with a
fixture-based HTTP mock server. Fixtures are committed so tests run
offline by default; live recording is gated per service on an API-token
env var.

Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
2026-04-23 15:18:53 +00:00