Compare commits

...

61 commits

Author SHA1 Message Date
David Rotermund
007d1c62bd Merge branch 'forgejo' into upload_with_path_structure
Some checks failed
Integration tests for the release process / release-simulation (push) Has been cancelled
2025-02-03 16:21:13 +00:00
Renovate Bot
1d8712a8d4 Lock file maintenance (forgejo) (#6768)
This PR contains the following updates:

| Update | Change |
|---|---|
| lockFileMaintenance | All locks refreshed |

🔧 This Pull Request updates lock files to use the latest dependency versions.

---

### Configuration

📅 **Schedule**: Branch creation - "* 0-3 * * 1" (UTC), Automerge - "* 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.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://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 [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMzYuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEzNi4xIiwidGFyZ2V0QnJhbmNoIjoiZm9yZ2VqbyIsImxhYmVscyI6WyJkZXBlbmRlbmN5LXVwZ3JhZGUiLCJ0ZXN0L25vdC1uZWVkZWQiXX0=-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6768
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-02-03 10:49:37 +00:00
David Rotermund
61b608693b Split Forgejo landing page template to allow patching or removing Forgejo introduction section (#6675)
If you want to get rid of the Forgejo-specific information on the landing page, the section below the slogan can now be removed by

- creating the folder at `CustomPath/templates` (see CustomPath section in https://forgejo.org/docs/latest/admin/config-cheat-sheet/#default-configuration-non-appini-configuration)
- creating a file `home_forgejo.tmpl` allows to override the Forgejo-specific section of the homepage with custom HTML. Leaving it empty will get rid of this section.

Co-authored-by: fnetX <otto@codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6675
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: David Rotermund <davrot@noreply.codeberg.org>
Co-committed-by: David Rotermund <davrot@noreply.codeberg.org>
2025-02-03 08:41:52 +00:00
Renovate Bot
63e52b1b48 Update renovate to v39.156.1 (forgejo) (#6767)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [data.forgejo.org/renovate/renovate](https://renovatebot.com) ([source](https://github.com/renovatebot/renovate)) | container | minor | `39.136.1` -> `39.156.1` |
| [renovate](https://renovatebot.com) ([source](https://github.com/renovatebot/renovate)) |  | minor | `39.136.1` -> `39.156.1` |

---

### Release Notes

<details>
<summary>renovatebot/renovate (data.forgejo.org/renovate/renovate)</summary>

### [`v39.156.1`](https://github.com/renovatebot/renovate/releases/tag/39.156.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.156.0...39.156.1)

##### Bug Fixes

-   **manager/jsonata:** populate extract result with manager config fields ([#&#8203;33992](https://github.com/renovatebot/renovate/issues/33992)) ([77a5c15](77a5c15daa))

##### Documentation

-   fix typos in documentation ([#&#8203;33982](https://github.com/renovatebot/renovate/issues/33982)) ([bfff982](bfff982eb3))

##### Miscellaneous Chores

-   **deps:** update containerbase/internal-tools action to v3.5.22 ([#&#8203;33988](https://github.com/renovatebot/renovate/issues/33988)) ([52ab2d8](52ab2d8dac))
-   **deps:** update dependency google-github-actions/auth to v2.1.8 ([#&#8203;33987](https://github.com/renovatebot/renovate/issues/33987)) ([de8140d](de8140d476))

### [`v39.156.0`](https://github.com/renovatebot/renovate/releases/tag/39.156.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.155.0...39.156.0)

##### Features

-   **autoreplace:** extended logging for autoreplace mismatches ([#&#8203;33984](https://github.com/renovatebot/renovate/issues/33984)) ([a1c291c](a1c291cb92))

### [`v39.155.0`](https://github.com/renovatebot/renovate/releases/tag/39.155.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.154.0...39.155.0)

##### Features

-   **presets:** add `react-spectrum` monorepo ([#&#8203;33892](https://github.com/renovatebot/renovate/issues/33892)) ([c25ffa5](c25ffa5f93))

### [`v39.154.0`](https://github.com/renovatebot/renovate/releases/tag/39.154.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.153.2...39.154.0)

##### Features

-   enhance libyear output ([#&#8203;33981](https://github.com/renovatebot/renovate/issues/33981)) ([1386cf7](1386cf734e))

### [`v39.153.2`](https://github.com/renovatebot/renovate/releases/tag/39.153.2)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.153.1...39.153.2)

##### Miscellaneous Chores

-   **documentation:** s/Forjeo/Forgejo/ ([#&#8203;33976](https://github.com/renovatebot/renovate/issues/33976)) ([732f91b](732f91ba3c))

##### Code Refactoring

-   **devbox:** Refactor schema and improve logging ([#&#8203;33978](https://github.com/renovatebot/renovate/issues/33978)) ([19ae54f](19ae54fb09))

##### Tests

-   **logger:** Fix mock for `withMeta` function ([#&#8203;33979](https://github.com/renovatebot/renovate/issues/33979)) ([0300c4e](0300c4e0a4))

##### Build System

-   **deps:** update aws-sdk-js-v3 monorepo ([#&#8203;33980](https://github.com/renovatebot/renovate/issues/33980)) ([35a56c7](35a56c7b54))

### [`v39.153.1`](https://github.com/renovatebot/renovate/releases/tag/39.153.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.153.0...39.153.1)

##### Build System

-   **deps:** update dependency google-auth-library to v9.15.1 ([#&#8203;33974](https://github.com/renovatebot/renovate/issues/33974)) ([582c08b](582c08b51a))

### [`v39.153.0`](https://github.com/renovatebot/renovate/releases/tag/39.153.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.152.0...39.153.0)

##### Features

-   **jsonata:** support yaml ([#&#8203;33972](https://github.com/renovatebot/renovate/issues/33972)) ([e63ff23](e63ff23795))

### [`v39.152.0`](https://github.com/renovatebot/renovate/releases/tag/39.152.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.151.0...39.152.0)

##### Features

-   **presets:** Added `GRADLE_OPTS` to safe global env ([#&#8203;33968](https://github.com/renovatebot/renovate/issues/33968)) ([9e51d42](9e51d427df))

##### Code Refactoring

-   **process/libyear:** early return if no `releaseTimestamp` for current version ([#&#8203;33967](https://github.com/renovatebot/renovate/issues/33967)) ([09b2c10](09b2c106c3))
-   **schema:** simplify handling ([#&#8203;33963](https://github.com/renovatebot/renovate/issues/33963)) ([7583ecd](7583ecded4))

### [`v39.151.0`](https://github.com/renovatebot/renovate/releases/tag/39.151.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.150.0...39.151.0)

##### Features

-   **manager:** add devbox manager module ([#&#8203;33638](https://github.com/renovatebot/renovate/issues/33638)) ([62cb770](62cb77064a))

##### Code Refactoring

-   **workers:** move bump version to separate function ([#&#8203;33965](https://github.com/renovatebot/renovate/issues/33965)) ([e82a22d](e82a22d558))

### [`v39.150.0`](https://github.com/renovatebot/renovate/releases/tag/39.150.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.149.0...39.150.0)

##### Features

-   **preset:** Add monorepo preset for KSP ([#&#8203;33943](https://github.com/renovatebot/renovate/issues/33943)) ([1b240a8](1b240a8bec))

### [`v39.149.0`](https://github.com/renovatebot/renovate/releases/tag/39.149.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.148.0...39.149.0)

##### Features

-   **cloudbuild:** Parse config using Zod schema ([#&#8203;33768](https://github.com/renovatebot/renovate/issues/33768)) ([586d9fd](586d9fd2a6))

##### Documentation

-   **versioning:** fix types and tests ([#&#8203;33958](https://github.com/renovatebot/renovate/issues/33958)) ([7819d02](7819d027e3))

### [`v39.148.0`](https://github.com/renovatebot/renovate/releases/tag/39.148.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.147.0...39.148.0)

##### Features

-   **gitlab:** add branch status check attemps ([#&#8203;32692](https://github.com/renovatebot/renovate/issues/32692)) ([78f389a](78f389ac55))
-   **versioning:** aws-eks-addon versioning added ([#&#8203;33301](https://github.com/renovatebot/renovate/issues/33301)) ([476d11c](476d11ce0f))

### [`v39.147.0`](https://github.com/renovatebot/renovate/releases/tag/39.147.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.146.4...39.147.0)

##### Features

-   **nix:** rework to work with all flake inputs ([#&#8203;31921](https://github.com/renovatebot/renovate/issues/31921)) ([441a30f](441a30f8e0))

### [`v39.146.4`](https://github.com/renovatebot/renovate/releases/tag/39.146.4)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.146.3...39.146.4)

##### Bug Fixes

-   **deps:** update dependency mkdocs-material to v9.6.1 ([#&#8203;33956](https://github.com/renovatebot/renovate/issues/33956)) ([98ccb43](98ccb43514))

### [`v39.146.3`](https://github.com/renovatebot/renovate/releases/tag/39.146.3)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.146.2...39.146.3)

##### Bug Fixes

-   **deps:** update dependency mkdocs-material to v9.6.0 ([#&#8203;33955](https://github.com/renovatebot/renovate/issues/33955)) ([ba0bbbb](ba0bbbbc28))

### [`v39.146.2`](https://github.com/renovatebot/renovate/releases/tag/39.146.2)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.146.1...39.146.2)

##### Bug Fixes

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.38.3 ([#&#8203;33954](https://github.com/renovatebot/renovate/issues/33954)) ([1e6ebec](1e6ebecfbb))

### [`v39.146.1`](https://github.com/renovatebot/renovate/releases/tag/39.146.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.146.0...39.146.1)

##### Bug Fixes

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.38.2 ([#&#8203;33953](https://github.com/renovatebot/renovate/issues/33953)) ([48ab56f](48ab56fced))

### [`v39.146.0`](https://github.com/renovatebot/renovate/releases/tag/39.146.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.145.1...39.146.0)

##### Features

-   **logger:** Add `withMeta` helper ([#&#8203;33948](https://github.com/renovatebot/renovate/issues/33948)) ([3053a9e](3053a9ec4a))
-   **schema:** Add logging utilities for catch calls ([#&#8203;33950](https://github.com/renovatebot/renovate/issues/33950)) ([23fa0bd](23fa0bd05d))

### [`v39.145.1`](https://github.com/renovatebot/renovate/releases/tag/39.145.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.145.0...39.145.1)

##### Bug Fixes

-   **presets:** match on devDependencies or dev for dev dependencies-related presets ([#&#8203;33909](https://github.com/renovatebot/renovate/issues/33909)) ([545bf31](545bf31bc0))

##### Miscellaneous Chores

-   correctly update missing labels issue ([#&#8203;33903](https://github.com/renovatebot/renovate/issues/33903)) ([9338455](9338455924))

### [`v39.145.0`](https://github.com/renovatebot/renovate/releases/tag/39.145.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.144.4...39.145.0)

##### Features

-   **bazel-module:** support `bazel_dep` dependencies without the `version` parameter ([#&#8203;33496](https://github.com/renovatebot/renovate/issues/33496)) ([4ca76e4](4ca76e40b5))
-   **managers/custom:** generic manager for json files ([#&#8203;32784](https://github.com/renovatebot/renovate/issues/32784)) ([fc8b8f9](fc8b8f9b61))
-   **presets:** add tailwindcss monorepo ([#&#8203;33940](https://github.com/renovatebot/renovate/issues/33940)) ([3f88df2](3f88df275a))

### [`v39.144.4`](https://github.com/renovatebot/renovate/releases/tag/39.144.4)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.144.3...39.144.4)

##### Bug Fixes

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.38.1 ([#&#8203;33936](https://github.com/renovatebot/renovate/issues/33936)) ([a3f4098](a3f4098852))

### [`v39.144.3`](https://github.com/renovatebot/renovate/releases/tag/39.144.3)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.144.2...39.144.3)

##### Bug Fixes

-   only replace prefix with registry alias ([#&#8203;33922](https://github.com/renovatebot/renovate/issues/33922)) ([5ffd464](5ffd464a8f))

### [`v39.144.2`](https://github.com/renovatebot/renovate/releases/tag/39.144.2)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.144.1...39.144.2)

##### Bug Fixes

-   **manager/custom:** Support range strategy with custom managers ([#&#8203;33800](https://github.com/renovatebot/renovate/issues/33800)) ([7f3b76b](7f3b76b5ca))

### [`v39.144.1`](https://github.com/renovatebot/renovate/releases/tag/39.144.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.144.0...39.144.1)

##### Bug Fixes

-   **manager:** retain `depName` when using `registryAliases` ([#&#8203;33911](https://github.com/renovatebot/renovate/issues/33911)) ([bf5ce6c](bf5ce6cc3a))

##### Miscellaneous Chores

-   **deps:** update dependency [@&#8203;types/node](https://github.com/types/node) to v22.10.9 ([#&#8203;33932](https://github.com/renovatebot/renovate/issues/33932)) ([f072cbe](f072cbe1ef))

### [`v39.144.0`](https://github.com/renovatebot/renovate/releases/tag/39.144.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.143.0...39.144.0)

##### Features

-   **manager/maven:** Add replacement support ([#&#8203;32635](https://github.com/renovatebot/renovate/issues/32635)) ([89b12fa](89b12faca7))

##### Documentation

-   **unity3d:** fix broken documentation link ([#&#8203;33927](https://github.com/renovatebot/renovate/issues/33927)) ([917ac1d](917ac1d52a))

### [`v39.143.0`](https://github.com/renovatebot/renovate/releases/tag/39.143.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.142.0...39.143.0)

##### Features

-   **presets/workaround:** ubuntuDockerVersioning ([#&#8203;33714](https://github.com/renovatebot/renovate/issues/33714)) ([01e01a3](01e01a3a5c))

##### Miscellaneous Chores

-   **deps:** update dependency [@&#8203;types/node](https://github.com/types/node) to v22.10.8 ([#&#8203;33928](https://github.com/renovatebot/renovate/issues/33928)) ([f107b13](f107b13fcd))

### [`v39.142.0`](https://github.com/renovatebot/renovate/releases/tag/39.142.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.141.0...39.142.0)

##### Features

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.38.0 ([#&#8203;33924](https://github.com/renovatebot/renovate/issues/33924)) ([e78fb57](e78fb578c7))

##### Miscellaneous Chores

-   **deps:** update github/codeql-action action to v3.28.8 ([#&#8203;33926](https://github.com/renovatebot/renovate/issues/33926)) ([062e000](062e000082))

### [`v39.141.0`](https://github.com/renovatebot/renovate/releases/tag/39.141.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.140.3...39.141.0)

##### Features

-   **gradle:** Single-version ranges ([#&#8203;33923](https://github.com/renovatebot/renovate/issues/33923)) ([9acd663](9acd66399a))

### [`v39.140.3`](https://github.com/renovatebot/renovate/releases/tag/39.140.3)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.140.2...39.140.3)

##### Bug Fixes

-   **ansible:** don't override versioning ([#&#8203;33918](https://github.com/renovatebot/renovate/issues/33918)) ([4032f20](4032f20687))
-   **batec:** don't override versioning ([#&#8203;33919](https://github.com/renovatebot/renovate/issues/33919)) ([d61ea8b](d61ea8b92b))

##### Code Refactoring

-   **manager:** always set package name from docker image extract ([#&#8203;33917](https://github.com/renovatebot/renovate/issues/33917)) ([45bdc77](45bdc77844))

### [`v39.140.2`](https://github.com/renovatebot/renovate/releases/tag/39.140.2)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.140.1...39.140.2)

##### Bug Fixes

-   **http:** allow overwriting default Renovate headers ([#&#8203;33907](https://github.com/renovatebot/renovate/issues/33907)) ([c0af153](c0af153b5e))
-   **manager/devcontainer:** allow trailing commans in jsonc files ([#&#8203;33913](https://github.com/renovatebot/renovate/issues/33913)) ([8deab52](8deab52be4))
-   **nuget:** don't check children of `ContainerBaseImage` ([#&#8203;33910](https://github.com/renovatebot/renovate/issues/33910)) ([cb38cb1](cb38cb1b34))

##### Miscellaneous Chores

-   **deps:** update github/codeql-action action to v3.28.7 ([#&#8203;33908](https://github.com/renovatebot/renovate/issues/33908)) ([beb5136](beb5136563))

##### Build System

-   **deps:** update dependency graph-data-structure to v4.3.1 ([#&#8203;33912](https://github.com/renovatebot/renovate/issues/33912)) ([60f8d3e](60f8d3ea92))

### [`v39.140.1`](https://github.com/renovatebot/renovate/releases/tag/39.140.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.140.0...39.140.1)

##### Bug Fixes

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.37.3 ([#&#8203;33905](https://github.com/renovatebot/renovate/issues/33905)) ([ff0af5f](ff0af5f16a))

### [`v39.140.0`](https://github.com/renovatebot/renovate/releases/tag/39.140.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.139.0...39.140.0)

##### Features

-   **datasource:** Add datasource for buildpack registry ([#&#8203;32721](https://github.com/renovatebot/renovate/issues/32721)) ([d581af5](d581af59bc))

### [`v39.139.0`](https://github.com/renovatebot/renovate/releases/tag/39.139.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.138.2...39.139.0)

##### Features

-   **http:** Return stale cache on revalidation errors ([#&#8203;33852](https://github.com/renovatebot/renovate/issues/33852)) ([c3814ab](c3814ab0ad))

##### Miscellaneous Chores

-   **deps:** update dependency [@&#8203;swc/core](https://github.com/swc/core) to v1.10.9 ([#&#8203;33898](https://github.com/renovatebot/renovate/issues/33898)) ([f97875f](f97875f05b))

### [`v39.138.2`](https://github.com/renovatebot/renovate/releases/tag/39.138.2)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.138.1...39.138.2)

##### Bug Fixes

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.37.2 ([#&#8203;33895](https://github.com/renovatebot/renovate/issues/33895)) ([95e3577](95e3577532))

### [`v39.138.1`](https://github.com/renovatebot/renovate/releases/tag/39.138.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.138.0...39.138.1)

##### Bug Fixes

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.37.1 ([#&#8203;33894](https://github.com/renovatebot/renovate/issues/33894)) ([fa40e07](fa40e07d3f))

### [`v39.138.0`](https://github.com/renovatebot/renovate/releases/tag/39.138.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.137.2...39.138.0)

##### Features

-   **managers/npm:** support pnpm catalogs ([#&#8203;33376](https://github.com/renovatebot/renovate/issues/33376)) ([0f06866](0f06866080))

##### Code Refactoring

-   **cache:** Utils to calculate soft and hard TTL ([#&#8203;33844](https://github.com/renovatebot/renovate/issues/33844)) ([53fa8cc](53fa8cc945))

### [`v39.137.2`](https://github.com/renovatebot/renovate/releases/tag/39.137.2)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.137.1...39.137.2)

##### Miscellaneous Chores

-   **deps:** update github/codeql-action action to v3.28.6 ([#&#8203;33886](https://github.com/renovatebot/renovate/issues/33886)) ([1c5ebf8](1c5ebf8b83))
-   **deps:** update github/codeql-action digest to [`17a820b`](17a820b) ([#&#8203;33887](https://github.com/renovatebot/renovate/issues/33887)) ([571614b](571614bb56))

##### Build System

-   **deps:** update dependency commander to v13.1.0 ([#&#8203;33891](https://github.com/renovatebot/renovate/issues/33891)) ([59e1e89](59e1e89de5))

### [`v39.137.1`](https://github.com/renovatebot/renovate/releases/tag/39.137.1)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.137.0...39.137.1)

##### Bug Fixes

-   **gradle:** Accept versions with trailing separators as valid ([#&#8203;33884](https://github.com/renovatebot/renovate/issues/33884)) ([563cdab](563cdabc66))

##### Tests

-   **gradle:** Use describe blocks for versioning tests ([#&#8203;33882](https://github.com/renovatebot/renovate/issues/33882)) ([6be155d](6be155daea))

### [`v39.137.0`](https://github.com/renovatebot/renovate/releases/tag/39.137.0)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.136.2...39.137.0)

##### Features

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.37.0 ([#&#8203;33881](https://github.com/renovatebot/renovate/issues/33881)) ([9d72c37](9d72c3791f))

##### Miscellaneous Chores

-   **label-actions:** no-merge-from-main ([#&#8203;33875](https://github.com/renovatebot/renovate/issues/33875)) ([00c266b](00c266bd6c))

### [`v39.136.2`](https://github.com/renovatebot/renovate/releases/tag/39.136.2)

[Compare Source](https://github.com/renovatebot/renovate/compare/39.136.1...39.136.2)

##### Bug Fixes

-   **deps:** update ghcr.io/renovatebot/base-image docker tag to v9.36.8 ([#&#8203;33878](https://github.com/renovatebot/renovate/issues/33878)) ([64551ec](64551ec9b3))

##### Miscellaneous Chores

-   **deps:** update dependency type-fest to v4.33.0 ([#&#8203;33879](https://github.com/renovatebot/renovate/issues/33879)) ([d6bda9f](d6bda9f373))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* 0-3 * * 1" (UTC), Automerge - "* 0-3 * * *" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMzYuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEzNi4xIiwidGFyZ2V0QnJhbmNoIjoiZm9yZ2VqbyIsImxhYmVscyI6WyJkZXBlbmRlbmN5LXVwZ3JhZGUiLCJmb3JnZWpvL2NpIiwidGVzdC9ub3QtbmVlZGVkIl19-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6767
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-02-03 05:19:04 +00:00
Gusted
59910a461d fix: use correct default branch for migrated wiki (#6754)
- Instead of getting the default branch of the 'code' repository, get the default branch of the wiki repository.
- It's a bug of forgejo/forgejo#2264, likely caused by the confusion between `gitrepo` (the package name) and `gitRepo` (the git repo for the just migrated wiki repository).
- Adjusted existing integration test.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6754
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2025-02-02 12:06:02 +00:00
Earl Warren
7579f25807 chore: remove deadcode (#6743)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6743
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
2025-02-02 12:05:25 +00:00
Litchi Pi
f66a6b12cd templates: release: Add JS to set default release title to tag name (#6645)
Closes #6485

Adds a bit of javascript in the template responsible for the "create release" page

When typing a name in the "tag name" field, the content will be automatically set in the "Title" field as a placeholder.

This way, you can type a version number (ex: `v5.0.2`), and the title will default to it (`v5.0.2` in this case)

## 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

- I added test coverage for Go changes...
  - [ ] in their respective `*_test.go` for unit tests.
  - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I added test coverage for JavaScript changes...
  - [ ] in `web_src/js/*.test.js` if it can be unit tested.
  - [x] 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] I do not want this change to show in the release notes.
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6645
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Litchi Pi <litchi.pi@proton.me>
Co-committed-by: Litchi Pi <litchi.pi@proton.me>
2025-02-02 12:00:52 +00:00
Renovate Bot
6bd9867c3e Update dependency markdownlint-cli to v0.44.0 (forgejo) (#6758)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) | devDependencies | minor | [`0.43.0` -> `0.44.0`](https://renovatebot.com/diffs/npm/markdownlint-cli/0.43.0/0.44.0) |

---

### Release Notes

<details>
<summary>igorshubovych/markdownlint-cli (markdownlint-cli)</summary>

### [`v0.44.0`](https://github.com/igorshubovych/markdownlint-cli/releases/tag/v0.44.0)

[Compare Source](https://github.com/igorshubovych/markdownlint-cli/compare/v0.43.0...v0.44.0)

-   Update `markdownlint` dependency to `0.37.4`
    -   Convert module to ECMAScript (breaking change)
    -   Stop using `require`, convert to `import`
    -   Improve `MD032`
-   Update all dependencies via `Dependabot`

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* 0-3 1 * *" (UTC), Automerge - "* 0-3 * * *" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMzYuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEzNi4xIiwidGFyZ2V0QnJhbmNoIjoiZm9yZ2VqbyIsImxhYmVscyI6WyJkZXBlbmRlbmN5LXVwZ3JhZGUiLCJ0ZXN0L25vdC1uZWVkZWQiXX0=-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6758
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-02-01 09:53:42 +00:00
Renovate Bot
41dceec63d Update dependency @playwright/test to v1.50.1 (forgejo) (#6756)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [@playwright/test](https://playwright.dev) ([source](https://github.com/microsoft/playwright)) | devDependencies | minor | [`1.49.1` -> `1.50.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.49.1/1.50.1) |

---

### Release Notes

<details>
<summary>microsoft/playwright (@&#8203;playwright/test)</summary>

### [`v1.50.1`](https://github.com/microsoft/playwright/releases/tag/v1.50.1)

[Compare Source](https://github.com/microsoft/playwright/compare/v1.50.0...v1.50.1)

##### Highlights

https://github.com/microsoft/playwright/issues/34483 - \[Feature]: single aria snapshot for different engines/browsers
https://github.com/microsoft/playwright/issues/34497 - \[Bug]: Firefox not handling keepalive: true fetch requests
https://github.com/microsoft/playwright/issues/34504 - \[Bug]: update snapshots not creating good diffs
https://github.com/microsoft/playwright/issues/34507 - \[Bug]: snapshotPathTemplate doesnt work when multiple projects
https://github.com/microsoft/playwright/issues/34462 - \[Bug]: updateSnapshots "changed" throws an error

#### Browser Versions

-   Chromium 133.0.6943.16
-   Mozilla Firefox 134.0
-   WebKit 18.2

This version was also tested against the following stable channels:

-   Google Chrome 132
-   Microsoft Edge 132

### [`v1.50.0`](https://github.com/microsoft/playwright/releases/tag/v1.50.0)

[Compare Source](https://github.com/microsoft/playwright/compare/v1.49.1...v1.50.0)

#### Test runner

-   New option [`timeout`](https://playwright.dev/docs/api/class-test#test-step-option-timeout) allows specifying a maximum run time for an individual test step. A timed-out step will fail the execution of the test.

    ```js
    test('some test', async ({ page }) => {
      await test.step('a step', async () => {
        // This step can time out separately from the test
      }, { timeout: 1000 });
    });
    ```

-   New method [test.step.skip()](https://playwright.dev/docs/api/class-test#test-step-skip) to disable execution of a test step.

    ```js
    test('some test', async ({ page }) => {
      await test.step('before running step', async () => {
        // Normal step
      });

      await test.step.skip('not yet ready', async () => {
        // This step is skipped
      });

      await test.step('after running step', async () => {
        // This step still runs even though the previous one was skipped
      });
    });
    ```

-   Expanded [expect(locator).toMatchAriaSnapshot()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-match-aria-snapshot-2) to allow storing of aria snapshots in separate YAML files.

-   Added method [expect(locator).toHaveAccessibleErrorMessage()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-accessible-error-message) to assert the Locator points to an element with a given [aria errormessage](https://w3c.github.io/aria/#aria-errormessage).

-   Option [testConfig.updateSnapshots](https://playwright.dev/docs/api/class-testconfig#test-config-update-snapshots) added the configuration enum `changed`. `changed` updates only the snapshots that have changed, whereas `all` now updates all snapshots, regardless of whether there are any differences.

-   New option [testConfig.updateSourceMethod](https://playwright.dev/docs/api/class-testconfig#test-config-update-source-method) defines the way source code is updated when [testConfig.updateSnapshots](https://playwright.dev/docs/api/class-testconfig#test-config-update-snapshots) is configured. Added `overwrite` and `3-way` modes that write the changes into source code, on top of existing `patch` mode that creates a patch file.

    ```bash
    npx playwright test --update-snapshots=changed --update-source-method=3way
    ```

-   Option [testConfig.webServer](https://playwright.dev/docs/api/class-testconfig#test-config-web-server) added a `gracefulShutdown` field for specifying a process kill signal other than the default `SIGKILL`.

-   Exposed [testStep.attachments](https://playwright.dev/docs/api/class-teststep#test-step-attachments) from the reporter API to allow retrieval of all attachments created by that step.

-   New option `pathTemplate` for `toHaveScreenshot` and `toMatchAriaSnapshot` assertions in the [testConfig.expect](https://playwright.dev/docs/api/class-testconfig#test-config-expect) configuration.

#### UI updates

-   Updated default HTML reporter to improve display of attachments.
-   New button for picking elements to produce aria snapshots.
-   Additional details (such as keys pressed) are now displayed alongside action API calls in traces.
-   Display of `canvas` content in traces is error-prone. Display is now disabled by default, and can be enabled via the `Display canvas content` UI setting.
-   `Call` and `Network` panels now display additional time information.

#### Breaking

-   [expect(locator).toBeEditable()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-be-editable) and [locator.isEditable()](https://playwright.dev/docs/api/class-locator#locator-is-editable) now throw if the target element is not `<input>`, `<select>`, or a number of other editable elements.
-   Option [testConfig.updateSnapshots](https://playwright.dev/docs/api/class-testconfig#test-config-update-snapshots) now updates all snapshots when set to `all`, rather than only the failed/changed snapshots. Use the new enum `changed` to keep the old functionality of only updating the changed snapshots.

#### Browser Versions

-   Chromium 133.0.6943.16
-   Mozilla Firefox 134.0
-   WebKit 18.2

This version was also tested against the following stable channels:

-   Google Chrome 132
-   Microsoft Edge 132

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* 0-3 1 * *" (UTC), Automerge - "* 0-3 * * *" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMzYuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEzNi4xIiwidGFyZ2V0QnJhbmNoIjoiZm9yZ2VqbyIsImxhYmVscyI6WyJkZXBlbmRlbmN5LXVwZ3JhZGUiLCJ0ZXN0L25vdC1uZWVkZWQiXX0=-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6756
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-02-01 09:49:46 +00:00
Renovate Bot
a5f151602b Update dependency happy-dom to v16.8.1 (forgejo) (#6757)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [happy-dom](https://github.com/capricorn86/happy-dom) | devDependencies | minor | [`16.3.0` -> `16.8.1`](https://renovatebot.com/diffs/npm/happy-dom/16.3.0/16.8.1) |

---

### Release Notes

<details>
<summary>capricorn86/happy-dom (happy-dom)</summary>

### [`v16.8.1`](https://github.com/capricorn86/happy-dom/releases/tag/v16.8.1)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.8.0...v16.8.1)

##### 👷‍♂️ Patch fixes

-   Handle non-string values gracefully when removing an attribute - By **[@&#8203;OlaviSau](https://github.com/OlaviSau)** in task [#&#8203;1706](https://github.com/capricorn86/happy-dom/issues/1706)

### [`v16.8.0`](https://github.com/capricorn86/happy-dom/releases/tag/v16.8.0)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.7.3...v16.8.0)

##### 🎨 Features

-   Add support for `insertRow()` and `deleteRow()` to `HTMLTableSectionElement` - By **[@&#8203;christiango](https://github.com/christiango)** in task [#&#8203;1708](https://github.com/capricorn86/happy-dom/issues/1708)

### [`v16.7.3`](https://github.com/capricorn86/happy-dom/releases/tag/v16.7.3)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.7.2...v16.7.3)

##### 👷‍♂️ Patch fixes

-   Removes space from directory name that prevents the repo to be cloned on MS Windows - By **[@&#8203;kleinfreund](https://github.com/kleinfreund)** in task [#&#8203;1703](https://github.com/capricorn86/happy-dom/issues/1703)

### [`v16.7.2`](https://github.com/capricorn86/happy-dom/releases/tag/v16.7.2)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.7.1...v16.7.2)

##### 👷‍♂️ Patch fixes

-   Ignore invalid cookies in CookieContainer - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1693](https://github.com/capricorn86/happy-dom/issues/1693)

### [`v16.7.1`](https://github.com/capricorn86/happy-dom/releases/tag/v16.7.1)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.7.0...v16.7.1)

##### 👷‍♂️ Patch fixes

-   Adds `ICookie`, `IOptionalCookie`, `CookieSameSiteEnum` and `IVirtualServer` as exports to the index file - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1693](https://github.com/capricorn86/happy-dom/issues/1693)
-   Makes non-mandatory cookie properties optional in `CookieContainer.addCookies()` - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1693](https://github.com/capricorn86/happy-dom/issues/1693)

### [`v16.7.0`](https://github.com/capricorn86/happy-dom/releases/tag/v16.7.0)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.6.0...v16.7.0)

##### 🎨 Features

-   Adds support for simulating local HTTP servers that serves files from the local file system - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1688](https://github.com/capricorn86/happy-dom/issues/1688)
    -   Read more about virtual servers in the [Wiki](https://github.com/capricorn86/happy-dom/wiki/IVirtualServer)

### [`v16.6.0`](https://github.com/capricorn86/happy-dom/releases/tag/v16.6.0)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.5.3...v16.6.0)

##### 🎨 Features

-   Adds support for subsequent sibling combinator to `querySelector()`, `querySelectorAll()` and `matches()` (e.g. ".a ~ .b") - By **[@&#8203;karpiuMG](https://github.com/karpiuMG)** in task [#&#8203;1683](https://github.com/capricorn86/happy-dom/issues/1683)

### [`v16.5.3`](https://github.com/capricorn86/happy-dom/releases/tag/v16.5.3)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.5.2...v16.5.3)

##### 👷‍♂️ Patch fixes

-   Fixes problem with encoding and decoding attribute values in HTML - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1678](https://github.com/capricorn86/happy-dom/issues/1678)
-   Fixes issue where it was not possible to query selector by class when the attribute value had line breaks in it - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1678](https://github.com/capricorn86/happy-dom/issues/1678)

### [`v16.5.2`](https://github.com/capricorn86/happy-dom/releases/tag/v16.5.2)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.5.1...v16.5.2)

##### 👷‍♂️ Patch fixes

-   `Event.target` should be the target element after an event has been dispatched - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1529](https://github.com/capricorn86/happy-dom/issues/1529)

### [`v16.5.1`](https://github.com/capricorn86/happy-dom/releases/tag/v16.5.1)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.5.0...v16.5.1)

##### 👷‍♂️ Patch fixes

-   Fixes issue where `Comment`, `Text` and `DocumentFragment` are not instances of their corresponding property on `Window` - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1577](https://github.com/capricorn86/happy-dom/issues/1577)

### [`v16.5.0`](https://github.com/capricorn86/happy-dom/releases/tag/v16.5.0)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.4.3...v16.5.0)

##### 🎨 Features

-   Adds property `GlobalRegistrator.isRegistered` - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1670](https://github.com/capricorn86/happy-dom/issues/1670)

### [`v16.4.3`](https://github.com/capricorn86/happy-dom/releases/tag/v16.4.3)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.4.2...v16.4.3)

##### 👷‍♂️ Patch fixes

-   Adds null check for if browser frame is available in `Response` during tear down of the `Window` - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1669](https://github.com/capricorn86/happy-dom/issues/1669)

### [`v16.4.2`](https://github.com/capricorn86/happy-dom/releases/tag/v16.4.2)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.4.1...v16.4.2)

##### 👷‍♂️ Patch fixes

-   Support using URL as an object for URL:s when using the Browser API - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1664](https://github.com/capricorn86/happy-dom/issues/1664)

### [`v16.4.1`](https://github.com/capricorn86/happy-dom/releases/tag/v16.4.1)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.4.0...v16.4.1)

##### 👷‍♂️ Patch fixes

-   Fixes issue where HTML assigned to `document.documentElement.innerHTML` isnt parsed correctly since v16 - By **[@&#8203;capricorn86](https://github.com/capricorn86)** in task [#&#8203;1663](https://github.com/capricorn86/happy-dom/issues/1663)

### [`v16.4.0`](https://github.com/capricorn86/happy-dom/releases/tag/v16.4.0)

[Compare Source](https://github.com/capricorn86/happy-dom/compare/v16.3.0...v16.4.0)

##### 🎨 Features

-   Allow fetch to be intercepted and modified by sending in an interceptor as a setting - By **[@&#8203;OlaviSau](https://github.com/OlaviSau)** in task [#&#8203;1502](https://github.com/capricorn86/happy-dom/issues/1502)
    -   Read more about this in the Wiki at [IFetchInterceptor](https://github.com/capricorn86/happy-dom/wiki/IFetchInterceptor)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* 0-3 1 * *" (UTC), Automerge - "* 0-3 * * *" (UTC).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMzYuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEzNi4xIiwidGFyZ2V0QnJhbmNoIjoiZm9yZ2VqbyIsImxhYmVscyI6WyJkZXBlbmRlbmN5LXVwZ3JhZGUiLCJ0ZXN0L25vdC1uZWVkZWQiXX0=-->

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6757
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-02-01 09:47:59 +00:00
Otto
04f6d0568e Added alt's to <img> (#6506)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6506
Reviewed-by: Robert Wolff <mahlzahn@posteo.de>
Reviewed-by: Otto <otto@codeberg.org>
2025-02-01 07:28:25 +00:00
Robert Wolff
c92789100c Remove automatic alt text in markdown image rendering 2025-01-31 21:22:00 +00:00
Antonin Del Fabbro
c9b72d5b27 Added alt's to <img> 2025-01-31 21:22:00 +00:00
Gusted
1ee9e88809
chore: Remove GetFileResponseFromCommit
- Introduced in 2262811e40 and removed in
275d4b7e3f.
2025-01-31 16:22:29 +01:00
Gusted
039a679ccb
chore: Remove IsCommitStatusContextSuccess
- Introduced in 04ca7f0047 and removed in 81daf26878.
2025-01-31 16:22:29 +01:00
Gusted
5d52f88c9c
chore: Remove WithXXXParser
- Introduced in 88c2e24360 and removed in
the same commit. No usage.
2025-01-31 16:22:29 +01:00
Gusted
4cdfe27c8f
chore: Remove IsXXX
- Introduced in 812cfd0ad9 and removed in the same commit. No usage.
2025-01-31 16:22:29 +01:00
Gusted
9a406757f5
chore: Remove UpdateTeamUnits
- Introduced in 0b3ea42847 and removed in
b7221bec34.
2025-01-31 16:22:29 +01:00
Gusted
66d252bc2b
chore: Remove GetTeamNamesByID
- Introduced in 9ff4e1d2d9 and removed in
b3a6596b54.
2025-01-31 16:22:29 +01:00
Gusted
e2dfdcdabd
chore: Remove UsersInTeamsCount
- Introduced in 9681c83734 and removed in
bac4b78e09.
2025-01-31 16:22:29 +01:00
Gusted
d2701877c0
chore: Remove IsTagExist
- Introduced in 1ebb35b988 and removed in 2af67f6044.
2025-01-31 16:22:29 +01:00
Gusted
6fd9c065dc
chore: Remove BreakWriter
- Introduced in 99efa02edf and removed in 6e22605793.
2025-01-31 16:22:29 +01:00
Gusted
61f01f35ae
chore: Remove ErrUpdateTaskNotExist
- Introduced in f255b1e86d and removed in cd1821a7e2.
2025-01-31 16:22:29 +01:00
Gusted
581a2ca341
chore: Remove ScheduleList
- Introduced in 0d55f64e6c and removed in df1e7d0067.
2025-01-31 16:22:26 +01:00
Gusted
5423e22aeb
chore: Remove GetSourceByName
- Introduced in 5455605342 and removed in
the same commit. Usage was purely testing code.
2025-01-31 14:40:27 +01:00
Gusted
1b10046e1a
chore: Remove ParsePushHook
- Introduced in e378648c79 and removed in
the same commit. No usage.
2025-01-31 14:40:27 +01:00
Gusted
0ae59b7de7
chore: Remove ParseCreateHook
- Introduced in e378648c79 and removed in
the same commit. No usage.
2025-01-31 14:40:27 +01:00
Gusted
5cc5c877a5
chore: Remove ToSecret
- Introduced in 23addde28e and removed in
8cd46024fd.
2025-01-31 14:40:27 +01:00
Gusted
2d81bdbeb6
chore: Remove DeleteLocaleCookie
- Introduced in 9b261f52f0 and removed in
5b9557aef5.
2025-01-31 14:40:27 +01:00
Gusted
4d8f1e3e4b
chore: Remove DeadlineForm
- Introduced in 1a97030017 and removed in
ef6813abc9.
2025-01-31 14:40:27 +01:00
Gusted
552cfe75f5
chore: Remove TemporaryUploadRepository.GetLastCommit
- Introduced in 2262811e40 and removed in
the same commit. Never used.
2025-01-31 14:40:22 +01:00
0ko
b1590068a7 fix(ui): disable PR review button in archived repos (#6729)
* disable the "Finish review" button on PR/files page for archived repos - trying to review PRs in such repos results in JS error
* wrap the button in a div and move tooltips here to make them actually display on a disabled button - currently they do not
* added simple testing

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6729
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: 0ko <0ko@noreply.codeberg.org>
Co-committed-by: 0ko <0ko@noreply.codeberg.org>
2025-01-31 10:39:30 +00:00
John Moon
4ef00fe6f9 fix: set explore pages to configurable default sort (#6708)
- Currently, the explore/organizations page always defaults to using "newest" as its sort. Instead, use the pre-existing config option (`setting.UI.ExploreDefaultSort`) so server administrators can change the default sort order.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6708
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: John Moon <john.moon@vts-i.com>
Co-committed-by: John Moon <john.moon@vts-i.com>
2025-01-31 10:38:03 +00:00
Gusted
6062ba36f2
chore: Remove ActionsRunnerRegister
- Introduced in e90db3f5cc and it was
never used and it would've never worked.
2025-01-31 11:11:33 +01:00
Natalie Klestrup Röijezon
226994a6df fix: Remove autofocus on the dashboard repository search box (#6734)
- No longer autofocus on the searchbox for the repository list that is on the dashboard. There is no justification for doing so.
- Fixes #6653

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6734
Reviewed-by: Otto <otto@codeberg.org>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Natalie Klestrup Röijezon <nat@nullable.se>
Co-committed-by: Natalie Klestrup Röijezon <nat@nullable.se>
2025-01-31 10:09:31 +00:00
Gusted
56c757561f
chore: Remove ErrInvalidConfiguration
- Introduced in 6b1266b6b3 and removed in
6f9c278559.
2025-01-31 11:07:21 +01:00
Gusted
c4b2352c6c
chore: Remove LimitedReaderCloser
- Introduced in 511f6138d4 and removed in
270aab429e.
2025-01-31 10:43:29 +01:00
Gusted
b7b52fd04d
chore: Remove ChangeProjectStatus
- Introduced in 4027c5dd7c and removed in
the same commit (only used for testing code).
2025-01-30 12:19:59 +01:00
Gusted
8c3bfcac3b
chore: Remove UpdateColumnSorting
- Introduced in c69c01d2b6 and removed in
the same commit, no usage at all.
2025-01-30 12:19:59 +01:00
Gusted
901b32ce16
chore: Remove DeleteAttachmentsByIssue
- Introduced in 4617bef895 and removed in ab2d0b3b44.
2025-01-30 12:19:59 +01:00
Gusted
7481624273
chore: Remove FindReposMapByIDs
- Introduced in 8ce1b539b1 and removed in beb71f5ef6.
2025-01-30 12:19:59 +01:00
Gusted
a52b610eff
chore: Remove GetTopicByName
- Introduced in bec69f702b and removed in
the same commit (only usage was in testing code).
2025-01-30 12:19:59 +01:00
Gusted
5813244ff8 chore: Remove ChangeMilestoneStatus (#6741)
- Introduced in 5ed5aa5228 and removed in
4027c5dd7c.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6741
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2025-01-30 11:09:53 +00:00
Codeberg Translate
7678386138 i18n: update of translations from Codeberg Translate (#6665)
Co-authored-by: 0ko <0ko@users.noreply.translate.codeberg.org>
Co-authored-by: Edgarsons <edgarsons@users.noreply.translate.codeberg.org>
Co-authored-by: artnay <artnay@users.noreply.translate.codeberg.org>
Co-authored-by: xtex <xtexchooser@duck.com>
Co-authored-by: Fjuro <fjuro@users.noreply.translate.codeberg.org>
Co-authored-by: jedik <jedik@users.noreply.translate.codeberg.org>
Co-authored-by: Dirk <dirk@users.noreply.translate.codeberg.org>
Co-authored-by: SomeTr <sometr@users.noreply.translate.codeberg.org>
Co-authored-by: Kita Ikuyo <searinminecraft@courvix.com>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-authored-by: tacaly <frederick@tacaly.com>
Co-authored-by: Wuzzy <wuzzy@disroot.org>
Co-authored-by: Juno Takano <jutty@users.noreply.translate.codeberg.org>
Co-authored-by: justbispo <justbispo@users.noreply.translate.codeberg.org>
Co-authored-by: Ricky-Tigg <ricky-tigg@users.noreply.translate.codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@users.noreply.translate.codeberg.org>
Co-authored-by: Miguel P.L <miguel_pl@users.noreply.translate.codeberg.org>
Co-authored-by: earl-warren <earl-warren@users.noreply.translate.codeberg.org>
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6665
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-committed-by: Codeberg Translate <translate@codeberg.org>
2025-01-30 09:05:06 +00:00
Robert Wolff
c0a2108c25 fix inline file preview for files with encoded URL, fix #5069 (#6525)
### Screenshot
#### Before
See #5069.
#### After
![image](/attachments/d57c2ff8-d29e-41b8-9280-c884ac43f12e)
### Tests

- 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 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)).
- Manual testing: see https://codeberg.org/forgejo/forgejo/pulls/6525#issuecomment-2578814. Thanks @earl-warren.

### 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

- [ ] I do not want this change to show in the release notes.
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/<pull request number>.md` to be be used for the release notes instead of the title.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6525
Reviewed-by: Otto <otto@codeberg.org>
Co-authored-by: Robert Wolff <mahlzahn@posteo.de>
Co-committed-by: Robert Wolff <mahlzahn@posteo.de>
2025-01-30 08:20:05 +00:00
Gusted
1698210ead chore: fix ci failure (#6738)
- #6727 added this test and #6726 modified it to also include webauthn
users. The former was not rebased on the latter when it was merged.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6738
Reviewed-by: Earl Warren <earl-warren@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>
2025-01-30 08:04:08 +00:00
Otto
dfcf3f116b chore: remove deadcode in models/user (#6728)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6728
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Reviewed-by: Otto <otto@codeberg.org>
2025-01-29 21:25:32 +00:00
Otto
2ba8946cac fix: check for webauthn in 2fa user search (#6726)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6726
Reviewed-by: Otto <otto@codeberg.org>
2025-01-29 18:55:14 +00:00
Gusted
59dfab2d8b chore: load 2fa status for user search when needed (#6727)
- Don't make an extra database call to gather the 2FA status of the users returned from the search. Only load it for the admin's user list page.
- Integration testing added.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6727
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2025-01-29 17:57:55 +00:00
Gusted
801c392e0c
chore: remove deadcode in models/user
- Remove `ErrUserInactive` introduced in
f5fa22a499 and removed in
ef2a343e27
- Remove `GetUserEmailsByNames` introduced in
a4cbe79567 and removed in
08ae6bb7ed
- Remove `GetUserNamesByIDs` introduced in
9ff4e1d2d9 and removed in
b3a6596b54
2025-01-29 18:37:14 +01:00
0ko
4cc0320ed0 ui: update language stats layout and click behavior (#6700)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6700
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Reviewed-by: Beowulf <beowulf@beocode.eu>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
2025-01-29 16:55:10 +00:00
Gusted
83311c694c
fix: check for webauthn in 2fa user search
- Check for webauthn credentials in the user search when the two factor
filter is enabled.
- Resolves forgejo/forgejo#6524
2025-01-29 15:26:15 +01:00
Gusted
fd285bfc4e fix: disallow blame on directories (#6716)
- Don't allow the blame operation on directories.
- Added integration test.
- Resolves forgejo/forgejo#6533

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6716
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2025-01-29 09:02:46 +00:00
Gusted
b69755b417 fix(i18n): add forgotten translatable string (#6701)
- Bug of 75ce1e2ac1

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6701
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2025-01-29 07:45:40 +00:00
Gusted
5e92674ec4 fix: render issue titles consistently (#6715)
- Render the issue titles in dashboard feed in consistent manner, by using the existing `RenderIssueTitle`.
- Added integration tests (not exhaustive for all comment types, but exhaustive enough for the current code where some comment types are grouped together).
- Resolves forgejo/forgejo#6705

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6715
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
2025-01-29 07:44:38 +00:00
Otto
bd6864fe1f fix(i18n): use translate key as fallback (#6702)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6702
Reviewed-by: 0ko <0ko@noreply.codeberg.org>
Reviewed-by: Otto <otto@codeberg.org>
2025-01-29 00:12:51 +00:00
Michael Kriese
ff3f12a350 chore: consistent docker image and action references (#6703)
- replace `code.forgejo.org` ->`data.forgejo.org` on docker images
- add `https://data.forgejo.org/` to actions where missing

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6703
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
Co-committed-by: Michael Kriese <michael.kriese@visualon.de>
2025-01-28 15:41:11 +00:00
Gusted
15aa35a809
fix(i18n): use translate key as fallback
- If the translate key is nonsense (not seen in any of the languages)
then the translate key as-is should be returned as value, this helps
during development. Currently it displays the first entry of the locale
store which is "Home".
- Regression from forgejo/forgejo#6203.
- Added unit test.
2025-01-28 15:03:38 +01:00
Earl Warren
5255fd1a6c [gitea] week 2025-05 cherry pick (gitea/main -> forgejo) (#6688)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6688
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Reviewed-by: jerger <jerger@noreply.codeberg.org>
2025-01-28 07:26:43 +00:00
Renovate Bot
5853180af8 Update module github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker to v3.2.0 (forgejo) (#6699)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/6699
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
Co-committed-by: Renovate Bot <forgejo-renovate-action@forgejo.org>
2025-01-28 05:50:40 +00:00
wxiaoguang
41fd548e7a
Do not access GitRepo when a repo is being created (#33380)
(cherry picked from commit 06ff9b6256824a2dfee18adff5a8540412b22641)

Conflicts:
	services/context/repo.go
  trivial context conflict
2025-01-26 11:36:13 +01:00
138 changed files with 1678 additions and 1493 deletions

View file

@ -10,25 +10,10 @@ code.gitea.io/gitea/cmd/forgejo
ContextSetStdin
code.gitea.io/gitea/models
IsErrUpdateTaskNotExist
ErrUpdateTaskNotExist.Error
ErrUpdateTaskNotExist.Unwrap
IsErrSHANotFound
IsErrMergeDivergingFastForwardOnly
code.gitea.io/gitea/models/actions
ScheduleList.GetUserIDs
ScheduleList.GetRepoIDs
ScheduleList.LoadTriggerUser
ScheduleList.LoadRepos
code.gitea.io/gitea/models/asymkey
ErrGPGKeyAccessDenied.Error
ErrGPGKeyAccessDenied.Unwrap
HasDeployKey
code.gitea.io/gitea/models/auth
GetSourceByName
WebAuthnCredentials
code.gitea.io/gitea/models/db
@ -54,43 +39,24 @@ code.gitea.io/gitea/models/git
code.gitea.io/gitea/models/issues
IsErrUnknownDependencyType
ErrNewIssueInsert.Error
IsErrIssueWasClosed
ChangeMilestoneStatus
code.gitea.io/gitea/models/organization
GetTeamNamesByID
UpdateTeamUnits
SearchMembersOptions.ToConds
UsersInTeamsCount
code.gitea.io/gitea/models/perm/access
GetRepoWriters
code.gitea.io/gitea/models/project
UpdateColumnSorting
ChangeProjectStatus
code.gitea.io/gitea/models/repo
DeleteAttachmentsByIssue
FindReposMapByIDs
IsErrTopicNotExist
ErrTopicNotExist.Error
ErrTopicNotExist.Unwrap
GetTopicByName
WatchRepoMode
code.gitea.io/gitea/models/user
ErrUserInactive.Error
ErrUserInactive.Unwrap
IsErrExternalLoginUserAlreadyExist
IsErrExternalLoginUserNotExist
NewFederatedUser
IsErrUserSettingIsNotExist
GetUserAllSettings
DeleteUserSetting
GetUserEmailsByNames
GetUserNamesByIDs
code.gitea.io/gitea/modules/activitypub
NewContext
@ -114,9 +80,6 @@ code.gitea.io/gitea/modules/cache
WithNoCacheContext
RemoveContextData
code.gitea.io/gitea/modules/charset
BreakWriter.Write
code.gitea.io/gitea/modules/emoji
ReplaceCodes
@ -138,10 +101,7 @@ code.gitea.io/gitea/modules/git
CommitChangesWithArgs
SetUpdateHook
openRepositoryWithDefaultContext
IsTagExist
ToEntryMode
LimitedReaderCloser.Read
LimitedReaderCloser.Close
code.gitea.io/gitea/modules/gitgraph
Parser.Reset
@ -182,16 +142,8 @@ code.gitea.io/gitea/modules/markup/console
RenderString
code.gitea.io/gitea/modules/markup/markdown
IsDetails
IsSummary
IsTaskCheckBoxListItem
IsIcon
RenderRawString
code.gitea.io/gitea/modules/markup/markdown/math
WithInlineDollarParser
WithBlockDollarParser
code.gitea.io/gitea/modules/markup/mdstripper
stripRenderer.AddOptions
StripMarkdown
@ -199,9 +151,6 @@ code.gitea.io/gitea/modules/markup/mdstripper
code.gitea.io/gitea/modules/markup/orgmode
RenderString
code.gitea.io/gitea/modules/private
ActionsRunnerRegister
code.gitea.io/gitea/modules/process
Manager.ExecTimeout
@ -224,14 +173,6 @@ code.gitea.io/gitea/modules/setting
GitConfigType.GetOption
InitLoggersForTest
code.gitea.io/gitea/modules/storage
ErrInvalidConfiguration.Error
IsErrInvalidConfiguration
code.gitea.io/gitea/modules/structs
ParseCreateHook
ParsePushHook
code.gitea.io/gitea/modules/sync
StatusTable.Start
StatusTable.IsRunning
@ -263,9 +204,6 @@ code.gitea.io/gitea/modules/web
RouteMock
RouteMockReset
code.gitea.io/gitea/modules/web/middleware
DeleteLocaleCookie
code.gitea.io/gitea/modules/zstd
NewWriter
Writer.Write
@ -280,23 +218,11 @@ code.gitea.io/gitea/routers/web/org
code.gitea.io/gitea/services/context
GetPrivateContext
code.gitea.io/gitea/services/convert
ToSecret
code.gitea.io/gitea/services/forms
DeadlineForm.Validate
code.gitea.io/gitea/services/pull
IsCommitStatusContextSuccess
code.gitea.io/gitea/services/repository
IsErrForkAlreadyExist
code.gitea.io/gitea/services/repository/files
ContentType.String
GetFileResponseFromCommit
TemporaryUploadRepository.GetLastCommit
TemporaryUploadRepository.GetLastCommitByRef
code.gitea.io/gitea/services/webhook
NewNotifier

View file

@ -3,7 +3,7 @@ runs:
steps:
- run: |
su forgejo -c 'make deps-backend'
- uses: actions/cache@v4
- uses: https://data.forgejo.org/actions/cache@v4
id: cache-backend
with:
path: ${{github.workspace}}/gitea

View file

@ -49,7 +49,7 @@ runs:
- name: "Restore Go dependencies from cache or mark for later caching"
id: cache-deps
uses: actions/cache@v4
uses: https://data.forgejo.org/actions/cache@v4
with:
key: setup-cache-go-deps-${{ runner.os }}-${{ inputs.username }}-${{ steps.go-version.outputs.go_version }}-${{ hashFiles('go.sum', 'go.mod') }}
restore-keys: |

View file

@ -25,7 +25,7 @@ jobs:
if: vars.ROLE == 'forgejo-coding'
runs-on: lxc-bookworm
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
- id: forgejo
uses: https://data.forgejo.org/actions/setup-forgejo@v2.0.4

View file

@ -33,7 +33,7 @@ jobs:
# root is used for testing, allow it
if: vars.ROLE == 'forgejo-integration' || github.repository_owner == 'root'
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
with:
fetch-depth: 0

View file

@ -37,11 +37,11 @@ jobs:
container:
image: data.forgejo.org/oci/node:20-bookworm
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
with:
fetch-depth: '0'
show-progress: 'false'
- uses: https://code.forgejo.org/actions/cascading-pr@v2.2.0
- uses: https://data.forgejo.org/actions/cascading-pr@v2.2.0
with:
origin-url: ${{ env.GITHUB_SERVER_URL }}
origin-repo: ${{ github.repository }}

View file

@ -39,7 +39,7 @@ jobs:
runs-on: lxc-bookworm
if: vars.DOER != '' && vars.FORGEJO != '' && vars.TO_OWNER != '' && vars.FROM_OWNER != '' && secrets.TOKEN != ''
steps:
- uses: actions/checkout@v4
- uses: https://data.forgejo.org/actions/checkout@v4
- name: copy & sign
uses: https://data.forgejo.org/forgejo/forgejo-build-publish/publish@v5.3.1

View file

@ -25,7 +25,7 @@ jobs:
runs-on: docker
container:
image: data.forgejo.org/renovate/renovate:39.136.1
image: data.forgejo.org/renovate/renovate:39.156.1
steps:
- name: Load renovate repo cache

View file

@ -46,7 +46,7 @@ jobs:
apt-get update -qq
apt-get -q install -qq -y zstd
- name: "Cache frontend build for playwright testing"
uses: actions/cache/save@v4
uses: https://data.forgejo.org/actions/cache/save@v4
with:
path: ${{github.workspace}}/public/assets
key: frontend-build-${{ github.sha }}
@ -104,7 +104,7 @@ jobs:
fetch-depth: 20
- uses: ./.forgejo/workflows-composite/setup-env
- name: "Restore frontend build"
uses: actions/cache/restore@v4
uses: https://data.forgejo.org/actions/cache/restore@v4
id: cache-frontend
with:
path: ${{github.workspace}}/public/assets

View file

@ -1,6 +1,6 @@
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.23-alpine3.21 as build-env
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/golang:1.23-alpine3.21 as build-env
ARG GOPROXY
ENV GOPROXY=${GOPROXY:-direct}
@ -51,7 +51,7 @@ RUN chmod 755 /tmp/local/usr/bin/entrypoint \
/go/src/code.gitea.io/gitea/environment-to-ini
RUN chmod 644 /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_autocomplete
FROM code.forgejo.org/oci/alpine:3.21
FROM data.forgejo.org/oci/alpine:3.21
ARG RELEASE_VERSION
LABEL maintainer="contact@forgejo.org" \
org.opencontainers.image.authors="Forgejo" \

View file

@ -1,6 +1,6 @@
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/xx AS xx
FROM --platform=$BUILDPLATFORM code.forgejo.org/oci/golang:1.23-alpine3.21 as build-env
FROM --platform=$BUILDPLATFORM data.forgejo.org/oci/golang:1.23-alpine3.21 as build-env
ARG GOPROXY
ENV GOPROXY=${GOPROXY:-direct}
@ -49,7 +49,7 @@ RUN chmod 755 /tmp/local/usr/local/bin/docker-entrypoint.sh \
/go/src/code.gitea.io/gitea/environment-to-ini
RUN chmod 644 /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_autocomplete
FROM code.forgejo.org/oci/alpine:3.21
FROM data.forgejo.org/oci/alpine:3.21
LABEL maintainer="contact@forgejo.org" \
org.opencontainers.image.authors="Forgejo" \
org.opencontainers.image.url="https://forgejo.org" \

View file

@ -37,7 +37,7 @@ endif
XGO_VERSION := go-1.21.x
AIR_PACKAGE ?= github.com/air-verse/air@v1 # renovate: datasource=go
EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker@v3.1.1 # renovate: datasource=go
EDITORCONFIG_CHECKER_PACKAGE ?= github.com/editorconfig-checker/editorconfig-checker/v3/cmd/editorconfig-checker@v3.2.0 # renovate: datasource=go
GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@v0.7.0 # renovate: datasource=go
GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.2 # renovate: datasource=go
GXZ_PACKAGE ?= github.com/ulikunitz/xz/cmd/gxz@v0.5.11 # renovate: datasource=go
@ -49,7 +49,7 @@ GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1 # renovate: datasour
DEADCODE_PACKAGE ?= golang.org/x/tools/cmd/deadcode@v0.29.0 # renovate: datasource=go
GOMOCK_PACKAGE ?= go.uber.org/mock/mockgen@v0.4.0 # renovate: datasource=go
GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.17.1 # renovate: datasource=go
RENOVATE_NPM_PACKAGE ?= renovate@39.136.1 # renovate: datasource=docker packageName=data.forgejo.org/renovate/renovate
RENOVATE_NPM_PACKAGE ?= renovate@39.156.1 # renovate: datasource=docker packageName=data.forgejo.org/renovate/renovate
# https://github.com/disposable-email-domains/disposable-email-domains/commits/main/
DISPOSABLE_EMAILS_SHA ?= 0c27e671231d27cf66370034d7f6818037416989 # renovate: ...

View file

@ -14,6 +14,8 @@ import (
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util"
webhook_module "code.gitea.io/gitea/modules/webhook"
"xorm.io/builder"
)
// ActionSchedule represents a schedule of a workflow file
@ -140,3 +142,25 @@ func CleanRepoScheduleTasks(ctx context.Context, repo *repo_model.Repository, ca
}
return nil
}
type FindScheduleOptions struct {
db.ListOptions
RepoID int64
OwnerID int64
}
func (opts FindScheduleOptions) ToConds() builder.Cond {
cond := builder.NewCond()
if opts.RepoID > 0 {
cond = cond.And(builder.Eq{"repo_id": opts.RepoID})
}
if opts.OwnerID > 0 {
cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
}
return cond
}
func (opts FindScheduleOptions) ToOrders() string {
return "`id` DESC"
}

View file

@ -1,83 +0,0 @@
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package actions
import (
"context"
"code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/container"
"xorm.io/builder"
)
type ScheduleList []*ActionSchedule
// GetUserIDs returns a slice of user's id
func (schedules ScheduleList) GetUserIDs() []int64 {
return container.FilterSlice(schedules, func(schedule *ActionSchedule) (int64, bool) {
return schedule.TriggerUserID, true
})
}
func (schedules ScheduleList) GetRepoIDs() []int64 {
return container.FilterSlice(schedules, func(schedule *ActionSchedule) (int64, bool) {
return schedule.RepoID, true
})
}
func (schedules ScheduleList) LoadTriggerUser(ctx context.Context) error {
userIDs := schedules.GetUserIDs()
users := make(map[int64]*user_model.User, len(userIDs))
if err := db.GetEngine(ctx).In("id", userIDs).Find(&users); err != nil {
return err
}
for _, schedule := range schedules {
if schedule.TriggerUserID == user_model.ActionsUserID {
schedule.TriggerUser = user_model.NewActionsUser()
} else {
schedule.TriggerUser = users[schedule.TriggerUserID]
if schedule.TriggerUser == nil {
schedule.TriggerUser = user_model.NewGhostUser()
}
}
}
return nil
}
func (schedules ScheduleList) LoadRepos(ctx context.Context) error {
repoIDs := schedules.GetRepoIDs()
repos, err := repo_model.GetRepositoriesMapByIDs(ctx, repoIDs)
if err != nil {
return err
}
for _, schedule := range schedules {
schedule.Repo = repos[schedule.RepoID]
}
return nil
}
type FindScheduleOptions struct {
db.ListOptions
RepoID int64
OwnerID int64
}
func (opts FindScheduleOptions) ToConds() builder.Cond {
cond := builder.NewCond()
if opts.RepoID > 0 {
cond = cond.And(builder.Eq{"repo_id": opts.RepoID})
}
if opts.OwnerID > 0 {
cond = cond.And(builder.Eq{"owner_id": opts.OwnerID})
}
return cond
}
func (opts FindScheduleOptions) ToOrders() string {
return "`id` DESC"
}

View file

@ -192,28 +192,6 @@ func (err ErrGPGKeyIDAlreadyUsed) Unwrap() error {
return util.ErrAlreadyExist
}
// ErrGPGKeyAccessDenied represents a "GPGKeyAccessDenied" kind of Error.
type ErrGPGKeyAccessDenied struct {
UserID int64
KeyID int64
}
// IsErrGPGKeyAccessDenied checks if an error is a ErrGPGKeyAccessDenied.
func IsErrGPGKeyAccessDenied(err error) bool {
_, ok := err.(ErrGPGKeyAccessDenied)
return ok
}
// Error pretty-prints an error of type ErrGPGKeyAccessDenied.
func (err ErrGPGKeyAccessDenied) Error() string {
return fmt.Sprintf("user does not have access to the key [user_id: %d, key_id: %d]",
err.UserID, err.KeyID)
}
func (err ErrGPGKeyAccessDenied) Unwrap() error {
return util.ErrPermissionDenied
}
// ErrKeyAccessDenied represents a "KeyAccessDenied" kind of error.
type ErrKeyAccessDenied struct {
UserID int64

View file

@ -105,14 +105,6 @@ func addDeployKey(ctx context.Context, keyID, repoID int64, name, fingerprint st
return key, db.Insert(ctx, key)
}
// HasDeployKey returns true if public key is a deploy key of given repository.
func HasDeployKey(ctx context.Context, keyID, repoID int64) bool {
has, _ := db.GetEngine(ctx).
Where("key_id = ? AND repo_id = ?", keyID, repoID).
Get(new(DeployKey))
return has
}
// AddDeployKey add new deploy key to database and authorized_keys file.
func AddDeployKey(ctx context.Context, repoID int64, name, content string, readOnly bool) (*DeployKey, error) {
fingerprint, err := CalcFingerprint(content)

View file

@ -299,17 +299,6 @@ func GetSourceByID(ctx context.Context, id int64) (*Source, error) {
return source, nil
}
func GetSourceByName(ctx context.Context, name string) (*Source, error) {
source := &Source{}
has, err := db.GetEngine(ctx).Where("name = ?", name).Get(source)
if err != nil {
return nil, err
} else if !has {
return nil, ErrSourceNotExist{}
}
return source, nil
}
// UpdateSource updates a Source record in DB.
func UpdateSource(ctx context.Context, source *Source) error {
var originalSource *Source

View file

@ -151,25 +151,6 @@ func (err *ErrInvalidCloneAddr) Unwrap() error {
return util.ErrInvalidArgument
}
// ErrUpdateTaskNotExist represents a "UpdateTaskNotExist" kind of error.
type ErrUpdateTaskNotExist struct {
UUID string
}
// IsErrUpdateTaskNotExist checks if an error is a ErrUpdateTaskNotExist.
func IsErrUpdateTaskNotExist(err error) bool {
_, ok := err.(ErrUpdateTaskNotExist)
return ok
}
func (err ErrUpdateTaskNotExist) Error() string {
return fmt.Sprintf("update task does not exist [uuid: %s]", err.UUID)
}
func (err ErrUpdateTaskNotExist) Unwrap() error {
return util.ErrNotExist
}
// ErrInvalidTagName represents a "InvalidTagName" kind of error.
type ErrInvalidTagName struct {
TagName string

View file

@ -63,21 +63,6 @@ func (err ErrIssueIsClosed) Error() string {
return fmt.Sprintf("issue is closed [id: %d, repo_id: %d, index: %d]", err.ID, err.RepoID, err.Index)
}
// ErrNewIssueInsert is used when the INSERT statement in newIssue fails
type ErrNewIssueInsert struct {
OriginalError error
}
// IsErrNewIssueInsert checks if an error is a ErrNewIssueInsert.
func IsErrNewIssueInsert(err error) bool {
_, ok := err.(ErrNewIssueInsert)
return ok
}
func (err ErrNewIssueInsert) Error() string {
return err.OriginalError.Error()
}
// ErrIssueWasClosed is used when close a closed issue
type ErrIssueWasClosed struct {
ID int64

View file

@ -433,7 +433,7 @@ func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *Issue, la
LabelIDs: labelIDs,
Attachments: uuids,
}); err != nil {
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) || IsErrNewIssueInsert(err) {
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) {
return err
}
return fmt.Errorf("newIssue: %w", err)

View file

@ -251,21 +251,6 @@ func ChangeMilestoneStatusByRepoIDAndID(ctx context.Context, repoID, milestoneID
return committer.Commit()
}
// ChangeMilestoneStatus changes the milestone open/closed status.
func ChangeMilestoneStatus(ctx context.Context, m *Milestone, isClosed bool) (err error) {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
defer committer.Close()
if err := changeMilestoneStatus(ctx, m, isClosed); err != nil {
return err
}
return committer.Commit()
}
func changeMilestoneStatus(ctx context.Context, m *Milestone, isClosed bool) error {
m.IsClosed = isClosed
if isClosed {

View file

@ -298,17 +298,16 @@ func TestNewMilestone(t *testing.T) {
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
}
func TestChangeMilestoneStatus(t *testing.T) {
func TestChangeMilestoneStatusByRepoIDAndID(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1})
require.NoError(t, issues_model.ChangeMilestoneStatus(db.DefaultContext, milestone, true))
unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}, "is_closed=1")
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
require.NoError(t, issues_model.ChangeMilestoneStatusByRepoIDAndID(db.DefaultContext, 1, 1, true))
unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1, IsClosed: true})
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: 1}, &issues_model.Milestone{})
require.NoError(t, issues_model.ChangeMilestoneStatus(db.DefaultContext, milestone, false))
require.NoError(t, issues_model.ChangeMilestoneStatusByRepoIDAndID(db.DefaultContext, 1, 1, false))
unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}, "is_closed=0")
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: 1}, &issues_model.Milestone{})
}
func TestDeleteMilestoneByRepoID(t *testing.T) {

View file

@ -575,7 +575,7 @@ func NewPullRequest(ctx context.Context, repo *repo_model.Repository, issue *Iss
Attachments: uuids,
IsPull: true,
}); err != nil {
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) || IsErrNewIssueInsert(err) {
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) {
return err
}
return fmt.Errorf("newIssue: %w", err)

View file

@ -247,22 +247,6 @@ func GetTeamByID(ctx context.Context, teamID int64) (*Team, error) {
return t, nil
}
// GetTeamNamesByID returns team's lower name from a list of team ids.
func GetTeamNamesByID(ctx context.Context, teamIDs []int64) ([]string, error) {
if len(teamIDs) == 0 {
return []string{}, nil
}
var teamNames []string
err := db.GetEngine(ctx).Table("team").
Select("lower_name").
In("id", teamIDs).
Asc("name").
Find(&teamNames)
return teamNames, err
}
// IncrTeamRepoNum increases the number of repos for the given team by 1
func IncrTeamRepoNum(ctx context.Context, teamID int64) error {
_, err := db.GetEngine(ctx).Incr("num_repos").ID(teamID).Update(new(Team))

View file

@ -188,20 +188,6 @@ func TestHasTeamRepo(t *testing.T) {
test(2, 5, false)
}
func TestUsersInTeamsCount(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
test := func(teamIDs, userIDs []int64, expected int64) {
count, err := organization.UsersInTeamsCount(db.DefaultContext, teamIDs, userIDs)
require.NoError(t, err)
assert.Equal(t, expected, count)
}
test([]int64{2}, []int64{1, 2, 3, 4}, 1) // only userid 2
test([]int64{1, 2, 3, 4, 5}, []int64{2, 5}, 2) // userid 2,4
test([]int64{1, 2, 3, 4, 5}, []int64{2, 3, 5}, 3) // userid 2,4,5
}
func TestInconsistentOwnerTeam(t *testing.T) {
defer unittest.OverrideFixtures(
unittest.FixturesOptions{

View file

@ -28,24 +28,3 @@ func (t *TeamUnit) Unit() unit.Unit {
func getUnitsByTeamID(ctx context.Context, teamID int64) (units []*TeamUnit, err error) {
return units, db.GetEngine(ctx).Where("team_id = ?", teamID).Find(&units)
}
// UpdateTeamUnits updates a teams's units
func UpdateTeamUnits(ctx context.Context, team *Team, units []TeamUnit) (err error) {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
defer committer.Close()
if _, err = db.GetEngine(ctx).Where("team_id = ?", team.ID).Delete(new(TeamUnit)); err != nil {
return err
}
if len(units) > 0 {
if err = db.Insert(ctx, units); err != nil {
return err
}
}
return committer.Commit()
}

View file

@ -76,14 +76,3 @@ func GetTeamMembers(ctx context.Context, opts *SearchMembersOptions) ([]*user_mo
func IsUserInTeams(ctx context.Context, userID int64, teamIDs []int64) (bool, error) {
return db.GetEngine(ctx).Where("uid=?", userID).In("team_id", teamIDs).Exist(new(TeamUser))
}
// UsersInTeamsCount counts the number of users which are in userIDs and teamIDs
func UsersInTeamsCount(ctx context.Context, userIDs, teamIDs []int64) (int64, error) {
var ids []int64
if err := db.GetEngine(ctx).In("uid", userIDs).In("team_id", teamIDs).
Table("team_user").
Cols("uid").GroupBy("uid").Find(&ids); err != nil {
return 0, err
}
return int64(len(ids)), nil
}

View file

@ -305,20 +305,6 @@ func SetDefaultColumn(ctx context.Context, projectID, columnID int64) error {
})
}
// UpdateColumnSorting update project column sorting
func UpdateColumnSorting(ctx context.Context, cl ColumnList) error {
return db.WithTx(ctx, func(ctx context.Context) error {
for i := range cl {
if _, err := db.GetEngine(ctx).ID(cl[i].ID).Cols(
"sorting",
).Update(cl[i]); err != nil {
return err
}
}
return nil
})
}
func GetColumnsByIDs(ctx context.Context, projectID int64, columnsIDs []int64) (ColumnList, error) {
columns := make([]*Column, 0, 5)
if err := db.GetEngine(ctx).

View file

@ -368,21 +368,6 @@ func ChangeProjectStatusByRepoIDAndID(ctx context.Context, repoID, projectID int
return committer.Commit()
}
// ChangeProjectStatus toggle a project between opened and closed
func ChangeProjectStatus(ctx context.Context, p *Project, isClosed bool) error {
ctx, committer, err := db.TxContext(ctx)
if err != nil {
return err
}
defer committer.Close()
if err := changeProjectStatus(ctx, p, isClosed); err != nil {
return err
}
return committer.Commit()
}
func changeProjectStatus(ctx context.Context, p *Project, isClosed bool) error {
p.IsClosed = isClosed
p.ClosedDateUnix = timeutil.TimeStampNow()

View file

@ -75,7 +75,7 @@ func TestProject(t *testing.T) {
assert.Equal(t, project.Title, projectFromDB.Title)
require.NoError(t, ChangeProjectStatus(db.DefaultContext, project, true))
require.NoError(t, ChangeProjectStatusByRepoIDAndID(db.DefaultContext, project.RepoID, project.ID, true))
// Retrieve from DB afresh to check if it is truly closed
projectFromDB, err = GetProjectByID(db.DefaultContext, project.ID)

View file

@ -219,16 +219,6 @@ func DeleteAttachments(ctx context.Context, attachments []*Attachment, remove bo
return int(cnt), nil
}
// DeleteAttachmentsByIssue deletes all attachments associated with the given issue.
func DeleteAttachmentsByIssue(ctx context.Context, issueID int64, remove bool) (int, error) {
attachments, err := GetAttachmentsByIssueID(ctx, issueID)
if err != nil {
return 0, err
}
return DeleteAttachments(ctx, attachments, remove)
}
// DeleteAttachmentsByComment deletes all attachments associated with the given comment.
func DeleteAttachmentsByComment(ctx context.Context, commentID int64, remove bool) (int, error) {
attachments, err := GetAttachmentsByCommentID(ctx, commentID)

View file

@ -46,11 +46,7 @@ func TestGetByCommentOrIssueID(t *testing.T) {
func TestDeleteAttachments(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
count, err := repo_model.DeleteAttachmentsByIssue(db.DefaultContext, 4, false)
require.NoError(t, err)
assert.Equal(t, 2, count)
count, err = repo_model.DeleteAttachmentsByComment(db.DefaultContext, 2, false)
count, err := repo_model.DeleteAttachmentsByComment(db.DefaultContext, 2, false)
require.NoError(t, err)
assert.Equal(t, 2, count)

View file

@ -21,11 +21,6 @@ import (
"xorm.io/builder"
)
// FindReposMapByIDs find repos as map
func FindReposMapByIDs(ctx context.Context, repoIDs []int64, res map[int64]*Repository) error {
return db.GetEngine(ctx).In("id", repoIDs).Find(&res)
}
// RepositoryListDefaultPageSize is the default number of repositories
// to load in memory when running administrative tasks on all (or almost
// all) of them.

View file

@ -5,14 +5,12 @@ package repo
import (
"context"
"fmt"
"regexp"
"strings"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util"
"xorm.io/builder"
)
@ -39,26 +37,6 @@ type RepoTopic struct { //revive:disable-line:exported
TopicID int64 `xorm:"pk"`
}
// ErrTopicNotExist represents an error that a topic is not exist
type ErrTopicNotExist struct {
Name string
}
// IsErrTopicNotExist checks if an error is an ErrTopicNotExist.
func IsErrTopicNotExist(err error) bool {
_, ok := err.(ErrTopicNotExist)
return ok
}
// Error implements error interface
func (err ErrTopicNotExist) Error() string {
return fmt.Sprintf("topic is not exist [name: %s]", err.Name)
}
func (err ErrTopicNotExist) Unwrap() error {
return util.ErrNotExist
}
// ValidateTopic checks a topic by length and match pattern rules
func ValidateTopic(topic string) bool {
return len(topic) <= 35 && topicPattern.MatchString(topic)
@ -91,17 +69,6 @@ func SanitizeAndValidateTopics(topics []string) (validTopics, invalidTopics []st
return validTopics, invalidTopics
}
// GetTopicByName retrieves topic by name
func GetTopicByName(ctx context.Context, name string) (*Topic, error) {
var topic Topic
if has, err := db.GetEngine(ctx).Where("name = ?", name).Get(&topic); err != nil {
return nil, err
} else if !has {
return nil, ErrTopicNotExist{name}
}
return &topic, nil
}
// addTopicByNameToRepo adds a topic name to a repo and increments the topic count.
// Returns topic after the addition
func addTopicByNameToRepo(ctx context.Context, repoID int64, topicName string) (*Topic, error) {

View file

@ -52,8 +52,7 @@ func TestAddTopic(t *testing.T) {
require.NoError(t, repo_model.SaveTopics(db.DefaultContext, 2, "golang", "gitea"))
repo2NrOfTopics = 2
totalNrOfTopics++
topic, err := repo_model.GetTopicByName(db.DefaultContext, "gitea")
require.NoError(t, err)
topic := unittest.AssertExistsAndLoadBean(t, &repo_model.Topic{Name: "gitea"})
assert.EqualValues(t, 1, topic.RepoCount)
topics, _, err = repo_model.FindTopics(db.DefaultContext, &repo_model.FindTopicOptions{})

View file

@ -71,27 +71,6 @@ func (err ErrUserProhibitLogin) Unwrap() error {
return util.ErrPermissionDenied
}
// ErrUserInactive represents a "ErrUserInactive" kind of error.
type ErrUserInactive struct {
UID int64
Name string
}
// IsErrUserInactive checks if an error is a ErrUserInactive
func IsErrUserInactive(err error) bool {
_, ok := err.(ErrUserInactive)
return ok
}
func (err ErrUserInactive) Error() string {
return fmt.Sprintf("user is inactive [uid: %d, name: %s]", err.UID, err.Name)
}
// Unwrap unwraps this error as a ErrPermission error
func (err ErrUserInactive) Unwrap() error {
return util.ErrPermissionDenied
}
// ErrUserIsNotLocal represents a "ErrUserIsNotLocal" kind of error.
type ErrUserIsNotLocal struct {
UID int64

View file

@ -40,6 +40,7 @@ type SearchUserOptions struct {
IsProhibitLogin optional.Option[bool]
IncludeReserved bool
Load2FAStatus bool
ExtraParamStrings map[string]string
}
@ -126,17 +127,15 @@ func (opts *SearchUserOptions) toSearchQueryBase(ctx context.Context) *xorm.Sess
return e.Where(cond)
}
// 2fa filter uses LEFT JOIN to check whether a user has a 2fa record
// While using LEFT JOIN, sometimes the performance might not be good, but it won't be a problem now, such SQL is seldom executed.
// There are some possible methods to refactor this SQL in future when we really need to optimize the performance (but not now):
// (1) add a column in user table (2) add a setting value in user_setting table (3) use search engines (bleve/elasticsearch)
// Check if the user has two factor enabled, which is TOTP or Webauthn.
if opts.IsTwoFactorEnabled.Value() {
cond = cond.And(builder.Expr("two_factor.uid IS NOT NULL"))
cond = cond.And(builder.Expr("two_factor.uid IS NOT NULL OR webauthn_credential.user_id IS NOT NULL"))
} else {
cond = cond.And(builder.Expr("two_factor.uid IS NULL"))
cond = cond.And(builder.Expr("two_factor.uid IS NULL AND webauthn_credential.user_id IS NULL"))
}
return e.Join("LEFT OUTER", "two_factor", "two_factor.uid = `user`.id").
Join("LEFT OUTER", "webauthn_credential", "webauthn_credential.user_id = `user`.id").
Where(cond)
}

View file

@ -1043,22 +1043,6 @@ func GetUserByName(ctx context.Context, name string) (*User, error) {
return u, nil
}
// GetUserEmailsByNames returns a list of e-mails corresponds to names of users
// that have their email notifications set to enabled or onmention.
func GetUserEmailsByNames(ctx context.Context, names []string) []string {
mails := make([]string, 0, len(names))
for _, name := range names {
u, err := GetUserByName(ctx, name)
if err != nil {
continue
}
if u.IsMailable() && u.EmailNotificationsPreference != EmailNotificationsDisabled {
mails = append(mails, u.Email)
}
}
return mails
}
// GetMaileableUsersByIDs gets users from ids, but only if they can receive mails
func GetMaileableUsersByIDs(ctx context.Context, ids []int64, isMention bool) ([]*User, error) {
if len(ids) == 0 {
@ -1085,17 +1069,6 @@ func GetMaileableUsersByIDs(ctx context.Context, ids []int64, isMention bool) ([
Find(&ous)
}
// GetUserNamesByIDs returns usernames for all resolved users from a list of Ids.
func GetUserNamesByIDs(ctx context.Context, ids []int64) ([]string, error) {
unames := make([]string, 0, len(ids))
err := db.GetEngine(ctx).In("id", ids).
Table("user").
Asc("name").
Cols("name").
Find(&unames)
return unames, err
}
// GetUserNameByID returns username for the id
func GetUserNameByID(ctx context.Context, id int64) (string, error) {
var name string

View file

@ -102,16 +102,6 @@ func TestGetUserByName(t *testing.T) {
}
}
func TestGetUserEmailsByNames(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
// ignore none active user email
assert.ElementsMatch(t, []string{"user8@example.com"}, user_model.GetUserEmailsByNames(db.DefaultContext, []string{"user8", "user9"}))
assert.ElementsMatch(t, []string{"user8@example.com", "user5@example.com"}, user_model.GetUserEmailsByNames(db.DefaultContext, []string{"user8", "user5"}))
assert.ElementsMatch(t, []string{"user8@example.com"}, user_model.GetUserEmailsByNames(db.DefaultContext, []string{"user8", "org7"}))
}
func TestCanCreateOrganization(t *testing.T) {
require.NoError(t, unittest.PrepareTestDatabase())
@ -222,7 +212,7 @@ func TestSearchUsers(t *testing.T) {
[]int64{1041, 37})
testUserSuccess(&user_model.SearchUserOptions{ListOptions: db.ListOptions{Page: 1}, IsTwoFactorEnabled: optional.Some(true)},
[]int64{24})
[]int64{24, 32})
}
func TestEmailNotificationPreferences(t *testing.T) {

View file

@ -1,43 +0,0 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package charset
import (
"bytes"
"io"
)
// BreakWriter wraps an io.Writer to always write '\n' as '<br>'
type BreakWriter struct {
io.Writer
}
// Write writes the provided byte slice transparently replacing '\n' with '<br>'
func (b *BreakWriter) Write(bs []byte) (n int, err error) {
pos := 0
for pos < len(bs) {
idx := bytes.IndexByte(bs[pos:], '\n')
if idx < 0 {
wn, err := b.Writer.Write(bs[pos:])
return n + wn, err
}
if idx > 0 {
wn, err := b.Writer.Write(bs[pos : pos+idx])
n += wn
if err != nil {
return n, err
}
}
if _, err = b.Writer.Write([]byte("<br>")); err != nil {
return n, err
}
pos += idx + 1
n++
}
return n, err
}

View file

@ -1,68 +0,0 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package charset
import (
"strings"
"testing"
)
func TestBreakWriter_Write(t *testing.T) {
tests := []struct {
name string
kase string
expect string
wantErr bool
}{
{
name: "noline",
kase: "abcdefghijklmnopqrstuvwxyz",
expect: "abcdefghijklmnopqrstuvwxyz",
},
{
name: "endline",
kase: "abcdefghijklmnopqrstuvwxyz\n",
expect: "abcdefghijklmnopqrstuvwxyz<br>",
},
{
name: "startline",
kase: "\nabcdefghijklmnopqrstuvwxyz",
expect: "<br>abcdefghijklmnopqrstuvwxyz",
},
{
name: "onlyline",
kase: "\n\n\n",
expect: "<br><br><br>",
},
{
name: "empty",
kase: "",
expect: "",
},
{
name: "midline",
kase: "\nabc\ndefghijkl\nmnopqrstuvwxy\nz",
expect: "<br>abc<br>defghijkl<br>mnopqrstuvwxy<br>z",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
buf := &strings.Builder{}
b := &BreakWriter{
Writer: buf,
}
n, err := b.Write([]byte(tt.kase))
if (err != nil) != tt.wantErr {
t.Errorf("BreakWriter.Write() error = %v, wantErr %v", err, tt.wantErr)
return
}
if n != len(tt.kase) {
t.Errorf("BreakWriter.Write() = %v, want %v", n, len(tt.kase))
}
if buf.String() != tt.expect {
t.Errorf("BreakWriter.Write() wrote %q, want %v", buf.String(), tt.expect)
}
})
}
}

View file

@ -5,7 +5,6 @@
package git
import (
"context"
"errors"
"fmt"
"io"
@ -20,11 +19,6 @@ import (
// TagPrefix tags prefix path on the repository
const TagPrefix = "refs/tags/"
// IsTagExist returns true if given tag exists in the repository.
func IsTagExist(ctx context.Context, repoPath, name string) bool {
return IsReferenceExist(ctx, repoPath, TagPrefix+name)
}
// CreateTag create one tag in the repository
func (repo *Repository) CreateTag(name, revision string) error {
_, _, err := NewCommand(repo.Ctx, "tag").AddDashesAndList(name, revision).RunStdString(&RunOpts{Dir: repo.Path})

View file

@ -7,7 +7,6 @@ import (
"crypto/sha1"
"encoding/hex"
"fmt"
"io"
"os"
"strconv"
"strings"
@ -105,32 +104,6 @@ func ParseBool(value string) (result, valid bool) {
return intValue != 0, true
}
// LimitedReaderCloser is a limited reader closer
type LimitedReaderCloser struct {
R io.Reader
C io.Closer
N int64
}
// Read implements io.Reader
func (l *LimitedReaderCloser) Read(p []byte) (n int, err error) {
if l.N <= 0 {
_ = l.C.Close()
return 0, io.EOF
}
if int64(len(p)) > l.N {
p = p[0:l.N]
}
n, err = l.R.Read(p)
l.N -= int64(n)
return n, err
}
// Close implements io.Closer
func (l *LimitedReaderCloser) Close() error {
return l.C.Close()
}
func HashFilePathForWebUI(s string) string {
h := sha1.New()
_, _ = h.Write([]byte(s))

View file

@ -8,6 +8,7 @@ import (
"bytes"
"html/template"
"io"
"net/url"
"regexp"
"slices"
"strconv"
@ -83,6 +84,10 @@ func newFilePreview(ctx *RenderContext, node *html.Node, locale translation.Loca
} else if Type(filePath) != "" {
urlFullSource = node.Data[m[0]:m[6]] + filePath + "?display=source#" + node.Data[m[8]:m[1]]
}
filePath, err := url.QueryUnescape(filePath)
if err != nil {
return nil
}
hash := node.Data[m[8]:m[9]]
preview.start = m[0]

View file

@ -759,9 +759,6 @@ func shortLinkProcessor(ctx *RenderContext, node *html.Node) {
title = path.Base(name)
}
alt := props["alt"]
if alt == "" {
alt = name
}
// make the childNode an image - if we can, we also place the alt
childNode.Type = html.ElementNode
@ -772,9 +769,6 @@ func shortLinkProcessor(ctx *RenderContext, node *html.Node) {
{Key: "title", Val: title},
{Key: "alt", Val: alt},
}
if alt == "" {
childNode.Attr = childNode.Attr[:2]
}
} else {
if !absoluteLink {
if ctx.IsWiki {

View file

@ -416,7 +416,7 @@ func TestRender_ShortLinks(t *testing.T) {
otherImgurlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw", "Link+Other.jpg")
encodedImgurlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw", "Link+%23.jpg")
notencodedImgurlWiki := util.URLJoin(markup.TestRepoURL, "wiki", "raw", "some", "path", "Link+#.jpg")
favicon := "http://google.com/favicon.ico"
favicon := "https://forgejo.org/favicon.ico"
test(
"[[Link]]",
@ -424,28 +424,28 @@ func TestRender_ShortLinks(t *testing.T) {
`<p><a href="`+urlWiki+`" rel="nofollow">Link</a></p>`)
test(
"[[Link.jpg]]",
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="Link.jpg" alt="Link.jpg"/></a></p>`,
`<p><a href="`+imgurlWiki+`" rel="nofollow"><img src="`+imgurlWiki+`" title="Link.jpg" alt="Link.jpg"/></a></p>`)
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="Link.jpg" alt=""/></a></p>`,
`<p><a href="`+imgurlWiki+`" rel="nofollow"><img src="`+imgurlWiki+`" title="Link.jpg" alt=""/></a></p>`)
test(
"[["+favicon+"]]",
`<p><a href="`+favicon+`" rel="nofollow"><img src="`+favicon+`" title="favicon.ico" alt="`+favicon+`"/></a></p>`,
`<p><a href="`+favicon+`" rel="nofollow"><img src="`+favicon+`" title="favicon.ico" alt="`+favicon+`"/></a></p>`)
`<p><a href="`+favicon+`" rel="nofollow"><img src="`+favicon+`" title="favicon.ico" alt=""/></a></p>`,
`<p><a href="`+favicon+`" rel="nofollow"><img src="`+favicon+`" title="favicon.ico" alt=""/></a></p>`)
test(
"[[Name|Link]]",
`<p><a href="`+url+`" rel="nofollow">Name</a></p>`,
`<p><a href="`+urlWiki+`" rel="nofollow">Name</a></p>`)
test(
"[[Name|Link.jpg]]",
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="Name" alt="Name"/></a></p>`,
`<p><a href="`+imgurlWiki+`" rel="nofollow"><img src="`+imgurlWiki+`" title="Name" alt="Name"/></a></p>`)
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="Name" alt=""/></a></p>`,
`<p><a href="`+imgurlWiki+`" rel="nofollow"><img src="`+imgurlWiki+`" title="Name" alt=""/></a></p>`)
test(
"[[Name|Link.jpg|alt=AltName]]",
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="AltName" alt="AltName"/></a></p>`,
`<p><a href="`+imgurlWiki+`" rel="nofollow"><img src="`+imgurlWiki+`" title="AltName" alt="AltName"/></a></p>`)
test(
"[[Name|Link.jpg|title=Title]]",
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="Title" alt="Title"/></a></p>`,
`<p><a href="`+imgurlWiki+`" rel="nofollow"><img src="`+imgurlWiki+`" title="Title" alt="Title"/></a></p>`)
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="Title" alt=""/></a></p>`,
`<p><a href="`+imgurlWiki+`" rel="nofollow"><img src="`+imgurlWiki+`" title="Title" alt=""/></a></p>`)
test(
"[[Name|Link.jpg|alt=AltName|title=Title]]",
`<p><a href="`+imgurl+`" rel="nofollow"><img src="`+imgurl+`" title="Title" alt="AltName"/></a></p>`,
@ -472,16 +472,16 @@ func TestRender_ShortLinks(t *testing.T) {
`<p><a href="`+urlWiki+`" rel="nofollow">Link</a> <a href="`+otherURLWiki+`" rel="nofollow">Other Link</a> <a href="`+encodedURLWiki+`" rel="nofollow">Link?</a></p>`)
test(
"[[Link #.jpg]]",
`<p><a href="`+encodedImgurl+`" rel="nofollow"><img src="`+encodedImgurl+`" title="Link #.jpg" alt="Link #.jpg"/></a></p>`,
`<p><a href="`+encodedImgurlWiki+`" rel="nofollow"><img src="`+encodedImgurlWiki+`" title="Link #.jpg" alt="Link #.jpg"/></a></p>`)
`<p><a href="`+encodedImgurl+`" rel="nofollow"><img src="`+encodedImgurl+`" title="Link #.jpg" alt=""/></a></p>`,
`<p><a href="`+encodedImgurlWiki+`" rel="nofollow"><img src="`+encodedImgurlWiki+`" title="Link #.jpg" alt=""/></a></p>`)
test(
"[[Name|Link #.jpg|alt=\"AltName\"|title='Title']]",
`<p><a href="`+encodedImgurl+`" rel="nofollow"><img src="`+encodedImgurl+`" title="Title" alt="AltName"/></a></p>`,
`<p><a href="`+encodedImgurlWiki+`" rel="nofollow"><img src="`+encodedImgurlWiki+`" title="Title" alt="AltName"/></a></p>`)
test(
"[[some/path/Link #.jpg]]",
`<p><a href="`+notencodedImgurl+`" rel="nofollow"><img src="`+notencodedImgurl+`" title="Link #.jpg" alt="some/path/Link #.jpg"/></a></p>`,
`<p><a href="`+notencodedImgurlWiki+`" rel="nofollow"><img src="`+notencodedImgurlWiki+`" title="Link #.jpg" alt="some/path/Link #.jpg"/></a></p>`)
`<p><a href="`+notencodedImgurl+`" rel="nofollow"><img src="`+notencodedImgurl+`" title="Link #.jpg" alt=""/></a></p>`,
`<p><a href="`+notencodedImgurlWiki+`" rel="nofollow"><img src="`+notencodedImgurlWiki+`" title="Link #.jpg" alt=""/></a></p>`)
test(
"<p><a href=\"https://example.org\">[[foobar]]</a></p>",
`<p><a href="https://example.org" rel="nofollow">[[foobar]]</a></p>`,
@ -1129,4 +1129,35 @@ func TestRender_FilePreview(t *testing.T) {
localMetas,
)
})
commitFileURL = util.URLJoin(markup.TestRepoURL, "src", "commit", "eeb243c3395e1921c5d90e73bd739827251fc99d", "path", "to", "file%20%23.txt")
t.Run("file with strange characters in name", func(t *testing.T) {
testRender(
commitFileURL+"#L1",
`<p></p>`+
`<div class="file-preview-box">`+
`<div class="header">`+
`<div>`+
`<a href="http://localhost:3000/gogits/gogs/src/commit/eeb243c3395e1921c5d90e73bd739827251fc99d/path/to/file%20%23.txt#L1" class="muted" rel="nofollow">path/to/file #.txt</a>`+
`</div>`+
`<span class="text small grey">`+
`Line 1 in <a href="http://localhost:3000/gogits/gogs/src/commit/eeb243c3395e1921c5d90e73bd739827251fc99d" class="text black" rel="nofollow">eeb243c</a>`+
`</span>`+
`</div>`+
`<div class="ui table">`+
`<table class="file-preview">`+
`<tbody>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="1"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner">A`+"\n"+`</code></td>`+
`</tr>`+
`</tbody>`+
`</table>`+
`</div>`+
`</div>`+
`<p></p>`,
localMetas,
)
})
}

View file

@ -34,13 +34,6 @@ func NewDetails() *Details {
}
}
// IsDetails returns true if the given node implements the Details interface,
// otherwise false.
func IsDetails(node ast.Node) bool {
_, ok := node.(*Details)
return ok
}
// Summary is a block that contains the summary of details block
type Summary struct {
ast.BaseBlock
@ -66,13 +59,6 @@ func NewSummary() *Summary {
}
}
// IsSummary returns true if the given node implements the Summary interface,
// otherwise false.
func IsSummary(node ast.Node) bool {
_, ok := node.(*Summary)
return ok
}
// TaskCheckBoxListItem is a block that represents a list item of a markdown block with a checkbox
type TaskCheckBoxListItem struct {
*ast.ListItem
@ -103,13 +89,6 @@ func NewTaskCheckBoxListItem(listItem *ast.ListItem) *TaskCheckBoxListItem {
}
}
// IsTaskCheckBoxListItem returns true if the given node implements the TaskCheckBoxListItem interface,
// otherwise false.
func IsTaskCheckBoxListItem(node ast.Node) bool {
_, ok := node.(*TaskCheckBoxListItem)
return ok
}
// Icon is an inline for a fomantic icon
type Icon struct {
ast.BaseInline
@ -139,13 +118,6 @@ func NewIcon(name string) *Icon {
}
}
// IsIcon returns true if the given node implements the Icon interface,
// otherwise false.
func IsIcon(node ast.Node) bool {
_, ok := node.(*Icon)
return ok
}
// ColorPreview is an inline for a color preview
type ColorPreview struct {
ast.BaseInline

View file

@ -108,7 +108,7 @@ func TestRender_Images(t *testing.T) {
test(
"[["+title+"|"+url+"]]",
`<p><a href="`+result+`" rel="nofollow"><img src="`+result+`" title="`+title+`" alt="`+title+`"/></a></p>`)
`<p><a href="`+result+`" rel="nofollow"><img src="`+result+`" title="`+title+`" alt=""/></a></p>`)
test(
"[!["+title+"]("+url+")]("+href+")",
`<p><a href="`+href+`" rel="nofollow"><img src="`+result+`" alt="`+title+`"/></a></p>`)
@ -119,7 +119,7 @@ func TestRender_Images(t *testing.T) {
test(
"[["+title+"|"+url+"]]",
`<p><a href="`+result+`" rel="nofollow"><img src="`+result+`" title="`+title+`" alt="`+title+`"/></a></p>`)
`<p><a href="`+result+`" rel="nofollow"><img src="`+result+`" title="`+title+`" alt=""/></a></p>`)
test(
"[!["+title+"]("+url+")]("+href+")",
`<p><a href="`+href+`" rel="nofollow"><img src="`+result+`" alt="`+title+`"/></a></p>`)
@ -149,13 +149,13 @@ func testAnswers(baseURLContent, baseURLImages string) []string {
<table>
<thead>
<tr>
<th><a href="` + baseURLImages + `/images/icon-install.png" rel="nofollow"><img src="` + baseURLImages + `/images/icon-install.png" title="icon-install.png" alt="images/icon-install.png"/></a></th>
<th><a href="` + baseURLImages + `/images/icon-install.png" rel="nofollow"><img src="` + baseURLImages + `/images/icon-install.png" title="icon-install.png" alt=""/></a></th>
<th><a href="` + baseURLContent + `/Installation" rel="nofollow">Installation</a></th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="` + baseURLImages + `/images/icon-usage.png" rel="nofollow"><img src="` + baseURLImages + `/images/icon-usage.png" title="icon-usage.png" alt="images/icon-usage.png"/></a></td>
<td><a href="` + baseURLImages + `/images/icon-usage.png" rel="nofollow"><img src="` + baseURLImages + `/images/icon-usage.png" title="icon-usage.png" alt=""/></a></td>
<td><a href="` + baseURLContent + `/Usage" rel="nofollow">Usage</a></td>
</tr>
</tbody>
@ -164,9 +164,9 @@ func testAnswers(baseURLContent, baseURLImages string) []string {
`<p><a href="http://www.excelsiorjet.com/" rel="nofollow">Excelsior JET</a> allows you to create native executables for Windows, Linux and Mac OS X.</p>
<ol>
<li><a href="https://github.com/libgdx/libgdx/wiki/Gradle-on-the-Commandline#packaging-for-the-desktop" rel="nofollow">Package your libGDX application</a><br/>
<a href="` + baseURLImages + `/images/1.png" rel="nofollow"><img src="` + baseURLImages + `/images/1.png" title="1.png" alt="images/1.png"/></a></li>
<a href="` + baseURLImages + `/images/1.png" rel="nofollow"><img src="` + baseURLImages + `/images/1.png" title="1.png" alt=""/></a></li>
<li>Perform a test run by hitting the Run! button.<br/>
<a href="` + baseURLImages + `/images/2.png" rel="nofollow"><img src="` + baseURLImages + `/images/2.png" title="2.png" alt="images/2.png"/></a></li>
<a href="` + baseURLImages + `/images/2.png" rel="nofollow"><img src="` + baseURLImages + `/images/2.png" title="2.png" alt=""/></a></li>
</ol>
<h2 id="user-content-custom-id">More tests</h2>
<p>(from <a href="https://www.markdownguide.org/extended-syntax/" rel="nofollow">https://www.markdownguide.org/extended-syntax/</a>)</p>
@ -849,8 +849,8 @@ mail@domain.com
<a href="/path/file" target="_blank" rel="nofollow noopener"><img src="/path/file" alt="local image"/></a><br/>
<a href="/path/file" target="_blank" rel="nofollow noopener"><img src="/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/image.jpg" rel="nofollow"><img src="/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/image.jpg" rel="nofollow"><img src="/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -876,8 +876,8 @@ space</p>
<a href="/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/wiki/raw/image.jpg" rel="nofollow"><img src="/wiki/raw/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/wiki/raw/image.jpg" rel="nofollow"><img src="/wiki/raw/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -905,8 +905,8 @@ space</p>
<a href="https://gitea.io/path/file" target="_blank" rel="nofollow noopener"><img src="https://gitea.io/path/file" alt="local image"/></a><br/>
<a href="https://gitea.io/path/file" target="_blank" rel="nofollow noopener"><img src="https://gitea.io/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="https://gitea.io/image.jpg" rel="nofollow"><img src="https://gitea.io/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="https://gitea.io/image.jpg" rel="nofollow"><img src="https://gitea.io/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -934,8 +934,8 @@ space</p>
<a href="https://gitea.io/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="https://gitea.io/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="https://gitea.io/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="https://gitea.io/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="https://gitea.io/wiki/raw/image.jpg" rel="nofollow"><img src="https://gitea.io/wiki/raw/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="https://gitea.io/wiki/raw/image.jpg" rel="nofollow"><img src="https://gitea.io/wiki/raw/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -963,8 +963,8 @@ space</p>
<a href="/relative/path/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/path/file" alt="local image"/></a><br/>
<a href="/relative/path/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/relative/path/image.jpg" rel="nofollow"><img src="/relative/path/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/relative/path/image.jpg" rel="nofollow"><img src="/relative/path/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -992,8 +992,8 @@ space</p>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -1022,8 +1022,8 @@ space</p>
<a href="/user/repo/media/branch/main/path/file" target="_blank" rel="nofollow noopener"><img src="/user/repo/media/branch/main/path/file" alt="local image"/></a><br/>
<a href="/user/repo/media/branch/main/path/file" target="_blank" rel="nofollow noopener"><img src="/user/repo/media/branch/main/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/user/repo/media/branch/main/image.jpg" rel="nofollow"><img src="/user/repo/media/branch/main/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/user/repo/media/branch/main/image.jpg" rel="nofollow"><img src="/user/repo/media/branch/main/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -1052,8 +1052,8 @@ space</p>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -1082,8 +1082,8 @@ space</p>
<a href="/user/repo/path/file" target="_blank" rel="nofollow noopener"><img src="/user/repo/path/file" alt="local image"/></a><br/>
<a href="/user/repo/path/file" target="_blank" rel="nofollow noopener"><img src="/user/repo/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/user/repo/image.jpg" rel="nofollow"><img src="/user/repo/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/user/repo/image.jpg" rel="nofollow"><img src="/user/repo/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -1112,8 +1112,8 @@ space</p>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -1143,8 +1143,8 @@ space</p>
<a href="/user/repo/media/branch/main/sub/folder/path/file" target="_blank" rel="nofollow noopener"><img src="/user/repo/media/branch/main/sub/folder/path/file" alt="local image"/></a><br/>
<a href="/user/repo/media/branch/main/sub/folder/path/file" target="_blank" rel="nofollow noopener"><img src="/user/repo/media/branch/main/sub/folder/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/user/repo/media/branch/main/sub/folder/image.jpg" rel="nofollow"><img src="/user/repo/media/branch/main/sub/folder/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/user/repo/media/branch/main/sub/folder/image.jpg" rel="nofollow"><img src="/user/repo/media/branch/main/sub/folder/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>
@ -1174,8 +1174,8 @@ space</p>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="/relative/path/wiki/raw/path/file" target="_blank" rel="nofollow noopener"><img src="/relative/path/wiki/raw/path/file" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt="local image"/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a><br/>
<a href="/relative/path/wiki/raw/image.jpg" rel="nofollow"><img src="/relative/path/wiki/raw/image.jpg" title="local image" alt=""/></a><br/>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a><br/>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow">https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash</a><br/>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare<br/>
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow">https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb</a><br/>

View file

@ -39,28 +39,6 @@ func Enabled(enable ...bool) Option {
})
}
// WithInlineDollarParser enables or disables the parsing of $...$
func WithInlineDollarParser(enable ...bool) Option {
value := true
if len(enable) > 0 {
value = enable[0]
}
return extensionFunc(func(e *Extension) {
e.parseDollarInline = value
})
}
// WithBlockDollarParser enables or disables the parsing of $$...$$
func WithBlockDollarParser(enable ...bool) Option {
value := true
if len(enable) > 0 {
value = enable[0]
}
return extensionFunc(func(e *Extension) {
e.parseDollarBlock = value
})
}
// Math represents a math extension with default rendered delimiters
var Math = &Extension{
enabled: true,

View file

@ -0,0 +1 @@
x•ŽANÃ0EYû³GB;a U=D9€=þ&–ÚÙÓr} 7èê­ÞÓÓëåÒŒBœ^¬´¤˜yY8Ï:AІ X}<7D>R×XkÎs­"î;uìFº®9x” Œ ÊEdÐ’%Í~**Zß3\ºÙvíô9Й>nÿ8Žfxkû=<3D>[9K”%L>®ôêÙ{§<>7Ãs;aÕvý4ÛhXOûH·Ô“þÕ†ûð`KÑ

View file

@ -1 +1 @@
c9913120ed2c1e27c1d7752ecdb7a504dc7cf6be
eeb243c3395e1921c5d90e73bd739827251fc99d

View file

@ -1,32 +0,0 @@
// SPDX-License-Identifier: MIT
package private
import (
"context"
"code.gitea.io/gitea/modules/setting"
)
type ActionsRunnerRegisterRequest struct {
Token string
Scope string
Labels []string
Name string
Version string
}
func ActionsRunnerRegister(ctx context.Context, token, scope string, labels []string, name, version string) (string, ResponseExtra) {
reqURL := setting.LocalURL + "api/internal/actions/register"
req := newInternalRequest(ctx, reqURL, "POST", ActionsRunnerRegisterRequest{
Token: token,
Scope: scope,
Labels: labels,
Name: name,
Version: version,
})
resp, extra := requestJSONResp(req, &ResponseText{})
return resp.Text, extra
}

View file

@ -272,8 +272,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
// update team information and then check permission
team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 5})
err = organization.UpdateTeamUnits(db.DefaultContext, team, nil)
require.NoError(t, err)
unittest.AssertSuccessfulDelete(t, &organization.TeamUnit{TeamID: team.ID})
perm, err = access_model.GetUserRepoPermission(db.DefaultContext, repo, owner)
require.NoError(t, err)
for _, unit := range repo.Units {

View file

@ -18,25 +18,6 @@ import (
// ErrURLNotSupported represents url is not supported
var ErrURLNotSupported = errors.New("url method not supported")
// ErrInvalidConfiguration is called when there is invalid configuration for a storage
type ErrInvalidConfiguration struct {
cfg any
err error
}
func (err ErrInvalidConfiguration) Error() string {
if err.err != nil {
return fmt.Sprintf("Invalid Configuration Argument: %v: Error: %v", err.cfg, err.err)
}
return fmt.Sprintf("Invalid Configuration Argument: %v", err.cfg)
}
// IsErrInvalidConfiguration checks if an error is an ErrInvalidConfiguration
func IsErrInvalidConfiguration(err error) bool {
_, ok := err.(ErrInvalidConfiguration)
return ok
}
type Type = setting.StorageType
// NewStorageFunc is a function that creates a storage

View file

@ -141,26 +141,6 @@ func (p *CreatePayload) JSONPayload() ([]byte, error) {
return json.MarshalIndent(p, "", " ")
}
// ParseCreateHook parses create event hook content.
func ParseCreateHook(raw []byte) (*CreatePayload, error) {
hook := new(CreatePayload)
if err := json.Unmarshal(raw, hook); err != nil {
return nil, err
}
// it is possible the JSON was parsed, however,
// was not from Gogs (maybe was from Bitbucket)
// So we'll check to be sure certain key fields
// were populated
switch {
case hook.Repo == nil:
return nil, ErrInvalidReceiveHook
case len(hook.Ref) == 0:
return nil, ErrInvalidReceiveHook
}
return hook, nil
}
// ________ .__ __
// \______ \ ____ | | _____/ |_ ____
// | | \_/ __ \| | _/ __ \ __\/ __ \
@ -292,22 +272,6 @@ func (p *PushPayload) JSONPayload() ([]byte, error) {
return json.MarshalIndent(p, "", " ")
}
// ParsePushHook parses push event hook content.
func ParsePushHook(raw []byte) (*PushPayload, error) {
hook := new(PushPayload)
if err := json.Unmarshal(raw, hook); err != nil {
return nil, err
}
switch {
case hook.Repo == nil:
return nil, ErrInvalidReceiveHook
case len(hook.Ref) == 0:
return nil, ErrInvalidReceiveHook
}
return hook, nil
}
// Branch returns branch name from a payload
func (p *PushPayload) Branch() string {
return strings.ReplaceAll(p.Ref, "refs/heads/", "")

View file

@ -34,7 +34,7 @@ func AvatarHTML(src string, size int, class, name string) template.HTML {
name = "avatar"
}
return template.HTML(`<img loading="lazy" class="` + class + `" src="` + src + `" title="` + html.EscapeString(name) + `" width="` + sizeStr + `" height="` + sizeStr + `"/>`)
return template.HTML(`<img loading="lazy" alt="" class="` + class + `" src="` + src + `" title="` + html.EscapeString(name) + `" width="` + sizeStr + `" height="` + sizeStr + `"/>`)
}
// Avatar renders user avatars. args: user, size (int), class (string)

View file

@ -194,8 +194,8 @@ func TestRenderMarkdownToHtml(t *testing.T) {
<a href="https://example.com" rel="nofollow">remote link</a>
<a href="/image.jpg" target="_blank" rel="nofollow noopener"><img src="/image.jpg" alt="local image"/></a>
<a href="https://example.com/image.jpg" target="_blank" rel="nofollow noopener"><img src="https://example.com/image.jpg" alt="remote image"/></a>
<a href="/image.jpg" rel="nofollow"><img src="/image.jpg" title="local image" alt="local image"/></a>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt="remote link"/></a>
<a href="/image.jpg" rel="nofollow"><img src="/image.jpg" title="local image" alt=""/></a>
<a href="https://example.com/image.jpg" rel="nofollow"><img src="https://example.com/image.jpg" title="remote link" alt=""/></a>
<a href="https://example.com/user/repo/compare/88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb#hash" rel="nofollow"><code>88fc37a3c0...12fc37a3c0 (hash)</code></a>
com 88fc37a3c0a4dda553bdcfc80c178a58247f42fb...12fc37a3c0a4dda553bdcfc80c178a58247f42fb pare
<a href="https://example.com/user/repo/commit/88fc37a3c0a4dda553bdcfc80c178a58247f42fb" rel="nofollow"><code>88fc37a3c0</code></a>

View file

@ -158,6 +158,7 @@ commits = fallback value for commits
found := lang1.HasKey("no-such")
assert.False(t, found)
assert.EqualValues(t, "no-such", lang1.TrString("no-such"))
require.NoError(t, ls.Close())
}

View file

@ -225,9 +225,9 @@ func (l *locale) TrString(trKey string, trArgs ...any) string {
format = msg
} else {
// First fallback: old-style translation
idx, ok := l.store.trKeyToIdxMap[trKey]
idx, foundIndex := l.store.trKeyToIdxMap[trKey]
found := false
if ok {
if foundIndex {
if msg, ok := l.idxToMsgMap[idx]; ok {
format = msg // use the found translation
found = true
@ -239,7 +239,7 @@ func (l *locale) TrString(trKey string, trArgs ...any) string {
if defaultLang, ok := l.store.localeMap[l.store.defaultLang]; ok {
if msg := defaultLang.LookupNewStyleMessage(trKey); msg != "" {
format = msg
} else {
} else if foundIndex {
// Third fallback: old-style default language
if msg, ok := defaultLang.idxToMsgMap[idx]; ok {
format = msg

View file

@ -53,9 +53,3 @@ func Locale(resp http.ResponseWriter, req *http.Request) translation.Locale {
func SetLocaleCookie(resp http.ResponseWriter, lang string, maxAge int) {
SetSiteCookie(resp, "lang", lang, maxAge)
}
// DeleteLocaleCookie convenience function to delete the locale cookie consistently
// Setting the lang cookie will trigger the middleware to reset the language to previous state.
func DeleteLocaleCookie(resp http.ResponseWriter) {
SetSiteCookie(resp, "lang", "", -1)
}

View file

@ -680,6 +680,8 @@ Location = Umístění
To = Název větve
Biography = Životopis
AccessToken = Přístupový token
username_claiming_cooldown = Uživatelské jméno nelze získat, protože ještě neskončila doba jeho platnosti. Půjde jej získat %[1]s.
email_domain_is_not_allowed = Doména uživatelské e-mailové adresy <b>%s</b> je v rozporu se seznamem EMAIL_DOMAIN_ALLOWLIST nebo EMAIL_DOMAIN_BLOCKLIST. Ujistěte se, že je vaše adresa správně nastavena.
[user]
change_avatar=Změnit váš avatar…
@ -804,7 +806,7 @@ old_password=Stávající heslo
new_password=Nové heslo
retype_new_password=Potvrzení nového hesla
password_incorrect=Zadané heslo není správné.
change_password_success=Vaše heslo bylo aktualizováno. Od teď se přihlašujte novým heslem.
change_password_success=Vaše heslo bylo aktualizováno. Od nynějška používejte kpřihlášení nové heslo.
password_change_disabled=Externě ověřovaní uživatelé nemohou aktualizovat své heslo prostřednictvím webového rozhraní Forgejo.
emails=E-mailové adresy
@ -1056,6 +1058,8 @@ language.description = Tento jazyk bude uložen do vašeho účtu a po přihlá
language.localization_project = Pomozte nám s překladem Forgejo do vašeho jazyka! <a href="%s">Více informací</a>.
user_block_yourself = Nemůžete zablokovat sami sebe.
pronouns_custom_label = Vlastní zájmena
change_username_redirect_prompt.with_cooldown.few = Staré uživatelské jméno bude dostupné ostatním po %[1]d dnech. Do té doby budete moci své staré uživatelské jméno znovu získat.
change_username_redirect_prompt.with_cooldown.one = Staré uživatelské jméno bude dostupné ostatním po %[1]d dni. Do té doby budete moci své staré uživatelské jméno znovu získat.
[repo]
new_repo_helper=Repozitář obsahuje všechny soubory projektu, včetně historie revizí. Už jej hostujete jinde? <a href="%s">Migrovat repozitář</a>.
@ -3001,6 +3005,8 @@ teams.invite.by=Pozvání od %s
teams.invite.description=Pro připojení k týmu klikněte na tlačítko níže.
follow_blocked_user = Tuto organizaci nemůžete sledovat, protože jste v ní zablokováni.
open_dashboard = Otevřít nástěnku
settings.change_orgname_redirect_prompt.with_cooldown.one = Staré uživatelské jméno bude dostupné ostatním po %[1]d dni. Do té doby budete moci své staré uživatelské jméno znovu získat.
settings.change_orgname_redirect_prompt.with_cooldown.few = Staré uživatelské jméno bude dostupné ostatním po %[1]d dnech. Do té doby budete moci své staré uživatelské jméno znovu získat.
[admin]
dashboard=Přehled

View file

@ -629,6 +629,8 @@ password_special_one = Mindst ét specialtegn (tegnsætning, parenteser, anførs
unsupported_login_type = Login typen understøttes ikke for at slette kontoen.
cannot_add_org_to_team = En organisation kan ikke tilføjes som et holdmedlem.
must_use_public_key = Nøglen du har angivet er en privat nøgle. Lad være med at uploade din private nøgle nogen steder. Brug din offentlige nøgle i stedet.
username_claiming_cooldown = Brugernavnet kan ikke gøres krav på, fordi dets nedkølingsperiode endnu ikke er forbi. Det kan gøres krav på %[1]s.
email_domain_is_not_allowed = Domænet for brugerens e-mailadresse <b>%s</b> er i konflikt med EMAIL_DOMAIN_ALLOWLIST eller EMAIL_DOMAIN_BLOCKLIST. Sørg for, at du har indstillet e-mailadressen korrekt.
[user]
change_avatar = Skift din avatar…
@ -782,7 +784,7 @@ uploaded_avatar_is_too_big = Den uploadede filstørrelse (%d KiB) overstiger den
email_deletion_desc = E-mailadressen og relaterede oplysninger vil blive fjernet fra din konto. Git commits af denne e-mailadresse forbliver uændret. Fortsætte?
choose_new_avatar = Vælg ny avatar
update_avatar = Opdater avatar
change_password_success = Din adgangskode er blevet opdateret. Log ind med din nye adgangskode fra nu af.
change_password_success = Din adgangskode er blevet opdateret. Fra nu af skal du bruge din nye adgangskode til at logge ind.
add_email = Tilføj e-mailadresse
add_openid = Tilføj OpenID URI
add_email_confirmation_sent = En bekræftelses-e-mail er blevet sendt til "%s". For at bekræfte din e-mailadresse, tjek venligst din indbakke og følg det medfølgende link inden for de næste %s.
@ -972,6 +974,8 @@ delete_with_all_comments = Din konto er yngre end %s. For at undgå spøgelsesko
delete_account_title = Slet brugerkonto
user_block_yourself = Du kan ikke blokere dig selv.
pronouns_custom_label = Brugerdefinerede stedord
change_username_redirect_prompt.with_cooldown.one = Det gamle brugernavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dag, du kan stadig kræve det gamle brugernavn tilbage i nedkølingsperioden.
change_username_redirect_prompt.with_cooldown.few = Det gamle brugernavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dage, du kan stadig kræve det gamle brugernavn tilbage i nedkølingsperioden.
[repo]
rss.must_be_on_branch = Du skal være på en gren for at have et RSS-feed.
@ -1761,6 +1765,28 @@ pulls.compare_changes = Ny pull-anmodning
issues.summary_card_alt = Oversigtskort over et problem med titlen "%s" i depotet %s
pulls.edit.already_changed = Kunne ikke gemme ændringer af pull-anmodningen. Det ser ud til, at indholdet allerede er blevet ændret af en anden bruger. Opdater siden, og prøv at redigere igen for at undgå at overskrive deres ændringer
pulls.sign_in_require = <a href="%s">Log ind</a> for at oprette en ny pull-anmodning.
pulls.allow_edits_from_maintainers = Tillad redigeringer fra vedligeholdere
pulls.allow_edits_from_maintainers_desc = Brugere med skriveadgang til basisgrenen kan også trykke til denne gren
pulls.allow_edits_from_maintainers_err = Opdatering mislykkedes
pulls.compare_base = flet ind i
pulls.compare_compare = pull fra
pulls.switch_comparison_type = Skift sammenligningstype
pulls.switch_head_and_base = Skift hoved og base
pulls.filter_branch = Filter gren
pulls.compare_changes_desc = Vælg den gren, der skal flettes ind i, og den gren, der skal trækkes fra.
pulls.has_viewed_file = Set
pulls.has_changed_since_last_review = Ændret siden din sidste gennemgang
pulls.no_results = Ingen resultater fundet.
pulls.show_all_commits = Vis alle commits
pulls.show_changes_since_your_last_review = Vis ændringer siden din sidste gennemgang
pulls.showing_only_single_commit = Viser kun ændringer af commit %[1]s
pulls.showing_specified_commit_range = Viser kun ændringer mellem %[1]s..%[2]s
pulls.select_commit_hold_shift_for_range = Vælg commit. Hold Shift + klik for at vælge et område
pulls.review_only_possible_for_full_diff = Gennemgang er kun mulig, når du ser den fulde diff
pulls.filter_changes_by_commit = Filtrer efter commit
pulls.expand_files = Udvid alle filer
pulls.collapse_files = Skjul alle filer
pulls.viewed_files_label = %[1]d / %[2]d filer set
[notification]
watching = Overvåger

View file

@ -681,6 +681,8 @@ Website = Webseite
Location = Ort
To = Branchname
AccessToken = Zugangstoken
username_claiming_cooldown = Der Benutzername kann nicht beansprucht werden, weil seine Schutzzeit noch nicht vorbei ist. Er kann am %[1]s beansprucht werden.
email_domain_is_not_allowed = Die Domain der E-Mail-Adresse des Benutzers <b>%s</b> steht in Konflikt mit EMAIL_DOMAIN_ALLOWLIST oder EMAIL_DOMAIN_BLOCKLIST. Bitte stelle sicher, dass du die E-Mail-Adresse richtig gesetzt hast.
[user]
@ -806,7 +808,7 @@ old_password=Aktuelles Passwort
new_password=Neues Passwort
retype_new_password=Neues Passwort bestätigen
password_incorrect=Das aktuelle Passwort ist falsch.
change_password_success=Dein Passwort wurde aktualisiert. Bitte verwende dieses beim nächsten Einloggen.
change_password_success=Dein Passwort wurde aktualisiert. Verwende ab jetzt dein neues Passwort zum Einloggen.
password_change_disabled=Benutzer, die nicht von Forgejo verwaltet werden, können ihr Passwort im Web-Interface nicht ändern.
emails=E-Mail-Adressen
@ -1058,6 +1060,8 @@ language.localization_project = Hilf uns, Forgejo in deine Sprache zu übersetze
language.description = Diese Sprache wird in deinem Konto gespeichert und standardmäßig nach dem Anmelden benutzt.
user_block_yourself = Du kannst dich nicht selbst blockieren.
pronouns_custom_label = Individuelle Pronomen
change_username_redirect_prompt.with_cooldown.one = Der alte Benutzername ist nach einer Schutzzeit von einem Tag wieder für alle Verfügbar. Du kannst den alten Benutzername während dieser Schutzzeit erneut beanspruchen.
change_username_redirect_prompt.with_cooldown.few = Der alte Benutzername ist nach einer Schutzzeit von %[1]d Tagen wieder für alle Verfügbar. Du kannst den alten Benutzername während dieser Schutzzeit erneut beanspruchen.
[repo]
owner=Besitzer
@ -3004,6 +3008,8 @@ teams.invite.by=Von %s eingeladen
teams.invite.description=Bitte klicke auf die folgende Schaltfläche, um dem Team beizutreten.
follow_blocked_user = Du kannst dieser Organisation nicht folgen, weil diese Organisation dich blockiert hat.
open_dashboard = Übersicht öffnen
settings.change_orgname_redirect_prompt.with_cooldown.one = Der alte Benutzername ist nach einer Schutzzeit von einem Tag wieder für alle Verfügbar. Du kannst den alten Benutzername während dieser Schutzzeit erneut beanspruchen.
settings.change_orgname_redirect_prompt.with_cooldown.few = Der alte Benutzername ist nach einer Schutzzeit von %[1]d Tagen wieder für alle Verfügbar. Du kannst den alten Benutzername während dieser Schutzzeit erneut beanspruchen.
[admin]
dashboard=Übersicht
@ -3109,7 +3115,7 @@ dashboard.sync_branch.started=Synchronisierung der Branches gestartet
dashboard.rebuild_issue_indexer=Issue-Indexer neu bauen
users.user_manage_panel=Benutzerkonten verwalten
users.new_account=Benutzerkonto erstellen
users.new_account=Benutzeraccount erstellen
users.name=Benutzername
users.full_name=Vollständiger Name
users.activated=Aktiviert
@ -3579,7 +3585,7 @@ comment_pull=`hat den Pull-Request <a href="%[1]s">%[3]s#%[2]s</a> kommentiert`
merge_pull_request=`führte Pull-Request <a href="%[1]s">%[3]s#%[2]s</a> zusammen`
auto_merge_pull_request=`führte Pull-Request <a href="%[1]s">%[3]s#%[2]s</a> automatisch zusammen`
transfer_repo=hat Repository <code>%s</code> übertragen zu <a href="%s">%s</a>
push_tag=Tag <a href="%[2]s">%[3]s</a> nach <a href="%[1]s">%[4]s</a> wurde gepusht
push_tag=hat Tag <a href="%[2]s">%[3]s</a> auf <a href="%[1]s">%[4]s</a> gepusht
delete_tag=hat Tag %[2]s in <a href="%[1]s">%[3]s</a> gelöscht
delete_branch=hat Branch %[2]s in <a href="%[1]s">%[3]s</a> gelöscht
compare_branch=Vergleichen

View file

@ -1193,6 +1193,7 @@ archive.title = This repository is archived. You can view files and clone it, bu
archive.title_date = This repository has been archived on %s. You can view files and clone it, but cannot push or open issues or pull requests.
archive.issue.nocomment = This repository is archived. You cannot comment on issues.
archive.pull.nocomment = This repository is archived. You cannot comment on pull requests.
archive.pull.noreview = This repository is archived. You cannot review pull requests.
form.reach_limit_of_creation_1 = The owner has already reached the limit of %d repository.
form.reach_limit_of_creation_n = The owner has already reached the limit of %d repositories.
@ -1431,6 +1432,7 @@ editor.user_no_push_to_branch = User cannot push to branch
editor.require_signed_commit = Branch requires a signed commit
editor.cherry_pick = Cherry-pick %s onto:
editor.revert = Revert %s onto:
editor.commit_email = Commit email
commits.desc = Browse source code change history.
commits.commits = Commits

View file

@ -56,7 +56,7 @@ mirror=Réplica
new_repo=Nuevo repositorio
new_migrate=Nueva migración
new_mirror=Nueva réplica
new_fork=Nuevo fork de repositorio
new_fork=Nueva bifurcación del repositorio
new_org=Nueva organización
new_project=Nuevo proyecto
new_project_column=Nueva columna
@ -75,7 +75,7 @@ collaborative=Colaborativo
forks=Forks
activities=Actividades
pull_requests=Pull requests
pull_requests=Solicitudes de incorporación de cambios
issues=Incidencias
milestones=Hitos
@ -156,8 +156,8 @@ invalid_data = Datos inválidos: %v
confirm_delete_artifact = ¿Estás seguro de que deseas eliminar el artefacto "%s"?
more_items = Mas cosas
copy_generic = Copiar al portapapeles
filter.not_fork = No forks
filter.is_fork = Forks
filter.not_fork = No hay bifurcaciones
filter.is_fork = Bifurcaciones
test = Test
error413 = Has agotado tu cuota.
new_repo.title = Nuevo repositorio
@ -397,8 +397,8 @@ code_search_results=Resultados de búsqueda para «%s»
code_last_indexed_at=Indexado por última vez %s
relevant_repositories_tooltip=Repositorios que son bifurcaciones o que no tienen ningún tema, ningún icono, y ninguna descripción están ocultos.
relevant_repositories=Solo se muestran repositorios relevantes, <a href="%s">mostrar resultados sin filtrar</a>.
forks_few = %d forks
forks_one = %d fork
forks_few = %d bifurcaciones
forks_one = %d bifurcación
stars_few = %d estrellas
stars_one = %d estrella
@ -1070,10 +1070,10 @@ visibility=Visibilidad
visibility_description=Sólo el propietario o los miembros de la organización -si tienen derechos- podrán verlo.
visibility_helper=Hacer el repositorio privado
visibility_helper_forced=El administrador de su sitio obliga a nuevos repositorios a ser privados.
visibility_fork_helper=(Cambiar esto afectará a la visibilidad de todos los forks.)
visibility_fork_helper=(Cambiar esto afectará a la visibilidad de todas las bifurcaciones.)
clone_helper=¿Necesita ayuda para clonar? Visite <a target="_blank" rel="noopener noreferrer" href="%s">Ayuda</a>.
fork_repo=Hacer fork del repositorio
fork_from=Crear un fork desde
fork_repo=Hacer una bifurcación del repositorio
fork_from=Crear una bifurcación desde
already_forked=Ya ha forkeado %s
fork_to_different_account=Forkear a una cuenta diferente
fork_visibility_helper=La visibilidad de un repositorio del cual se ha hecho fork no puede ser cambiada.
@ -3852,7 +3852,7 @@ search = Buscar...
type_tooltip = Tipo de búsqueda
project_kind = Buscar proyectos...
branch_kind = Buscar ramas...
commit_kind = Buscar commits...
commit_kind = Buscar confirmaciones...
repo_kind = Buscar repositorios...
user_kind = Buscar usuarios...
org_kind = Buscar organizaciones...

View file

@ -108,7 +108,7 @@ never = Mitte kunagi
unknown = Teadmata
rss_feed = RSS infovoog
confirm_delete_artifact = Kas oled kindel et soovite artefakti "%s" kustutada?
pin =
pin =
artifacts = Artefaktid
archived = Arhiveeritud
concept_system_global = Ülemaailmne

View file

@ -1756,7 +1756,7 @@ issues.close = Sulje ongelma
issues.no_content = Ei kuvausta.
pulls.reject_count_1 = %d muutospyyntö
pulls.update_branch_success = Haarapäivitys onnistui
milestones.completeness = <strong>%d%%</strong> valmiina
milestones.completeness = <strong>%d% %</strong> valmiina
contributors.contribution_type.additions = Lisäykset
contributors.contribution_type.deletions = Poistot
settings.webhook_deletion_success = Webkoukku on poistettu.
@ -2088,6 +2088,9 @@ new_from_template_description = Voit valita olemassa olevan repon mallipohjan ja
new_advanced = Lisäasetukset
new_advanced_expand = Laajenna napsauttamalla
template_description = Repojen mallipohjat mahdollistavat uusien repojen luomisen halutulla hakemistorakenteella, tiedostoilla ja valinnaisilla asetuksilla.
settings.enter_repo_name = Kirjoita omistajan ja repon nimi täsmälleen kuten esitetty:
settings.confirmation_string = Vahvistusteksti
settings.delete_notices_2 = - Tämä toiminto poistaa pysyvästi repon <strong>%s</strong> mukaan lukien koodin, ongelmat, kommentit, wikidatan ja avustaja-asetukset.
@ -2578,6 +2581,12 @@ commit_repo = työnsi haaraan <a href="%[2]s">%[3]s</a> repossa <a href="%[1]s">
create_issue = `avasi ongelman <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_issue = `avasi uudelleen ongelman <a href="%[1]s">%[3]s#%[2]s</a>`
create_pull_request = `loi vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
reopen_pull_request = `avasi uudelleen vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request = `sulki vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
comment_issue = `kommentoi ongelmaa <a href="%[1]s">%[3]s#%[2]s</a>`
close_issue = `sulki ongelman <a href="%[1]s">%[3]s#%[2]s</a>`
merge_pull_request = `yhdisti vetopyynnön <a href="%[1]s">%[3]s#%[2]s</a>`
comment_pull = `kommentoi vetopyyntöä <a href="%[1]s">%[3]s#%[2]s</a>`
[tool]
now=nyt
@ -2624,6 +2633,7 @@ error.not_signed_commit=Kommitti ei ole allekirjoitettu
error.extract_sign = Allekirjoituksen purkaminen epäonnistui
default_key = Allekirjoitettu oletusavaimella
error.failed_retrieval_gpg_keys = Ei saatu yhtäkään kommitin tekijän tiliin liitettyä avainta
error.generate_hash = Tiivisteen luominen kommitista epäonnistui
[units]
unit = Yksikkö
@ -2765,6 +2775,11 @@ alpine.registry.info = Valitse $branch ja $repository alla olevasta listasta.
container.images.title = Levykuvat
owner.settings.cargo.initialize = Alusta indeksi
owner.settings.cargo.initialize.description = Erityinen Git-repoindeksi vaaditaan Cargo-rekisterin käyttämiseksi. Tämän valinnan käyttäminen luo (tarvittaessa uudelleen) repon ja määrittää sen asetukset automaattisesti.
settings.link.error = Repositorion linkin päivittäminen epäonnistui.
alt.repository.multiple_groups = Tämä paketti on saatavilla useissa ryhmissä.
alt.repository.architectures = Arkkitehtuurit
alt.install = Asenna paketti
alt.registry.install = Asenna paketti suorittamalla komento:
[secrets]
creation.failed = Salaisuuden lisääminen epäonnistui.

View file

@ -640,6 +640,8 @@ AccessToken = Token ng pag-access
Biography = Byograpya
Location = Lokasyon
visit_rate_limit = Natugunan ang limitasyon sa rate ng malayuang pagbisita.
username_claiming_cooldown = Hindi ma-claim ang username na ito, dahil hindi pa tapos ang panahon ng cooldown. Maari itong i-claim sa %[1]s.
email_domain_is_not_allowed = Sumasalungat ang domain ng email address ng user <b>%s</b> sa EMAIL_DOMAIN_ALLOWLIST o EMAIL_DOMAIN_BLOCKLIST. Siguraduhing natakda mo ang email address nang tama.
[user]
joined_on = Sumali noong %s
@ -784,7 +786,7 @@ old_password = Kasalukuyang password
new_password = Bagong password
retype_new_password = Kumpirmahin ang bagong password
password_incorrect = Mali ang kasalukuyang password.
change_password_success = Na-update na ang iyong password. Mag-sign in gamit ng bagong password simula ngayon.
change_password_success = Na-update na ang iyong password. Simula ngayon, gamitin ang iyong bagong password para mag-sign in.
password_change_disabled = Hindi mababago ng mga di-lokal na gumagamit ang kanilang password sa pamamagitan ng Forgejo web interface.
emails = Mga email address
manage_emails = Ipamahala ang mga email address
@ -999,6 +1001,8 @@ language.description = Mase-save ang wika sa iyong account at gagamitin bilang d
language.localization_project = Tulungan kaming isalin ang Forgejo sa iyong wika! <a href="%s">Matuto pa</a>.
pronouns_custom_label = Mga pasadyang pronoun
user_block_yourself = Hindi mo maaring harangan ang sarili mo.
change_username_redirect_prompt.with_cooldown.one = Magiging available ang lumang username sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang username sa panahon ng panahon ng cooldown.
change_username_redirect_prompt.with_cooldown.few = Magiging available ang lumang username sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang username sa panahon ng panahon ng cooldown.
[repo]
template_description = Ang mga template na repositoryo ay pinapayagan ang mga gumagamit na mag-generate ng mga bagong repositoryo na may magkatulad na istraktura ng direktoryo, mga file, at opsyonal na mga setting.
@ -2911,7 +2915,7 @@ dashboard.delete_old_system_notices = Burahin ang lahat ng mga lumang paunawa ng
dashboard.gc_lfs = I-garbage collect ang mga LFS meta object
dashboard.stop_zombie_tasks = Itigil ang mga zombie action task
users.user_manage_panel = Ipamahala ang mga user account
users.new_account = Gumawa ng User Account
users.new_account = Gumawa ng user account
users.auth_login_name = Pangalan ng sign-in authentication
users.password_helper = Iwanang walang laman ang password upang panatilihing hindi nabago.
users.max_repo_creation = Pinakamataas na numero ng mga repositoryo
@ -3394,6 +3398,8 @@ teams.owners_permission_desc = Ang mga owner ay may punong access sa <strong>lah
teams.add_nonexistent_repo = Hindi pa umiiral ang repositoryo na sinusubukan mong idagdag. Mangyaring gawin iyan muna.
teams.all_repositories = Lahat ng mga repositoryo
teams.all_repositories_helper = Ang koponan ay may access sa lahat ng mga repositoryo. Ang pagpili nito ay <strong>idadagdag ang lahat ng mga umiiral</strong> na repositoryo sa koponan.
settings.change_orgname_redirect_prompt.with_cooldown.few = Magiging available ang lumang username sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang username sa panahon ng panahon ng cooldown.
settings.change_orgname_redirect_prompt.with_cooldown.one = Magiging available ang lumang username sa lahat pagkatapos ng panahon ng cooldown ng %[1]d araw, maari mo pa ring ma-claim muli ang lumang username sa panahon ng panahon ng cooldown.
[packages]
@ -3571,7 +3577,7 @@ alt.registry = I-setup ang registry na ito mula sa command line:
alt.registry.install = Para i-install ang package na ito, patakbuhin ang sumusunod na command:
alt.install = I-install ang package
alt.setup = Idagdag ang repositoryo sa listahan ng mga nakakonektang repositoryo (piliin ang kinakailangang architechture sa halip ng '_arch_'):
alt.repository = Info ng Repositoryo
alt.repository = Info ng repositoryo
alt.repository.architectures = Mga architechture
alt.repository.multiple_groups = Available ang package na ito sa iba't ibang grupo.
@ -3693,7 +3699,7 @@ approve_pull_request = `inaprubahan ang <a href="%[1]s">%[3]s#%[2]s</a>`
review_dismissed_reason = Dahilan:
compare_branch = Ikumpara
reject_pull_request = `nagmungkahi ng mga pagbabago para sa <a href="%[1]s">%[3]s#%[2]s</a>`
rename_repo = pinalitan ang pangalan ng repositoryo mula <code>%[1]s</code> sa <a href="%[2]s">%[3]#</a>
rename_repo = pinalitan ang pangalan ng repositoryo mula <code>%[1]s</code> sa <a href="%[2]s">%[3]s</a>
close_issue = `sinara ang isyu na <a href="%[1]s">%[3]s#%[2]s</a>`
review_dismissed = `na-dismiss ang pagsusuri mula <b>%[4]s</b> para sa <a href="%[1]s">%[3]s#%[2]s</a>`
close_pull_request = `sinara ang hiling sa paghila na <a href="%[1]s">%[3]s#%[2]s</a>`

View file

@ -680,6 +680,7 @@ Biography = Biographie
Website = Site web
Location = Emplacement
To = Nom de la branche
email_domain_is_not_allowed = Le domaine <b>%s</b> du courriel utilisateur entre en conflit avec EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Veuillez vous assurer le courriel est renseigné.
[user]
change_avatar=Changer votre avatar…

View file

@ -75,7 +75,7 @@ mirrors=Spoguļglabātavas
collaborative=Līdzdarbošanās
forks=Atzarojumi
activities=Aktivitāte
activities=Darbības
pull_requests=Izmaiņu pieprasījumi
issues=Pieteikumi
milestones=Atskaites punkti
@ -678,6 +678,8 @@ Biography = Dzīves un darbības apraksts
Website = Tīmekļvietne
AccessToken = Piekļuves pilnvara
To = Zara nosaukums
username_claiming_cooldown = Šo lietotājvārdu vēl nevar izmantot, jo tā noilgums vēl nav beidzies. To varēs izmantot %[1]s.
email_domain_is_not_allowed = Lietotāja e-pasta adreses <b>%s</b> domēna vārds ir pretrunāt ar EMAIL_DOMAIN_ALLOWLIST vai EMAIL_DOMAIN_BLOCKLIST. Jāpārliecinās, ka e-pasta adrese ir norādīta pareizi.
[user]
@ -695,7 +697,7 @@ following_few=%d seko
follow=Sekot
unfollow=Nesekot
user_bio=Biogrāfija
disabled_public_activity=Šis lietotājs ir atslēdzies iespēju aplūkot tā aktivitāti.
disabled_public_activity=Šis lietotājs ir atspējojis darbību redzamību visiem.
email_visibility.limited=E-pasta adrese ir redzama visiem autentificētajiem lietotājiem
email_visibility.private=E-pasta adrese ir redzama tikai administratoriem
show_on_map=Rādīt šo vietu kartē
@ -803,7 +805,7 @@ old_password=Pašreizējā parole
new_password=Jaunā parole
retype_new_password=Apstiprināt jauno paroli
password_incorrect=Ievadīta nepareiza pašreizējā parole.
change_password_success=Parole tika sekmīgi nomainīta. Turpmāk jāpiesakās ar savu jauno paroli.
change_password_success=Parole tika atjaunināta. Turpmāk jāizmanto sava jaunā parole, lai pieteiktos.
password_change_disabled=Ārējie lietotāji nevar mainīt savu paroli Forgejo tīmekļa saskarnē.
emails=E-pasta adreses
@ -904,7 +906,7 @@ added_on=Pievienots %s
valid_until_date=Derīgs līdz %s
valid_forever=Derīgs mūžīgi
last_used=Pēdējo reizi izmantota
no_activity=Nav nesenas aktivitātes
no_activity=Nav nesenu darbību
can_read_info=Lasīt
can_write_info=Rakstīt
key_state_desc=Šī atslēga ir izmantota pēdējo 7 dienu laikā
@ -1055,6 +1057,8 @@ additional_repo_units_hint_description = Attēlot norādi "Iespējot vēl" glab
language.description = Šī valoda tiks saglabāta kontā un pēc pieteikšanās tiks izmantota kā noklusējuma.
user_block_yourself = Nevar liegt sevi.
pronouns_custom_label = Pielāgoti vietniekvārdi
change_username_redirect_prompt.with_cooldown.one = Vecais lietotājvārds būs pieejams visiem pēc noilguma, kas ir %[1]d diena. Šajā laikā ir iespējams to atkal sākt izmantot.
change_username_redirect_prompt.with_cooldown.few = Vecais lietotājvārds būs pieejams visiem pēc noilguma, kas ir %[1]d dienas. Šajā laikā ir iespējams to atkal sākt izmantot.
[repo]
new_repo_helper=Glabātava satur visas projekta datnes, tajā skaitā izmaiņu vēsturi. Jau tiek izmantota kaut kur citur? <a href="%s">Pārcelt glabātavu</a>.
@ -1652,7 +1656,7 @@ issues.save=Saglabāt
issues.label_title=Nosaukums
issues.label_description=Apraksts
issues.label_color=Krāsa
issues.label_exclusive=Ekskluzīvs
issues.label_exclusive=Sevišķa
issues.label_archive=Arhivēt iezīmi
issues.label_archived_filter=Rādīt arhivētās iezīmes
issues.label_archive_tooltip=Arhivētās iezīmes pēc noklusējuma netiek iekļautas ieteikumos, kad meklē pēc iezīmes.
@ -2033,7 +2037,7 @@ wiki.last_updated=Pēdējo reizi labota %s
wiki.page_name_desc=Jāievada šīs vikivietnes lapas nosaukums. Daži īpašie nosaukumi ir: "Home", "_Sidebar" un "_Footer".
wiki.original_git_entry_tooltip=Rādīt sākotnējo Git datni, nevis izmantot draudzīgo saiti.
activity=Aktivitāte
activity=Notikumi
activity.period.filter_label=Laika periods:
activity.period.daily=1 diena
activity.period.halfweekly=3 dienas
@ -2999,6 +3003,8 @@ teams.invite.by=Uzaicināja %s
teams.invite.description=Lūgums nospiest zemāk esošo pogu, lai pievienotos komandai.
open_dashboard = Atvērt pārskata paneli
follow_blocked_user = Tu nevari sekot šai apvienībai, jo tā ir liegusi Tevi.
settings.change_orgname_redirect_prompt.with_cooldown.one = Vecais lietotājvārds būs pieejams visiem pēc noilguma, kas ir %[1]d diena. Šajā laikā ir iespējams to atkal sākt izmantot.
settings.change_orgname_redirect_prompt.with_cooldown.few = Vecais lietotājvārds būs pieejams visiem pēc noilguma, kas ir %[1]d dienas. Šajā laikā ir iespējams to atkal sākt izmantot.
[admin]
dashboard=Pārskata panelis
@ -3761,7 +3767,7 @@ settings.link.select=Atlasīt glabātavu
settings.link.button=Atjaunināt glabātavas saiti
settings.link.success=Glabātavas saite tika sekmīgi atjaunināta.
settings.link.error=Neizdevās atjaunināt glabātavas saiti.
settings.delete=Dzēst pakotni
settings.delete=Izdzēst pakotni
settings.delete.description=Pakotne tiks neatgriezeniski izdzēsta.
settings.delete.notice=Tiks izdzēsta pakotne %s (%s). Šī darbība ir neatgriezeniska. Tiešām turpināt?
settings.delete.success=Pakotne tika izdzēsta.

View file

@ -1,5 +1,5 @@
[common]
enable_javascript = Denne nettsiden behøver JavaScript.
enable_javascript = Denne nettsiden krever JavaScript.
toc = Innholdsfortegnelse
licenses = Lisenser
return_to_forgejo = Tilbake til Forgejo
@ -126,6 +126,13 @@ webauthn_sign_in = Trykk på knappen på sikkerhetsnøkkelen din. Dersom nøkkel
copy_path = Kopier sti
webauthn_error_unable_to_process = Tjeneren kunne ikke behandle forespørselen din.
webauthn_error_empty = Du må gi nøkkelen et navn.
toggle_menu = Åpne/lukke meny
twofa_scratch = To-faktor skrapekode
webauthn_press_button = Vennligst trykk på knappen på sikkerhetsnøkkelen…
webauthn_error_duplicated = Sikkerhetsnøkkelen er ikke tillatt for denne forespørselen. Vennligst sørg for at nøkkelen ikke allerede er registrert.
webauthn_error_timeout = Et tidsavbrudd oppsto før nøkkelen din kunne leses. Vennligst last inn siden på nytt og prøv igjen.
new_fork = Ny fork av repository
collaborative = Samarbeidende
[search]
search = Søk...

View file

@ -681,6 +681,8 @@ To = Branch naam
Website = Website
AccessToken = Toegangstoken
Pronouns = Voornaamwoorden
username_claiming_cooldown = De gebruikersnaam kan niet opgeëist worden, omdat de afkoelperiode nog niet voorbij is. Hij kan worden opgeëist op %[1]s.
email_domain_is_not_allowed = Het domein van het e-mailadres van de gebruiker <b>%s</b> is in strijd met EMAIL_DOMAIN_ALLOWLIST of EMAIL_DOMAIN_BLOCKLIST. Controleer of u het e-mailadres correct hebt ingesteld.
[user]
@ -1058,6 +1060,8 @@ language.description = Deze taal wordt opgeslagen in uw account en wordt als sta
language.localization_project = Help ons Forgejo in uw taal te vertalen! <a href="%s">Leer meer</a>.
user_block_yourself = U kunt niet zichzelf blokkeren.
pronouns_custom_label = Aangepaste voornaamwoorden
change_username_redirect_prompt.with_cooldown.few = De oude gebruikersnaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dagen. U kunt de oude gebruikersnaam nog steeds opeisen tijdens de afkoelperiode.
change_username_redirect_prompt.with_cooldown.one = De oude gebruikersnaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dag. U kunt de oude gebruikersnaam nog steeds opeisen tijdens de afkoelperiode.
[repo]
owner=Eigenaar
@ -2863,6 +2867,7 @@ summary_card_alt = Overzichtskaart van repository %s
release.summary_card_alt = Samenvattende kaart van een release met de titel "%s" in repository %s
issues.reaction.alt_remove = Verwijder %[1]s reactie van bericht.
issues.reaction.alt_many = %[1]s en %[2]d meer gereageerd %[3]s.
editor.commit_email = Commit e-mail
@ -3001,6 +3006,8 @@ settings.visibility.limited = Beperkt (alleen zichtbaar voor ingelogde gebruiker
teams.add_nonexistent_repo = De repository die u probeert toe te voegen bestaat niet, maak deze eerst aan alstublieft.
teams.all_repositories_write_permission_desc = Dit team verleent <strong>Schrijf</strong> permissies tot <strong>alle repositories</strong>: leden kunnen lezen en pushen naar repositories.
open_dashboard = Open dashboard
settings.change_orgname_redirect_prompt.with_cooldown.one = De oude gebruikersnaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dag. U kunt de oude gebruikersnaam nog steeds opeisen tijdens de afkoelperiode.
settings.change_orgname_redirect_prompt.with_cooldown.few = De oude gebruikersnaam zal voor iedereen beschikbaar zijn na een afkoelperiode van %[1]d dagen. U kunt de oude gebruikersnaam nog steeds opeisen tijdens de afkoelperiode.
[admin]
dashboard=Overzicht
@ -3083,7 +3090,7 @@ dashboard.gc_times=GC verwerkingen
dashboard.delete_old_system_notices=Verwijder alle oude systeemmededelingen uit de database
users.user_manage_panel=Gebruikersaccounts beheren
users.new_account=Nieuw account aanmaken
users.new_account=Gebruikersaccount aanmaken
users.name=Gebruikersnaam
users.full_name=Volledige naam
users.activated=Geactiveerd

View file

@ -680,6 +680,8 @@ required_prefix = A entrada deve começar com "%s"
FullName = Nome completo
Description = Descrição
unset_password = O usuário de login não definiu a senha.
username_claiming_cooldown = Este nome de usuário não pode ser registrado porque o período de espera ainda não acabou. Ele poderá ser registrado em %[1]s.
email_domain_is_not_allowed = O domínio do endereço de email da conta <b>%s</b> está em conflito com EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Certifique-se de que você colocou o endereço de email correto.
[user]
@ -805,7 +807,7 @@ old_password=Senha atual
new_password=Nova senha
retype_new_password=Confirme a nova senha
password_incorrect=A senha atual está incorreta.
change_password_success=Sua senha foi atualizada. Acesse usando sua nova senha de agora em diante.
change_password_success=Sua senha foi atualizada. A partir de agora, use sua nova senha para acessar sua conta.
password_change_disabled=Contas não-locais não podem alterar sua senha através da interface web do Forgejo.
emails=Endereços de e-mail
@ -1057,6 +1059,8 @@ language.localization_project = Ajude-nos a traduzir Forgejo para o seu idioma!
language.description = Essa língua será salva em sua conta e será usada como padrão após você iniciar a sessão.
user_block_yourself = Você não pode se bloquear.
pronouns_custom_label = Pronomes personalizados
change_username_redirect_prompt.with_cooldown.one = O nome de usuário antigo ficará disponível para qualquer pessoa após um período de espera de %[1]d dia, você ainda pode recuperar o nome de usuário antigo durante este período de espera.
change_username_redirect_prompt.with_cooldown.few = O nome de usuário antigo ficará disponível para qualquer pessoa após um período de espera de %[1]d dias, você ainda pode recuperar o nome de usuário antigo durante este período de espera.
[repo]
owner=Proprietário
@ -2619,7 +2623,7 @@ tag.create_tag_from=`Criar nova tag a partir de "%s"`
tag.create_success=Tag "%s" criada.
topic.manage_topics=Gerenciar Tópicos
topic.manage_topics=Gerenciar tópicos
topic.done=Feito
topic.count_prompt=Você não pode selecionar mais de 25 tópicos
@ -3000,6 +3004,8 @@ open_dashboard = Abrir painel
settings.change_orgname_prompt = Obs.: Alterar o nome de uma organização resultará na alteração do URL dela e disponibilizará o nome antigo para uso.
follow_blocked_user = Não foi possível seguir esta organização porque ela bloqueou-o(a).
form.name_pattern_not_allowed = O padrão "%s" não é permitido no nome de uma organização.
settings.change_orgname_redirect_prompt.with_cooldown.one = O nome de usuário antigo ficará disponível para qualquer pessoa após um período de espera de %[1]d dia, você ainda pode recuperar o nome de usuário antigo durante este período de espera.
settings.change_orgname_redirect_prompt.with_cooldown.few = O nome de usuário antigo ficará disponível para qualquer pessoa após um período de espera de %[1]d dias, você ainda pode recuperar o nome de usuário antigo durante este período de espera.
[admin]
dashboard=Painel
@ -3820,6 +3826,13 @@ owner.settings.cargo.initialize.description = É necessário um repositório Git
owner.settings.chef.keypair.description = É necessário um par de chaves para autenticar no registro Chef. Se você já gerou um par de chaves, gere um novo par e descarte o antigo.
container.images.title = Imagens
search_in_external_registry = Buscar em %s
alt.registry.install = Para instalar o pacote, execute o seguinte comando:
alt.registry = Configurar este registro da linha de comando:
alt.install = Instalar pacote
alt.repository = Informação do repositório
alt.repository.architectures = Arquiteturas
alt.repository.multiple_groups = Este pacote está disponível em múltiplos grupos.
alt.setup = Adicionar um repositório à lista de repositórios conectados (escolha a arquitetura necessária em vez de '_arch_'):
[secrets]
secrets=Segredos

View file

@ -681,6 +681,8 @@ AccessToken = Código de acesso
FullName = Nome completo
Description = Descrição
Pronouns = Pronomes
username_claiming_cooldown = O nome de utilizador não pode ser reivindicado, porque o período de espera do mesmo ainda não terminou. Pode ser reivindicado em %[1]s.
email_domain_is_not_allowed = O domínio do endereço de email <b>%s</b> do utilizador entra em conflito com EMAIL_DOMAIN_ALLOWLIST ou EMAIL_DOMAIN_BLOCKLIST. Certifique-se de que definiu corretamente o endereço de email.
[user]
change_avatar=Mude o seu avatar…
@ -805,7 +807,7 @@ old_password=Senha corrente
new_password=Nova senha
retype_new_password=Confirme a nova senha
password_incorrect=A senha corrente está errada.
change_password_success=A sua senha foi substituída. Inicie a sessão com a nova senha a partir de agora.
change_password_success=A sua senha foi atualizada. A partir de agora, utilize a sua nova senha para iniciar sessão.
password_change_disabled=Os utilizadores não-locais não podem alterar a sua senha através da interface web do Forgejo.
emails=Endereços de email
@ -1057,6 +1059,8 @@ language.description = Este idioma vai ser guardado na sua conta e ser usado com
language.localization_project = Ajude-nos a traduzir o Forgejo para o seu idioma! <a href="%s">Saiba mais</a>.
pronouns_custom_label = Pronomes personalizados
user_block_yourself = Não se pode bloquear a si próprio.
change_username_redirect_prompt.with_cooldown.one = O nome de utilizador antigo estará disponível para todos após um período de espera de %[1]d dia, podendo ainda reivindicar o nome de utilizador antigo durante o período de espera.
change_username_redirect_prompt.with_cooldown.few = O nome de utilizador antigo ficará disponível para todos após um período de espera de %[1]d dias, podendo ainda reivindicar o nome de utilizador antigo durante o período de espera.
[repo]
new_repo_helper=Um repositório contém todos os ficheiros do trabalho, incluindo o histórico das revisões. Já tem um hospedado noutro sítio? <a href="%s">Migre o repositório</a>.
@ -3001,6 +3005,8 @@ teams.invite.by=Convidado(a) por %s
teams.invite.description=Clique no botão abaixo para se juntar à equipa.
follow_blocked_user = Não pode seguir esta organização porque esta organização bloqueou-o/a.
open_dashboard = Abrir painel de controlo
settings.change_orgname_redirect_prompt.with_cooldown.one = O nome de utilizador antigo estará disponível para todos após um período de espera de %[1]d dia, podendo ainda reivindicar o nome de utilizador antigo durante o período de espera.
settings.change_orgname_redirect_prompt.with_cooldown.few = O nome de utilizador antigo estará disponível para todos após um período de espera de %[1]d dias, podendo ainda reivindicar o nome de utilizador antigo durante o período de espera.
[admin]
dashboard=Painel de controlo
@ -3821,6 +3827,13 @@ arch.version.backup = Cópia de segurança
arch.version.replaces = Substitui
container.images.title = Imagens
search_in_external_registry = Procurar em %s
alt.registry = Configure este registo a partir da linha de comandos:
alt.registry.install = Para instalar o pacote, execute o seguinte comando:
alt.install = Instalar pacote
alt.repository = Informação do repositório
alt.repository.architectures = Arquiteturas
alt.repository.multiple_groups = Este pacote está disponível em vários grupos.
alt.setup = Adicionar um repositório à lista de repositórios ligados (escolha a arquitetura necessária em vez de '_arch_'):
[secrets]
secrets=Segredos

View file

@ -680,6 +680,8 @@ Biography = О себе
Website = Веб-сайт
Location = Местоположение
To = Название ветви
email_domain_is_not_allowed = Домен адреса эл. почты <b>%s</b> не разрешён к использованию. Убедитесь, что он введён правильно или попробуйте другой адрес.
username_claiming_cooldown = Это имя пока не может быть занято, т.к. срок его защиты ещё не вышел. Его получится занять после %[1]s.
[user]
@ -761,7 +763,7 @@ update_language_success=Язык обновлён.
update_profile_success=Ваш профиль успешно обновлён.
change_username=Ваше имя пользователя было изменено.
change_username_prompt=Обратите внимание: изменение имени пользователя также меняет URL вашей учётной записи.
change_username_redirect_prompt=Старое имя пользователя будет перенаправлять на новое до тех пор, пока его не займут.
change_username_redirect_prompt=Старое имя будет перенаправлять на новое до тех пор, пока оно не будет занято.
continue=Далее
cancel=Отмена
language=Язык
@ -1057,6 +1059,8 @@ language.description = Выбранный язык будет сохранён
language.localization_project = Помогите с переводом Forgejo на свой язык! <a href="%s">Подробнее</a>.
user_block_yourself = Нельзя заблокировать себя.
pronouns_custom_label = Другие местоимения
change_username_redirect_prompt.with_cooldown.one = Прежнее имя будет доступно для использования другим пользователям после истечения защиты в %[1]d день. Вы сможете вернуть его себе во время срока защиты.
change_username_redirect_prompt.with_cooldown.few = Прежнее имя будет доступно для использования другим пользователям после истечения защиты в %[1]d дней. Вы сможете вернуть его себе во время срока защиты.
[repo]
owner=Владелец
@ -2650,7 +2654,7 @@ tag.create_tag_from=Создать новый тег из «%s»
tag.create_success=Тег «%s» создан.
topic.manage_topics=Редактировать тематические метки
topic.manage_topics=Изменить темы
topic.done=Сохранить
topic.count_prompt=Нельзя выбрать более 25 тем
topic.format_prompt=Темы должны начинаться с буквы или цифры и могут содержать дефисы («-») и точки («.»). Длина темы не должна превышать 35 символов. Все буквы должны быть строчными.
@ -3003,6 +3007,8 @@ teams.invite.description=Нажмите на кнопку ниже, чтобы
follow_blocked_user = Вы не можете подписаться на эту организацию, т.к. вы в ней заблокированы.
teams.general_access = Настраиваемый доступ
open_dashboard = Открыть панель
settings.change_orgname_redirect_prompt.with_cooldown.few = Прежнее название будет доступно для использования другим пользователям после истечения защиты в %[1]d дней. Вы сможете вернуть его во время срока защиты.
settings.change_orgname_redirect_prompt.with_cooldown.one = Прежнее название будет доступно для использования другим пользователям после истечения защиты в %[1]d день. Вы сможете вернуть его во время срока защиты.
[admin]
dashboard=Панель управления
@ -3708,7 +3714,7 @@ composer.install=Чтобы установить пакет с помощью Co
composer.dependencies=Зависимости
composer.dependencies.development=Зависимости для разработки
conan.details.repository=Репозиторий
conan.registry=Настроить реестр из командной строки:
conan.registry=Добавьте реестр командой:
conan.install=Чтобы установить пакет с помощью Conan, выполните следующую команду:
conda.registry=Пропишите этот реестр в качестве репозитория Conda в своём файле <code>.condarc</code>:
conda.install=Чтобы установить пакет с помощью Conda, выполните следующую команду:
@ -3723,7 +3729,7 @@ container.labels.key=Ключ
container.labels.value=Значение
cran.registry=Настройте этот реестр в файле <code>Rprofile.site</code>:
cran.install=Чтобы установить пакет, выполните следующую команду:
debian.registry=Настроить реестр из командной строки:
debian.registry=Добавьте реестр командой:
debian.registry.info=Выберите $distribution и $component из списка ниже.
debian.install=Чтобы установить пакет, выполните следующую команду:
debian.repository=О репозитории
@ -3732,13 +3738,13 @@ debian.repository.components=Компоненты
debian.repository.architectures=Архитектуры
generic.download=Скачать пакет из командной строки:
go.install=Установите пакет из командной строки:
helm.registry=Настроить реестр из командной строки:
helm.registry=Добавьте реестр командой:
helm.install=Чтобы установить пакет, выполните следующую команду:
maven.registry=Настройте реестр в файле <code>pom.xml</code> вашего проекта:
maven.install=Чтобы использовать пакет, включите в блок <code>dependencies</code> в файле <code>pom.xml</code> следующее:
maven.install2=Выполнить через командную строку:
maven.download=Чтобы скачать зависимость, запустите в командной строке:
nuget.registry=Настроить реестр из командной строки:
nuget.registry=Добавьте реестр командой:
nuget.install=Чтобы установить пакет с помощью NuGet, выполните следующую команду:
nuget.dependency.framework=Целевой фреймворк
npm.registry=Настройте реестр в файле <code>.npmrc</code> вашего проекта:
@ -3752,7 +3758,7 @@ npm.details.tag=Тег
pub.install=Чтобы установить пакет с помощью Dart, выполните следующую команду:
pypi.requires=Требуется Python
pypi.install=Чтобы установить пакет с помощью pip, выполните следующую команду:
rpm.registry=Настроить реестр из командной строки:
rpm.registry=Добавьте реестр командой:
rpm.distros.redhat=на дистрибутивах семейства RedHat
rpm.distros.suse=на дистрибутивах семейства SUSE
rpm.install=Чтобы установить пакет, выполните следующую команду:
@ -3764,7 +3770,7 @@ rubygems.dependencies.runtime=Зависимости времени выполн
rubygems.dependencies.development=Зависимости для разработки
rubygems.required.ruby=Требуется версия Ruby
rubygems.required.rubygems=Требуется версия RubyGem
swift.registry=Настроить реестр из командной строки:
swift.registry=Добавьте реестр командой:
swift.install=Добавьте пакет в свой файл <code>Package.swift</code>:
swift.install2=и запустите следующую команду:
vagrant.install=Чтобы добавить бокс Vagrant, выполните следующую команду:
@ -3834,6 +3840,9 @@ container.images.title = Образы
search_in_external_registry = Найти в %s
alt.repository = О репозитории
alt.repository.architectures = Архитектуры
alt.registry = Добавьте реестр командой:
alt.repository.multiple_groups = Этот пакет доступен в нескольких группах.
alt.setup = Добавьте репозиторий в свой список репозиториев (выберите подходящую архитектуру вместо «_arch_»):
[secrets]
secrets=Секреты

View file

@ -666,6 +666,8 @@ invalid_group_team_map_error = ` призначення недійсне: %s`
unsupported_login_type = Цей тип входу не підтримує видалення облікового запису.
admin_cannot_delete_self = Ви не можете видалити себе, якщо ви є адміністратором. Спочатку зніміть із себе права адміністратора.
unset_password = Для користувача не встановлено пароль.
username_claiming_cooldown = Це ім'я користувача не можна присвоїти, оскільки його період захисту ще не закінчився. Ім'я можна буде присвоїти %[1]s.
email_domain_is_not_allowed = Домен адреси електронної пошти <b>%s</b> конфліктує з EMAIL_DOMAIN_ALLOWLIST або EMAIL_DOMAIN_BLOCKLIST. Перевірте, чи ви правильно вказали адресу електронної пошти.
[user]
@ -761,7 +763,7 @@ update_password=Оновити пароль
old_password=Поточний пароль
new_password=Новий пароль
password_incorrect=Поточний пароль неправильний.
change_password_success=Ваш пароль був оновлений. Тепер увійдіть в систему, використовуючи новий пароль.
change_password_success=Ваш пароль оновлено. Відтепер входьте в систему, використовуючи новий пароль.
password_change_disabled=Нелокальні акаунти не можуть змінити пароль через Forgejo.
emails=Адреса електронної пошти
@ -1006,6 +1008,9 @@ key_signature_ssh_placeholder = Починається з «-----BEGIN SSH SIGNA
user_block_yourself = Ви не можете заблокувати себе.
pronouns_custom_label = Інші займенники
repo_and_org_access = Доступ до репозиторію та організації
change_username_redirect_prompt.with_cooldown.few = Старе ім'я користувача буде доступне всім після періоду захисту, який триватиме %[1]d днів. Протягом періоду захисту ви ще можете повернути собі старе ім'я.
change_username_redirect_prompt.with_cooldown.one = Старе ім'я користувача буде доступне всім після періоду захисту, який триватиме %[1]d день. Протягом періоду захисту ви ще можете повернути собі старе ім'я.
change_username_redirect_prompt = Старе ім'я користувача буде перенаправленням, поки хтось не присвоїть ім'я собі.
[repo]
owner=Власник
@ -2595,6 +2600,8 @@ follow_blocked_user = Ви не можете стежити за цією орг
teams.invite.description = Щоб приєднатися до команди, натисніть кнопку нижче.
teams.invite.title = Вас запрошено приєднатися до команди <strong>%s</strong> в організації <strong>%s</strong>.
form.name_reserved = Назву організації «%s» зарезервовано.
settings.change_orgname_redirect_prompt.with_cooldown.one = Стара назва буде доступна всім після періоду захисту, який триватиме %[1]d день. Протягом періоду захисту ви ще можете повернути стару назву.
settings.change_orgname_redirect_prompt.with_cooldown.few = Стара назва буде доступна всім після періоду захисту, який триватиме %[1]d днів. Протягом періоду захисту ви ще можете повернути стару назву.
[admin]
dashboard=Панель управління

View file

@ -680,6 +680,8 @@ AccessToken = 访问令牌
Description = 描述
Pronouns = 代称
Biography = 简历
username_claiming_cooldown = 用户名不能被认领,因为其仍处于冷却期间。其可以在%[1]s后被认领。
email_domain_is_not_allowed = 用户电子邮箱的域名<b>%s</b>与EMAIL_DOMAIN_ALLOWLIST或EMAIL_DOMAIN_BLOCKLIST冲突。请确保您正确设置了电子邮件地址。
[user]
change_avatar=修改头像…
@ -804,7 +806,7 @@ old_password=当前密码
new_password=新的密码
retype_new_password=确认新密码
password_incorrect=当前密码不正确。
change_password_success=您的密码已更新。从现在开始使用您的新密码登录。
change_password_success=您的密码已更新。从现在开始使用您的新密码登录。
password_change_disabled=非本地帐户不能通过 Forgejo 的 web 界面更改密码。
emails=邮箱地址
@ -1056,6 +1058,8 @@ language.description = 此语言将保存到您的账号中,并在您登录后
language.localization_project = 帮助我们将 Forgejo 翻译成您的语言!<a href="%s">了解更多</a>。
user_block_yourself = 您不能屏蔽自己。
pronouns_custom_label = 自定义代词
change_username_redirect_prompt.with_cooldown.one = 旧的用户名将在%[1]d天的冷却期后对所有人可用您仍可以在此期间重新认领旧的用户名。
change_username_redirect_prompt.with_cooldown.few = 旧的用户名将在%[1]d天的冷却期后对所有人可用您仍可以在此期间重新认领旧的用户名。
[repo]
new_repo_helper=代码仓库包含了所有的项目文件,包括版本历史记录。已经在其他地方托管了?<a href="%s">迁移仓库</a>。
@ -2866,6 +2870,7 @@ issues.context.menu = 评论菜单
issues.reaction.alt_add = 对评论添加 %[1]s 回应。
release.summary_card_alt = 仓库 %[2]s 中标题为 %[1]s 的版本发布的摘要卡片
summary_card_alt = 仓库 %s 的摘要卡片
editor.commit_email = 提交电子邮件
[graphs]
component_loading=正在加载 %s…
@ -3001,6 +3006,8 @@ teams.invite.by=邀请人 %s
teams.invite.description=请点击下面的按钮加入团队。
follow_blocked_user = 你无法关注此组织,因为此组织已屏蔽你。
open_dashboard = 打开仪表盘
settings.change_orgname_redirect_prompt.with_cooldown.one = 旧的用户名将在%[1]d天的冷却期后对所有人可用您仍可以在此期间重新认领旧的用户名。
settings.change_orgname_redirect_prompt.with_cooldown.few = 旧的用户名将在%[1]d天的冷却期后对所有人可用您仍可以在此期间重新认领旧的用户名。
[admin]
dashboard=管理面板

1220
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -61,7 +61,7 @@
"devDependencies": {
"@axe-core/playwright": "4.10.1",
"@eslint-community/eslint-plugin-eslint-comments": "4.4.1",
"@playwright/test": "1.49.1",
"@playwright/test": "1.50.1",
"@stoplight/spectral-cli": "6.14.2",
"@stylistic/eslint-plugin-js": "2.12.1",
"@stylistic/stylelint-plugin": "3.1.1",
@ -85,9 +85,9 @@
"eslint-plugin-vue-scoped-css": "2.9.0",
"eslint-plugin-wc": "2.2.0",
"globals": "15.14.0",
"happy-dom": "16.3.0",
"happy-dom": "16.8.1",
"license-checker-rseidelsohn": "4.4.2",
"markdownlint-cli": "0.43.0",
"markdownlint-cli": "0.44.0",
"postcss-html": "1.8.0",
"stylelint": "16.12.0",
"stylelint-declaration-block-no-ignored-properties": "2.8.0",

6
poetry.lock generated
View file

@ -16,13 +16,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
[[package]]
name = "codespell"
version = "2.4.0"
version = "2.4.1"
description = "Fix common misspellings in text files"
optional = false
python-versions = ">=3.8"
files = [
{file = "codespell-2.4.0-py3-none-any.whl", hash = "sha256:b4c5b779f747dd481587aeecb5773301183f52b94b96ed51a28126d0482eec1d"},
{file = "codespell-2.4.0.tar.gz", hash = "sha256:587d45b14707fb8ce51339ba4cce50ae0e98ce228ef61f3c5e160e34f681be58"},
{file = "codespell-2.4.1-py3-none-any.whl", hash = "sha256:3dadafa67df7e4a3dbf51e0d7315061b80d265f9552ebd699b3dd6834b47e425"},
{file = "codespell-2.4.1.tar.gz", hash = "sha256:299fcdcb09d23e81e35a671bbe746d5ad7e8385972e65dbb833a2eaac33c01e5"},
]
[package.extras]

View file

@ -62,6 +62,7 @@
"description": "Group nodejs packages",
"matchPackageNames": [
"code.forgejo.org/oci/node",
"data.forgejo.org/oci/node",
"docker.io/library/node",
"docker.io/node",
"node"

View file

@ -112,7 +112,7 @@ Here are some links to the most important topics. You can find the full list of
<h2 id="user-content-quick-links">Quick Links</h2>
<p>Here are some links to the most important topics. You can find the full list of pages at the sidebar.</p>
<p><a href="` + FullURL + `wiki/Configuration" rel="nofollow">Configuration</a>
<a href="` + FullURL + `wiki/raw/images/icon-bug.png" rel="nofollow"><img src="` + FullURL + `wiki/raw/images/icon-bug.png" title="icon-bug.png" alt="images/icon-bug.png"/></a></p>
<a href="` + FullURL + `wiki/raw/images/icon-bug.png" rel="nofollow"><img src="` + FullURL + `wiki/raw/images/icon-bug.png" title="icon-bug.png" alt=""/></a></p>
`,
}

View file

@ -303,11 +303,7 @@ func DeleteGPGKey(ctx *context.APIContext) {
}
if err := asymkey_model.DeleteGPGKey(ctx, ctx.Doer, ctx.ParamsInt64(":id")); err != nil {
if asymkey_model.IsErrGPGKeyAccessDenied(err) {
ctx.Error(http.StatusForbidden, "", "You do not have access to this key")
} else {
ctx.Error(http.StatusInternalServerError, "DeleteGPGKey", err)
}
ctx.Error(http.StatusInternalServerError, "DeleteGPGKey", err)
return
}
@ -317,8 +313,6 @@ func DeleteGPGKey(ctx *context.APIContext) {
// HandleAddGPGKeyError handle add GPGKey error
func HandleAddGPGKeyError(ctx *context.APIContext, err error, token string) {
switch {
case asymkey_model.IsErrGPGKeyAccessDenied(err):
ctx.Error(http.StatusUnprocessableEntity, "GPGKeyAccessDenied", "You do not have access to this GPG key")
case asymkey_model.IsErrGPGKeyIDAlreadyUsed(err):
ctx.Error(http.StatusUnprocessableEntity, "GPGKeyIDAlreadyUsed", "A key with the same id already exists")
case asymkey_model.IsErrGPGKeyParsing(err):

View file

@ -83,6 +83,7 @@ func Users(ctx *context.Context) {
IsTwoFactorEnabled: util.OptionalBoolParse(statusFilterMap["is_2fa_enabled"]),
IsProhibitLogin: util.OptionalBoolParse(statusFilterMap["is_prohibit_login"]),
IncludeReserved: true, // administrator needs to list all accounts include reserved, bot, remote ones
Load2FAStatus: true,
ExtraParamStrings: extraParamStrings,
}, tplUsers)
}

View file

@ -225,15 +225,6 @@ func SignInPost(ctx *context.Context) {
log.Warn("Failed authentication attempt for %s from %s: %v", form.UserName, ctx.RemoteAddr(), err)
ctx.Data["Title"] = ctx.Tr("auth.prohibit_login")
ctx.HTML(http.StatusOK, "user/auth/prohibit_login")
} else if user_model.IsErrUserInactive(err) {
if setting.Service.RegisterEmailConfirm {
ctx.Data["Title"] = ctx.Tr("auth.active_your_account")
ctx.HTML(http.StatusOK, TplActivate)
} else {
log.Warn("Failed authentication attempt for %s from %s: %v", form.UserName, ctx.RemoteAddr(), err)
ctx.Data["Title"] = ctx.Tr("auth.prohibit_login")
ctx.HTML(http.StatusOK, "user/auth/prohibit_login")
}
} else {
ctx.ServerError("UserSignIn", err)
}

View file

@ -99,16 +99,6 @@ func handleSignInError(ctx *context.Context, userName string, ptrForm any, tmpl
log.Info("Failed authentication attempt for %s from %s: %v", userName, ctx.RemoteAddr(), err)
ctx.Data["Title"] = ctx.Tr("auth.prohibit_login")
ctx.HTML(http.StatusOK, "user/auth/prohibit_login")
} else if user_model.IsErrUserInactive(err) {
ctx.Data["user_exists"] = true
if setting.Service.RegisterEmailConfirm {
ctx.Data["Title"] = ctx.Tr("auth.active_your_account")
ctx.HTML(http.StatusOK, TplActivate)
} else {
log.Info("Failed authentication attempt for %s from %s: %v", userName, ctx.RemoteAddr(), err)
ctx.Data["Title"] = ctx.Tr("auth.prohibit_login")
ctx.HTML(http.StatusOK, "user/auth/prohibit_login")
}
} else {
ctx.ServerError(invoker, err)
}

View file

@ -39,7 +39,11 @@ func Organizations(ctx *context.Context) {
)
sortOrder := ctx.FormString("sort")
if sortOrder == "" {
sortOrder = "newest"
if supportedSortOrders.Contains(setting.UI.ExploreDefaultSort) {
sortOrder = setting.UI.ExploreDefaultSort
} else {
sortOrder = "newest"
}
ctx.SetFormString("sort", sortOrder)
}

View file

@ -114,7 +114,9 @@ func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions,
ctx.Data["Keyword"] = opts.Keyword
ctx.Data["Total"] = count
ctx.Data["Users"] = users
ctx.Data["UsersTwoFaStatus"] = user_model.UserList(users).GetTwoFaStatus(ctx)
if opts.Load2FAStatus {
ctx.Data["UsersTwoFaStatus"] = user_model.UserList(users).GetTwoFaStatus(ctx)
}
ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail
ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled
@ -149,7 +151,11 @@ func Users(ctx *context.Context) {
)
sortOrder := ctx.FormString("sort")
if sortOrder == "" {
sortOrder = "newest"
if supportedSortOrders.Contains(setting.UI.ExploreDefaultSort) {
sortOrder = setting.UI.ExploreDefaultSort
} else {
sortOrder = "newest"
}
ctx.SetFormString("sort", sortOrder)
}

Some files were not shown because too many files have changed in this diff Show more