Commit Graph
24640 Commits
Author SHA1 Message Date
GustedandGusted 3934e5fea3 chore: add comment for ap migration (#11144)
When merging #9254 I didn't make the mental note that v14 is already out and the migration would now apply to v15. Document this mistake.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11144
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Reviewed-by: Panagiotis "Ivory" Vasilopoulos <git@n0toose.net>
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2026-03-09 17:09:07 +01:00
Renovate BotandGusted fc82d7319a Update module github.com/minio/minio-go/v7 to v7.0.99 (forgejo) (#11568)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11568
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-09 16:31:21 +01:00
Renovate BotandGusted 9f6e04c677 Update dependency katex to v0.16.35 (forgejo) (#11576)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11576
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-09 16:30:18 +01:00
Renovate BotandGusted b2e7f08246 Update dependency webpack to v5.105.4 (forgejo) (#11558)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11558
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-09 16:29:07 +01:00
Michael KrieseandBeowulf 70081c9297 chore: cleanup Makefile (#11587)
Leftover of #7680

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11587
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
Co-committed-by: Michael Kriese <michael.kriese@visualon.de>
2026-03-09 15:19:28 +01:00
forgejo-release-managerandBeowulf cfd4d53e32 chore(release-notes): Forgejo v14.0.3 [skip ci] (#11583)
https://codeberg.org/forgejo/forgejo/milestone/55554
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11583
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: forgejo-release-manager <contact-forgejo-release-manager@forgejo.org>
Co-committed-by: forgejo-release-manager <contact-forgejo-release-manager@forgejo.org>
2026-03-09 07:00:32 +01:00
forgejo-release-managerandBeowulf 192052e3e4 chore(release-notes): Forgejo v11.0.11 [skip ci] (#11582)
https://codeberg.org/forgejo/forgejo/milestone/47802
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11582
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: forgejo-release-manager <contact-forgejo-release-manager@forgejo.org>
Co-committed-by: forgejo-release-manager <contact-forgejo-release-manager@forgejo.org>
2026-03-09 06:58:38 +01:00
Beowulf 6dbf72975d fix: Forgejo Security Patches, 2026-03-09 (#11513)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11513
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-09 05:54:05 +01:00
Mathieu Fenniak c69ba8b1c1 chore: release notes from #11514 & #11515 backports 2026-03-08 20:07:52 -06:00
0koandGusted d665904a22 feat(ui): improve visibility of counters inside of switch items (#11472)
Apply the feature from https://codeberg.org/forgejo/forgejo/pulls/2935 on element from https://codeberg.org/forgejo/forgejo/pulls/6459 (which was applied to notifications page in https://codeberg.org/forgejo/forgejo/pulls/6542).

A few small semi-related refactors. One of them (nested CSS commit) actually revealed a hole in testing: there are no test cases for hover in `evaluateSwitchItem`. I would like to address this but this PR already conflicts with https://codeberg.org/forgejo/forgejo/pulls/11341, so I won't do that until either is merged to save on rebase work.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11472
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2026-03-08 18:09:13 +01:00
Mathieu FenniakandMathieu Fenniak d442f83a09 chore: support Option[T] as a type on database schema structs (#11553)
Adds support for `optional.Option[T]` to be used on an xorm schema struct to represent nullable fields.  The `optional.None[T]()` value will be stored in the database as `NULL`.

```go
type OptionString struct {
	ID     int64 `xorm:"pk autoincr"`
	StringField optional.Option[string]
}
```

Before this change, it is possible to represent a nullable field in two reasonable ways: , or as a `sql.Null[T]` (eg. `StringField sql.Null[string]`).  The problems with these are:
- as a pointer (eg. `StringField *string`) -- but this introduces the risk of panics when `nil` values are dereferenced, and makes it difficult to use literals in structure creation (although `new()` in Go 1.26 would reduce this issue when Forgejo is upgraded to it)
- as a `sql.Null[T]` -- but this "leaks" references to the `database/sql` package for anything that interacts with Forgejo models, and it's API is awkward as nothing gates you into checking the `Valid` field before you access and use the `V` field

`optional.Option[T]` addresses these points and provides a single way to use an optional primitive type, with a safe check-before-access interface, which can be used consistently throughout model code and other application code.  Figuring out the best way to handle this became a blocker to me for [adding foreign keys to nullable fields](https://codeberg.org/forgejo/discussions/issues/385#issuecomment-10218316) in database models, which is what drove me to implement this solution.

## Notes: Filtering on `Option[T]` Fields

It is supported and functional to perform queries with xorm beans with non-None `Option` values.  For example:
```go
cond := &OptionString{
	StringField: optional.Some("hello"),
}
err := db.GetEngine(t.Context()).Find(&arr, cond)
```
will generate a database query `WHERE string_field = 'hello'`, and correctly filter the records.

It is **not** supported to perform queries with `None` values, for two reasons:
- xorm cannot distinguish between an explicit `&OptionString{ StringField: optional.None[string]() }`, and `&OptionString{}`.  Both of them have the `StringField` field set to the zero-value of `Option[String]`.
- For this SQL query to be formatted correctly, it would require `WHERE string_field IS NOT NULL`, not `WHERE string_field = NULL`.  This is not how xorm generated bean-based queries.

This is similar to the risk that exists with any other field querying on its zero-value with xorm.  It's an unfortunate structural limitation of xorm, and can lead to developers believing database queries are performing filtering that they are not.

(perhaps we can mitigate this risk with semgrep or other automated tooling in the future)

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests for Go changes

(can be removed for JavaScript changes)

- I added test coverage for Go changes...
  - [x] in their respective `*_test.go` for unit tests.
  - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I ran...
  - [x] `make pr-go` before pushing

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [ ] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [x] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11553
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Mathieu Fenniak <mathieu@fenniak.net>
Co-committed-by: Mathieu Fenniak <mathieu@fenniak.net>
2026-03-08 03:36:32 +01:00
Renovate BotandGusted 3770149158 Update module github.com/go-enry/go-enry/v2 to v2.9.5 (forgejo) (#11564)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11564
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-08 03:06:52 +01:00
Renovate BotandMathieu Fenniak d01fd19c58 Update https://data.forgejo.org/actions/setup-forgejo action to v3.1.7 (forgejo) (#11559)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [https://data.forgejo.org/actions/setup-forgejo](https://code.forgejo.org/actions/setup-forgejo) | action | patch | `v3.1.6` → `v3.1.7` |

---

### Release Notes

<details>
<summary>actions/setup-forgejo (https://data.forgejo.org/actions/setup-forgejo)</summary>

### [`v3.1.7`](https://code.forgejo.org/actions/setup-forgejo/releases/tag/v3.1.7)

[Compare Source](https://code.forgejo.org/actions/setup-forgejo/compare/v3.1.6...v3.1.7)

<!--start release-notes-assistant-->

<!--URL:https://code.forgejo.org/actions/setup-forgejo-->

- other
  - [PR](https://code.forgejo.org/actions/setup-forgejo/pulls/908): <!--number 908 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgZm9yZ2Vqby9ydW5uZXIgdG8gdjEyLjcuMQ==-->Update dependency forgejo/runner to v12.7.1<!--description-->

<!--end release-notes-assistant-->

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC).

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

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

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

---

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

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41Mi4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTIuMCIsInRhcmdldEJyYW5jaCI6ImZvcmdlam8iLCJsYWJlbHMiOlsiZGVwZW5kZW5jeS11cGdyYWRlIiwidGVzdC9ub3QtbmVlZGVkIl19-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11559
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-08 02:52:17 +01:00
Renovate BotandMathieu Fenniak 34ae2899ad Update module code.forgejo.org/forgejo/runner/v12 to v12.7.1 (forgejo) (#11562)
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [code.forgejo.org/forgejo/runner/v12](https://code.forgejo.org/forgejo/runner) | `v12.7.0` -> `v12.7.1` | ![age](https://developer.mend.io/api/mc/badges/age/go/code.forgejo.org%2fforgejo%2frunner%2fv12/v12.7.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/go/code.forgejo.org%2fforgejo%2frunner%2fv12/v12.7.0/v12.7.1?slim=true) |

---

### Release Notes

<details>
<summary>forgejo/runner (code.forgejo.org/forgejo/runner/v12)</summary>

### [`v12.7.1`](https://code.forgejo.org/forgejo/runner/releases/tag/v12.7.1)

[Compare Source](https://code.forgejo.org/forgejo/runner/compare/v12.7.0...v12.7.1)

- [User guide](https://forgejo.org/docs/next/user/actions/overview/)
- [Administrator guide](https://forgejo.org/docs/next/admin/actions/)
- [Container images](https://code.forgejo.org/forgejo/-/packages/container/runner/versions)

Release Notes

***

<!--start release-notes-assistant-->

<!--URL:https://code.forgejo.org/forgejo/runner-->

- bug fixes
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1402): <!--number 1402 --><!--line 0 --><!--description Zml4OiBjb3JyZWN0IGV4YW1wbGVzL2RvY2tlci1jb21wb3NlIGZvciBgY3JlYXRlLXJ1bm5lci1maWxlYCBiZWhhdmlvdXIgY2hhbmdl-->fix: correct examples/docker-compose for `create-runner-file` behaviour change<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1393): <!--number 1393 --><!--line 0 --><!--description Zml4OiBpbXBsZW1lbnQgaWRlbXBvdGVudCBGZXRjaFRhc2sgQVBJIGNhbGxzIHRvIHJlZHVjZSByaXNrIG9mIGxvc3QgdGFza3M=-->fix: implement idempotent FetchTask API calls to reduce risk of lost tasks<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1388): <!--number 1388 --><!--line 0 --><!--description Zml4OiBhY2NlcHQgYm9vbGVhbiB3b3JrZmxvd19jYWxsIGlucHV0cyB0aGF0IGFyZSBib29sZWFucw==-->fix: accept boolean workflow\_call inputs that are booleans<!--description-->
- other
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1410): <!--number 1410 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnaXRodWIuY29tL2dvLWdpdC9nby1naXQvdjUgdG8gdjUuMTcuMA==-->Update module github.com/go-git/go-git/v5 to v5.17.0<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1409): <!--number 1409 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnaXRodWIuY29tL2dvLWdpdC9nby1iaWxseS92NSB0byB2NS44LjA=-->Update module github.com/go-git/go-billy/v5 to v5.8.0<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1406): <!--number 1406 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnaXRodWIuY29tL3Zla3RyYS9tb2NrZXJ5L3YyIHRvIHYyLjUzLjY=-->Update module github.com/vektra/mockery/v2 to v2.53.6<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1400): <!--number 1400 --><!--line 0 --><!--description cmVmYWN0b3I6IGNsZWFuLXVwIGVycm9yIGhhbmRsaW5nIG9uIHRhc2sgZXhlY3V0aW9u-->refactor: clean-up error handling on task execution<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1394): <!--number 1394 --><!--line 0 --><!--description VXBkYXRlIGZvcmdlam8tcnVubmVyIHRvIHYxMi43LjA=-->Update forgejo-runner to v12.7.0<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1397): <!--number 1397 --><!--line 0 --><!--description UmV2ZXJ0ICJSZXBsYWNlIE5vZGUuanMgd2l0aCBkYXRhLmZvcmdlam8ub3JnL29jaS9ub2RlIDI0LXRyaXhpZSAoIzEzOTUpIg==-->Revert "Replace Node.js with data.forgejo.org/oci/node 24-trixie ([#&#8203;1395](https://github.com/forgejo/runner/issues/1395))"<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1395): <!--number 1395 --><!--line 0 --><!--description UmVwbGFjZSBOb2RlLmpzIHdpdGggZGF0YS5mb3JnZWpvLm9yZy9vY2kvbm9kZSAyNC10cml4aWU=-->Replace Node.js with data.forgejo.org/oci/node 24-trixie<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1396): <!--number 1396 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnaXRodWIuY29tL2dvbGFuZ2NpL2dvbGFuZ2NpLWxpbnQvdjIvY21kL2dvbGFuZ2NpLWxpbnQgdG8gdjIuMTAuMQ==-->Update module github.com/golangci/golangci-lint/v2/cmd/golangci-lint to v2.10.1<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1386): <!--number 1386 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgZm9yZ2Vqby1ydW5uZXItc2VydmljZS15cSB0byB2NC41Mi40-->Update dependency forgejo-runner-service-yq to v4.52.4<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1392): <!--number 1392 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgZm9yZ2Vqby9yZWxlYXNlLW5vdGVzLWFzc2lzdGFudCB0byB2MS42LjA=-->Update dependency forgejo/release-notes-assistant to v1.6.0<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1389): <!--number 1389 --><!--line 0 --><!--description dGVzdDogZW5hYmxlIGRpc2FibGVkIHRlc3Rz-->test: enable disabled tests<!--description-->
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/1387): <!--number 1387 --><!--line 0 --><!--description VXBkYXRlIGh0dHBzOi8vZGF0YS5mb3JnZWpvLm9yZy9hY3Rpb25zL3NldHVwLWZvcmdlam8gYWN0aW9uIHRvIHYzLjEuNg==-->Update <https://data.forgejo.org/actions/setup-forgejo> action to v3.1.6<!--description-->

<!--end release-notes-assistant-->

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC).

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

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

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

---

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

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41Mi4wIiwidXBkYXRlZEluVmVyIjoiNDMuNTIuMCIsInRhcmdldEJyYW5jaCI6ImZvcmdlam8iLCJsYWJlbHMiOlsiZGVwZW5kZW5jeS11cGdyYWRlIiwidGVzdC9ub3QtbmVlZGVkIl19-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11562
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-08 02:47:21 +01:00
Έλλεν Εμίλια Άννα ZscheileandGusted c357be8b52 chore: rename SafeHTML to TrustHTML (#11481)
Naming is less confusing this way, might not give the impression this will sanitize HTML to safe HTML.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11481
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Έλλεν Εμίλια Άννα Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Έλλεν Εμίλια Άννα Zscheile <fogti+devel@ytrizja.de>
2026-03-08 02:41:37 +01:00
Renovate BotandGusted 4b7eb821ff Update module github.com/blevesearch/bleve/v2 to v2.5.7 (forgejo) (#11563)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11563
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-08 02:30:53 +01:00
GustedandGusted c738e59dca fix: modals on small viewport height (#11547)
- For small modals fomantic tried to add a `scrolling` class using a function that was not implemented, this function is now stubbed.
- There's not really a need to conditionally change the behavior of scrolling or not, we can specify `overflow-y: auto` which is more than enough to take care of this. We do add some layout changes to ensure the modal is fully scrollable.
- Refactor to nested CSS.
- Resolves forgejo/forgejo#10991

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11547
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2026-03-08 00:11:31 +01:00
Robert WolffandGusted bff5c00b80 feat(api): more verbose error messages and swagger comments for posting issue comments (#11368)
Closes: #11364

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11368
Reviewed-by: Cyborus <cyborus@disroot.org>
Co-authored-by: Robert Wolff <mahlzahn@posteo.de>
Co-committed-by: Robert Wolff <mahlzahn@posteo.de>
2026-03-07 23:16:20 +01:00
Mathieu FenniakandMathieu Fenniak 2db6210f69 feat: read, create, & delete repo-specific access tokens via API (#11504)
This PR is part of a series (#11311).

Adds support for reading and creating repo-secific access tokens through the API via the `GET /users/{username}/tokens`, `POST /users/{username}/tokens`, and `DELETE /users/{username}/tokens/{id}` APIs.

Validation rules are included to [restrict repo-specific access tokens to specific scopes](https://codeberg.org/forgejo/design/issues/50#issuecomment-11093951).

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests for Go changes

(can be removed for JavaScript changes)

- I added test coverage for Go changes...
  - [x] in their respective `*_test.go` for unit tests.
  - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I ran...
  - [x] `make pr-go` before pushing

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [x] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [ ] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

<!--start release-notes-assistant-->

## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Features
  - [PR](https://codeberg.org/forgejo/forgejo/pulls/11504): <!--number 11504 --><!--line 0 --><!--description cmVhZCwgY3JlYXRlLCAmIGRlbGV0ZSByZXBvLXNwZWNpZmljIGFjY2VzcyB0b2tlbnMgdmlhIEFQSQ==-->read, create, & delete repo-specific access tokens via API<!--description-->
<!--end release-notes-assistant-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11504
Reviewed-by: Andreas Ahlenstorf <aahlenst@noreply.codeberg.org>
Co-authored-by: Mathieu Fenniak <mathieu@fenniak.net>
Co-committed-by: Mathieu Fenniak <mathieu@fenniak.net>
2026-03-07 21:55:08 +01:00
Bram HagensandGusted 48d2af5561 fix: skip repo avatar upload when no file is selected (#11335)
Submitting the repo avatar form without selecting a file shows a raw Go error: `Avatar.Open: open : no such file or directory.`. The existing `nil` check does not prevent this from happening.

The user avatar handler already guards against this same problem with [`form.Avatar != nil && form.Avatar.Filename != ""`](https://codeberg.org/forgejo/forgejo/src/commit/e1cecbd276841a5762ad034a920be8c2732e295f/routers/web/user/setting/profile.go#L141), I've done the same for the repo avatar handler.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11335
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Bram Hagens <bram@bramh.me>
Co-committed-by: Bram Hagens <bram@bramh.me>
2026-03-07 20:53:23 +01:00
Renovate BotandGusted 8d330dc9c7 Update code.forgejo.org/forgejo-contrib/go-libravatar digest to add494e (forgejo) (#11486)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11486
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-07 20:03:55 +01:00
anon_allyandGusted 950cb098de feat: Add shortcut to link markdown action (#11466)
Follow forgejo/forgejo!9110 and add a shortcut to the link action, via ctrl/command + K.

Close #11353

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11466
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: anon_ally <ANON_ALLY@noreply.codeberg.org>
Co-committed-by: anon_ally <ANON_ALLY@noreply.codeberg.org>
2026-03-07 19:07:10 +01:00
ae0d0b5b09 fix: RPM registry addrepo instructions (#11478)
The provided instructions for how to add RPM package repo fail on Fedora 43:

```
Unknown argument "--add-repo" for command "config-manager". Add "--help" for more information about the arguments.
```

The [docs](https://forgejo.org/docs/latest/user/packages/rpm/#configuring-the-package-registry-using-dnf5) contain a different command, which does work.

This changes instructions to match docs.

Co-authored-by: sarge <ephemeralsarge@example.com>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11478
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: sarge <sarge@noreply.codeberg.org>
Co-committed-by: sarge <sarge@noreply.codeberg.org>
2026-03-07 19:05:29 +01:00
Renovate BotandGusted 4d2eafdd8e Update dependency tailwindcss to v3.4.19 (forgejo) (#11545)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11545
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-07 19:04:36 +01:00
54aca2a9ed feat: Add HEAD support for debian repo files (#11489)
Add `HEAD` handlers for repo index file for debian package registry.

Resolves #11488

Co-authored-by: sarge <ephemeralsarge@example.com>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11489
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: sarge <sarge@noreply.codeberg.org>
Co-committed-by: sarge <sarge@noreply.codeberg.org>
2026-03-07 18:59:47 +01:00
GustedandMathieu Fenniak e3b219ee98 chore: skip sha256 repo for older git versions (#11542)
- Breaks testing on git versions that don't have SHA256 support.

https://codeberg.org/forgejo-integration/forgejo/actions/runs/16172/jobs/1/attempt/1#jobstep-5-2381

```
// TestLinksLogin
	"2026/03/06 06:15:20 ...ices/context/repo.go:1007:28() [E] GetBranchCommit: length 64 has no matched object format: 473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813",
```

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11542
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2026-03-07 15:58:31 +01:00
Mathieu FenniakandMathieu Fenniak eef3111cc7 chore(deps): upgrade xorm to v1.3.9-forgejo.7 (#11538)
Primarily to gain access to https://code.forgejo.org/xorm/xorm/pulls/67 & https://code.forgejo.org/xorm/xorm/pulls/66 which allows Forgejo to implement a few methods and support `optional.Option[T]` in database beans for nullable fields.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11538
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Mathieu Fenniak <mathieu@fenniak.net>
Co-committed-by: Mathieu Fenniak <mathieu@fenniak.net>
2026-03-07 15:38:53 +01:00
Renovate BotandMichael Kriese 0beec59c01 Update dependency uint8-to-base64 to v0.2.1 (forgejo) (#11549)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11549
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-07 15:01:49 +01:00
Renovate Bot 74f8b819c2 Update dependency forgejo/release-notes-assistant to v1.6.1 (forgejo) (#11543)
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-07 15:01:41 +01:00
pancand0ko a824a34266 fix(ui): add active background color for menu items in tippy tooltips (#11315)
Fix #11309

![image](/attachments/1067134a-e40e-4f21-82bb-fd4324080215)

Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11315
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Co-authored-by: panc <pan0xc@foxmail.com>
Co-committed-by: panc <pan0xc@foxmail.com>
2026-03-07 05:52:32 +01:00
Andreas AhlenstorfandMathieu Fenniak 3e849b4b50 fix: extend basic auth to /v2, always include WWW-Authenticate header (#11393)
Forgejo's OCI container registry did not enable basic authentication for the top-level endpoint `/v2`. Furthermore, it did not include the `WWW-Authenticate` header when returning the status code 401 as mandated by [RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1), "Hypertext Transfer Protocol (HTTP/1.1): Authentication", section 3.1. Those deficiencies made it impossible for Apple's [container](https://github.com/apple/container) to log into Forgejo OCI container registry. This has been rectified.

The problem did not occur with most other tools because they do not include credentials when sending the initial request to `/v2`. Forgejo's reply then included `WWW-Authenticate` as expected.

Enabling basic authentication for `/v2` has the side effect that Apple's container uses username and password for all successive requests and not the bearer token. If that is a problem, it's up to Apple to change container's behaviour.

If invalid credentials are passed to `container registry login`, then container enters an infinite loop. The same happens with quay.io, but not ghcr.io (returns 403) or docker.io (returns 401 but _without_ `WWW-Authenticate`). As this is invalid behaviour on container's side, it's up to Apple to change container. Docker and Podman handle it correctly.

Login and pushing have been tested manually with Docker 29.1.3, Podman 5.7.1, and Apple's container 0.9.0.

Resolves https://codeberg.org/forgejo/forgejo/issues/11297.

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests for Go changes

(can be removed for JavaScript changes)

- I added test coverage for Go changes...
  - [x] in their respective `*_test.go` for unit tests.
  - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I ran...
  - [ ] `make pr-go` before pushing

### Tests for JavaScript changes

(can be removed for Go changes)

- I added test coverage for JavaScript changes...
  - [ ] in `web_src/js/*.test.js` if it can be unit tested.
  - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)).

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [x] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [ ] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

*The decision if the pull request will be shown in the release notes is up to the mergers / release team.*

The content of the `release-notes/<pull request number>.md` file will serve as the basis for the release notes. If the file does not exist, the title of the pull request will be used instead.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11393
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: Andreas Ahlenstorf <andreas@ahlenstorf.ch>
Co-committed-by: Andreas Ahlenstorf <andreas@ahlenstorf.ch>
2026-03-07 03:19:49 +01:00
limiting-factorandGusted 851356577c chore: do not leak global repository unit defaults (#11470)
The [test disabling the issue unit][0] took care of [reseting the disabled units][1]. However, it overlooked that calling [`LoadUnitConfig`][2] also has a [side effect on `DefaultRepoUnits`][3]. It happens when [`validateDefaultRepoUnits` has a side effect][4] on the array backing the slice, when it is [not recreated][5]. As a result the issue unit is disabled for all tests that run after this one.

The subtle side effect is harmless because it only happens in tests, the `LoadUnitConfig` is otherwise only called once. For clarity `LoadUnitConfig` is modified to clone the unit array being validated so that the returned slice is never backed by the same array as the argument.

As the global variables used for repository units should be saved and restored as a whole, a dedicated test function (`SaveUnits`) is provided to be used by both integration tests and unit tests. The test of the unit model is refactored to be a blackbox test in order to avoid an import cycle.

[0]: https://codeberg.org/forgejo/forgejo/src/commit/cce5f868cec11830d19126b90c659772708cd323/tests/integration/repo_settings_test.go#L258
[1]: https://codeberg.org/forgejo/forgejo/src/commit/cce5f868cec11830d19126b90c659772708cd323/tests/integration/repo_settings_test.go#L253
[2]: https://codeberg.org/forgejo/forgejo/src/commit/cce5f868cec11830d19126b90c659772708cd323/models/unit/unit.go#L171
[3]: https://codeberg.org/forgejo/forgejo/src/commit/cce5f868cec11830d19126b90c659772708cd323/models/unit/unit.go#L182
[4]: https://codeberg.org/forgejo/forgejo/src/commit/cce5f868cec11830d19126b90c659772708cd323/models/unit/unit.go#L162
[5]: https://codeberg.org/forgejo/forgejo/src/commit/cce5f868cec11830d19126b90c659772708cd323/models/unit/unit.go#L148

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11470
Reviewed-by: Ellen Εμιλία Άννα Zscheile <fogti@noreply.codeberg.org>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: limiting-factor <limiting-factor@posteo.com>
Co-committed-by: limiting-factor <limiting-factor@posteo.com>
2026-03-07 02:03:22 +01:00
Renovate BotandGusted c0d8c3221f Update dependency minimatch to v10.2.4 (forgejo) (#11523)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11523
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
2026-03-07 00:49:57 +01:00
GustedandMathieu Fenniak 39078d478a chore: add unit test 2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak 5e1a2f9cc4 fix: filter recipients for new release mails
Remove recipients that are not active (e.g. done by moderation or
organizational reasons) and those that have the permi ssion to read
releases on that repository.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak 58d844b320 chore: add integration testing 2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak 4f464db8a7 chore: add unit tests
Unit tests for model functions
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak 837557166b fix: check owner when changing state of project
It was sufficiently checked for the repostiory case, but for user/org
project it was not checked and you could change the state of any
project by there mere knowledge of a ID.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak 0da92e47ca chore: add integration testing 2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak a4fc54830e chore: unit testing 2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak f0e8763867 fix: check the permission of canceling automerge
The API already checked the permission sufficiently if auto merge could
be cancelled by the doer. The web route did not. Consolidate this check
in the function that lives in the services directory.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak af0173894a fix: consider more risky redirects
After evaluating `..`, it's possible that the resulting path is a risky
redirect, as it might be a "browser" special redirect. Detect this case.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak b55d819a91 chore: add unit test 2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak abdac1993a chore: add unit test 2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak ce0a376723 fix: check that attachments belong to correct resource
It was possible to hijack attachments during update and create functions
to another owner as permissions to check they weren't already attached
to another resource and wasn't checked if it belonged to the repository
that was being operated on.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak 68b2930caa chore: add integration testing
Modify the existing scopes tests for normal API tokens to OAuth2 tokens.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak da766f1e19 fix: consider scopes for OAuth2 token via basic login
There are two ways to use a OAuth2 token:

Via the Authorization header as a Bearer token.
Via the Authorization header as a Basic login.

For the former the scope was correctly passed through, for the latter it
was not and would mean no scope was checked if you used the token via
this way.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak faf448f350 chore: add integration testing
Build on the test of forgejo/forgejo!8678 to also verify PKCE works for
S256.
2026-03-06 11:21:07 -07:00
GustedandMathieu Fenniak d1c7b04d09 fix: verify code challenge of S256
We do not know for sure, but it is quite likely someone assumed implicit
fallthrough. This meant that if someone used S256 for PKCE, it simply
did not verify the code challenge and always accepted it.

PKCE only started working recently as it was broken for a long time
already, forgejo/forgejo!8678
2026-03-06 11:21:07 -07:00
patdynandMathieu Fenniak df79ccf7d8 Move Container API processing logic to service (#11432)
As discussed here: https://codeberg.org/forgejo/discussions/issues/444 the container v2 API logic does need some refactoring for better maintainability.

This is a proposition on how to achieve that. My goal was to be able to write unit tests for functions like processImageManifest() which are currently only tested indirectly by TestPackageContainer() in tests/integration/api_packages_container_test.go.

A first unit test was implemented that targets ProcessManifest(). I think that test also shows what steps are needed to successfully execute the ProcessManifest() function and hopefully helps understanding that code better.

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests for Go changes

(can be removed for JavaScript changes)

- I added test coverage for Go changes...
  - [x ] in their respective `*_test.go` for unit tests.
  - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I ran...
  - [x] `make pr-go` before pushing

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x ] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [ ] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [ x] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

*The decision if the pull request will be shown in the release notes is up to the mergers / release team.*

The content of the `release-notes/<pull request number>.md` file will serve as the basis for the release notes. If the file does not exist, the title of the pull request will be used instead.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11432
Reviewed-by: Andreas Ahlenstorf <aahlenst@noreply.codeberg.org>
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
Co-authored-by: patdyn <patdyn@noreply.codeberg.org>
Co-committed-by: patdyn <patdyn@noreply.codeberg.org>
2026-03-06 18:56:49 +01:00