mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-01-07 23:55:35 +00:00
Merge remote-tracking branch 'upstream/forgejo' into feat/add-oidc-ssh-keys
This commit is contained in:
commit
bbcd7d6fae
147 changed files with 2879 additions and 2901 deletions
|
@ -28,7 +28,7 @@ jobs:
|
|||
- uses: actions/checkout@v4
|
||||
|
||||
- id: forgejo
|
||||
uses: https://code.forgejo.org/actions/setup-forgejo@v1
|
||||
uses: https://code.forgejo.org/actions/setup-forgejo@v2.0.4
|
||||
with:
|
||||
user: root
|
||||
password: admin1234
|
||||
|
|
|
@ -158,7 +158,7 @@ jobs:
|
|||
|
||||
- name: build container & release
|
||||
if: ${{ secrets.TOKEN != '' }}
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5.1.1
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5.2.1
|
||||
with:
|
||||
forgejo: "${{ env.GITHUB_SERVER_URL }}"
|
||||
owner: "${{ env.GITHUB_REPOSITORY_OWNER }}"
|
||||
|
@ -177,7 +177,7 @@ jobs:
|
|||
|
||||
- name: build rootless container
|
||||
if: ${{ secrets.TOKEN != '' }}
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5.1.1
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/build@v5.2.1
|
||||
with:
|
||||
forgejo: "${{ env.GITHUB_SERVER_URL }}"
|
||||
owner: "${{ env.GITHUB_REPOSITORY_OWNER }}"
|
||||
|
@ -195,7 +195,7 @@ jobs:
|
|||
|
||||
- name: end-to-end tests
|
||||
if: ${{ secrets.TOKEN != '' && vars.ROLE == 'forgejo-integration' && vars.SKIP_END_TO_END != 'true' }}
|
||||
uses: https://code.forgejo.org/actions/cascading-pr@v2
|
||||
uses: https://code.forgejo.org/actions/cascading-pr@v2.2.0
|
||||
with:
|
||||
origin-url: ${{ env.GITHUB_SERVER_URL }}
|
||||
origin-repo: ${{ github.repository }}
|
||||
|
|
|
@ -41,7 +41,7 @@ jobs:
|
|||
with:
|
||||
fetch-depth: '0'
|
||||
show-progress: 'false'
|
||||
- uses: actions/cascading-pr@v2
|
||||
- uses: https://code.forgejo.org/actions/cascading-pr@v2.2.0
|
||||
with:
|
||||
origin-url: ${{ env.GITHUB_SERVER_URL }}
|
||||
origin-repo: ${{ github.repository }}
|
||||
|
|
|
@ -42,14 +42,14 @@ jobs:
|
|||
- uses: actions/checkout@v4
|
||||
|
||||
- name: copy & sign
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/publish@v5
|
||||
uses: https://code.forgejo.org/forgejo/forgejo-build-publish/publish@v5.2.1
|
||||
with:
|
||||
from-forgejo: ${{ vars.FORGEJO }}
|
||||
to-forgejo: ${{ vars.FORGEJO }}
|
||||
from-owner: ${{ vars.FROM_OWNER }}
|
||||
to-owner: ${{ vars.TO_OWNER }}
|
||||
repo: ${{ vars.REPO }}
|
||||
release-notes: "See https://codeberg.org/forgejo/forgejo/src/branch/forgejo/RELEASE-NOTES.md#{ANCHOR}"
|
||||
release-notes: "See https://codeberg.org/forgejo/forgejo/src/branch/forgejo/release-notes-published/{VERSION}.md"
|
||||
ref-name: ${{ github.ref_name }}
|
||||
sha: ${{ github.sha }}
|
||||
from-token: ${{ secrets.TOKEN }}
|
||||
|
|
|
@ -25,7 +25,7 @@ jobs:
|
|||
|
||||
runs-on: docker
|
||||
container:
|
||||
image: code.forgejo.org/forgejo-contrib/renovate:39.57.4
|
||||
image: code.forgejo.org/forgejo-contrib/renovate:39.69.2
|
||||
|
||||
steps:
|
||||
- name: Load renovate repo cache
|
||||
|
|
6
Makefile
6
Makefile
|
@ -39,7 +39,7 @@ 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.0.3 # 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.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
|
||||
MISSPELL_PACKAGE ?= github.com/golangci/misspell/cmd/misspell@v0.6.0 # renovate: datasource=go
|
||||
SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.31.0 # renovate: datasource=go
|
||||
|
@ -48,8 +48,8 @@ GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1.6.0 # renovate: datasour
|
|||
GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1 # renovate: datasource=go
|
||||
DEADCODE_PACKAGE ?= golang.org/x/tools/cmd/deadcode@v0.28.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.16.2 # renovate: datasource=go
|
||||
RENOVATE_NPM_PACKAGE ?= renovate@39.57.4 # renovate: datasource=docker packageName=code.forgejo.org/forgejo-contrib/renovate
|
||||
GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.17.0 # renovate: datasource=go
|
||||
RENOVATE_NPM_PACKAGE ?= renovate@39.69.2 # renovate: datasource=docker packageName=code.forgejo.org/forgejo-contrib/renovate
|
||||
|
||||
# https://github.com/disposable-email-domains/disposable-email-domains/commits/main/
|
||||
DISPOSABLE_EMAILS_SHA ?= 0c27e671231d27cf66370034d7f6818037416989 # renovate: ...
|
||||
|
|
|
@ -4,31 +4,31 @@ A minor or major Forgejo release is published every [three months](https://forge
|
|||
|
||||
A [patch or minor release](https://semver.org/spec/v2.0.0.html) (e.g. upgrading from v7.0.0 to v7.0.1 or v7.1.0) does not require manual intervention. But [major releases](https://semver.org/spec/v2.0.0.html#spec-item-8) where the first version number changes (e.g. upgrading from v1.21 to v7.0) contain breaking changes and the release notes explain how to deal with them.
|
||||
|
||||
The release notes of each release [are available in the corresponding milestone](https://codeberg.org/forgejo/forgejo/milestones), starting with [Forgejo 7.0.7](https://codeberg.org/forgejo/forgejo/milestone/7683) and [Forgejo 8.0.1](https://codeberg.org/forgejo/forgejo/milestone/7682).
|
||||
The release notes of each release [are available in the release-notes-published directory of this repository](release-notes-published), starting with [Forgejo 7.0.7](release-notes-published/7.0.7.md) and [Forgejo 8.0.1](release-notes-published/8.0.1.md).
|
||||
|
||||
## 9.0.2
|
||||
|
||||
The Forgejo v9.0.2 release notes are [available in the v9.0.2 milestone](https://codeberg.org/forgejo/forgejo/milestone/8610).
|
||||
See the [Forgejo 9.0.2 release notes](release-notes-published/9.0.2.md).
|
||||
|
||||
## 9.0.1
|
||||
|
||||
The Forgejo v9.0.1 release notes are [available in the v9.0.1 milestone](https://codeberg.org/forgejo/forgejo/milestone/8544).
|
||||
See the [Forgejo 9.0.1 release notes](release-notes-published/9.0.1.md).
|
||||
|
||||
## 9.0.0
|
||||
|
||||
The Forgejo v9.0.0 release notes are [available in the v9.0.0 milestone](https://codeberg.org/forgejo/forgejo/milestone/7235).
|
||||
See the [Forgejo 9.0.0 release notes](release-notes-published/9.0.0.md).
|
||||
|
||||
## 8.0.3
|
||||
|
||||
The Forgejo v8.0.3 release notes are [available in the v8.0.3 milestone](https://codeberg.org/forgejo/forgejo/milestone/8231).
|
||||
See the [Forgejo 8.0.3 release notes](release-notes-published/8.0.3.md).
|
||||
|
||||
## 8.0.2
|
||||
|
||||
The Forgejo v8.0.2 release notes are [available in the v8.0.2 milestone](https://codeberg.org/forgejo/forgejo/milestone/7728).
|
||||
See the [Forgejo 8.0.2 release notes](release-notes-published/8.0.2.md).
|
||||
|
||||
## 8.0.1
|
||||
|
||||
The Forgejo v8.0.1 release notes are [available in the v8.0.1 milestone](https://codeberg.org/forgejo/forgejo/milestone/7682).
|
||||
See the [Forgejo 8.0.1 release notes](release-notes-published/8.0.1.md).
|
||||
|
||||
## 8.0.0
|
||||
|
||||
|
@ -169,23 +169,23 @@ A [companion blog post](https://forgejo.org/2024-07-release-v8-0/) provides addi
|
|||
|
||||
## 7.0.11
|
||||
|
||||
The Forgejo v7.0.11 release notes are [available in the v7.0.11 milestone](https://codeberg.org/forgejo/forgejo/milestone/8609).
|
||||
See the [Forgejo 7.0.11 release notes](release-notes-published/7.0.11.md).
|
||||
|
||||
## 7.0.10
|
||||
|
||||
The Forgejo v7.0.10 release notes are [available in the v7.0.10 milestone](https://codeberg.org/forgejo/forgejo/milestone/8286).
|
||||
See the [Forgejo 7.0.10 release notes](release-notes-published/7.0.10.md).
|
||||
|
||||
## 7.0.9
|
||||
|
||||
The Forgejo v7.0.9 release notes are [available in the v7.0.9 milestone](https://codeberg.org/forgejo/forgejo/milestone/8232).
|
||||
See the [Forgejo 7.0.9 release notes](release-notes-published/7.0.9.md).
|
||||
|
||||
## 7.0.8
|
||||
|
||||
The Forgejo v7.0.8 release notes are [available in the v7.0.8 milestone](https://codeberg.org/forgejo/forgejo/milestone/7729).
|
||||
See the [Forgejo 7.0.8 release notes](release-notes-published/7.0.8.md).
|
||||
|
||||
## 7.0.7
|
||||
|
||||
The Forgejo v7.0.7 release notes are [available in the v7.0.7 milestone](https://codeberg.org/forgejo/forgejo/milestone/7683).
|
||||
See the [Forgejo 7.0.7 release notes](release-notes-published/7.0.7.md).
|
||||
|
||||
## 7.0.6
|
||||
|
||||
|
|
|
@ -62,7 +62,6 @@ func initRemoveTags() {
|
|||
"user", "utente", "lietotājs", "gebruiker", "usuário", "Benutzer", "Bruker",
|
||||
"server", "servidor", "kiszolgáló", "serveris",
|
||||
"label", "etichetta", "etiķete", "rótulo", "Label", "utilizador",
|
||||
"filename", "bestandsnaam", "dosyaadi", "fails", "nome do arquivo", "datnes nosaukums",
|
||||
} {
|
||||
oldnew = append(oldnew, "<"+el+">", "REPLACED-TAG")
|
||||
}
|
||||
|
|
20
go.mod
20
go.mod
|
@ -25,7 +25,7 @@ require (
|
|||
github.com/SaveTheRbtz/zstd-seekable-format-go/pkg v0.7.2
|
||||
github.com/alecthomas/chroma/v2 v2.14.0
|
||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb
|
||||
github.com/blevesearch/bleve/v2 v2.4.3
|
||||
github.com/blevesearch/bleve/v2 v2.4.4
|
||||
github.com/buildkite/terminal-to-html/v3 v3.16.4
|
||||
github.com/caddyserver/certmagic v0.21.4
|
||||
github.com/chi-middleware/proxy v1.1.1
|
||||
|
@ -37,10 +37,10 @@ require (
|
|||
github.com/emersion/go-imap v1.2.1
|
||||
github.com/felixge/fgprof v0.9.5
|
||||
github.com/fsnotify/fsnotify v1.8.0
|
||||
github.com/gliderlabs/ssh v0.3.7
|
||||
github.com/gliderlabs/ssh v0.3.8
|
||||
github.com/go-ap/activitypub v0.0.0-20231114162308-e219254dc5c9
|
||||
github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73
|
||||
github.com/go-chi/chi/v5 v5.1.0
|
||||
github.com/go-chi/chi/v5 v5.2.0
|
||||
github.com/go-chi/cors v1.2.1
|
||||
github.com/go-co-op/gocron v1.37.0
|
||||
github.com/go-enry/go-enry/v2 v2.9.1
|
||||
|
@ -104,16 +104,16 @@ require (
|
|||
github.com/yuin/goldmark v1.7.8
|
||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
|
||||
go.uber.org/mock v0.4.0
|
||||
golang.org/x/crypto v0.30.0
|
||||
golang.org/x/crypto v0.31.0
|
||||
golang.org/x/image v0.23.0
|
||||
golang.org/x/net v0.32.0
|
||||
golang.org/x/net v0.33.0
|
||||
golang.org/x/oauth2 v0.23.0
|
||||
golang.org/x/sync v0.10.0
|
||||
golang.org/x/sys v0.28.0
|
||||
golang.org/x/text v0.21.0
|
||||
golang.org/x/tools v0.28.0
|
||||
google.golang.org/grpc v1.68.0
|
||||
google.golang.org/protobuf v1.35.1
|
||||
google.golang.org/protobuf v1.36.0
|
||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
||||
gopkg.in/ini.v1 v1.67.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
|
@ -144,7 +144,7 @@ require (
|
|||
github.com/bits-and-blooms/bitset v1.13.0 // indirect
|
||||
github.com/blevesearch/bleve_index_api v1.1.12 // indirect
|
||||
github.com/blevesearch/geo v0.1.20 // indirect
|
||||
github.com/blevesearch/go-faiss v1.0.23 // indirect
|
||||
github.com/blevesearch/go-faiss v1.0.24 // indirect
|
||||
github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
|
||||
github.com/blevesearch/gtreap v0.1.1 // indirect
|
||||
github.com/blevesearch/mmap-go v1.0.4 // indirect
|
||||
|
@ -158,7 +158,7 @@ require (
|
|||
github.com/blevesearch/zapx/v13 v13.3.10 // indirect
|
||||
github.com/blevesearch/zapx/v14 v14.3.10 // indirect
|
||||
github.com/blevesearch/zapx/v15 v15.3.16 // indirect
|
||||
github.com/blevesearch/zapx/v16 v16.1.8 // indirect
|
||||
github.com/blevesearch/zapx/v16 v16.1.9-0.20241217210638-a0519e7caf3b // indirect
|
||||
github.com/boombuler/barcode v1.0.1 // indirect
|
||||
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
|
||||
github.com/caddyserver/zerossl v0.1.3 // indirect
|
||||
|
@ -300,4 +300,6 @@ replace github.com/nektos/act => code.forgejo.org/forgejo/act v1.22.0
|
|||
|
||||
replace github.com/mholt/archiver/v3 => code.forgejo.org/forgejo/archiver/v3 v3.5.1
|
||||
|
||||
replace github.com/goccy/go-json => github.com/grafana/go-json v0.0.0-20241115232854-f14426c40ff2
|
||||
replace github.com/goccy/go-json => github.com/grafana/go-json v0.0.0-20241210211703-a119ee5a0a3b
|
||||
|
||||
replace github.com/gliderlabs/ssh => code.forgejo.org/forgejo/ssh v0.0.0-20241211213324-5fc306ca0616
|
||||
|
|
36
go.sum
36
go.sum
|
@ -10,6 +10,8 @@ code.forgejo.org/forgejo/archiver/v3 v3.5.1 h1:UmmbA7D5550uf71SQjarmrn6yKwOGxtEj
|
|||
code.forgejo.org/forgejo/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
|
||||
code.forgejo.org/forgejo/reply v1.0.2 h1:dMhQCHV6/O3L5CLWNTol+dNzDAuyCK88z4J/lCdgFuQ=
|
||||
code.forgejo.org/forgejo/reply v1.0.2/go.mod h1:RyZUfzQLc+fuLIGjTSQWDAJWPiL4WtKXB/FifT5fM7U=
|
||||
code.forgejo.org/forgejo/ssh v0.0.0-20241211213324-5fc306ca0616 h1:kEZL84+02jY9RxXM4zHBWZ3Fml0B09cmP1LGkDsCfIA=
|
||||
code.forgejo.org/forgejo/ssh v0.0.0-20241211213324-5fc306ca0616/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
|
||||
code.forgejo.org/go-chi/binding v1.0.0 h1:EIDJtk9brK7WsT7rvS/D4cxX8XlnhY3LMy8ex1jeHu0=
|
||||
code.forgejo.org/go-chi/binding v1.0.0/go.mod h1:fWwqaHj0H1/KeCpBqdvKunflq8pYfciEHI5v3UUeE2E=
|
||||
code.forgejo.org/go-chi/cache v1.0.0 h1:akLfGxNlHcacmtutovNtYFSTMsbdcp5MGjAEsP4pxnE=
|
||||
|
@ -98,14 +100,14 @@ github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJR
|
|||
github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
|
||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4=
|
||||
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI=
|
||||
github.com/blevesearch/bleve/v2 v2.4.3 h1:XDYj+1prgX84L2Cf+V3ojrOPqXxy0qxyd2uLMmeuD+4=
|
||||
github.com/blevesearch/bleve/v2 v2.4.3/go.mod h1:hEPDPrbYw3vyrm5VOa36GyS4bHWuIf4Fflp7460QQXY=
|
||||
github.com/blevesearch/bleve/v2 v2.4.4 h1:RwwLGjUm54SwyyykbrZs4vc1qjzYic4ZnAnY9TwNl60=
|
||||
github.com/blevesearch/bleve/v2 v2.4.4/go.mod h1:fa2Eo6DP7JR+dMFpQe+WiZXINKSunh7WBtlDGbolKXk=
|
||||
github.com/blevesearch/bleve_index_api v1.1.12 h1:P4bw9/G/5rulOF7SJ9l4FsDoo7UFJ+5kexNy1RXfegY=
|
||||
github.com/blevesearch/bleve_index_api v1.1.12/go.mod h1:PbcwjIcRmjhGbkS/lJCpfgVSMROV6TRubGGAODaK1W8=
|
||||
github.com/blevesearch/geo v0.1.20 h1:paaSpu2Ewh/tn5DKn/FB5SzvH0EWupxHEIwbCk/QPqM=
|
||||
github.com/blevesearch/geo v0.1.20/go.mod h1:DVG2QjwHNMFmjo+ZgzrIq2sfCh6rIHzy9d9d0B59I6w=
|
||||
github.com/blevesearch/go-faiss v1.0.23 h1:Wmc5AFwDLKGl2L6mjLX1Da3vCL0EKa2uHHSorcIS1Uc=
|
||||
github.com/blevesearch/go-faiss v1.0.23/go.mod h1:OMGQwOaRRYxrmeNdMrXJPvVx8gBnvE5RYrr0BahNnkk=
|
||||
github.com/blevesearch/go-faiss v1.0.24 h1:K79IvKjoKHdi7FdiXEsAhxpMuns0x4fM0BO93bW5jLI=
|
||||
github.com/blevesearch/go-faiss v1.0.24/go.mod h1:OMGQwOaRRYxrmeNdMrXJPvVx8gBnvE5RYrr0BahNnkk=
|
||||
github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo=
|
||||
github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M=
|
||||
github.com/blevesearch/gtreap v0.1.1 h1:2JWigFrzDMR+42WGIN/V2p0cUvn4UP3C4Q5nmaZGW8Y=
|
||||
|
@ -132,8 +134,8 @@ github.com/blevesearch/zapx/v14 v14.3.10 h1:SG6xlsL+W6YjhX5N3aEiL/2tcWh3DO75Bnz7
|
|||
github.com/blevesearch/zapx/v14 v14.3.10/go.mod h1:qqyuR0u230jN1yMmE4FIAuCxmahRQEOehF78m6oTgns=
|
||||
github.com/blevesearch/zapx/v15 v15.3.16 h1:Ct3rv7FUJPfPk99TI/OofdC+Kpb4IdyfdMH48sb+FmE=
|
||||
github.com/blevesearch/zapx/v15 v15.3.16/go.mod h1:Turk/TNRKj9es7ZpKK95PS7f6D44Y7fAFy8F4LXQtGg=
|
||||
github.com/blevesearch/zapx/v16 v16.1.8 h1:Bxzpw6YQpFs7UjoCV1+RvDw6fmAT2GZxldwX8b3wVBM=
|
||||
github.com/blevesearch/zapx/v16 v16.1.8/go.mod h1:JqQlOqlRVaYDkpLIl3JnKql8u4zKTNlVEa3nLsi0Gn8=
|
||||
github.com/blevesearch/zapx/v16 v16.1.9-0.20241217210638-a0519e7caf3b h1:ju9Az5YgrzCeK3M1QwvZIpxYhChkXp7/L0RhDYsxXoE=
|
||||
github.com/blevesearch/zapx/v16 v16.1.9-0.20241217210638-a0519e7caf3b/go.mod h1:BlrYNpOu4BvVRslmIG+rLtKhmjIaRhIbG8sb9scGTwI=
|
||||
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
||||
github.com/boombuler/barcode v1.0.1 h1:NDBbPmhS+EqABEs5Kg3n/5ZNjy73Pz7SIV+KCeqyXcs=
|
||||
github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
||||
|
@ -225,8 +227,6 @@ github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/
|
|||
github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
||||
github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE=
|
||||
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
|
||||
github.com/go-ap/activitypub v0.0.0-20231114162308-e219254dc5c9 h1:j2TrkUG/NATGi/EQS+MvEoF79CxiRUmT16ErFroNcKI=
|
||||
github.com/go-ap/activitypub v0.0.0-20231114162308-e219254dc5c9/go.mod h1:cJ9Ye0ZNSMN7RzZDBRY3E+8M3Bpf/R1JX22Ir9yX6WI=
|
||||
github.com/go-ap/errors v0.0.0-20231003111023-183eef4b31b7 h1:I2nuhyVI/48VXoRCCZR2hYBgnSXa+EuDJf/VyX06TC0=
|
||||
|
@ -236,8 +236,8 @@ github.com/go-ap/jsonld v0.0.0-20221030091449-f2a191312c73/go.mod h1:jyveZeGw5La
|
|||
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
||||
github.com/go-chi/chi/v5 v5.0.1/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||
github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
|
||||
github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||
github.com/go-chi/chi/v5 v5.2.0 h1:Aj1EtB0qR2Rdo2dG4O94RIU35w2lvQSj6BRA4+qwFL0=
|
||||
github.com/go-chi/chi/v5 v5.2.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||
github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4=
|
||||
github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58=
|
||||
github.com/go-co-op/gocron v1.37.0 h1:ZYDJGtQ4OMhTLKOKMIch+/CY70Brbb1dGdooLEhh7b0=
|
||||
|
@ -383,8 +383,8 @@ github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kX
|
|||
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
|
||||
github.com/gorilla/sessions v1.4.0 h1:kpIYOp/oi6MG/p5PgxApU8srsSw9tuFbt46Lt7auzqQ=
|
||||
github.com/gorilla/sessions v1.4.0/go.mod h1:FLWm50oby91+hl7p/wRxDth9bWSuk0qVL2emc7lT5ik=
|
||||
github.com/grafana/go-json v0.0.0-20241115232854-f14426c40ff2 h1:8xGrYqQ1GM4aaMk7pNDfecBdL/VGhEbpvvGBoqO6BIY=
|
||||
github.com/grafana/go-json v0.0.0-20241115232854-f14426c40ff2/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
github.com/grafana/go-json v0.0.0-20241210211703-a119ee5a0a3b h1:3LHDTH25Xtrac5UJfFlFL/BsykD7VLFg7xk4vtkjtk8=
|
||||
github.com/grafana/go-json v0.0.0-20241210211703-a119ee5a0a3b/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
github.com/h2non/gock v1.2.0 h1:K6ol8rfrRkUOefooBC8elXoaNGYkpp7y2qcxGG6BzUE=
|
||||
github.com/h2non/gock v1.2.0/go.mod h1:tNhoxHYW2W42cYkYb1WqzdbYIieALC99kpYr7rH/BQk=
|
||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
|
||||
|
@ -735,8 +735,8 @@ golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2Uz
|
|||
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
||||
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
||||
golang.org/x/crypto v0.30.0 h1:RwoQn3GkWiMkzlX562cLB7OxWvjH1L8xutO2WoJcRoY=
|
||||
golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
|
||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
|
||||
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
|
||||
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
||||
|
@ -762,8 +762,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
|||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
|
||||
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
|
||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
|
||||
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -857,8 +857,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
|
|||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
||||
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ=
|
||||
google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
|
|
@ -37,6 +37,7 @@ type ActionRun struct {
|
|||
TriggerUser *user_model.User `xorm:"-"`
|
||||
ScheduleID int64
|
||||
Ref string `xorm:"index"` // the commit/tag/… that caused the run
|
||||
IsRefDeleted bool `xorm:"-"`
|
||||
CommitSHA string
|
||||
IsForkPullRequest bool // If this is triggered by a PR from a forked repository or an untrusted user, we need to check if it is approved and limit permissions when running the workflow.
|
||||
NeedApproval bool // may need approval if it's a fork pull request
|
||||
|
|
|
@ -137,7 +137,7 @@ func UpdateRunJob(ctx context.Context, job *ActionRunJob, cond builder.Cond, col
|
|||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
run.Status = aggregateJobStatus(jobs)
|
||||
run.Status = AggregateJobStatus(jobs)
|
||||
if run.Started.IsZero() && run.Status.IsRunning() {
|
||||
run.Started = timeutil.TimeStampNow()
|
||||
}
|
||||
|
@ -152,7 +152,7 @@ func UpdateRunJob(ctx context.Context, job *ActionRunJob, cond builder.Cond, col
|
|||
return affected, nil
|
||||
}
|
||||
|
||||
func aggregateJobStatus(jobs []*ActionRunJob) Status {
|
||||
func AggregateJobStatus(jobs []*ActionRunJob) Status {
|
||||
allDone := true
|
||||
allWaiting := true
|
||||
hasFailure := false
|
||||
|
|
|
@ -216,7 +216,7 @@ func CreateSource(ctx context.Context, source *Source) error {
|
|||
return ErrSourceAlreadyExist{source.Name}
|
||||
}
|
||||
// Synchronization is only available with LDAP for now
|
||||
if !source.IsLDAP() && !source.IsOAuth2() {
|
||||
if !source.IsLDAP() {
|
||||
source.IsSyncEnabled = false
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
package db // it's not db_test, because this file is for testing the private type halfCommitter
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -80,7 +80,7 @@ func Test_halfCommitter(t *testing.T) {
|
|||
testWithCommitter(mockCommitter, func(committer Committer) error {
|
||||
defer committer.Close()
|
||||
if true {
|
||||
return fmt.Errorf("error")
|
||||
return errors.New("error")
|
||||
}
|
||||
return committer.Commit()
|
||||
})
|
||||
|
@ -94,7 +94,7 @@ func Test_halfCommitter(t *testing.T) {
|
|||
testWithCommitter(mockCommitter, func(committer Committer) error {
|
||||
committer.Close()
|
||||
committer.Commit()
|
||||
return fmt.Errorf("error")
|
||||
return errors.New("error")
|
||||
})
|
||||
|
||||
mockCommitter.Assert(t)
|
||||
|
|
|
@ -413,6 +413,25 @@
|
|||
},
|
||||
"total_commits": 0
|
||||
}
|
||||
-
|
||||
id: 793
|
||||
title: "job output"
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
workflow_id: "test.yaml"
|
||||
index: 189
|
||||
trigger_user_id: 1
|
||||
ref: "refs/heads/master"
|
||||
commit_sha: "c2d72f548424103f01ee1dc02889c1e2bff816b0"
|
||||
event: "push"
|
||||
is_fork_pull_request: 0
|
||||
status: 1
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
created: 1683636108
|
||||
updated: 1683636626
|
||||
need_approval: 0
|
||||
approved_by: 0
|
||||
-
|
||||
id: 891
|
||||
title: "update actions"
|
||||
|
|
|
@ -26,6 +26,49 @@
|
|||
status: 1
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
-
|
||||
id: 194
|
||||
run_id: 793
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
commit_sha: c2d72f548424103f01ee1dc02889c1e2bff816b0
|
||||
is_fork_pull_request: 0
|
||||
name: job1 (1)
|
||||
attempt: 1
|
||||
job_id: job1
|
||||
task_id: 49
|
||||
status: 1
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
-
|
||||
id: 195
|
||||
run_id: 793
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
commit_sha: c2d72f548424103f01ee1dc02889c1e2bff816b0
|
||||
is_fork_pull_request: 0
|
||||
name: job1 (2)
|
||||
attempt: 1
|
||||
job_id: job1
|
||||
task_id: 50
|
||||
status: 1
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
-
|
||||
id: 196
|
||||
run_id: 793
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
commit_sha: c2d72f548424103f01ee1dc02889c1e2bff816b0
|
||||
is_fork_pull_request: 0
|
||||
name: job2
|
||||
attempt: 1
|
||||
job_id: job2
|
||||
needs: [job1]
|
||||
task_id: 51
|
||||
status: 5
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
-
|
||||
id: 292
|
||||
run_id: 891
|
||||
|
|
|
@ -57,3 +57,63 @@
|
|||
log_length: 707
|
||||
log_size: 90179
|
||||
log_expired: 0
|
||||
-
|
||||
id: 49
|
||||
job_id: 194
|
||||
attempt: 1
|
||||
runner_id: 1
|
||||
status: 1 # success
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
commit_sha: c2d72f548424103f01ee1dc02889c1e2bff816b0
|
||||
is_fork_pull_request: 0
|
||||
token_hash: b8d3962425466b6709b9ac51446f93260c54afe8e7b6d3686e34f991fb8a8953822b0deed86fe41a103f34bc48dbc4784220
|
||||
token_salt: ffffffffff
|
||||
token_last_eight: ffffffff
|
||||
log_filename: artifact-test2/2f/47.log
|
||||
log_in_storage: 1
|
||||
log_length: 707
|
||||
log_size: 90179
|
||||
log_expired: 0
|
||||
-
|
||||
id: 50
|
||||
job_id: 195
|
||||
attempt: 1
|
||||
runner_id: 1
|
||||
status: 1 # success
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
commit_sha: c2d72f548424103f01ee1dc02889c1e2bff816b0
|
||||
is_fork_pull_request: 0
|
||||
token_hash: b8d3962425466b6709b9ac51446f93260c54afe8e7b6d3686e34f991fb8a8953822b0deed86fe41a103f34bc48dbc4784221
|
||||
token_salt: ffffffffff
|
||||
token_last_eight: ffffffff
|
||||
log_filename: artifact-test2/2f/47.log
|
||||
log_in_storage: 1
|
||||
log_length: 707
|
||||
log_size: 90179
|
||||
log_expired: 0
|
||||
-
|
||||
id: 51
|
||||
job_id: 196
|
||||
attempt: 1
|
||||
runner_id: 1
|
||||
status: 6 # running
|
||||
started: 1683636528
|
||||
stopped: 1683636626
|
||||
repo_id: 4
|
||||
owner_id: 1
|
||||
commit_sha: c2d72f548424103f01ee1dc02889c1e2bff816b0
|
||||
is_fork_pull_request: 0
|
||||
token_hash: b8d3962425466b6709b9ac51446f93260c54afe8e7b6d3686e34f991fb8a8953822b0deed86fe41a103f34bc48dbc4784222
|
||||
token_salt: ffffffffff
|
||||
token_last_eight: ffffffff
|
||||
log_filename: artifact-test2/2f/47.log
|
||||
log_in_storage: 1
|
||||
log_length: 707
|
||||
log_size: 90179
|
||||
log_expired: 0
|
||||
|
|
20
models/fixtures/action_task_output.yml
Normal file
20
models/fixtures/action_task_output.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
-
|
||||
id: 1
|
||||
task_id: 49
|
||||
output_key: output_a
|
||||
output_value: abc
|
||||
-
|
||||
id: 2
|
||||
task_id: 49
|
||||
output_key: output_b
|
||||
output_value: ''
|
||||
-
|
||||
id: 3
|
||||
task_id: 50
|
||||
output_key: output_a
|
||||
output_value: ''
|
||||
-
|
||||
id: 4
|
||||
task_id: 50
|
||||
output_key: output_b
|
||||
output_value: bbb
|
|
@ -36,6 +36,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578000
|
||||
|
||||
-
|
||||
id: 2
|
||||
|
@ -74,6 +75,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578010
|
||||
|
||||
-
|
||||
id: 3
|
||||
|
@ -111,6 +113,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578020
|
||||
|
||||
-
|
||||
id: 4
|
||||
|
@ -148,6 +151,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578030
|
||||
|
||||
-
|
||||
id: 5
|
||||
|
@ -185,6 +189,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578040
|
||||
|
||||
-
|
||||
id: 6
|
||||
|
@ -222,6 +227,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578050
|
||||
|
||||
-
|
||||
id: 7
|
||||
|
@ -259,6 +265,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578060
|
||||
|
||||
-
|
||||
id: 8
|
||||
|
@ -296,6 +303,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578070
|
||||
|
||||
-
|
||||
id: 9
|
||||
|
@ -333,7 +341,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1730468968
|
||||
created_unix: 1672578080
|
||||
|
||||
-
|
||||
id: 10
|
||||
|
@ -371,6 +379,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578090
|
||||
|
||||
-
|
||||
id: 11
|
||||
|
@ -408,6 +417,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578100
|
||||
|
||||
-
|
||||
id: 12
|
||||
|
@ -445,6 +455,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578110
|
||||
|
||||
-
|
||||
id: 13
|
||||
|
@ -482,6 +493,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578120
|
||||
|
||||
-
|
||||
id: 14
|
||||
|
@ -519,6 +531,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578130
|
||||
|
||||
-
|
||||
id: 15
|
||||
|
@ -556,6 +569,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578140
|
||||
|
||||
-
|
||||
id: 16
|
||||
|
@ -593,6 +607,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578150
|
||||
|
||||
-
|
||||
id: 17
|
||||
|
@ -630,6 +645,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578160
|
||||
|
||||
-
|
||||
id: 18
|
||||
|
@ -667,6 +683,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578170
|
||||
|
||||
-
|
||||
id: 19
|
||||
|
@ -704,6 +721,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578180
|
||||
|
||||
-
|
||||
id: 20
|
||||
|
@ -741,6 +759,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578190
|
||||
|
||||
-
|
||||
id: 21
|
||||
|
@ -778,6 +797,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578200
|
||||
|
||||
-
|
||||
id: 22
|
||||
|
@ -815,6 +835,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578210
|
||||
|
||||
-
|
||||
id: 23
|
||||
|
@ -852,6 +873,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578220
|
||||
|
||||
-
|
||||
id: 24
|
||||
|
@ -889,6 +911,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578230
|
||||
|
||||
-
|
||||
id: 25
|
||||
|
@ -926,6 +949,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578240
|
||||
|
||||
-
|
||||
id: 26
|
||||
|
@ -963,6 +987,7 @@
|
|||
repo_admin_change_team_access: true
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578250
|
||||
|
||||
-
|
||||
id: 27
|
||||
|
@ -1000,6 +1025,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578260
|
||||
|
||||
-
|
||||
id: 28
|
||||
|
@ -1037,6 +1063,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578270
|
||||
|
||||
-
|
||||
id: 29
|
||||
|
@ -1074,6 +1101,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578280
|
||||
|
||||
-
|
||||
id: 30
|
||||
|
@ -1111,6 +1139,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578290
|
||||
|
||||
-
|
||||
id: 31
|
||||
|
@ -1148,6 +1177,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578300
|
||||
|
||||
-
|
||||
id: 32
|
||||
|
@ -1185,6 +1215,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578310
|
||||
|
||||
-
|
||||
id: 33
|
||||
|
@ -1222,6 +1253,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578320
|
||||
|
||||
-
|
||||
id: 34
|
||||
|
@ -1260,6 +1292,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578330
|
||||
|
||||
-
|
||||
id: 35
|
||||
|
@ -1297,6 +1330,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578340
|
||||
|
||||
-
|
||||
id: 36
|
||||
|
@ -1334,6 +1368,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578350
|
||||
|
||||
-
|
||||
id: 37
|
||||
|
@ -1371,6 +1406,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578360
|
||||
|
||||
-
|
||||
id: 38
|
||||
|
@ -1408,6 +1444,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578370
|
||||
|
||||
-
|
||||
id: 39
|
||||
|
@ -1445,6 +1482,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578380
|
||||
|
||||
-
|
||||
id: 40
|
||||
|
@ -1482,6 +1520,7 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578390
|
||||
|
||||
-
|
||||
id: 41
|
||||
|
@ -1519,3 +1558,4 @@
|
|||
repo_admin_change_team_access: false
|
||||
theme: ""
|
||||
keep_activity_private: false
|
||||
created_unix: 1672578400
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
"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"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/timeutil"
|
||||
|
@ -162,9 +163,22 @@ func GetBranch(ctx context.Context, repoID int64, branchName string) (*Branch, e
|
|||
return &branch, nil
|
||||
}
|
||||
|
||||
func GetBranches(ctx context.Context, repoID int64, branchNames []string) ([]*Branch, error) {
|
||||
func GetBranches(ctx context.Context, repoID int64, branchNames []string, includeDeleted bool) ([]*Branch, error) {
|
||||
branches := make([]*Branch, 0, len(branchNames))
|
||||
return branches, db.GetEngine(ctx).Where("repo_id=?", repoID).In("name", branchNames).Find(&branches)
|
||||
|
||||
sess := db.GetEngine(ctx).Where("repo_id=?", repoID).In("name", branchNames)
|
||||
if !includeDeleted {
|
||||
sess.And("is_deleted=?", false)
|
||||
}
|
||||
return branches, sess.Find(&branches)
|
||||
}
|
||||
|
||||
func BranchesToNamesSet(branches []*Branch) container.Set[string] {
|
||||
names := make(container.Set[string], len(branches))
|
||||
for _, branch := range branches {
|
||||
names.Add(branch.Name)
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
||||
func AddBranches(ctx context.Context, branches []*Branch) error {
|
||||
|
@ -417,15 +431,18 @@ func FindRecentlyPushedNewBranches(ctx context.Context, repoID, userID int64, ex
|
|||
branches := make(BranchList, 0, 2)
|
||||
subQuery := builder.Select("head_branch").From("pull_request").
|
||||
InnerJoin("issue", "issue.id = pull_request.issue_id").
|
||||
Where(builder.Eq{
|
||||
"pull_request.head_repo_id": repoID,
|
||||
"issue.is_closed": false,
|
||||
})
|
||||
Where(builder.And(
|
||||
builder.Eq{"pull_request.head_repo_id": repoID},
|
||||
builder.Or(
|
||||
builder.Eq{"pull_request.has_merged": true},
|
||||
builder.Eq{"issue.is_closed": false},
|
||||
),
|
||||
))
|
||||
err := db.GetEngine(ctx).
|
||||
Where("pusher_id=? AND is_deleted=?", userID, false).
|
||||
And("name <> ?", excludeBranchName).
|
||||
And("repo_id = ?", repoID).
|
||||
And("commit_time >= ?", time.Now().Add(-time.Hour*6).Unix()).
|
||||
And("commit_time >= ?", time.Now().Add(-time.Minute*30).Unix()).
|
||||
NotIn("name", subQuery).
|
||||
OrderBy("branch.commit_time DESC").
|
||||
Limit(2).
|
||||
|
|
|
@ -160,34 +160,12 @@ func UpdateExternalUserByExternalID(ctx context.Context, external *ExternalLogin
|
|||
return err
|
||||
}
|
||||
|
||||
// EnsureLinkExternalToUser link the external user to the user
|
||||
func EnsureLinkExternalToUser(ctx context.Context, external *ExternalLoginUser) error {
|
||||
has, err := db.Exist[ExternalLoginUser](ctx, builder.Eq{
|
||||
"external_id": external.ExternalID,
|
||||
"login_source_id": external.LoginSourceID,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if has {
|
||||
_, err = db.GetEngine(ctx).Where("external_id=? AND login_source_id=?", external.ExternalID, external.LoginSourceID).AllCols().Update(external)
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = db.GetEngine(ctx).Insert(external)
|
||||
return err
|
||||
}
|
||||
|
||||
// FindExternalUserOptions represents an options to find external users
|
||||
type FindExternalUserOptions struct {
|
||||
db.ListOptions
|
||||
Provider string
|
||||
UserID int64
|
||||
LoginSourceID int64
|
||||
HasRefreshToken bool
|
||||
Expired bool
|
||||
OrderBy string
|
||||
Provider string
|
||||
UserID int64
|
||||
OrderBy string
|
||||
}
|
||||
|
||||
func (opts FindExternalUserOptions) ToConds() builder.Cond {
|
||||
|
@ -198,22 +176,9 @@ func (opts FindExternalUserOptions) ToConds() builder.Cond {
|
|||
if opts.UserID > 0 {
|
||||
cond = cond.And(builder.Eq{"user_id": opts.UserID})
|
||||
}
|
||||
if opts.Expired {
|
||||
cond = cond.And(builder.Lt{"expires_at": time.Now()})
|
||||
}
|
||||
if opts.HasRefreshToken {
|
||||
cond = cond.And(builder.Neq{"refresh_token": ""})
|
||||
}
|
||||
if opts.LoginSourceID != 0 {
|
||||
cond = cond.And(builder.Eq{"login_source_id": opts.LoginSourceID})
|
||||
}
|
||||
return cond
|
||||
}
|
||||
|
||||
func (opts FindExternalUserOptions) ToOrders() string {
|
||||
return opts.OrderBy
|
||||
}
|
||||
|
||||
func IterateExternalLogin(ctx context.Context, opts FindExternalUserOptions, f func(ctx context.Context, u *ExternalLoginUser) error) error {
|
||||
return db.Iterate(ctx, opts.ToConds(), f)
|
||||
}
|
||||
|
|
|
@ -24,8 +24,8 @@ type SearchUserOptions struct {
|
|||
Keyword string
|
||||
Type UserType
|
||||
UID int64
|
||||
LoginName string // this option should be used only for admin user
|
||||
SourceID int64 // this option should be used only for admin user
|
||||
LoginName string // this option should be used only for admin user
|
||||
SourceID optional.Option[int64] // this option should be used only for admin user
|
||||
OrderBy db.SearchOrderBy
|
||||
Visible []structs.VisibleType
|
||||
Actor *User // The user doing the search
|
||||
|
@ -98,8 +98,8 @@ func (opts *SearchUserOptions) toSearchQueryBase(ctx context.Context) *xorm.Sess
|
|||
cond = cond.And(builder.Eq{"id": opts.UID})
|
||||
}
|
||||
|
||||
if opts.SourceID > 0 {
|
||||
cond = cond.And(builder.Eq{"login_source": opts.SourceID})
|
||||
if opts.SourceID.Has() {
|
||||
cond = cond.And(builder.Eq{"login_source": opts.SourceID.Value()})
|
||||
}
|
||||
if opts.LoginName != "" {
|
||||
cond = cond.And(builder.Eq{"login_name": opts.LoginName})
|
||||
|
|
|
@ -771,11 +771,11 @@ func TestGetInactiveUsers(t *testing.T) {
|
|||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
// all inactive users
|
||||
// user1's createdunix is 1730468968
|
||||
// user1's createdunix is 1672578000
|
||||
users, err := user_model.GetInactiveUsers(db.DefaultContext, 0)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, users, 1)
|
||||
interval := time.Now().Unix() - 1730468968 + 3600*24
|
||||
interval := time.Now().Unix() - 1672578000 + 3600*24
|
||||
users, err = user_model.GetInactiveUsers(db.DefaultContext, time.Duration(interval*int64(time.Second)))
|
||||
require.NoError(t, err)
|
||||
require.Empty(t, users)
|
||||
|
|
|
@ -72,7 +72,10 @@ func (c *HTTPClient) batch(ctx context.Context, operation string, objects []Poin
|
|||
|
||||
url := fmt.Sprintf("%s/objects/batch", c.endpoint)
|
||||
|
||||
request := &BatchRequest{operation, c.transferNames(), nil, objects}
|
||||
// `ref` is an "optional object describing the server ref that the objects belong to"
|
||||
// but some (incorrect) lfs servers require it, so maybe adding an empty ref here doesn't break the correct ones.
|
||||
// https://github.com/git-lfs/git-lfs/blob/a32a02b44bf8a511aa14f047627c49e1a7fd5021/docs/api/batch.md?plain=1#L37
|
||||
request := &BatchRequest{operation, c.transferNames(), &Reference{}, objects}
|
||||
payload := new(bytes.Buffer)
|
||||
err := json.NewEncoder(payload).Encode(request)
|
||||
if err != nil {
|
||||
|
@ -236,6 +239,7 @@ func createRequest(ctx context.Context, method, url string, headers map[string]s
|
|||
req.Header.Set(key, value)
|
||||
}
|
||||
req.Header.Set("Accept", AcceptHeader)
|
||||
req.Header.Set("User-Agent", UserAgentHeader)
|
||||
|
||||
return req, nil
|
||||
}
|
||||
|
|
|
@ -14,8 +14,12 @@ import (
|
|||
const (
|
||||
// MediaType contains the media type for LFS server requests
|
||||
MediaType = "application/vnd.git-lfs+json"
|
||||
// Some LFS servers offer content with other types, so fallback to '*/*' if application/vnd.git-lfs+json cannot be served
|
||||
// AcceptHeader Some LFS servers offer content with other types, so fallback to '*/*' if application/vnd.git-lfs+json cannot be served
|
||||
AcceptHeader = "application/vnd.git-lfs+json;q=0.9, */*;q=0.8"
|
||||
// UserAgentHeader Add User-Agent for gitea's self-implemented lfs client,
|
||||
// and the version is consistent with the latest version of git lfs can be avoided incompatibilities.
|
||||
// Some lfs servers will check this
|
||||
UserAgentHeader = "git-lfs/3.6.0 (Forgejo)"
|
||||
)
|
||||
|
||||
// BatchRequest contains multiple requests processed in one batch operation.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !go1.24
|
||||
|
||||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
|
|
38
modules/log/groutinelabel_go1.24.go
Normal file
38
modules/log/groutinelabel_go1.24.go
Normal file
|
@ -0,0 +1,38 @@
|
|||
//go:build go1.24
|
||||
|
||||
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package log
|
||||
|
||||
import "unsafe"
|
||||
|
||||
//go:linkname runtime_getProfLabel runtime/pprof.runtime_getProfLabel
|
||||
func runtime_getProfLabel() unsafe.Pointer //nolint
|
||||
|
||||
// Struct definitions copied from: https://github.com/golang/go/blob/ca63101df47a4467bc80faa654fc19d68e583952/src/runtime/pprof/label.go
|
||||
type label struct {
|
||||
key string
|
||||
value string
|
||||
}
|
||||
|
||||
type LabelSet struct {
|
||||
list []label
|
||||
}
|
||||
|
||||
type labelMap struct {
|
||||
LabelSet
|
||||
}
|
||||
|
||||
func getGoroutineLabels() map[string]string {
|
||||
l := (*labelMap)(runtime_getProfLabel())
|
||||
if l == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
m := make(map[string]string, len(l.list))
|
||||
for _, label := range l.list {
|
||||
m[label.key] = label.value
|
||||
}
|
||||
return m
|
||||
}
|
|
@ -11,7 +11,6 @@ import (
|
|||
"crypto/x509"
|
||||
"encoding/pem"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"os"
|
||||
|
@ -33,10 +32,6 @@ import (
|
|||
gossh "golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
type contextKey string
|
||||
|
||||
const giteaKeyID = contextKey("gitea-key-id")
|
||||
|
||||
func getExitStatusFromError(err error) int {
|
||||
if err == nil {
|
||||
return 0
|
||||
|
@ -62,7 +57,7 @@ func getExitStatusFromError(err error) int {
|
|||
}
|
||||
|
||||
func sessionHandler(session ssh.Session) {
|
||||
keyID := fmt.Sprintf("%d", session.Context().Value(giteaKeyID).(int64))
|
||||
keyID := session.ConnPermissions().Extensions["forgejo-key-id"]
|
||||
|
||||
command := session.RawCommand()
|
||||
|
||||
|
@ -238,7 +233,10 @@ func publicKeyHandler(ctx ssh.Context, key ssh.PublicKey) bool {
|
|||
if log.IsDebug() { // <- FingerprintSHA256 is kinda expensive so only calculate it if necessary
|
||||
log.Debug("Successfully authenticated: %s Certificate Fingerprint: %s Principal: %s", ctx.RemoteAddr(), gossh.FingerprintSHA256(key), principal)
|
||||
}
|
||||
ctx.SetValue(giteaKeyID, pkey.ID)
|
||||
if ctx.Permissions().Extensions == nil {
|
||||
ctx.Permissions().Extensions = map[string]string{}
|
||||
}
|
||||
ctx.Permissions().Extensions["forgejo-key-id"] = strconv.FormatInt(pkey.ID, 10)
|
||||
|
||||
return true
|
||||
}
|
||||
|
@ -266,7 +264,10 @@ func publicKeyHandler(ctx ssh.Context, key ssh.PublicKey) bool {
|
|||
if log.IsDebug() { // <- FingerprintSHA256 is kinda expensive so only calculate it if necessary
|
||||
log.Debug("Successfully authenticated: %s Public Key Fingerprint: %s", ctx.RemoteAddr(), gossh.FingerprintSHA256(key))
|
||||
}
|
||||
ctx.SetValue(giteaKeyID, pkey.ID)
|
||||
if ctx.Permissions().Extensions == nil {
|
||||
ctx.Permissions().Extensions = map[string]string{}
|
||||
}
|
||||
ctx.Permissions().Extensions["forgejo-key-id"] = strconv.FormatInt(pkey.ID, 10)
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -290,6 +290,16 @@ type CreateBranchRepoOption struct {
|
|||
OldRefName string `json:"old_ref_name" binding:"GitRefName;MaxSize(100)"`
|
||||
}
|
||||
|
||||
// UpdateBranchRepoOption options when updating a branch in a repository
|
||||
// swagger:model
|
||||
type UpdateBranchRepoOption struct {
|
||||
// New branch name
|
||||
//
|
||||
// required: true
|
||||
// unique: true
|
||||
Name string `json:"name" binding:"Required;GitRefName;MaxSize(100)"`
|
||||
}
|
||||
|
||||
// TransferRepoOption options when transfer a repository's ownership
|
||||
// swagger:model
|
||||
type TransferRepoOption struct {
|
||||
|
|
|
@ -1017,7 +1017,7 @@ commit.revert-header = إرجاع: %s
|
|||
editor.file_already_exists = يوجد فعلا في هذا المستودع ملف باسم "%s".
|
||||
settings.web_hook_name_matrix = متركس
|
||||
editor.filename_cannot_be_empty = لا يمكن ترك اسم الملف فارغا.
|
||||
editor.add_tmpl = أضف '<filename>'
|
||||
editor.add_tmpl = أضف '<%s>'
|
||||
editor.new_branch_name_desc = اسم الفرع الجديد…
|
||||
release = إصدار
|
||||
editor.delete_this_file = احذف الملف
|
||||
|
@ -1990,4 +1990,4 @@ branch_kind = البحث ضمن الفروع...
|
|||
no_results = لا توجد نتائج مطابقة.
|
||||
issue_kind = البحث ضمن الأعطال...
|
||||
pull_kind = البحث ضمن طلبات السحب...
|
||||
keyword_search_unavailable = البحث من خلال الكلمات المفتاحية ليس متوفر حالياً. رجاءاً تواصل مع مشرف الموقع.
|
||||
keyword_search_unavailable = البحث من خلال الكلمات المفتاحية ليس متوفر حالياً. رجاءاً تواصل مع مشرف الموقع.
|
||||
|
|
|
@ -831,7 +831,8 @@ file_too_large = Файлът е твърде голям, за да бъде п
|
|||
commits = Подавания
|
||||
commit = Подаване
|
||||
editor.commit_changes = Подаване на промените
|
||||
editor.add_tmpl = Добавяне на "<име на файла>"
|
||||
editor.add_tmpl = Добавяне на "<%s>"
|
||||
editor.add_tmpl.filename = име на файла
|
||||
editor.add = Добавяне на %s
|
||||
editor.delete = Изтриване на %s
|
||||
editor.update = Обновяване на %s
|
||||
|
@ -1729,4 +1730,4 @@ eib = ЕиБ
|
|||
|
||||
|
||||
[translation_meta]
|
||||
test = окей
|
||||
test = окей
|
||||
|
|
|
@ -165,6 +165,7 @@ new_org.title = Nová organizace
|
|||
new_repo.link = Nový repozitář
|
||||
new_migrate.link = Nová migrace
|
||||
new_org.link = Nová organizace
|
||||
copy_path = Kopírovat cestu
|
||||
|
||||
[aria]
|
||||
navbar=Navigační lišta
|
||||
|
@ -1351,7 +1352,7 @@ editor.or=nebo
|
|||
editor.cancel_lower=Zrušit
|
||||
editor.commit_signed_changes=Odeslat podepsané změny
|
||||
editor.commit_changes=Odeslat změny
|
||||
editor.add_tmpl=Přidán „<filename>“
|
||||
editor.add_tmpl=Přidán „<%s>“
|
||||
editor.add=Přidat %s
|
||||
editor.update=Aktualizovat %s
|
||||
editor.delete=Odstranit %s
|
||||
|
@ -4002,4 +4003,4 @@ actions.write = <b>Zapisovat:</b> Ručně spouštět, restartovat, rušit nebo s
|
|||
ext_wiki = Přístup k odkazu v externí wiki. Oprávnění jsou spravována externě.
|
||||
code.read = <b>Číst:</b> Přístup a klonování kódu v repozitáři.
|
||||
issues.read = <b>Číst:</b> Číst a vytvářet problémy a komentáře.
|
||||
ext_issues = Přístup k odkazu v externím sledovacím systému problémů. Oprávnění jsou spravována externě.
|
||||
ext_issues = Přístup k odkazu v externím sledovacím systému problémů. Oprávnění jsou spravována externě.
|
||||
|
|
|
@ -166,6 +166,7 @@ new_org.title = Neue Organisation
|
|||
new_repo.link = Neues Repository
|
||||
new_migrate.link = Neue Migration
|
||||
new_org.link = Neue Organisation
|
||||
copy_path = Pfad kopieren
|
||||
|
||||
[aria]
|
||||
navbar=Navigationsleiste
|
||||
|
@ -1349,7 +1350,7 @@ editor.or=oder
|
|||
editor.cancel_lower=Abbrechen
|
||||
editor.commit_signed_changes=Committe signierte Änderungen
|
||||
editor.commit_changes=Änderungen committen
|
||||
editor.add_tmpl=„<filename>“ hinzufügen
|
||||
editor.add_tmpl=„<%s>“ hinzufügen
|
||||
editor.add=%s hinzugefügt
|
||||
editor.update=%s aktualisiert
|
||||
editor.delete=%s gelöscht
|
||||
|
@ -4006,4 +4007,4 @@ actions.read = <b>Lesen:</b> Integrierte CI/CD-Pipelines und ihre Logs betrachte
|
|||
actions.write = <b>Schreiben:</b> Ausstehende CI/CD-Pipelines manuell auslösen, neustarten, abbrechen oder genehmigen.
|
||||
ext_issues = Zugriff auf den Link zu einem externen Issue-Tracker. Die Berechtigungen werden extern verwaltet.
|
||||
ext_wiki = Zugriff auf den Link zu einem externen Wiki. Die Berechtigungen werden extern verwaltet.
|
||||
pulls.write = <b>Schreiben:</b> Pull-Requests schließen und Metadaten wie Labels, Meilensteine, Zuweisungen, Fälligkeitsdaten und Abhängigkeiten verwalten.
|
||||
pulls.write = <b>Schreiben:</b> Pull-Requests schließen und Metadaten wie Labels, Meilensteine, Zuweisungen, Fälligkeitsdaten und Abhängigkeiten verwalten.
|
||||
|
|
|
@ -1340,7 +1340,7 @@ editor.or=ή
|
|||
editor.cancel_lower=Ακύρωση
|
||||
editor.commit_signed_changes=Υποβολή υπογεγραμμένων αλλαγών
|
||||
editor.commit_changes=Υποβολή αλλαγών
|
||||
editor.add_tmpl=Προσθήκη «<filename>»
|
||||
editor.add_tmpl=Προσθήκη «<%s>»
|
||||
editor.add=Προσθήκη %s
|
||||
editor.update=Ενημέρωση %s
|
||||
editor.delete=Διαγραφή %s
|
||||
|
@ -3945,4 +3945,4 @@ filepreview.lines = Γραμμές %[1]d έως %[2]d στο αρχείο %[3]s
|
|||
filepreview.truncated = Η προεπισκόπηση έχει περικοπεί
|
||||
|
||||
[translation_meta]
|
||||
test = ok
|
||||
test = ok
|
||||
|
|
|
@ -823,7 +823,7 @@ manage_emails = Manage email addresses
|
|||
manage_themes = Default theme
|
||||
manage_openid = OpenID addresses
|
||||
email_desc = Your primary email address will be used for notifications, password recovery and, provided that it is not hidden, web-based Git operations.
|
||||
theme_desc = This will be your default theme across the site.
|
||||
theme_desc = This theme will be used for the web interface when you are logged in.
|
||||
primary = Primary
|
||||
activated = Activated
|
||||
requires_activation = Requires activation
|
||||
|
@ -1052,7 +1052,7 @@ admin.update_flags = Update flags
|
|||
admin.failed_to_replace_flags = Failed to replace repository flags
|
||||
admin.flags_replaced = Repository flags replaced
|
||||
|
||||
new_repo_helper = A repository contains all project files, including revision history. Already hosting one elsewhere? <a href="%s">Migrate repository.</a>
|
||||
new_repo_helper = A repository contains all project files, including revision history. Already hosting one elsewhere? <a href="%s">Migrate repository</a>.
|
||||
owner = Owner
|
||||
owner_helper = Some organizations may not show up in the dropdown due to a maximum repository count limit.
|
||||
repo_name = Repository name
|
||||
|
@ -1093,7 +1093,7 @@ issue_labels = Labels
|
|||
issue_labels_helper = Select a label set
|
||||
license = License
|
||||
license_helper = Select a license file
|
||||
license_helper_desc = A license governs what others can and can't do with your code. Not sure which one is right for your project? See <a target="_blank" rel="noopener noreferrer" href="%s">Choose a license.</a>
|
||||
license_helper_desc = A license governs what others can and can't do with your code. Not sure which one is right for your project? See <a target="_blank" rel="noopener noreferrer" href="%s">Choose a license</a>.
|
||||
object_format = Object format
|
||||
object_format_helper = Object format of the repository. Cannot be changed later. SHA1 is the most compatible.
|
||||
readme = README
|
||||
|
@ -1370,7 +1370,8 @@ editor.or = or
|
|||
editor.cancel_lower = Cancel
|
||||
editor.commit_signed_changes = Commit signed changes
|
||||
editor.commit_changes = Commit changes
|
||||
editor.add_tmpl = Add "<filename>"
|
||||
editor.add_tmpl = Add "<%s>"
|
||||
editor.add_tmpl.filename = filename
|
||||
editor.add = Add %s
|
||||
editor.update = Update %s
|
||||
editor.delete = Delete %s
|
||||
|
@ -2582,12 +2583,12 @@ settings.archive.text = Archiving the repo will make it entirely read-only. It w
|
|||
settings.archive.success = The repo was successfully archived.
|
||||
settings.archive.error = An error occurred while trying to archive the repo. See the log for more details.
|
||||
settings.archive.error_ismirror = You cannot archive a mirrored repo.
|
||||
settings.archive.branchsettings_unavailable = Branch settings are not available if the repo is archived.
|
||||
settings.archive.tagsettings_unavailable = Tag settings are not available if the repo is archived.
|
||||
settings.archive.mirrors_unavailable = Mirrors are not available if the repo is archived.
|
||||
settings.archive.branchsettings_unavailable = Branch settings are not available in archived repos.
|
||||
settings.archive.tagsettings_unavailable = Tag settings are not available in archived repos.
|
||||
settings.archive.mirrors_unavailable = Mirrors are not available in archived repos.
|
||||
settings.unarchive.button = Unarchive repo
|
||||
settings.unarchive.header = Unarchive this repo
|
||||
settings.unarchive.text = Unarchiving the repo will restore its ability to receive commits and pushes, as well as new issues and pull-requests.
|
||||
settings.unarchive.text = Unarchiving the repo will restore its ability to receive commits and pushes, as well as new issues and pull requests.
|
||||
settings.unarchive.success = The repo was successfully unarchived.
|
||||
settings.unarchive.error = An error occurred while trying to unarchive the repo. See the log for more details.
|
||||
settings.update_avatar_success = The repository avatar has been updated.
|
||||
|
@ -3494,7 +3495,7 @@ self_check.no_problem_found = No problem found yet.
|
|||
self_check.database_collation_mismatch = Expect database to use collation: %s
|
||||
self_check.database_collation_case_insensitive = Database is using a collation %s, which is an insensitive collation. Although Forgejo could work with it, there might be some rare cases which don't work as expected.
|
||||
self_check.database_inconsistent_collation_columns = Database is using collation %s, but these columns are using mismatched collations. It might cause some unexpected problems.
|
||||
self_check.database_fix_mysql = For MySQL/MariaDB users, you could use the "gitea doctor convert" command to fix the collation problems, or you could also fix the problem by "ALTER ... COLLATE ..." SQLs manually.
|
||||
self_check.database_fix_mysql = For MySQL/MariaDB users, you could use the "forgejo doctor convert" command to fix the collation problems, or you could also fix the problem by "ALTER ... COLLATE ..." SQLs manually.
|
||||
|
||||
[action]
|
||||
create_repo = created repository <a href="%s">%s</a>
|
||||
|
@ -3628,7 +3629,7 @@ alpine.registry = Setup this registry by adding the url in your <code>/etc/apk/r
|
|||
alpine.registry.key = Download the registry public RSA key into the <code>/etc/apk/keys/</code> folder to verify the index signature:
|
||||
alpine.registry.info = Choose $branch and $repository from the list below.
|
||||
alpine.install = To install the package, run the following command:
|
||||
alpine.repository = Repository Info
|
||||
alpine.repository = Repository info
|
||||
alpine.repository.branches = Branches
|
||||
alpine.repository.repositories = Repositories
|
||||
alpine.repository.architectures = Architectures
|
||||
|
@ -3637,7 +3638,7 @@ arch.pacman.repo.multi = %s has the same version in different distributions.
|
|||
arch.pacman.repo.multi.item = Configuration for %s
|
||||
arch.pacman.conf = Add server with related distribution and architecture to <code>/etc/pacman.conf</code> :
|
||||
arch.pacman.sync = Sync package with pacman:
|
||||
arch.version.properties = Version Properties
|
||||
arch.version.properties = Version properties
|
||||
arch.version.description = Description
|
||||
arch.version.provides = Provides
|
||||
arch.version.groups = Group
|
||||
|
@ -3655,18 +3656,19 @@ chef.install = To install the package, run the following command:
|
|||
composer.registry = Setup this registry in your <code>~/.composer/config.json</code> file:
|
||||
composer.install = To install the package using Composer, run the following command:
|
||||
composer.dependencies = Dependencies
|
||||
composer.dependencies.development = Development Dependencies
|
||||
composer.dependencies.development = Development dependencies
|
||||
conan.details.repository = Repository
|
||||
conan.registry = Setup this registry from the command line:
|
||||
conan.install = To install the package using Conan, run the following command:
|
||||
conda.registry = Setup this registry as a Conda repository in your <code>.condarc</code> file:
|
||||
conda.install = To install the package using Conda, run the following command:
|
||||
container.details.type = Image Type
|
||||
container.images.title = Images
|
||||
container.details.type = Image type
|
||||
container.details.platform = Platform
|
||||
container.pull = Pull the image from the command line:
|
||||
container.digest = Digest:
|
||||
container.digest = Digest
|
||||
container.multi_arch = OS / Arch
|
||||
container.layers = Image Layers
|
||||
container.layers = Image layers
|
||||
container.labels = Labels
|
||||
container.labels.key = Key
|
||||
container.labels.value = Value
|
||||
|
@ -3694,10 +3696,10 @@ npm.registry = Setup this registry in your project <code>.npmrc</code> file:
|
|||
npm.install = To install the package using npm, run the following command:
|
||||
npm.install2 = or add it to the package.json file:
|
||||
npm.dependencies = Dependencies
|
||||
npm.dependencies.development = Development Dependencies
|
||||
npm.dependencies.bundle = Bundled Dependencies
|
||||
npm.dependencies.peer = Peer Dependencies
|
||||
npm.dependencies.optional = Optional Dependencies
|
||||
npm.dependencies.development = Development dependencies
|
||||
npm.dependencies.bundle = Bundled dependencies
|
||||
npm.dependencies.peer = Peer dependencies
|
||||
npm.dependencies.optional = Optional dependencies
|
||||
npm.details.tag = Tag
|
||||
pub.install = To install the package using Dart, run the following command:
|
||||
pypi.requires = Requires Python
|
||||
|
@ -3711,8 +3713,8 @@ rpm.repository.architectures = Architectures
|
|||
rpm.repository.multiple_groups = This package is available in multiple groups.
|
||||
rubygems.install = To install the package using gem, run the following command:
|
||||
rubygems.install2 = or add it to the Gemfile:
|
||||
rubygems.dependencies.runtime = Runtime Dependencies
|
||||
rubygems.dependencies.development = Development Dependencies
|
||||
rubygems.dependencies.runtime = Runtime dependencies
|
||||
rubygems.dependencies.development = Development dependencies
|
||||
rubygems.required.ruby = Requires Ruby version
|
||||
rubygems.required.rubygems = Requires RubyGem version
|
||||
swift.registry = Setup this registry from the command line:
|
||||
|
@ -3903,3 +3905,5 @@ filepreview.truncated = Preview has been truncated
|
|||
|
||||
[translation_meta]
|
||||
test = This is a test string. It is not displayed in Forgejo UI but is used for testing purposes. Feel free to enter "ok" to save time (or a fun fact of your choice) to hit that sweet 100% completion mark :)
|
||||
|
||||
|
||||
|
|
|
@ -166,6 +166,7 @@ new_org.title = Nueva organización
|
|||
new_repo.link = Nuevo repositorio
|
||||
new_migrate.link = Nueva migración
|
||||
new_org.link = Nueva organización
|
||||
copy_path = Copiar ruta
|
||||
|
||||
[aria]
|
||||
navbar=Barra de navegación
|
||||
|
@ -1346,7 +1347,7 @@ editor.or=o
|
|||
editor.cancel_lower=Cancelar
|
||||
editor.commit_signed_changes=Crear commit firmado de los cambios
|
||||
editor.commit_changes=Crear commit de los cambios
|
||||
editor.add_tmpl=Añadir "<filename>"
|
||||
editor.add_tmpl=Añadir "<%s>"
|
||||
editor.add=Añadir %s
|
||||
editor.update=Actualizar %s
|
||||
editor.delete=Eliminar %s
|
||||
|
@ -2319,23 +2320,23 @@ settings.event_issues_desc=Incidencia abierta, cerrada, reabierta o editada.
|
|||
settings.event_issue_assign=Asignación
|
||||
settings.event_issue_assign_desc=Incidencia asignada o no asignada.
|
||||
settings.event_issue_label=Etiquetas
|
||||
settings.event_issue_label_desc=Etiqueta de incidencia actualizada o borrada.
|
||||
settings.event_issue_milestone=Hito asignado a incidencia
|
||||
settings.event_issue_milestone_desc=Hito de incidencia establecido o desestablecido.
|
||||
settings.event_issue_comment=Comentario de incidencia
|
||||
settings.event_issue_label_desc=Etiqueta de incidencia añadida o borrada.
|
||||
settings.event_issue_milestone=Hitos
|
||||
settings.event_issue_milestone_desc=Hito añadido, borrado o modificado.
|
||||
settings.event_issue_comment=Comentarios
|
||||
settings.event_issue_comment_desc=Comentario de incidencias creado, editado o borrado.
|
||||
settings.event_header_pull_request=Eventos de pull requests
|
||||
settings.event_pull_request=Pull request
|
||||
settings.event_pull_request=Modificación
|
||||
settings.event_pull_request_desc=Pull request abierto, cerrado, reabierto o editado.
|
||||
settings.event_pull_request_assign=Pull request asignado
|
||||
settings.event_pull_request_assign=Asignación
|
||||
settings.event_pull_request_assign_desc=Pull Request asignado o no asignado.
|
||||
settings.event_pull_request_label=Pull request etiquetado
|
||||
settings.event_pull_request_label=Etiquetas
|
||||
settings.event_pull_request_label_desc=Etiqueta de pull request actualizada o borrada.
|
||||
settings.event_pull_request_milestone=Hito asignado a pull request
|
||||
settings.event_pull_request_milestone=Hitos
|
||||
settings.event_pull_request_milestone_desc=Hitos añadidos, eliminados o modificados.
|
||||
settings.event_pull_request_comment=Comentarios
|
||||
settings.event_pull_request_comment_desc=Comentario de pull request creado, editado o borrado.
|
||||
settings.event_pull_request_review=Pull request revisado
|
||||
settings.event_pull_request_review=Revisiones
|
||||
settings.event_pull_request_review_desc=Pull request aprobada, rechazada o comentarios de revisión añadidos.
|
||||
settings.event_pull_request_sync=Sincronizado
|
||||
settings.event_pull_request_sync_desc=Pull request sincronizado.
|
||||
|
@ -2471,17 +2472,17 @@ settings.tags.protection.pattern=Patrón de etiquetas
|
|||
settings.tags.protection.allowed=Permitido
|
||||
settings.tags.protection.allowed.users=Usuarios permitidos
|
||||
settings.tags.protection.allowed.teams=Equipos permitidos
|
||||
settings.tags.protection.allowed.noone=Ningún
|
||||
settings.tags.protection.create=Proteger Etiqueta
|
||||
settings.tags.protection.allowed.noone=Ningúno
|
||||
settings.tags.protection.create=Añadir regla
|
||||
settings.tags.protection.none=No hay etiquetas protegidas.
|
||||
settings.tags.protection.pattern.description=Puede usar un solo nombre, un patrón de glob o expresión regular para que coincida con varias etiquetas. Lea más en la guía <a target="_blank" rel="noopener" href="%s">de etiquetas protegidas</a>.
|
||||
settings.bot_token=Token del Bot
|
||||
settings.bot_token=Token del bot
|
||||
settings.chat_id=ID Chat
|
||||
settings.thread_id=ID del hilo
|
||||
settings.matrix.homeserver_url=URL de Homeserver
|
||||
settings.matrix.room_id=ID de sala
|
||||
settings.matrix.message_type=Tipo de mensaje
|
||||
settings.archive.button=Archivar Repositorio
|
||||
settings.archive.button=Archivar repositorio
|
||||
settings.archive.header=Archivar este repositorio
|
||||
settings.archive.text=Archivar el repositorio lo hará de sólo lectura. Se ocultará del tablero. Nadie (¡ni siquiera tú!) será capaz de hacer nuevos commits, o abrir nuevas incidencias o pull requests.
|
||||
settings.archive.success=El repositorio ha sido archivado exitosamente.
|
||||
|
@ -2502,7 +2503,7 @@ settings.lfs_findcommits=Encontrar consignas
|
|||
settings.lfs_lfs_file_no_commits=No se encontraron commits para este archivo LFS
|
||||
settings.lfs_noattribute=Esta ruta no tiene el atributo bloqueable en la rama por defecto
|
||||
settings.lfs_delete=Eliminar archivo LFS con el OID %s
|
||||
settings.lfs_delete_warning=Eliminar un archivo LFS puede causar errores de 'objeto no existe' en la compra. ¿Está seguro?
|
||||
settings.lfs_delete_warning=Eliminar un archivo LFS puede causar errores de 'objeto no existe' durante un checkout. ¿Está seguro?
|
||||
settings.lfs_findpointerfiles=Buscar de punteros LFS
|
||||
settings.lfs_locks=Bloqueos
|
||||
settings.lfs_invalid_locking_path=Ruta no válida: %s
|
||||
|
@ -2514,7 +2515,7 @@ settings.lfs_locks_no_locks=Sin bloqueos
|
|||
settings.lfs_lock_file_no_exist=El archivo bloqueado no existe en la rama por defecto
|
||||
settings.lfs_force_unlock=Forzar desbloqueo
|
||||
settings.lfs_pointers.found=Encontrados %d punteros - %d asociados, %d no asociados (%d falta en el almacén)
|
||||
settings.lfs_pointers.sha=Blob SHA
|
||||
settings.lfs_pointers.sha=Blob hash
|
||||
settings.lfs_pointers.oid=OID
|
||||
settings.lfs_pointers.inRepo=En repositorio
|
||||
settings.lfs_pointers.exists=Existe en almacén
|
||||
|
@ -2527,17 +2528,17 @@ settings.rename_branch_from=nombre de la rama vieja
|
|||
settings.rename_branch_to=nombre de la rama nueva
|
||||
settings.rename_branch=Renombrar rama
|
||||
|
||||
diff.browse_source=Explorar el Código
|
||||
diff.browse_source=Explorar el código
|
||||
diff.parent=padre
|
||||
diff.commit=commit
|
||||
diff.git-notes=Notas
|
||||
diff.data_not_available=El contenido del Diff no está disponible
|
||||
diff.options_button=Opciones de diferencias
|
||||
diff.data_not_available=El contenido del diff no está disponible
|
||||
diff.options_button=Opciones de diff
|
||||
diff.show_diff_stats=Mostrar estadísticas
|
||||
diff.download_patch=Descargar archivo de parche
|
||||
diff.download_diff=Descargar archivo de diferencias
|
||||
diff.download_diff=Descargar archivo de diff
|
||||
diff.show_split_view=Dividir vista
|
||||
diff.show_unified_view=Unificar vista
|
||||
diff.show_unified_view=Vista unificada
|
||||
diff.whitespace_button=Espacio blanco
|
||||
diff.whitespace_show_everything=Mostrar todos los cambios
|
||||
diff.whitespace_ignore_all_whitespace=Ignorar espacio en blanco al comparar líneas
|
||||
|
@ -2547,7 +2548,7 @@ diff.stats_desc=Se han <strong>modificado %d ficheros</strong> con <strong>%d ad
|
|||
diff.stats_desc_file=%d cambios: %d adiciones y %d eliminaciones
|
||||
diff.bin=BIN
|
||||
diff.bin_not_shown=Archivo binario no mostrado.
|
||||
diff.view_file=Ver fichero
|
||||
diff.view_file=Ver archivo
|
||||
diff.file_before=Antes
|
||||
diff.file_after=Después
|
||||
diff.file_image_width=Anchura
|
||||
|
@ -2556,8 +2557,8 @@ diff.file_byte_size=Tamaño
|
|||
diff.file_suppressed=La diferencia del archivo ha sido suprimido porque es demasiado grande
|
||||
diff.file_suppressed_line_too_long=Las diferiencias del archivo han sido suprimidas porque una o mas lineas son muy largas
|
||||
diff.too_many_files=Algunos archivos no se mostraron porque demasiados archivos han cambiado en esta diferencia
|
||||
diff.show_more=Ver más
|
||||
diff.load=Cargar Diff
|
||||
diff.show_more=Mostrar más
|
||||
diff.load=Cargar diff
|
||||
diff.generated=generado
|
||||
diff.vendored=vendido
|
||||
diff.comment.add_line_comment=Añadir comentario en línea
|
||||
|
@ -2567,7 +2568,7 @@ diff.comment.add_single_comment=Añadir solo comentario
|
|||
diff.comment.add_review_comment=Añadir comentario
|
||||
diff.comment.start_review=Comenzar revisión
|
||||
diff.comment.reply=Responder
|
||||
diff.review=Revisión
|
||||
diff.review=Finalizar revisión
|
||||
diff.review.header=Enviar revisión
|
||||
diff.review.placeholder=Comentario de revisión
|
||||
diff.review.comment=Comentario
|
||||
|
@ -2593,11 +2594,11 @@ release.draft=Borrador
|
|||
release.prerelease=Pre-lanzamiento
|
||||
release.stable=Estable
|
||||
release.compare=Comparar
|
||||
release.edit=editar
|
||||
release.edit=Editar
|
||||
release.ahead.commits=<strong>%d</strong> commits
|
||||
release.ahead.target=a %s desde esta versión
|
||||
tag.ahead.target=a %s desde esta etiqueta
|
||||
release.source_code=Código Fuente
|
||||
release.source_code=Código fuente
|
||||
release.new_subheader=Los lanzamientos organizan las versiones de proyectos.
|
||||
release.edit_subheader=Los lanzamientos organizan las versiones de proyectos.
|
||||
release.tag_name=Nombre de la etiqueta
|
||||
|
@ -2608,15 +2609,15 @@ release.tag_helper_existing=Etiqueta actual.
|
|||
release.title=Título de lanzamiento
|
||||
release.title_empty=El título no puede estar vacío.
|
||||
release.message=Describe esta versión
|
||||
release.prerelease_desc=Marcar como Pre-Lanzamiento
|
||||
release.prerelease_desc=Marcar como pre-lanzamiento
|
||||
release.prerelease_helper=Marcar este lanzamiento como no es adecuada para usar en producción.
|
||||
release.cancel=Cancelar
|
||||
release.publish=Publicar lanzamiento
|
||||
release.save_draft=Guardar borrador
|
||||
release.edit_release=Actualizar Lanzamiento
|
||||
release.delete_release=Eliminar Lanzamiento
|
||||
release.delete_tag=Eliminar Etiqueta
|
||||
release.deletion=Eliminar Lanzamiento
|
||||
release.delete_tag=Eliminar tag
|
||||
release.deletion=Eliminar lanzamiento
|
||||
release.deletion_desc=Eliminar un lanzamiento sólo lo elimina de Forgejo. No afectará la etiqueta Git, el contenido de su repositorio o su historial. ¿Continuar?
|
||||
release.deletion_success=El lanzamiento ha sido eliminado.
|
||||
release.deletion_tag_desc=Eliminará esta etiqueta del repositorio. El contenido del repositorio y el historial permanecerán sin cambios. ¿Continuar?
|
||||
|
@ -2628,14 +2629,14 @@ release.tag_already_exist=Este nombre de etiqueta ya existe.
|
|||
release.downloads=Descargas
|
||||
release.download_count=Descargas: %s
|
||||
release.add_tag_msg=Utilice el título y el contenido de la liberación como mensaje de etiqueta.
|
||||
release.add_tag=Crear solo etiqueta
|
||||
release.add_tag=Crear tag
|
||||
release.releases_for=Lanzamientos para %s
|
||||
release.tags_for=Etiquetas para %s
|
||||
|
||||
branch.name=Nombre de la rama
|
||||
branch.already_exists=Una rama llamada "%s" ya existe.
|
||||
branch.delete_head=Eliminar
|
||||
branch.delete=`Eliminar rama "%s "`
|
||||
branch.delete=Eliminar rama "%s "
|
||||
branch.delete_html=Eliminar rama
|
||||
branch.delete_desc=Eliminar una rama es permanente. Aunque la rama eliminada puede continuar existiendo durante un corto tiempo antes de que sea eliminada, en la mayoría de los casos NO PUEDE deshacerse. ¿Continuar?
|
||||
branch.deletion_success=La rama "%s" ha sido eliminada.
|
||||
|
@ -2652,9 +2653,9 @@ branch.restore_success=La rama "%s" ha sido restaurada.
|
|||
branch.restore_failed=Error al restaurar la rama "%s".
|
||||
branch.protected_deletion_failed=La rama "%s" está protegida. No se puede eliminar.
|
||||
branch.default_deletion_failed=La rama "%s" es la rama por defecto. No se puede eliminar.
|
||||
branch.restore=`Restaurar rama "%s"`
|
||||
branch.download=`Descargar rama "%s"`
|
||||
branch.rename=`Renombrar rama "%s"`
|
||||
branch.restore=Restaurar rama "%s"
|
||||
branch.download=Descargar rama "%s"
|
||||
branch.rename=Renombrar rama "%s"
|
||||
branch.search=Buscar rama
|
||||
branch.included_desc=Esta rama forma parte de la predeterminada
|
||||
branch.included=Incluida
|
||||
|
@ -2678,9 +2679,9 @@ tag.create_success=La etiqueta "%s" ha sido creada.
|
|||
topic.manage_topics=Administrar temas
|
||||
topic.done=Hecho
|
||||
topic.count_prompt=No puede seleccionar más de 25 temas
|
||||
topic.format_prompt=Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y puntos ('. ), puede tener hasta 35 caracteres de largo. Las letras deben estar en minúsculas.
|
||||
topic.format_prompt=Los temas deben comenzar con una letra o número, pueden incluir guiones ("-") y puntos ("."), puede tener hasta 35 caracteres de largo. Las letras deben estar en minúsculas.
|
||||
|
||||
find_file.go_to_file=Ir al archivo
|
||||
find_file.go_to_file=Buscar un archivo
|
||||
find_file.no_matching=No se encontró ningún archivo que coincidiese
|
||||
|
||||
error.csv.too_large=No se puede renderizar este archivo porque es demasiado grande.
|
||||
|
@ -2795,19 +2796,37 @@ settings.confirmation_string = Cadena de confirmación
|
|||
issues.filter_sort.relevance = Relevancia
|
||||
settings.transfer_quota_exceeded = El nuevo propietario (%s) ha sobrepasado la cuota. El repositorio no ha sido transferido.
|
||||
settings.web_hook_name_sourcehut_builds = Builds de SourceHut
|
||||
settings.wiki_rename_branch_main_notices_2 =
|
||||
settings.wiki_rename_branch_main_notices_2 =
|
||||
settings.wiki_rename_branch_main = Normalizar el nombre de la rama de la wiki
|
||||
settings.wiki_rename_branch_main_desc = Renombrar la rama interna usada por la wiki a "%s". Este cambio es permanente y no se puede deshacer.
|
||||
settings.confirm_wiki_branch_rename = Renombrar la rama de la wiki
|
||||
settings.graphql_url = URL de GraphQL
|
||||
settings.sourcehut_builds.manifest_path = Ruta del manifiesto de compilación
|
||||
settings.sourcehut_builds.secrets = Secretos
|
||||
release.system_generated = Este archivo adjunto se genera automaticamente.
|
||||
release.asset_external_url = URL externa
|
||||
release.hide_archive_links = Ocultar archivos generados automaticamente
|
||||
settings.mirror_settings.pushed_repository = Repositorio pusheado
|
||||
settings.rename_branch_failed_protected = No se puede renombrar la rama %a porque es un rama protegida.
|
||||
release.invalid_external_url = URL externa inválida: %s
|
||||
release.download_count_one = %s descarga
|
||||
diff.git-notes.add = Añadir nota
|
||||
diff.git-notes.remove-header = Eliminar nota
|
||||
release.download_count_few = %s descargas
|
||||
diff.git-notes.remove-body = Esta nota se eliminará.
|
||||
|
||||
[graphs]
|
||||
component_loading = Cargando %s...
|
||||
component_loading_failed = No se pudo cargar %s
|
||||
contributors.what = contribuciones
|
||||
recent_commits.what = commits recientes
|
||||
code_frequency.what = frecuencia de código
|
||||
|
||||
[org]
|
||||
org_name_holder=Nombre de la organización
|
||||
org_full_name_holder=Nombre completo de la organización
|
||||
org_name_helper=Los nombres de organización deben ser cortos y destacados.
|
||||
create_org=Crear Organización
|
||||
create_org=Crear organización
|
||||
repo_updated=Actualizado %s
|
||||
members=Miembros
|
||||
teams=Equipos
|
||||
|
@ -2926,6 +2945,7 @@ teams.all_repositories_admin_permission_desc=Este equipo concede a <strong>Admin
|
|||
teams.invite.title=Has sido invitado a unirte al equipo <strong>%s</strong> en la organización <strong>%s</strong>.
|
||||
teams.invite.by=Invitado por %s
|
||||
teams.invite.description=Por favor, haga clic en el botón de abajo para unirse al equipo.
|
||||
follow_blocked_user = No puedes seguir a esta organización porque esta organización te ha bloqueado.
|
||||
|
||||
[admin]
|
||||
dashboard=Panel de control
|
||||
|
@ -3842,4 +3862,22 @@ regexp_tooltip = Interpretar los términos de búsqueda como una expresión regu
|
|||
|
||||
[markup]
|
||||
filepreview.lines = Líneas %[1]d a %[2]d en %[3]s
|
||||
filepreview.line = Línea %[1]d en %[2]s
|
||||
filepreview.line = Línea %[1]d en %[2]s
|
||||
|
||||
[repo.permissions]
|
||||
pulls.read = <b>Lectura:</b> Leer y crear pull requests.
|
||||
releases.write = <b>Write:</b> Publicar, editar y eliminar lanzamientos y sus archivos.
|
||||
packages.read = <b>Lectura:</b> Ver y descargar paquetes asignados al repositorio.
|
||||
wiki.read = <b>Lectura:</b> Leer la wiki integrada y su historial.
|
||||
issues.read = <b>Lectura:</b> Leer y crear incidencias y comentarios.
|
||||
pulls.write = <b>Escritura:</b> Cerrar pull requests y gestionar metadatos como etiquetas, hitos, asignaciones, fechas de vencimiento y dependencias.
|
||||
releases.read = <b>Lectura:</b> Ver y descagar lanzamientos.
|
||||
wiki.write = <b>Escritura:</b> Crear, actualizar y eliminar páginas en la wiki integrada.
|
||||
projects.read = <b>Lectura:</b> Acceso a las tablas de proyecto del repositorio.
|
||||
projects.write = <b>Escritura:</b> Crear proyectos y columnas y editarlos.
|
||||
ext_issues = Acceder al enlace del getsor de incidencias externo. Los permisos se gestionan de forma externa.
|
||||
code.read = <b>Lectura:</b> Acceso y clonar el codigo del repositorio.
|
||||
ext_wiki = Acceder al enlace de la wiki externa. Los permisos se gestionan de forma externa.
|
||||
code.write = <b>Escritura:</b> Push al repositorio, crear ramas y tags.
|
||||
issues.write = <b>Escritura:</b> Cerrar incidencias y gestion de metadatos como etiquetas, hitos, asignaciones, fechas de vencimiento y dependencias.
|
||||
packages.write = <b>Escritura:</b> Publicar y eliminar paquetes asignados al repositorio.
|
||||
|
|
|
@ -981,7 +981,7 @@ editor.or=یا
|
|||
editor.cancel_lower=انصراف
|
||||
editor.commit_signed_changes=اعمال تغییرات امضا شده
|
||||
editor.commit_changes=تغییرات کامیت
|
||||
editor.add_tmpl=افزودن '<filename>'
|
||||
editor.add_tmpl=افزودن '<%s>'
|
||||
editor.commit_message_desc=توضیحی تخصصی به دلخواه اضافه نمایید…
|
||||
editor.signoff_desc=یک تریلر Signed-off-by توسط committer در انتهای پیام گزارش commit اضافه کنید.
|
||||
editor.commit_directly_to_this_branch=ثبت کامیت به صورت مستقیم در انشعاب <strong class="%[2]s">%[1]s</strong>.
|
||||
|
@ -2668,4 +2668,4 @@ symbolic_link=پیوند نمادین
|
|||
executable_file = فایل اجرایی
|
||||
normal_file = فایل معمولی
|
||||
changed_filemode = %[1] ها ← %[2] ها
|
||||
directory = پوشه
|
||||
directory = پوشه
|
||||
|
|
|
@ -175,7 +175,7 @@ footer = Alatunniste
|
|||
[heatmap]
|
||||
less = Vähemmän
|
||||
more = Enemmän
|
||||
number_of_contributions_in_the_last_12_months = %s kontribuutiota viimeisimmän vuoden aikana
|
||||
number_of_contributions_in_the_last_12_months = %s kontribuutiota viimeisen vuoden aikana
|
||||
contributions_zero = Ei kontribuutioita
|
||||
contributions_one = kontribuutio
|
||||
contributions_few = kontribuutiota
|
||||
|
@ -972,7 +972,7 @@ editor.or=tai
|
|||
editor.cancel_lower=Peru
|
||||
editor.commit_signed_changes=Commitoi vahvistetut muutokset
|
||||
editor.commit_changes=Kommitoi muutokset
|
||||
editor.add_tmpl=Lisää "<filename>"
|
||||
editor.add_tmpl=Lisää "<%s>"
|
||||
editor.commit_directly_to_this_branch=Commitoi suoraan <strong class="%[2]s">%[1]s</strong> haaraan.
|
||||
editor.create_new_branch=Luo <strong>uusi haara</strong> tälle commitille ja aloita vetopyyntö.
|
||||
editor.create_new_branch_np=Luo <strong>uusi haara</strong> tälle commitille.
|
||||
|
@ -2592,4 +2592,4 @@ milestone_kind = Etsi merkkipaaluja...
|
|||
pull_kind = Etsi pull-vetoja...
|
||||
commit_kind = Etsi kommitteja...
|
||||
fuzzy = Sumea
|
||||
runner_kind = Etsi ajajia...
|
||||
runner_kind = Etsi ajajia...
|
||||
|
|
|
@ -146,6 +146,7 @@ new_repo.link = Bagong repositoryo
|
|||
new_migrate.link = Bagong paglipat
|
||||
new_org.link = Bagong organisasyon
|
||||
new_org.title = Bagong organisasyon
|
||||
copy_path = Kopyahin ang path
|
||||
|
||||
[home]
|
||||
search_repos = Maghanap ng Repository…
|
||||
|
@ -1120,7 +1121,7 @@ editor.preview_changes = I-preview ang mga pagbago
|
|||
editor.edit_this_file = Baguhin ang file
|
||||
commits.author = May-akda
|
||||
commits.older = Mas luma
|
||||
editor.add_tmpl = Idagdag ang "<filename>"
|
||||
editor.add_tmpl = Idagdag ang "<%s>"
|
||||
delete_preexisting = Burahin ang mga dating umiiral na file
|
||||
delete_preexisting_content = Burahin ang mga file sa %s
|
||||
tree_path_not_found_commit = Hindi umiiral ang path na %[1]s sa commit %[2]s
|
||||
|
@ -1476,7 +1477,7 @@ wiki.page_title = Pamagat ng pahina
|
|||
issues.lock_confirm = Kandaduhin
|
||||
issues.stop_tracking_history = `itinigil ang trabaho %s`
|
||||
issues.label_delete = Burahin
|
||||
milestones.closed = Isinara %s
|
||||
milestones.closed = Isinara ang %s
|
||||
issues.unlock_confirm = I-unlock
|
||||
milestones.open = Buksan
|
||||
issues.content_history.delete_from_history = Burahin mula sa kasaysayan
|
||||
|
@ -1498,14 +1499,14 @@ editor.directory_is_a_file = Ang pangalan ng direktoryo "%s" ay ginagamit na bil
|
|||
pulls.merged_by =ni/ng <a href="%[2]s">%[3]s</a> ay naisama %[1]s
|
||||
commitstatus.pending = Nakabinbin
|
||||
issues.review.pending = Nakabinbin
|
||||
pulls.status_checking = Nakabinbin ang ilang mga [pagsusuri]
|
||||
pulls.status_checking = Nakabinbin ang ilang mga pagsusuri
|
||||
editor.file_changed_while_editing = Ang nilalaman ng file ay nagbago mula noong nagsimula kang mag-edit. <a target="_blank" rel="noopener noreferrer" href="%s">Mag-click dito</a> upang makita ang mga pagbabago o <strong>Mag-commit ng mga pagbabago muli</strong> para i-overwrite sila.
|
||||
editor.file_already_exists = Umiiral na ang file na may pangalang "%s" sa repositoryong ito.
|
||||
issues.review.review = Suriin
|
||||
activity.git_stats_push_to_branch = sa %s at
|
||||
activity.git_stats_and_deletions = at
|
||||
issues.new.no_projects = Walang mga proyekto
|
||||
pulls.auto_merge_button_when_succeed = (Kung nagtagumpay ang mga [check])
|
||||
pulls.auto_merge_button_when_succeed = (Kung magtagumpay ang mga pagsusuri)
|
||||
activity.git_stats_on_default_branch = Sa %s,
|
||||
activity.period.quarterly = 3 buwan
|
||||
issues.review.left_comment = nagiwan ang komento
|
||||
|
@ -1532,9 +1533,9 @@ settings.transfer_owner = Bagong may-ari
|
|||
pulls.tab_conversation = Pag-uusap
|
||||
pulls.tab_files = Mga nabagong file
|
||||
settings.new_owner_blocked_doer = Hinarang ka ng bagong may-ari.
|
||||
settings.transfer.rejected = Tinanggihan ang paglipat ng [repository].
|
||||
settings.transfer.success = Matagumpay na inilipat ang [repository].
|
||||
settings.transfer.modal.title = Ilipat ang [ownership]
|
||||
settings.transfer.rejected = Tinanggihan ang paglipat ng repositoryo.
|
||||
settings.transfer.success = Matagumpay na inilipat ang repositoryo.
|
||||
settings.transfer.modal.title = Ilipat ang pagmamay-ari
|
||||
diff.view_file = Tingnan ang file
|
||||
diff.parent =magulang
|
||||
diff.stats_desc = <strong>%d nabagong mga file</strong> na may <strong> %d mga pagdagdag</strong> at <strong> %d mga pagtanggal</strong>
|
||||
|
@ -1612,8 +1613,8 @@ diff.review.reject = Hilingin ang mga pagbago
|
|||
diff.whitespace_show_everything = Ipakita lahat ng pagbago
|
||||
issues.review.approve = inaprubahan ang mga pagbabagong ito %s
|
||||
diff.review.approve = Aprubahin
|
||||
settings.event_pull_request_review_desc = Inapruba, tinatanggihan o [komento ng pagsuri] ang [pull request].
|
||||
settings.event_pull_request_review = Sinusuri na ang [pull request]
|
||||
settings.event_pull_request_review_desc = Inapruba, tinatanggihan o gumawa ng komento sa pagsuri sa hiling sa paghila.
|
||||
settings.event_pull_request_review = Mga pagsusuri
|
||||
diff.whitespace_button = Puting espasyo
|
||||
diff.review.self_reject = Hindi makakahiling ng nga pagbago ang mga may-akda ng [pull request] sa kanilang sariling [pull request]
|
||||
diff.review.self_approve = Hindi maka-apruba ang mga may-akda ng [pull request] sa kanilang sariling [pull request]
|
||||
|
@ -1706,7 +1707,7 @@ issues.filter_milestone_all = Lahat ng mga milestone
|
|||
issues.filter_sort.mostforks = Pinakamaraming fork
|
||||
issues.action_assignee = Mangangasiwa
|
||||
issues.change_ref_at = `binago ang sangguni mula <b><strike>%s</strike></b> sa <b>%s</b> %s`
|
||||
pulls.cmd_instruction_merge_desc = Isama ang mga pagbago at [update] sa Forgejo.
|
||||
pulls.cmd_instruction_merge_desc = Isama ang mga pagbago at i-update sa Forgejo.
|
||||
issues.dependency.issue_close_blocks = Hinarangan ng isyung ito mula sa pagsara ng mga sumusunod na isyu
|
||||
issues.dependency.issue_closing_blockedby = Hinarangan mula sa pagsara ng isyung ito ng mga sumusunod na isyu
|
||||
pulls.status_checks_requested = Kinakailangan
|
||||
|
@ -1778,7 +1779,7 @@ issues.sign_in_require_desc = <a href="%s">Mag-sign in</a> upang sumali sa usapa
|
|||
issues.num_comments = %d mga komento
|
||||
issues.role.contributor_helper = Nakaraang nag-commit ang user na ito sa repositoryo na ito.
|
||||
issues.comment_pull_merged_at = isinama ang commit %[1]s sa %[2]s %[3]s
|
||||
pulls.commit_ref_at = ` isinangguni ang [pull request] mula sa isang [commit]<a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
pulls.commit_ref_at = `isinangguni ang hiling sa paghila mula sa isang commit <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
wiki.last_commit_info = Binago ni %s ang pahinang ito %s
|
||||
issues.content_history.edited = binago
|
||||
issues.ref_pull_from = `<a href="%[3]s">isinangguni ang hiling sa paghila na ito %[4]s </a><a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
|
@ -1789,11 +1790,11 @@ settings.federation_following_repos = Mga URL ng Mga Sinusundang Repositoryo. Hi
|
|||
diff.comment.reply = Tumugon
|
||||
pulls.create = Gumawa ng hiling sa paghila
|
||||
issues.dependency.pr_close_blocked = Kailangan mong isara ang lahat ng mga isyu na humaharang sa hiling sa paghila na ito bago mo ito isama.
|
||||
pulls.delete.title = Burahin ang [pull request] na ito?
|
||||
pulls.delete.title = Burahin ang hiling sa paghila na ito?
|
||||
issues.dependency.pr_closing_blockedby = Hinarang ng mga sumusunod na isyu mula sa pagsara ng hiling sa paghila na ito
|
||||
pulls.closed_at = `isinara ang [pull request] na ito<a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
pulls.close = Isara ang [pull request]
|
||||
pulls.cmd_instruction_hint = `Tingnan ang mga panuto para sa linya ng utos.`
|
||||
pulls.closed_at = `isinara ang hiling sa paghila na <a id="%[1]s" href="#%[1]s">%[2]s</a>`
|
||||
pulls.close = Isara ang hiling sa paghila
|
||||
pulls.cmd_instruction_hint = Tingnan ang mga panuto para sa command line
|
||||
project = Mga proyekto
|
||||
issues.content_history.deleted = binura
|
||||
pulls.no_results = Walang mga nahanap na resulta.
|
||||
|
@ -1810,7 +1811,7 @@ pulls.merged_title_desc_one = isinali ang %[1]d commit mula<code>%[2]s</code> pa
|
|||
pull.deleted_branch = (binura):%s
|
||||
issues.dependency.pr_close_blocks = Hinarang ng hiling sa paghila na ito mula sa pagsara ng mga sumusunod na isyu
|
||||
issues.reference_issue.body = Katawan
|
||||
pulls.recently_pushed_new_branches = Itinulak mo sa [branch]<a href="%[3]s"> <strong>%[1]s</strong></a>%[2]s
|
||||
pulls.recently_pushed_new_branches = Nagtulak sa branch na <a href="%[3]s"> <strong>%[1]s</strong></a> %[2]s
|
||||
issues.add_time_minutes = Minuto
|
||||
issues.del_time = Burahin ang log ng oras na ito
|
||||
issues.stop_tracking = Itigil ang orasan
|
||||
|
@ -1847,7 +1848,7 @@ subscribe.pull.guest.tooltip = Mag-sign in para mag-subscribe sa hiling sa paghi
|
|||
issues.edit.already_changed = Hindi maimbak ang mga pagbabago sa isyu. Mukhang nabago na ng ibang tagagamit ang nilalaman. Mangyaring i-refresh ang pahina at subukang baguhin muli upang maiwasang ma-overwrite ang kanilang pagbago
|
||||
signing.wont_sign.not_signed_in = Hindi ka naka-sign in.
|
||||
activity.new_issues_count_n = Bagong mga isyu
|
||||
activity.git_stats_files_changed_n = mga nabago
|
||||
activity.git_stats_files_changed_n = ay nabago
|
||||
activity.git_stats_files_changed_1 = ang nabago
|
||||
issues.dependency.remove = Tanggalin
|
||||
pulls.edit.already_changed = Hindi maimbak ang mga pagbabago sa hiling sa paghila. Mukhang nabago na ng ibang tagagamit ang nilalaman. Mangyaring i-refresh ang pahina at subukang baguhin muli upang maiwasang ma-overwrite ang kanilang pagbago
|
||||
|
@ -1870,11 +1871,11 @@ activity.git_stats_deletion_1 = %d pagbura
|
|||
activity.git_stats_deletion_n = %d mga pagbura
|
||||
activity.navbar.code_frequency = Dalas ng code
|
||||
pulls.switch_head_and_base = Ilipat ang ulo at base
|
||||
activity.git_stats_push_to_all_branches = sa lahat ng mga [branch].
|
||||
activity.git_stats_push_to_all_branches = sa lahat ng mga branch.
|
||||
activity.git_stats_pushed_n = itinulak ang
|
||||
issues.reference_link = Pagsangguni: %s
|
||||
activity.git_stats_pushed_1 = ang itinulak
|
||||
activity.git_stats_commit_n = %d mga [commit]
|
||||
activity.git_stats_commit_n = %d mga commit
|
||||
issues.dependency.add = Magdagdag ng dependency…
|
||||
issues.dependency.cancel = Kanselahin
|
||||
issues.dependency.no_permission.can_remove = Wala kang pahintulot na basahin ang dependency na ito ngunit matatanggal ang dependency
|
||||
|
@ -1900,7 +1901,7 @@ activity.title.issues_n = % mga isyu
|
|||
settings.mirror_settings.direction.pull = Paghila
|
||||
settings.mirror_settings.direction.push = Pagtulak
|
||||
settings.push_mirror_sync_in_progress = Itinulak ang mga pagbabago patungo sa [malayuang] %s sa ngayon.
|
||||
milestones.filter_sort.least_issues = [Pinakamaliit] na mga isyu
|
||||
milestones.filter_sort.least_issues = Pinakakaunting mga isyu
|
||||
pulls.showing_specified_commit_range = Ipinapakita lamang ang mga pagbabago sa pagitan ng %[1]s..%[2]s
|
||||
wiki.pages = Mga pahina
|
||||
activity.unresolved_conv_label = Nakabukas
|
||||
|
@ -2016,7 +2017,7 @@ settings.mirror_settings.docs.disabled_push_mirror.instructions = I-set up ang i
|
|||
settings.mirror_settings.docs.disabled_pull_mirror.instructions = I-set up ang iyong proyekto na awtomatikong magtulak ng mga commit, tag at branch sa isa pang repositoryo. Na-disable ng iyong tagapangasiwa ng site ang mga pull mirror.
|
||||
activity.overview = Pangkalahatang Ideya
|
||||
mirror_public_key = Pampublikong susi ng SSH
|
||||
milestones.cancel =
|
||||
milestones.cancel =Kanselahin
|
||||
issues.all_title = Lahat
|
||||
mirror_denied_combination = Hindi maaaring gumamit ng pampublikong key at password-based na authentication nang magkakasama.
|
||||
issues.filter_sort.relevance = Kaugnayan
|
||||
|
@ -2060,6 +2061,386 @@ pulls.rebase_merge_pull_request = I-rebase at i-fast-forward
|
|||
pulls.rebase_merge_commit_pull_request = I-rebase at gumawa ng merge commit
|
||||
pulls.no_merge_not_ready = Hindi pa handang isama ang hiling sa paghila na ito, suriin ang estado ng pagsusuri at mga status check.
|
||||
pulls.unrelated_histories = Nabigo ang pagsasama: Ang merge head at base ay hindi nagbabahagi ng isang karaniwang kasaysayan. Pahiwatig: Sumubok ng ibang paraan
|
||||
settings.trust_model.collaborator.long = Tagatulong: Pagkatiwalaan ang mga signature mula sa mga katulong
|
||||
settings.enable_timetracker = I-enable ang pagsubaybay ng oras
|
||||
settings.add_collaborator_owner = Hindi madadagdag ang may-ari bilang katulong.
|
||||
pulls.status_checks_success = Matagumpay ang lahat ng mga pagsusuri
|
||||
settings.webhook.test_delivery_desc_disabled = Para subukan ang webhook gamit ng isang pekeng event, i-activate ito.
|
||||
settings.slack_username = Username
|
||||
pulls.auto_merge_when_succeed = Awtomatikong isama kapag magtagumpay ang lahat ng mga pagsusuri
|
||||
settings.allow_only_contributors_to_track_time = Payagan lamang ang mga kontribyutor na subaybayan ang oras
|
||||
settings.packages_desc = I-enable ang package registry ng repositoryo
|
||||
settings.actions_desc = I-enable ang mga kasamang CI/CD pipeline gamit ang Forgejo Actions
|
||||
settings.admin_indexer_commit_sha = Huling na-index na commit
|
||||
settings.admin_indexer_unindexed = Hindi naka-index
|
||||
settings.transfer_notices_3 = - Kung pribado ang repositoryo at ilipat sa isang indibidwal na user, ang aksyon na ito ay sinisigurado na ang user ay may pahintulot na basahin (at palitan ang mga pahintulot kung kailangan).
|
||||
settings.convert_desc = Maari mong i-convert ang repositoryo na ito sa regular na repositoryo. Hindi ito mababawi.
|
||||
settings.transfer.button = Ilipat ang pagmamay-ari
|
||||
settings.signing_settings = Mga setting sa pagpapatunay ng pag-sign
|
||||
settings.admin_enable_close_issues_via_commit_in_any_branch = Isara ang isyu sa pamamagitan ng commit na ginawa sa hindi default na branch
|
||||
settings.reindex_button = Idagdag sa reindex queue
|
||||
settings.packagist_username = Username sa Packagist
|
||||
settings.event_pull_request_assign = Pag-assign
|
||||
settings.event_pull_request_approvals = Mga pagapruba sa hiling sa paghila
|
||||
settings.web_hook_name_matrix = Matrix
|
||||
settings.event_pull_request = Pagbago
|
||||
settings.event_issue_comment = Mga komento
|
||||
settings.mirror_settings.push_mirror.none = Walang mga na-configure na push mirror
|
||||
settings.transfer_started = Namarkahan na ang repositoryo para sa paglipat at naghihintay ng kumpirmasyon mula kay/sa "%s"
|
||||
settings.wiki_globally_editable = Payagan ang sinuman na baguhin ang wiki
|
||||
settings.external_wiki_url_error = Hindi wastong URL ang panlabas na wiki na URL.
|
||||
settings.event_pull_request_enforcement = Pagpapatupad
|
||||
settings.title = Pamagat
|
||||
settings.pulls.ignore_whitespace = Huwag pansinin ang whitespace para sa mga salungatan
|
||||
pulls.delete.text = Gusto mo ba talagang burahin ang hiling sa paghila na ito? (Permanente nitong buburahin ang lahat ng nilalaman. Isaalang-alang na isara ito sa halip, kung balak mo na panatilihin ito naka-archive)
|
||||
milestones.new = Bagong milestone
|
||||
wiki.page_name_desc = Maglagay ng pangalan para sa pahina ng Wiki na ito. Ang ilang mga espesyal na pangalan ay: "Home", "_Sidebar" at "_Footer".
|
||||
settings.transfer.title = Ilipat ang pagmamay-ari
|
||||
settings.content_type = Uri ng nilalaman ng POST (content type)
|
||||
settings.deploy_key_deletion = Tanggalin ang deploy key
|
||||
settings.protect_enable_push = I-enable ang pagtulak
|
||||
settings.discord_icon_url.exceeds_max_length = Kailangang bababa o equal sa 2048 characters ang URL ng icon
|
||||
settings.protected_branch.save_rule = I-save ang rule
|
||||
settings.mirror_settings.docs.can_still_use = Bagama't na hindi ka makakabago ng mga umiiral na mirror o gumawa ng bago, maari mo pa rin gamitin ang iyong umiiral na mirror.
|
||||
settings.slack_color = Kulay
|
||||
settings.discord_icon_url = URL ng icon
|
||||
settings.convert_fork_confirm = I-convert ang repositoryo
|
||||
settings.add_webhook = Magdagdag ng webhook
|
||||
settings.event_repository_desc = Ginawa o binura ang repositoryo.
|
||||
milestones.no_due_date = Walang takdang petsa
|
||||
milestones.edit_success = Na-update na ang milestone na "%s".
|
||||
activity.title.unresolved_conv_n = %d mga hindi naresolbang paguusap
|
||||
settings.units.units = Mga Yunit
|
||||
settings.event_pull_request_label = Mga label
|
||||
settings.trust_model.collaborator = Tagatulong
|
||||
pulls.made_using_agit = AGit
|
||||
settings.protect_disable_push = I-disable ang pagtulak
|
||||
signing.wont_sign.pubkey = Hindi isa-sign ang commit na ito dahil wala kang pampublikong key na nauugnay sa iyong account.
|
||||
settings.transfer_in_progress = May ginagawang paglipat. Mangyaring kanselahin iyan kung gusto mong ilipat ang repositoryo na ito sa isa pang user.
|
||||
settings.wiki_branch_rename_failure = Nabigong i-normalize ang pangalan ng branch ng wiki ng repositoryo.
|
||||
settings.event_send_everything = Lahat ng mga event
|
||||
settings.event_choose = Mga custom na event…
|
||||
settings.add_webhook_desc = Magpapadala ang Forgejo ng <code>POST</code> request ba may tinakdang Content-Type sa target URL. Magbasa pa sa <a target="_blank" rel="noopener noreferrer" href="%s">guide ng mga webhook</a>.
|
||||
settings.event_create = Gumawa
|
||||
settings.event_wiki_desc = Ginawa, binago ang pangalan, o binura ang pahina ng wiki.
|
||||
settings.event_push = Pagtulak
|
||||
settings.event_wiki = Wiki
|
||||
settings.event_pull_request_assign_desc = Na-assign o unassign ang hiling aa paghila.
|
||||
settings.event_issues = Pagbago
|
||||
settings.event_issue_assign = Pag-assign
|
||||
settings.event_pull_request_milestone = Mga milestone
|
||||
settings.event_pull_request_milestone_desc = Dinagdag, tinanggal o binago ang milestone.
|
||||
settings.event_pull_request_comment = Mga komento
|
||||
settings.event_pull_request_review_request_desc = Nahiling o tinanggal ang pagsuri sa hiling sa paghila.
|
||||
settings.web_hook_name_forgejo = Forgejo
|
||||
settings.web_hook_name_gitea = Gitea
|
||||
settings.deploy_key_desc = Ang mga deploy key ay may read-onlt na access sa repositoryo.
|
||||
settings.is_writable_info = Payagan ang deploy key na ito na <strong>magtulak</strong> sa repositoryo.
|
||||
settings.protect_whitelist_committers_desc = Ang mga naka-whitelist na user o koponan lamang ang makakatulak sa branch na ito (pero hindi ang pinwersang pagtulak).
|
||||
settings.protect_whitelist_deploy_keys = I-whitelist ang mga deploy key na may write access para sa pagtulak.
|
||||
settings.protect_whitelist_users = I-whitelist ang mga user para sa pagtulak
|
||||
signing.wont_sign.never = Hindi masa-sign ang mga commit kailanman.
|
||||
signing.wont_sign.basesigned = Hindi isa-sign ang pag-sama na ito dahil hindi naka-sign ang base commit.
|
||||
settings.event_fork = Pag-fork
|
||||
settings.protect_whitelist_teams = I-whitelist ang mga koponan para sa pagtulak
|
||||
settings.delete_collaborator = Tanggalin
|
||||
settings.remove_collaborator_success = Tinanggal na ang tagatulong.
|
||||
settings.collaborator_deletion_desc = Tatanggihan ang pag-access sa repositoryo na ito ang pagtanggal ng tagatulong. Magpatuloy?
|
||||
settings.delete_team_tip = May access sa lahat ng mga repositoryo ang koponan na ito at hindi matatanggal
|
||||
settings.authorization_header_desc = Isasama bilang authorization header para sa mga request kung present. Mga halimbawa: %s.
|
||||
settings.sourcehut_builds.secrets = Mga sikreto
|
||||
settings.is_writable = Paganahin ang write access
|
||||
milestones.deletion = Burahin ang milestone
|
||||
milestones.deletion_desc = Ang pagbura ng milestone ay tinatanggal ito sa lahat ng mga kaugnay na isyu. Magpatuloy?
|
||||
settings.discord_username = Username
|
||||
wiki.original_git_entry_tooltip = Itignan ang orihinal na Git file sa halip ng isang friendly na link.
|
||||
settings.add_team_duplicate = Nasa koponan na ang repositoryo
|
||||
settings.add_team = Magdagdag ng koponan
|
||||
settings.add_hook_success = Naidagdag na ang webhook.
|
||||
settings.use_external_wiki = Gumamit ng panlabas na wiki
|
||||
settings.external_wiki_url = URL ng panlabas na wiki
|
||||
settings.use_internal_wiki = Gamitin ang kasamang wiki
|
||||
settings.transfer_notices_1 = - Mawawalan ka ng access sa repsositoryo kung ilipat ito sa isang indibidwal na user.
|
||||
settings.event_issue_assign_desc = Na-assign o unassign ang isyu.
|
||||
settings.event_issue_label = Mga label
|
||||
settings.event_issue_label_desc = Nadagdag o tinanggal ang mga label ng isyu.
|
||||
settings.event_issue_milestone = Mga milestone
|
||||
settings.event_issue_milestone_desc = Dinagdag, tinanggal o binago ang milestone.
|
||||
activity.title.releases_published_by = %s nailabas ni/ng %s
|
||||
settings.projects_desc = I-enable ang mga proyekto sa repositoryo
|
||||
activity.published_release_label = Paglabas
|
||||
activity.no_git_activity = Walang anumang commit na aktibidad na nakatuon sa panahong ito.
|
||||
pulls.status_checks_warning = May mga ilang pagsusuri na nag-ulat ng mga babala
|
||||
pulls.status_checks_error = May ilang mga pagsusuri na nag-ulat ng mga error
|
||||
pulls.update_branch_rebase = I-update ang branch sa pamamagitan ng pag-rebase
|
||||
pulls.update_not_allowed = Hindi ka pinapayagang i-update ang branch
|
||||
pulls.clear_merge_message = I-clear ang mensahe ng pagsasama
|
||||
pulls.clear_merge_message_hint = Tinatanggal lamang ng pag-clear ng mensahe ng pagsasama ang nilalaman ng mensahe ng commit at pinapanatili ang mga na-generate na git trailer tulad ng "Co-Authored-By …".
|
||||
pulls.auto_merge_newly_scheduled = Nakaiskedyul ang hiling sa paghila na ito na maisama kapag magtagumpay ang lahat ng mga pagsusuri.
|
||||
pulls.auto_merge_canceled_schedule_comment = `kinansela ang awtomatikong pagsama ng hiling sa paghila na ito kapag magtagumpay ang lahat ng mga pagsusuri %[1]s`
|
||||
pulls.delete_after_merge.head_branch.insufficient_branch = Wala kang pahintulot para burahin ang head branch.
|
||||
milestones.new_subheader = Tinutulungan ka ng mga milestone na ayusin ang mga isyu at subaybayan ang kanilang pag-unlad.
|
||||
milestones.create = Gumawa ng milestone
|
||||
milestones.due_date = Takdang petsa (opsyonal)
|
||||
milestones.create_success = Ginawa na ang milestone na "%s".
|
||||
milestones.edit = Baguhin ang milestone
|
||||
milestones.edit_subheader = Ang mga milestone ay nag-aayos ng mga isyu at sumusubaybay sa pag-unlad.
|
||||
milestones.modify = I-update ang milestone
|
||||
milestones.filter_sort.earliest_due_data = Pinakamalapit na takdang petsa
|
||||
milestones.filter_sort.least_complete = Hindi bababa sa kumpleto
|
||||
signing.will_sign = Isa-sign ang commit gamit ang key na "%s".
|
||||
signing.wont_sign.error = May error na naganap habang sinusuri kung masa-sign ang commit.
|
||||
signing.wont_sign.always = Palaging naka-sign ang mga commit.
|
||||
signing.wont_sign.twofa = Kailangang naka-enable ang authentikasyong two factor para naka-sign ang mga commit.
|
||||
wiki.delete_page_notice_1 = Ang pagtanggal sa pahina ng wiki na "%s" ay hindi na mababawi. Magpatuloy?
|
||||
activity.title.releases_n = %d mga paglabas
|
||||
activity.published_prerelease_label = Pre-release
|
||||
activity.published_tag_label = Tag
|
||||
settings.mirror_settings.docs.doc_link_pull_section = ang "Pulling from a remote repository" na seksyon sa dokumentasyon.
|
||||
settings.mirror_settings.docs.pulling_remote_title = Paghila mula sa remote na repositoryo
|
||||
settings.mirror_settings.mirrored_repository = Naka-mirror na repositoryo
|
||||
settings.mirror_settings.push_mirror.remote_url = URL ng remote Git repository
|
||||
settings.units.overview = Pangkalahatang Ideya
|
||||
settings.update_settings = I-save ang mga setting
|
||||
settings.update_mirror_settings = I-update ang mga setting ng mirror
|
||||
settings.branches.update_default_branch = I-update ang default branch
|
||||
settings.advanced_settings = Mga advanced na setting
|
||||
settings.use_internal_issue_tracker = Gamitin ang kasamang tagasubaybay ng isyu
|
||||
settings.external_tracker_url = URL ng panlabas na tagasubaybay ng isyu
|
||||
settings.external_tracker_url_desc = Ire-redirect ang mga bisita sa URL ng panlabas na tagasubaybay kapag pipindutin ang mga isyu na tab.
|
||||
settings.tracker_url_format = URL format ng panlabas na tagasubaybay ng isyu
|
||||
settings.tracker_url_format_error = Hindi wastong URL ang URL format ng panlabas na tagasubaybay ng isyu.
|
||||
settings.tracker_issue_style.numeric = Numeric
|
||||
settings.tracker_issue_style.alphanumeric = Alphanumeric
|
||||
settings.tracker_issue_style.regexp_pattern = Pattern ng Regular na Ekspresyon
|
||||
settings.tracker_issue_style.regexp_pattern_desc = Ang unang captured group ay gagamitin sa kapalit ng <code>(index)</code>.
|
||||
settings.pulls.allow_rebase_update = I-enable ang pag-update ng hiling sa paghila sa pamamagitan ng rebase
|
||||
settings.admin_enable_health_check = I-enable ang pagsusuri ng kalusugan ng repositoryo (git fsck)
|
||||
settings.new_owner_has_same_repo = Ang bagong may-ari ay may repositoryo na may katulad na pangalan. Mangyaring pumili ng ibang pangalan.
|
||||
settings.convert = I-convert sa regular na repositoryo
|
||||
settings.convert_fork_desc = Maari mong i-convert ang fork na ito bilang regular na repositoryo. Hindi ito mababawi.
|
||||
settings.convert_fork_notices_1 = Ang operasyon na ito ay ico-convert ang fork bilang regular na repositoryo at hindi mababawi.
|
||||
settings.transfer_abort_invalid = Hindi mo makakansela ang isang hindi umiiral na paglipat ng repositoryo.
|
||||
settings.transfer_quota_exceeded = Ang bagong may-ari (%s) ay lumalagpas sa quota. Hindi nailipat ang repositoryo.
|
||||
settings.trust_model.committer = Taga-commit
|
||||
settings.trust_model.committer.long = Taga-commit: Pagkatiwalaan ang mga signature na tumutugma sa mga taga-commit (Tumutugma ito sa GitHub at pinipilit ang mga Forgejo signed na mga commit na Forgejo bilang taga-commit)
|
||||
settings.trust_model.collaboratorcommitter = Tagatulong+Taga-commit
|
||||
settings.trust_model.collaboratorcommitter.long = Tagatulong+Taga-commit: Pagkatiwalaan ang mga signature batay sa mga katulong na tumutugma sa taga-commit
|
||||
settings.wiki_rename_branch_main = I-normalize ang pangalan ng branch ng Wiki
|
||||
settings.wiki_rename_branch_main_notices_1 = <strong>HINDI MABABAWI</strong> ang operasyon na ito.
|
||||
settings.wiki_rename_branch_main_notices_2 = Permanente nitong papalitan ang pangalan ng internal branch ng wiki ng repositoryo ng %s. Ang mga umiiral na checkout ay dapat ma-update.
|
||||
settings.wiki_branch_rename_success = Matagumpay na na-normalize ang pangalan ng branch ng wiki ng repositoryo.
|
||||
settings.wiki_delete = Burahin ang data ng wiki
|
||||
settings.wiki_delete_notices_1 = - Permanente nitong buburahin at idi-disable ang wiki ng repositoryo para sa %s.
|
||||
settings.confirm_wiki_delete = Burahin ang data ng wiki
|
||||
settings.wiki_deletion_success = Binura na ang wiki data ng repositoryo.
|
||||
settings.delete = Burahin ang repositoryo na ito
|
||||
settings.delete_desc = Permanente ang pagbura ng repositoryo at hindi ito mababawi.
|
||||
settings.update_settings_no_unit = Dapat payagan ng repositoryo ang kahit isang uri ng pakikipag-ugnayan.
|
||||
settings.confirm_delete = Burahin ang repositoryo
|
||||
settings.add_collaborator = Magdagdag ng katulong
|
||||
settings.add_collaborator_duplicate = Nadagdag na ang tagatulong na ito sa repositoryo.
|
||||
settings.add_collaborator_blocked_our = Hindi madagdag ang tagatulong, dahil hinarang siya ng may-ari ng repositoryo.
|
||||
settings.add_collaborator_blocked_them = Hindi madagdag ang tagatulong, dahil hinarang niya ang may-ari ng repositoryo.
|
||||
settings.collaborator_deletion = Tanggalin ang Tagatulong
|
||||
settings.team_not_in_organization = Ang koponan ay hindi nasa katulad na organisasyon sa repositoryo
|
||||
settings.teams = Mga Koponan
|
||||
settings.add_team_success = May access na ang koponan sa repositoryo na ito.
|
||||
settings.remove_team_success = Tinanggal na ang access ng koponan sa repositoryo na ito.
|
||||
settings.webhook_deletion_desc = Ang pagtanggal ng webhook ay binubura rin ang mga setting at deliver history nito. Magpatuloy?
|
||||
settings.webhook.test_delivery_desc = Subukan ang webhook na ito gamit ng pekeng event.
|
||||
settings.webhook.response = Tugon
|
||||
settings.webhook.headers = Mga header
|
||||
settings.webhook.payload = Nilalaman
|
||||
settings.webhook.body = Katawan
|
||||
settings.webhook.replay.description = I-replay ang webhook na ito.
|
||||
settings.webhook.delivery.success = May nadagdag na event sa delivery queue. Maari magtagal ng ilang segundo bago makita sa delivery history.
|
||||
settings.githooks_desc = Pinapagana ng Git ang mga Git hook. Maari mong baguhin ang mga hook file sa ibaba para mag-set up ng mga custom na operasyon.
|
||||
settings.githook_name = Pangalan ng hook
|
||||
settings.githook_content = Nilalaman ng hook
|
||||
settings.update_githook = I-update ang hook
|
||||
settings.payload_url = Target na URL
|
||||
settings.http_method = Method ng HTTP
|
||||
settings.event_push_only = Mga push event
|
||||
settings.event_delete_desc = Binura ang branch o tag.
|
||||
settings.event_fork_desc = Na-fork ang repositoryo.
|
||||
settings.event_repository = Repositoryo
|
||||
settings.event_header_issue = Mga event sa isyu
|
||||
settings.event_header_pull_request = Mga event sa hiling sa paghila
|
||||
settings.event_pull_request_comment_desc = Gumawa, binago o binura ang komento sa hiling sa paghila.
|
||||
settings.event_pull_request_sync = Na-synchronize
|
||||
settings.event_pull_request_sync_desc = Na-update ang branch nang awtomatiko sa target branch.
|
||||
settings.event_pull_request_review_request = Mga hiling sa pagsuri
|
||||
settings.event_pull_request_merge = Pagsama ng hiling sa paghila
|
||||
settings.branch_filter = Filter ng branch
|
||||
settings.authorization_header = Awtorisasyon (Authrorization) na header
|
||||
settings.active = Aktibo
|
||||
settings.active_helper = Ang mga impormasyon tungkol sa mga na-trigger na event ay ipapadala sa webhook URL na ito.
|
||||
settings.update_webhook = I-update ang webhook
|
||||
settings.update_hook_success = Na-update na ang webhook.
|
||||
settings.delete_webhook = Tanggalin ang webhook
|
||||
settings.recent_deliveries = Mga kamakailang pag-deliver
|
||||
settings.hook_type = Uri ng hook
|
||||
settings.slack_token = Token
|
||||
settings.slack_domain = Domain
|
||||
settings.slack_channel = Channel
|
||||
settings.add_web_hook_desc = I-integrate ang <a target="_blank" rel="noreferrer" href="%s">%s</a> sa iyong repositoryo.
|
||||
settings.graphql_url = URL ng GraphQL
|
||||
settings.web_hook_name_gogs = Gogs
|
||||
settings.web_hook_name_slack = Slack
|
||||
settings.web_hook_name_discord = Discord
|
||||
settings.web_hook_name_dingtalk = DingTalk
|
||||
settings.web_hook_name_packagist = Packagist
|
||||
settings.packagist_api_token = API token
|
||||
settings.packagist_package_url = Package URL sa Packagist
|
||||
settings.web_hook_name_sourcehut_builds = Mga Build sa Sourcehut
|
||||
settings.sourcehut_builds.manifest_path = Manifest path ng build
|
||||
settings.sourcehut_builds.visibility = Visibility ng job
|
||||
settings.deploy_keys = Mga deploy key
|
||||
settings.add_deploy_key = Magdagdag ng deploy key
|
||||
settings.deploy_key_content = Nilalaman
|
||||
settings.deploy_key_deletion_desc = Ang pagtanggal ng deploy key ay tatanggihan ang pag-access sa repositoryo na ito. Magpatuloy?
|
||||
settings.deploy_key_deletion_success = Tinanggal na ang deploy key.
|
||||
settings.protected_branch = Proteksyon sa branch
|
||||
settings.protected_branch.delete_rule = Burahin ang rule
|
||||
settings.protect_new_rule = Gumawa ng bagong branch protection rule
|
||||
settings.protect_disable_push_desc = Walang pinapayagan na pagtulak sa branch na ito.
|
||||
settings.protect_enable_merge = I-enable ang pagsama
|
||||
settings.protect_merge_whitelist_committers = I-enable ang whitelist ng pagsasama
|
||||
pulls.update_branch_success = Matagumpay ang pag-update ng branch
|
||||
settings.protect_whitelist_committers = I-whitelist ang pinahigpit na pagtulak
|
||||
settings.site = Website
|
||||
settings.convert_confirm = I-convert ang repositoryo
|
||||
settings.webhook.replay.description_disabled = Para i-replay ang webhook na ito, i-activate ito.
|
||||
settings.tracker_issue_style.regexp = Regular na Ekspresyon
|
||||
settings.admin_stats_indexer = Taga-index ng istatistika ng code
|
||||
pulls.open_unmerged_pull_exists = `Hindi ka maaring gumawa ng pagbukas-muli na operasyon dahil may nakabinbin na hiling sa paghila (#%d) na may magkatulad na katangian.`
|
||||
milestones.deletion_success = Binura na ang milestone.
|
||||
pulls.auto_merge_has_pending_schedule = Naiskedyul ni %[1]s na awtomatiko na isama ang hiling sa paghila na ito kapag magtagumpay ang lahat ng mga pagsusuri %[2]s.
|
||||
issues.summary_card_alt = Pangkalahatang-ideyang card ng isyu na tawag na "%s" sa repositoryong %s
|
||||
pulls.status_checks_hide_all = Itago ang lahat ng mga pagususri
|
||||
pulls.cmd_instruction_merge_warning = <b>Babala:</b> Hindi naka-enable ang "I-auto detect ang manwal na pagsasama" na setting para sa repositoryo na ito, kailangan mong markahan ang hiling sa paghila na ito bilang manwal na naisama pagkatapos.
|
||||
pulls.auto_merge_newly_scheduled_comment = `naiskedyul ang hiling sa paghila na ito na awtomatikong maisama kapag magtagumpay ang lahat ng mga pagsusuri %[1]s`
|
||||
signing.wont_sign.headsigned = Hindi isa-sign ang pagsama na ito dahil hindi naka-sign ang head commit.
|
||||
settings.mirror_settings.docs.pull_mirror_instructions = Para mag-set up ng pull mirror, mangyaring sumangguni sa:
|
||||
milestones.invalid_due_date_format = Kailangang "yyyy-mm-dd" na format ang takdang petsa.
|
||||
signing.wont_sign.nokey = Walang key ang instansya na ito para i-sign ang commit na ito.
|
||||
activity.title.releases_1 = %d paglabas
|
||||
settings.mirror_settings.docs.more_information_if_disabled = Maari kang matuto pa tungkol sa mga push at pull na mirror dito:
|
||||
settings.branches.switch_default_branch = Magpalit ng default branch
|
||||
settings.convert_notices_1 = Ang operasyon na ito ay ico-covert ang mirror sa regular na repositoryo at hindi mababawi.
|
||||
settings.convert_fork_succeed = Na-convert na ang fork sa regular na repositoryo.
|
||||
settings.external_tracker_url_error = Hindi wastong URL ang URL ng panlabas na tagasubaybay ng isyu.
|
||||
settings.tracker_url_format_desc = Gamitin ang mga placeholder na <code>(user)</code>, <code>(repo)</code> at <code>(index)</code> para sa username, pangalan ng repositoryo, at index ng isyu.
|
||||
settings.pulls.enable_autodetect_manual_merge = I-enable ang awtomatikong i-detect ang manwal na pagsasama (Tandaan: sa mga espesyal na kaso, maaaring mangyari ang mga maling paghuhusga)
|
||||
settings.transfer_notices_2 = - Mapapanatili mo ang access sa repositoryo kung ilipat mo ito sa organisasyon na minamay-ari mo o pinapangasiwaan mo.
|
||||
settings.trust_model.collaboratorcommitter.desc = Ang mga angkop na signature mula sa mga tagatulong sa repositoryo na ito ay mamarkahan bilang "pinagkakatiwalaan" kapag tumutugma sila sa taga-commit. Kung hindi, ang mga angkop na signature ay imamarka bilang "hindi pinagkakatiwalaan" kapag ang signature ay tumutugma sa taga-commit at "hindi tumutugma" kung hindi. Pinipilit nito na markahan ang Forgejo bilang taga-commit sa mga naka-sign na commit na ang aktwal na taga-commit na nakamarka bilang Co-Authored-By: at Co-Committed-By: trailer sa commit. Ang default na Forgejo key ay dapat tumugma sa User sa database.
|
||||
settings.update_settings_success = Nabago na ang mga setting ng repositoryo.
|
||||
settings.trust_model.committer.desc = Ang mga angkop na signature ay mamamarkahan lamang bilang "pinagkakatiwalaan" kapag tumutugma sila sa taga-commit, kung hindi ay mamarkahan sila bilang "hindi tugma". Pinipilit nito na Forgejo ang magiging taga-commit para sa mga naka-sign na commit na may aktwal na taga-commit bilang Co-authored-by: at Co-committed-by: trailer sa commit. Ang default na Forgejo key ay dapat tumugma sa User sa database.
|
||||
settings.delete_notices_1 = - <strong>HINDI MABABAWI</strong> ang operasyon na ito.
|
||||
settings.delete_notices_2 = - Permanenteng buburahin ang <strong>%s</strong> na repositoryo kasama ang code, mga isyu, mga komento, data ng wiki at mga setting ng tagatulong ang operasyon na ito.
|
||||
settings.add_collaborator_inactive_user = Hindi makakadagdag ng hindi aktibong user bilang tagatulong.
|
||||
settings.change_team_access_not_allowed = Ang pagbago ng pag-access para sa koponan para sa repositoryo na ito ay pinahigpitan sa may-ari ng organisasyon
|
||||
settings.change_team_permission_tip = Ang mga pahintulot ng koponan ay nakatakda sa pahina ng mga setting koponan at hindi mababago kada repositoryo
|
||||
settings.hooks_desc = Ang mga webhook ay awtomatikong gumagawa ng HTTP POST request sa server kung saan ang ilang mga Forgejo na event ay ma-trigger. Magbasa pa sa <a target="_blank" rel="noopener noreferrer" href="%s">guide ng mga webhook</a>.
|
||||
settings.githook_edit_desc = Kapag hindi aktibo ang hook, ipapakita ang mga sample na nilalaman. Idi-disable ang hook na ito kapag iwanang walang laman na value ang nilalaman.
|
||||
settings.key_been_used = Ang deploy key na may katulad na nilalaman ay ginagamit na.
|
||||
settings.event_issue_comment_desc = Gumawa, binura o binago ang komento ng isyu.
|
||||
settings.event_pull_request_label_desc = Nadagdag o tinanggal ang mga label ng hiling sa paghila.
|
||||
settings.event_package_desc = Ginawa o binura ang package sa repositoryo.
|
||||
settings.branch_filter_desc = Branch whitelist para sa pagtulak, paggawa ng branch at pagbura ng branch na event, natakda bilang glob pattern. Kapag walang laman o <code>*</code>, inuulat ang event para sa lahat ng mga branch. Tignan ang <a href="%[1]s">%[2]s</a> na dokumentasyon para sa syntax. Halimbawa: <code>master</code>, <code>{master,release*}</code>.
|
||||
settings.sourcehut_builds.secrets_helper = Bigyan ang job ng access sa build secrets (kinakailangan ang SECRETS:RO na grant)
|
||||
settings.branch_protection = Mga protection rule para sa branch na "<b>%s</b>"
|
||||
settings.sourcehut_builds.access_token_helper = Access token na may JOBS:RW na grant. Mag-generate ng <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht na token</a> o ng <a target="_blank" rel="noopener noreferrer" href="%s">builds.sr.ht na token na may secrets access</a> sa meta.sr.ht.
|
||||
settings.protect_enable_push_desc = Ang sinuman na may write access ay mapapayagan na magtulak sa branch na ito (pero hindi ang pinwersang pagtulak).
|
||||
settings.key_name_used = Umiiral na ang deploy key na may katulad na pangalan.
|
||||
settings.webhook.request = Hiling
|
||||
settings.event_package = Package
|
||||
settings.no_deploy_keys = Wala pang mga deploy key sa ngayon.
|
||||
settings.transfer_succeed = Nalipat na ang repositoryo.
|
||||
settings.delete_notices_fork_1 = - Magiging malaya ang mga fork ng repositoryo na ito pagkatapos ng pagbura.
|
||||
settings.deletion_success = Nabura na ang repositoryo.
|
||||
settings.web_hook_name_msteams = Microsoft Teams
|
||||
pulls.auto_merge_cancel_schedule = Kanselahin ang awtomatikong pagsasama
|
||||
pulls.auto_merge_not_scheduled = Hindi naka-iskedyul ang hiling sa paghila na ito na awtomatikong magsama.
|
||||
settings.convert_succeed = Na-convert na ang mirror sa isang regular na repositoryo.
|
||||
settings.convert_fork = I-convert sa regular na repositoryo
|
||||
settings.webhook.test_delivery = Subukan ang pag-deliver
|
||||
settings.webhook_deletion_success = Tinanggal na ang webhook.
|
||||
settings.event_header_repository = Mga event ng repositoryo
|
||||
contributors.contribution_type.filter_label = Uri ng ambag:
|
||||
contributors.contribution_type.commits = Mga commit
|
||||
settings.enter_repo_name = Ilagay ang may-ari at pangalan ng repositoryo nang eksakto na pinapakita:
|
||||
settings.transfer_abort_success = Matagumpay na nakansela ang paglipat ng repositoryo kay/sa %s.
|
||||
settings.transfer_desc = Ilipat ang repositoryo sa isang user o organisasyon na kung saan may tagapangasiwa ka na pahintulot.
|
||||
settings.confirmation_string = String ng kumpirmasyon
|
||||
settings.event_release = Paglabas
|
||||
settings.event_release_desc = Na-publish, nabago, o nabura ang release sa repositoryo.
|
||||
settings.add_key_success = Nadagdag na ang deploy key na "%s".
|
||||
wiki.page_already_exists = Umiiral na ang pahina ng wiki na may katulad na pangalan.
|
||||
settings.external_wiki_url_desc = Ire-redirect ang mga bisita sa URL ng panlabas na wiki kapag pipindutin ang wiki tab.
|
||||
settings.use_external_issue_tracker = Gumamit ng panlabas na tagasubaybay na isyu
|
||||
settings.wiki_desc = I-enable ang wiki ng repositoryo
|
||||
settings.trust_model.default.desc = Gamitin ang default na modelo ng pagkatiwala ng repositoryo para sa installation na ito.
|
||||
settings.add_webhook.invalid_path = Hindi maaring maglaman ang path ng parte na "." o ".." o walang laman na string. Hindi maaring magsimula o magtapos sa slash.
|
||||
settings.webhook_deletion = Tanggalin ang webhook
|
||||
settings.add_webhook.invalid_channel_name = Hindi maaring walang laman ang pangalan ng channel ng webhook at hindi maaring maglaman lang ng # na character.
|
||||
pulls.update_branch = I-update ang branch sa pamamagitan ng pagsama
|
||||
pulls.status_checks_show_all = Ipakita ang lahat ng mga pagsusuri
|
||||
pulls.cmd_instruction_checkout_title = I-checkout
|
||||
pulls.cmd_instruction_checkout_desc = Sa iyong repositoryo ng proyekto, mag-check out ng bagong branch at subukan ang mga pagbabago.
|
||||
activity.title.unresolved_conv_1 = %d hindi naresolbang paguusap
|
||||
settings.mirror_settings.docs.no_new_mirrors = Ang iyong repositoryo ay nagsasalamin ng mga pagbabago sa o mula sa ibang repositoryo. Mangyaring tandaan na hindi ka makakagawa ng mga bagong salamin sa oras na ito.
|
||||
settings.mirror_settings.push_mirror.edit_sync_time = I-edit ang pagitan ng mirror sync
|
||||
settings.sync_mirror = I-synchronize ngayon
|
||||
settings.issues_desc = I-enable ang tagasubaybay ng isyu ng repositoryo
|
||||
settings.reindex_requested = Nahiling ang reindex
|
||||
settings.releases_desc = I-enable ang mga paglalabas sa repositoryo
|
||||
settings.wiki_rename_branch_main_desc = Baguhin ang pangalan ng branch na ginagamit ng internal ng Wiki sa "%s". Ang pagbabago na ito ay permanente at hindi mababawi.
|
||||
settings.secret = Sikreto
|
||||
settings.slack_icon_url = URL ng icon
|
||||
settings.event_desc = I-trigger sa:
|
||||
settings.event_push_desc = Git push sa repositoryo.
|
||||
settings.web_hook_name_telegram = Telegram
|
||||
settings.web_hook_name_larksuite_only = Lark Suite
|
||||
settings.web_hook_name_wechatwork = WeCom (Wechat Work)
|
||||
settings.web_hook_name_feishu_only = Feishu
|
||||
settings.branches = Mga branch
|
||||
pulls.status_checks_failure = Nabigo ang ilang mga pagsusuri
|
||||
pulls.auto_merge_canceled_schedule = Nakansela ang awtomatikong pagsasama para sa hiling sa paghila na ito.
|
||||
settings.confirm_wiki_branch_rename = Baguhin ang pangalan ng wiki branch
|
||||
settings.wiki_delete_desc = Permanente ang pagbura ng data ng wiki ng repositoryo at hindi mababawi.
|
||||
settings.event_delete = Burahin
|
||||
settings.pulls.default_allow_edits_from_maintainers = Payagan ang mga pagbabago sa mga tagapagpanatili bilang default
|
||||
settings.admin_code_indexer = Taga-index ng code
|
||||
settings.pulls.default_delete_branch_after_merge = Burahin ang branch ng hiling sa paghila pagkatapos ng pagsasama bilang default
|
||||
settings.trust_model.default = Default na modelo ng pagkatiwala
|
||||
settings.trust_model.collaborator.desc = Ang mga angkop na signature mula sa mga katulong sa repositoryo na ito ay mamarkahan bilang "pinagkakatiwalaan" - (kung tumutugma ito sa taga-commit o hindi). Kung hindi, ang mga angkop na signature ay mamarkahan bilang "hindi pinagkakatiwalaan" kapag tumutugma ang signature sa taga-commit at "hindi tumutugma" kapag hindi.
|
||||
settings.trust_model = Modelo ng pagkatiwala ng signature
|
||||
activity.commit = Mga aktibidad sa commit
|
||||
settings.mirror_settings.pushed_repository = Natulak na repositoryo
|
||||
settings.mirror_settings.direction = Direksyon
|
||||
settings.tracker_issue_style = Number Format ng panlabas na tagasubaybay ng isyu
|
||||
settings.web_hook_name_feishu = Feishu / Lark Suite
|
||||
pulls.agit_explanation = Ginawa gamit ang AGit workflow. Nagbibigay daan ang AGit sa mga kontribyutor na magmungkahi ng mga pagbabago gamit ang "git push" nang hindi gumawa ng fork o bagong branch.
|
||||
milestones.filter_sort.latest_due_date = Pinakamalayong takdang petsa
|
||||
activity = Aktibidad
|
||||
activity.unresolved_conv_desc = Ang mga kamakailang nabagong isyu at hiling sa paghila na ito ay hindi pa naresolba.
|
||||
signing.wont_sign.approved = Hindi isa-sign ang pagsama na ito dahil hindi nakaapruba ang PR.
|
||||
ext_wiki = Panlabas na Wiki
|
||||
milestones.filter_sort.name = Pangalan
|
||||
signing.wont_sign.parentsigned = Hindi isa-sign ang commit na ito dahil hindi naka-sign ang parent commit.
|
||||
signing.wont_sign.commitssigned = Hindi isa-sign ang pagsama na ito dahil hindi naka-sign ang lahat ng mga nauugnay na commit.
|
||||
pulls.outdated_with_base_branch = Ang branch na ito ay hindi napapanahon sa base branch
|
||||
milestones.clear = I-clear
|
||||
settings.mirror_settings.docs.doc_link_title = Paano ako mag-mirror ng mga repositoryo?
|
||||
settings.pull_mirror_sync_quota_exceeded = Nalagpasan ang quota, hindi hihila ng mga pagbabago.
|
||||
settings.mirror_settings.push_mirror.none_ssh = Wala
|
||||
settings.mirror_settings.push_mirror.copy_public_key = Kopyahin ang publikong key
|
||||
pulls.delete_after_merge.head_branch.is_protected = Ang head branch na gusto mong burahin ay isang pinoprotektahang branch at hindi maaring burahin.
|
||||
pulls.delete_after_merge.head_branch.is_default = Ang head branch na gusto mong burahin ay ang default branch at hindi maaring burahin.
|
||||
issues.num_reviews_few = %d mga pagsusuri
|
||||
issues.num_reviews_one = %d pagsusuri
|
||||
|
||||
[search]
|
||||
commit_kind = Maghanap ng mga commit...
|
||||
|
@ -2712,4 +3093,4 @@ filepreview.line = Linya %[1]d sa %[2]s
|
|||
deleted.display_name = Binurang Proyekto
|
||||
|
||||
[translation_meta]
|
||||
test = I love Forgejo and Bocchi The Rock! -- Ikuyo Kita
|
||||
test = I love Forgejo and Bocchi The Rock! -- Ikuyo Kita
|
||||
|
|
|
@ -1351,7 +1351,7 @@ editor.or=ou
|
|||
editor.cancel_lower=Annuler
|
||||
editor.commit_signed_changes=Réviser les changements (signé)
|
||||
editor.commit_changes=Réviser les changements
|
||||
editor.add_tmpl=Ajouter "<filename>"
|
||||
editor.add_tmpl=Ajouter "<%s>"
|
||||
editor.add=Ajouter %s
|
||||
editor.update=Actualiser %s
|
||||
editor.delete=Supprimer %s
|
||||
|
@ -3915,8 +3915,8 @@ workflow.dispatch.input_required = Le champ "%s" est obligatoire.
|
|||
workflow.dispatch.invalid_input_type = Type invalide pour le champ "%s".
|
||||
workflow.dispatch.warn_input_limit = Affichage des %d premiers champs seulement.
|
||||
runs.expire_log_message = Les journaux ont été purgés car ils étaient trop anciens.
|
||||
runs.no_workflows.help_write_access = Vous ne savez pas par où commencer avec les actions Forgejo ? Regarder la section <a target="_blank" rel="noopener noreferrer" href="%s"> démarrage rapide dans la documentation utilisateur</a> pour écrire votre premier workflow, puis <a target="_blank" rel="noopener noreferrer" href="%s">mettre en place un Forgejo runner</a> pour exécuter vos jobs.
|
||||
runs.no_workflows.help_no_write_access = Pour en savoir plus sur les Actions Forgejo, consultez <a target="_blank" rel="noopener noreferrer" href="%s">la documentation</a>.
|
||||
runs.no_workflows.help_write_access = Vous ne savez pas par où commencer avec Forgejo Actions ? Regardez la section <a target="_blank" rel="noopener noreferrer" href="%s"> démarrage rapide dans la documentation utilisateur</a> pour écrire votre premier workflow, puis <a target="_blank" rel="noopener noreferrer" href="%s">mettre en place un Forgejo runner</a> pour exécuter vos jobs.
|
||||
runs.no_workflows.help_no_write_access = Pour en savoir plus sur Forgejo Actions, consultez <a target="_blank" rel="noopener noreferrer" href="%s">la documentation</a>.
|
||||
|
||||
[projects]
|
||||
type-1.display_name=Projet personnel
|
||||
|
@ -4001,4 +4001,4 @@ issues.write = <b>Écrire :</b> Fermer des tickets et gérer les métadonnées t
|
|||
pulls.read = <b>Lire :</b> Lire et créer des demandes de tirage.
|
||||
|
||||
[translation_meta]
|
||||
test = Ceci est une chaîne de test. Elle n'est pas affichée dans l'interface de Forgejo mais est utilisée à des fins de test. N'hésitez pas à entrer 'ok' pour gagner du temps (ou un fait amusant de votre choix) pour atteindre ce doux 100 % de complétion :)
|
||||
test = Ceci est une chaîne de test. Elle n'est pas affichée dans l'interface de Forgejo mais est utilisée à des fins de test. N'hésitez pas à entrer 'ok' pour gagner du temps (ou un fait amusant de votre choix) pour atteindre ce doux 100 % de complétion :)
|
||||
|
|
|
@ -808,7 +808,7 @@ editor.name_your_file=Fájl elnevezése…
|
|||
editor.or=vagy
|
||||
editor.cancel_lower=Mégse
|
||||
editor.commit_changes=Változások Véglegesítése
|
||||
editor.add_tmpl='<filename>' hozzáadása
|
||||
editor.add_tmpl='<%s>' hozzáadása
|
||||
editor.commit_message_desc=Opcionális hosszabb leírás hozzáadása…
|
||||
editor.commit_directly_to_this_branch=Mentés egyenesen a(z) <strong class="%[2]s">%[1]s</strong> ágba.
|
||||
editor.create_new_branch=Hozzon létre egy <strong>új ágat</strong> ennek a commit-nak és indíts egy egyesítési kérést.
|
||||
|
@ -1793,4 +1793,4 @@ branch_kind = Ágak keresése...
|
|||
no_results = Nincsenek megfelelő találatok.
|
||||
issue_kind = Hibajegyek keresése...
|
||||
exact_tooltip = Csak a keresési kifejezést pontosan tartalmazó találatok mutatása
|
||||
keyword_search_unavailable = A kulcsszó alapú keresés jelenleg nem elérhető. Kérlek értesítsd az oldal rendszergazdáját.
|
||||
keyword_search_unavailable = A kulcsszó alapú keresés jelenleg nem elérhető. Kérlek értesítsd az oldal rendszergazdáját.
|
||||
|
|
|
@ -619,7 +619,7 @@ editor.filename_help=Tambahkan direktori dengan mengetikkan nama direktori diiku
|
|||
editor.or=atau
|
||||
editor.cancel_lower=Batalkan
|
||||
editor.commit_changes=Perubahan komitmen
|
||||
editor.add_tmpl=Tambahkan '<filename>'
|
||||
editor.add_tmpl=Tambahkan '<%s>'
|
||||
editor.commit_message_desc=Tambahkan deskripsi opsional yang panjang…
|
||||
editor.commit_directly_to_this_branch=Komitmen langsung ke <strong class="%[2]s">%[1]s</strong> cabang.
|
||||
editor.create_new_branch=Membuat <strong>new branch</strong> untuk tarik komit ini mulai permintaan.
|
||||
|
@ -1344,4 +1344,4 @@ runs.commit=Memperbuat
|
|||
|
||||
[projects]
|
||||
|
||||
[git.filemode]
|
||||
[git.filemode]
|
||||
|
|
|
@ -698,7 +698,7 @@ editor.delete_this_file=Eyða Skrá
|
|||
editor.name_your_file=Nefndu skrána þína…
|
||||
editor.or=eða
|
||||
editor.cancel_lower=Hætta við
|
||||
editor.add_tmpl=Bæta við „<filename>“
|
||||
editor.add_tmpl=Bæta við „<%s>“
|
||||
editor.create_new_branch=Búðu til <strong>nýja grein</strong> og sameiningarbeiðni fyrir þetta framlag.
|
||||
editor.create_new_branch_np=Búðu til <strong>nýja grein</strong> fyrir þetta framlag.
|
||||
editor.new_branch_name_desc=Heiti nýjar greinar…
|
||||
|
@ -1370,4 +1370,4 @@ runs.commit=Framlag
|
|||
|
||||
[projects]
|
||||
|
||||
[git.filemode]
|
||||
[git.filemode]
|
||||
|
|
|
@ -1298,7 +1298,7 @@ editor.or=o
|
|||
editor.cancel_lower=Annulla
|
||||
editor.commit_signed_changes=Conferma modifiche firmate
|
||||
editor.commit_changes=Conferma le modifiche
|
||||
editor.add_tmpl=Aggiungi "<filename>"
|
||||
editor.add_tmpl=Aggiungi "<%s>"
|
||||
editor.patch=Applica Patch
|
||||
editor.patching=Patching:
|
||||
editor.new_patch=Nuova Patch
|
||||
|
@ -3894,4 +3894,4 @@ b = B
|
|||
[markup]
|
||||
filepreview.lines = Linee da %[1]d a %[2]d in %[3]s
|
||||
filepreview.truncated = L'anteprima è stata troncata
|
||||
filepreview.line = Linea %[1]d in %[2]s
|
||||
filepreview.line = Linea %[1]d in %[2]s
|
||||
|
|
|
@ -1342,7 +1342,8 @@ editor.or=または
|
|||
editor.cancel_lower=キャンセル
|
||||
editor.commit_signed_changes=署名した変更をコミット
|
||||
editor.commit_changes=変更をコミット
|
||||
editor.add_tmpl="<ファイル名>" を追加
|
||||
editor.add_tmpl="<%s>" を追加
|
||||
editor.add_tmpl.filename = ファイル名
|
||||
editor.add=%s を追加
|
||||
editor.update=%s を更新
|
||||
editor.delete=%s を削除
|
||||
|
@ -3955,4 +3956,4 @@ projects.read = <b>読み取り:</b> リポジトリ プロジェクト ボー
|
|||
actions.read = <b>読み取り:</b> 統合された CI/CD パイプラインとそのログを表示します。
|
||||
|
||||
[translation_meta]
|
||||
test = これはテスト文字列です。Forgejo UI には表示されませんが、テスト目的で使用されます。早く済ませるために"ok"と入力するか楽しかった出来事を入力して下さい。そうすれば、完了することができます :)
|
||||
test = これはテスト文字列です。Forgejo UI には表示されませんが、テスト目的で使用されます。早く済ませるために"ok"と入力するか楽しかった出来事を入力して下さい。そうすれば、完了することができます :)
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -673,7 +673,8 @@ editor.filename_help=ഒരു ഡയറക്ടറിയുടെ പേര
|
|||
editor.or=അഥവാ
|
||||
editor.cancel_lower=റദ്ദാക്കുക
|
||||
editor.commit_changes=മാറ്റങ്ങൾ വരുത്തുക
|
||||
editor.add_tmpl='<ഫയല്>' ചേർക്കുക
|
||||
editor.add_tmpl='<%s>' ചേർക്കുക
|
||||
editor.add_tmpl.filename = ഫയല്
|
||||
editor.add=%s ചേര്ക്കുക
|
||||
editor.update=%s പുതുക്കുക
|
||||
editor.delete=%s നീക്കം ചെയ്യുക
|
||||
|
@ -783,4 +784,4 @@ repos.issues=ഇഷ്യൂകള്
|
|||
|
||||
[units]
|
||||
|
||||
[packages]
|
||||
[packages]
|
||||
|
|
|
@ -141,6 +141,7 @@ new_org.link = Neje Vereenigung
|
|||
concept_user_organization = Vereenigung
|
||||
filter.clear = Filters leegmaken
|
||||
filter.is_mirror = Spegels
|
||||
copy_path = Padd koperen
|
||||
|
||||
[search]
|
||||
search = Söken …
|
||||
|
@ -1120,7 +1121,8 @@ editor.or = of
|
|||
editor.cancel_lower = Ofbreken
|
||||
editor.commit_signed_changes = Unnerschrieven Ännerns kommitteren
|
||||
editor.commit_changes = Ännerns kommitteren
|
||||
editor.add_tmpl = »›Dateinaam‹« hentofögen
|
||||
editor.add_tmpl = »<%s>« hentofögen
|
||||
editor.add_tmpl.filename = Dateinaam
|
||||
editor.add = %s hentofögen
|
||||
editor.update = %s vernejen
|
||||
editor.delete = %s lösken
|
||||
|
@ -1294,20 +1296,20 @@ issues.new_label_desc_placeholder = Beschrieven
|
|||
issues.create_label = Vermark maken
|
||||
issues.label_templates.helper = Köör eene Vermarkens-Sammlung ut
|
||||
issues.label_templates.use = Vermarkens-Sammlung bruken
|
||||
issues.add_labels = hett de Vermarkens %s %s hentoföögt
|
||||
issues.remove_label = hett de Vermark %s %s wegdaan
|
||||
issues.add_milestone_at = `hett dat to de Marksteen <b>%s</b> hentoföögt`
|
||||
issues.add_project_at = `hett dat to de Projekt <b>%s</b> hentoföögt`
|
||||
issues.change_milestone_at = `hett de Marksteen vun <b>%s</b> to <b>%s</b> ännert`
|
||||
issues.remove_milestone_at = `hett dat vun de Marksteen <b>%s</b> wegdaan`
|
||||
issues.remove_project_at = `hett dat vun de Projekt <b>%s</b> wegdaan`
|
||||
issues.add_labels = hett %[2]s de Vermarkens %[1]s hentoföögt
|
||||
issues.remove_label = hett %[2]s de Vermark %[1]s wegdaan
|
||||
issues.add_milestone_at = `hett dat %[2]s to de Marksteen <b>%[1]s</b> hentoföögt`
|
||||
issues.add_project_at = `hett dat %[2]s to de Projekt <b>%[1]s</b> hentoföögt`
|
||||
issues.change_milestone_at = `hett %[3]s de Marksteen vun <b>%[1]s</b> to <b>%[2]s</b> ännert`
|
||||
issues.remove_milestone_at = `hett dat %[2]s vun de Marksteen <b>%[1]s</b> wegdaan`
|
||||
issues.remove_project_at = `hett dat %[2]s vun de Projekt <b>%[1]s</b> wegdaan`
|
||||
issues.deleted_milestone = `(lösket)`
|
||||
issues.deleted_project = `(lösket)`
|
||||
issues.self_assign_at = `hett dat %s sik sülven towiesen`
|
||||
issues.remove_self_assignment = `hett sien Towiesen %s wegnohmen`
|
||||
issues.change_title_at = `hett de Titel vun <b><strike>%s</strike></b> to <b>%s</b> %s ännert`
|
||||
issues.change_ref_at = `hett de Nömen vun <b><strike>%s</strike></b> to <b>%s</b> %s ännert`
|
||||
issues.delete_branch_at = `hett de Twieg <b>%s</b> %s lösket`
|
||||
issues.change_title_at = `hett %[3]s de Titel vun <b><strike>%[1]s</strike></b> to <b>%[2]s</b> ännert`
|
||||
issues.change_ref_at = `hett %[3]s de Nömen vun <b><strike>%[1]s</strike></b> to <b>%[2]s</b> ännert`
|
||||
issues.delete_branch_at = `hett %[2]s de Twieg <b>%[1]s</b> lösket`
|
||||
issues.filter_label = Vermark
|
||||
issues.filter_label_exclude = `Bruuk <code>Alt</code>+<code>Klick/Enter</code>, um Vermarkens uttosluten`
|
||||
issues.filter_label_no_select = All Vermarkens
|
||||
|
@ -1362,29 +1364,29 @@ issues.context.delete = Lösken
|
|||
issues.no_content = Keen Beschrieven angeven.
|
||||
issues.choose.get_started = Lössleggen
|
||||
issues.label_templates.fail_to_load_file = Kunn de Vermark-Vörlaag-Datei »%s« nich laden: %v
|
||||
issues.add_label = hett de Vermark %s %s hentoföögt
|
||||
issues.add_label = hett %[2]s de Vermark %[1]s hentoföögt
|
||||
issues.add_assignee_at = `is vun <b>%s</b> %s towiesen worden`
|
||||
issues.action_milestone_no_select = Keen Marksteen
|
||||
issues.choose.blank_about = Een nejes Gefall vun de Normaal-Vörlaag maken.
|
||||
issues.create = Gefall maken
|
||||
issues.label_templates.title = Eene Vermark-Sammlung laden
|
||||
issues.label_templates.info = Dat gifft noch keene Vermarkens. Maak eenen Vermark mit »Nejer Vermark« of bruuk eene Vermarkens-Sammlung:
|
||||
issues.change_project_at = `hett dat Projekt vun <b>%s</b> to <b>%s</b> ännert`
|
||||
issues.change_project_at = `hett %[3]s dat Projekt vun <b>%[1]s</b> to <b>%[2]s</b> ännert`
|
||||
issues.remove_assignee_at = `is sien Towiesen vun <b>%s</b> %s wegnohmen worden`
|
||||
issues.open_title = Open
|
||||
issues.close = Gefall dichtmaken
|
||||
issues.choose.ignore_invalid_templates = Ungültig Vörlagens sünd ignoreert worden
|
||||
issues.add_ref_at = `hett de Nömen <b>%s</b> %s hentoföögt`
|
||||
issues.add_ref_at = `hett %[2]s de Nömen <b>%[1]s</b> hentoföögt`
|
||||
issues.filter_type.all_issues = All Gefallens
|
||||
issues.filter_type.created_by_you = Vun di maakt
|
||||
issues.filter_milestone_closed = Dichtmaakt Markstenen
|
||||
issues.commented_at = `hett <a href="#%s">%s</a> kommenteert`
|
||||
issues.remove_labels = hett de Vermarkens %s %s wegdaan
|
||||
issues.remove_labels = hett %[2]s de Vermarkens %[1]s wegdaan
|
||||
issues.filter_type = Aard
|
||||
pulls.merged_by = vun <a href="%[2]s">%[3]s</a> is %[1]s tosamenföhrt worden
|
||||
issues.next = Anner
|
||||
issues.add_remove_labels = hett de Vermarkens %s hentoföögt un %s %s wegdaan
|
||||
issues.remove_ref_at = `hett de Nömen <b>%s</b> %s wegdaan`
|
||||
issues.add_remove_labels = hett %[3]s de Vermarkens %[1]s hentoföögt un %[2]s wegdaan
|
||||
issues.remove_ref_at = `hett %[2]s de Nömen <b>%[1]s</b> wegdaan`
|
||||
issues.filter_milestone_all = All Markstenen
|
||||
issues.filter_type.reviewed_by_you = Vun di nakiekt
|
||||
issues.filter_sort.fewestforks = Minnste Gabels
|
||||
|
@ -1492,14 +1494,14 @@ issues.add_time_sum_to_small = Keene Tied is indragen worden.
|
|||
issues.time_spent_total = Tied bruukt all tosamen
|
||||
issues.time_spent_from_all_authors = `Tied bruukt all tosamen: %s`
|
||||
issues.due_date = Anstahns-Datum
|
||||
issues.push_commit_1 = hett %d Kommitteren %s hentoföögt
|
||||
issues.push_commits_n = hett %d Kommitterens %s hentoföögt
|
||||
issues.push_commit_1 = hett %[2]s %[1]d Kommitteren hentoföögt
|
||||
issues.push_commits_n = hett %[2]s %[1]d Kommitterens hentoföögt
|
||||
issues.force_push_compare = Verglieken
|
||||
issues.due_date_form_edit = Bewarken
|
||||
issues.due_date_form_remove = Wegdoon
|
||||
issues.due_date_not_set = Keen Anstahns-Datum sett.
|
||||
issues.due_date_added = hett dat Anstahns-Datum %s %s hentoföögt
|
||||
issues.due_date_remove = hett dat Anstahns-Datum %s %s wegdaan
|
||||
issues.due_date_added = hett %[2]s dat Anstahns-Datum %[1]s hentoföögt
|
||||
issues.due_date_remove = hett %[2]s dat Anstahns-Datum %[1]s wegdaan
|
||||
issues.due_date_overdue = Staht al lang an
|
||||
issues.dependency.title = Ofhangens
|
||||
issues.dependency.issue_no_dependencies = Keene Ofhangens sett.
|
||||
|
@ -1533,7 +1535,7 @@ issues.review.reject = hett %s um Ännerns beden
|
|||
issues.review.remove_review_request = hett %[2]s de Nakieken-Anfraag för %[1]s wegdaan
|
||||
issues.review.remove_review_request_self = hett %s dat Nakieken verweigert
|
||||
issues.unlock_error = Kann een Gefall nich upsluten, wenn ’t nich tosloten is.
|
||||
issues.lock_with_reason = hett dat um <strong>%s</strong> %s tosluten un Snack up Mitarbeiders begrenzt
|
||||
issues.lock_with_reason = hett dat %[2]s um <strong>%[1]s</strong> tosluten un Snack up Mitarbeiders begrenzt
|
||||
issues.unpin_comment = hett dat %s lössstoken
|
||||
issues.lock.notice_1 = - Anner Brukers könen keene nejen Kommentaren to deesem Gefall hentofögen.
|
||||
issues.stop_tracking = Tiednehmer anhollen
|
||||
|
@ -1548,7 +1550,7 @@ issues.lock.notice_2 = - Du un anner Mitarbeiders mit Togriep to deesem Reposito
|
|||
issues.due_date_modified = hett dat Anstahns-Datum vun %[2]s to %[1]s %[3]s ännert
|
||||
issues.dependency.issue_remove_text = Dat word de Ofhangen vun deesem Gefall wegdoon. Wiedermaken?
|
||||
issues.review.approve = hett deese Ännerns %s tostimmt
|
||||
issues.review.dismissed = hett dat Nakieken vun %s %s ofseggt
|
||||
issues.review.dismissed = hett %[2]s dat Nakieken vun %[1]s ofseggt
|
||||
issues.lock.title = Snack up deesem Gefall tosluten.
|
||||
issues.unlock.title = Snack up deesem Gefall upsluten.
|
||||
issues.tracker_auto_close = Tiednehmer word automatisk anhollt, wenn dat Gefall dichtmaakt word
|
||||
|
@ -1604,7 +1606,7 @@ pulls.nothing_to_compare_have_tag = De utköört Twieg/Mark sünd gliek.
|
|||
pulls.create = Haalvörslag maken
|
||||
pulls.title_desc_one = will %[1]d Kommitteren vun <code>%[2]s</code> na <code id="%[4]s">%[3]s</code> tosamenföhren
|
||||
pulls.merged_title_desc_one = hett %[1]d Kommitteren vun <code>%[2]s</code> na <code>%[3]s</code> %[4]s tosamenföhrt
|
||||
pulls.change_target_branch_at = `hett de Enn-Twieg vun <b>%s</b> to <b>%s</b> %s ännert`
|
||||
pulls.change_target_branch_at = `hett %[3]s de Enn-Twieg vun <b>%[1]s</b> to <b>%[2]s</b> ännert`
|
||||
pulls.tab_conversation = Snack
|
||||
pulls.tab_commits = Kommitterens
|
||||
pulls.tab_files = Ännert Dateien
|
||||
|
@ -3731,4 +3733,4 @@ filepreview.truncated = Utkiek is ofsneden worden
|
|||
filepreview.line = Rieg %[1]d in %[2]s
|
||||
|
||||
[translation_meta]
|
||||
test = Moin!
|
||||
test = Moin!
|
||||
|
|
|
@ -554,7 +554,7 @@ team_invite.text_2 = Klik alstublieft op de volgende link om aan het team deel t
|
|||
admin.new_user.text = <a href="%s">Klik hier</a> om deze gebruiker te beheren vanuit het beheerderspaneel.
|
||||
password_change.subject = Uw wachtwoord is gewijzigd
|
||||
password_change.text_1 = Het wachtwoord voor je account is zojuist gewijzigd.
|
||||
reset_password.text_1 =
|
||||
reset_password.text_1 =
|
||||
totp_disabled.subject = TOTP is uitgeschakeld
|
||||
primary_mail_change.subject = Uw primaire e-mail is gewijzigd
|
||||
totp_disabled.no_2fa = Er zijn geen andere 2FA methodes meer geconfigureerd, wat betekent dat het niet langer nodig is om in te loggen op uw account met 2FA.
|
||||
|
@ -1310,7 +1310,8 @@ editor.or=of
|
|||
editor.cancel_lower=Annuleer
|
||||
editor.commit_signed_changes=Commit ondertekende wijzigingen
|
||||
editor.commit_changes=Wijzigingen doorvoeren
|
||||
editor.add_tmpl="<bestandsnaam>" toevoegen
|
||||
editor.add_tmpl="<%s>" toevoegen
|
||||
editor.add_tmpl.filename = bestandsnaam
|
||||
editor.patch=Patch toepassen
|
||||
editor.patching=Patchen:
|
||||
editor.new_patch=Nieuwe patch
|
||||
|
@ -4000,4 +4001,4 @@ projects.write = <b>Schrijven:</b> Projecten en kolommen maken en bewerken.
|
|||
packages.read = <b>Lezen:</b> Bekijk en download pakketten die aan de repository is toegewezen.
|
||||
packages.write = <b>Schrijven:</b> Publiceer en verwijder pakketten die aan de repository is toegewezen.
|
||||
actions.read = <b>Lezen:</b> Bekijk geïntegreerde CI/CD-pijplijnen en hun logboeken.
|
||||
issues.write = <b>Schrijven:</b> Sluit issues af en beheer metadata zoals labels, mijlpalen, verantwoordelijken, vervaldatums en afhankelijkheden.
|
||||
issues.write = <b>Schrijven:</b> Sluit issues af en beheer metadata zoals labels, mijlpalen, verantwoordelijken, vervaldatums en afhankelijkheden.
|
||||
|
|
|
@ -1174,7 +1174,7 @@ editor.or=lub
|
|||
editor.cancel_lower=Anuluj
|
||||
editor.commit_signed_changes=Zatwierdź podpisane zmiany
|
||||
editor.commit_changes=Zatwierdź zmiany
|
||||
editor.add_tmpl=Dodanie '<filename>'
|
||||
editor.add_tmpl=Dodanie '<%s>'
|
||||
editor.commit_message_desc=Dodaj dodatkowy rozszerzony opis…
|
||||
editor.commit_directly_to_this_branch=Zmieniaj bezpośrednio gałąź <strong class="%[2]s">%[1]s</strong>.
|
||||
editor.create_new_branch=Stwórz <strong>nową gałąź</strong> dla tego commita i rozpocznij Pull Request.
|
||||
|
@ -2889,4 +2889,4 @@ issue_kind = Wyszukaj problemy...
|
|||
pull_kind = Wyszukaj pull requesty...
|
||||
union = Unia
|
||||
regexp = RegExp
|
||||
regexp_tooltip = Interpretuj wyszukiwane hasło jako wyrażenie regularne
|
||||
regexp_tooltip = Interpretuj wyszukiwane hasło jako wyrażenie regularne
|
||||
|
|
|
@ -1341,7 +1341,8 @@ editor.or=ou
|
|||
editor.cancel_lower=Cancelar
|
||||
editor.commit_signed_changes=Criar commit das modificações assinadas
|
||||
editor.commit_changes=Criar commit das modificações
|
||||
editor.add_tmpl=Adicionar "<nome do arquivo>"
|
||||
editor.add_tmpl=Adicionar "<%s>"
|
||||
editor.add_tmpl.filename = nome do arquivo
|
||||
editor.add=Adicionar %s
|
||||
editor.update=Atualizar %s
|
||||
editor.delete=Excluir %s
|
||||
|
@ -4001,4 +4002,4 @@ packages.write = <b>Escrever:</b> Publique e delete pacotes atribuídos ao repos
|
|||
ext_issues = Acesse o link para um issue tracker externo. As permissões são gerenciadas externamente.
|
||||
|
||||
[translation_meta]
|
||||
test = To preserve its claws, the giant anteater walks on its front knuckles, like gorillas
|
||||
test = To preserve its claws, the giant anteater walks on its front knuckles, like gorillas
|
||||
|
|
|
@ -1033,7 +1033,7 @@ visibility=Visibilidade do utilizador
|
|||
visibility.public=Pública
|
||||
visibility.public_tooltip=Visível para todos
|
||||
visibility.limited=Limitada
|
||||
visibility.limited_tooltip=Visível apenas para utilizadores autenticados
|
||||
visibility.limited_tooltip=Visível apenas para utilizadores registados
|
||||
visibility.private=Privada
|
||||
visibility.private_tooltip=Visível apenas para membros das organizações a que se associou
|
||||
additional_repo_units_hint = Sugere a habilitação de unidades do repositório adicionais
|
||||
|
@ -1355,7 +1355,7 @@ editor.or=ou
|
|||
editor.cancel_lower=Cancelar
|
||||
editor.commit_signed_changes=Cometer modificações assinadas
|
||||
editor.commit_changes=Cometer modificações
|
||||
editor.add_tmpl=Adicionar "<filename>"
|
||||
editor.add_tmpl=Adicionar "<%s>"
|
||||
editor.add=Adicionar %s
|
||||
editor.update=Modificar %s
|
||||
editor.delete=Eliminar %s
|
||||
|
@ -2844,6 +2844,9 @@ issues.review.add_remove_review_requests = pedidos de revisão de %[1]s e pedido
|
|||
pulls.delete_after_merge.head_branch.is_default = O ramo de topo que pretende eliminar é o ramo predefinido e não pode ser eliminado.
|
||||
pulls.delete_after_merge.head_branch.is_protected = O ramo de topo que pretende eliminar é um ramo protegido e não pode ser eliminado.
|
||||
pulls.delete_after_merge.head_branch.insufficient_branch = Não tem permissão para eliminar o ramo de topo.
|
||||
issues.summary_card_alt = Sumário de uma questão com o título "%s" no repositório %s
|
||||
issues.num_reviews_one = %d revisão
|
||||
issues.num_reviews_few = %d revisões
|
||||
|
||||
[graphs]
|
||||
component_loading=A carregar %s...
|
||||
|
@ -2891,7 +2894,7 @@ settings.permission=Permissões
|
|||
settings.repoadminchangeteam=O administrador do repositório pode adicionar e remover o acesso às equipas
|
||||
settings.visibility=Visibilidade
|
||||
settings.visibility.public=Público
|
||||
settings.visibility.limited=Limitada (visível apenas para utilizadores autenticados)
|
||||
settings.visibility.limited=Limitada (visível apenas para utilizadores regitados)
|
||||
settings.visibility.limited_shortname=Limitada
|
||||
settings.visibility.private=Privada (visível apenas para membros da organização)
|
||||
settings.visibility.private_shortname=Privado
|
||||
|
@ -3999,4 +4002,4 @@ wiki.read = <b>Ler:</b> Ler o wiki integrado e o seu histórico.
|
|||
wiki.write = <b>Escrever:</b> Criar, modificar e eliminar páginas no wiki integrado.
|
||||
code.write = <b>Escrever:</b> Enviar para o repositório, criar ramos e etiquetas.
|
||||
issues.read = <b>Ler:</b> Ler e criar questões e comentários.
|
||||
pulls.write = <b>Escrever:</b> Fechar pedidos de integração e gerir metadados, tais como rótulos, etapas, encarregados, datas de vencimento e dependências.
|
||||
pulls.write = <b>Escrever:</b> Fechar pedidos de integração e gerir metadados, tais como rótulos, etapas, encarregados, datas de vencimento e dependências.
|
||||
|
|
|
@ -166,6 +166,7 @@ new_repo.title = Новый репозиторий
|
|||
new_migrate.title = Новый перенос
|
||||
new_org.title = Новая организация
|
||||
new_repo.link = Создать репозиторий
|
||||
copy_path = Копировать путь
|
||||
|
||||
[aria]
|
||||
navbar=Панель навигации
|
||||
|
@ -1336,7 +1337,7 @@ editor.or=или
|
|||
editor.cancel_lower=Отменить
|
||||
editor.commit_signed_changes=Зафиксировать подписанные изменения
|
||||
editor.commit_changes=Сохранить правки
|
||||
editor.add_tmpl=Добавить «<filename>»
|
||||
editor.add_tmpl=Добавить «<%s>»
|
||||
editor.add=Добавить %s
|
||||
editor.update=Обновить %s
|
||||
editor.delete=Удалить %s
|
||||
|
@ -4005,4 +4006,4 @@ issues.write = <b>Запись:</b> закрытие задач и измене
|
|||
actions.write = <b>Запись:</b> ручной запуск, перезапуск, отмена и одобрение работы конвейеров CI/CD.
|
||||
wiki.write = <b>Запись:</b> создание, изменение и удаление страниц во встроенной вики.
|
||||
packages.read = <b>Чтение:</b> просмотр и скачивание пакетов в репозитории.
|
||||
ext_issues = Доступ к ссылке на внешний трекер задач. Настройка разрешений выполняется вне сайта.
|
||||
ext_issues = Доступ к ссылке на внешний трекер задач. Настройка разрешений выполняется вне сайта.
|
||||
|
|
|
@ -919,7 +919,7 @@ editor.or=හෝ
|
|||
editor.cancel_lower=අවලංගු කරන්න
|
||||
editor.commit_signed_changes=අත්සන් කළ වෙනස්කම් සිදු කරන්න
|
||||
editor.commit_changes=වෙනස්කම් සිදු කරන්න
|
||||
editor.add_tmpl='<filename>' එකතු කරන්න
|
||||
editor.add_tmpl='<%s>' එකතු කරන්න
|
||||
editor.commit_message_desc=විකල්ප දීර්ඝ විස්තරයක් එක් කරන්න…
|
||||
editor.signoff_desc=කැපවූ ලොග් පණිවිඩය අවසානයේ දී කැපකරු විසින් සිග්නෙඩ්-ඕෆ්-විසින් ට්රේලරයක් එක් කරන්න.
|
||||
editor.commit_directly_to_this_branch=<strong class="%[2]s">%[1]s</strong> ශාඛාවට කෙලින්ම කැප කරන්න.
|
||||
|
@ -2553,4 +2553,4 @@ runs.commit=කැප
|
|||
[projects]
|
||||
|
||||
[git.filemode]
|
||||
symbolic_link=සංකේතාත්මක සබැඳිය
|
||||
symbolic_link=සංකේතාත්මක සබැඳිය
|
||||
|
|
|
@ -847,7 +847,7 @@ editor.or=eller
|
|||
editor.cancel_lower=Avbryt
|
||||
editor.commit_signed_changes=Committa signerade ändringar
|
||||
editor.commit_changes=Checka in ändringar
|
||||
editor.add_tmpl=Lägg till '<filename>'
|
||||
editor.add_tmpl=Lägg till '<%s>'
|
||||
editor.commit_message_desc=Lägg till en valfri utökad beskrivning…
|
||||
editor.commit_directly_to_this_branch=Checka in direkt till grenen <strong class="%[2]s">%[1]s</strong>.
|
||||
editor.create_new_branch=Skapa en <strong>ny gren</strong> för denna incheckning och påbörja en hämtningsbegäran.
|
||||
|
@ -2144,4 +2144,4 @@ symbolic_link=Symbolisk länk
|
|||
[search]
|
||||
milestone_kind = Sök milstolpar...
|
||||
exact = Exakt
|
||||
exact_tooltip = Inkludera bara resultat som exakt matchar söktermen
|
||||
exact_tooltip = Inkludera bara resultat som exakt matchar söktermen
|
||||
|
|
|
@ -1307,7 +1307,8 @@ editor.or=veya
|
|||
editor.cancel_lower=İptal
|
||||
editor.commit_signed_changes=İmzalı Değişiklikleri İşle
|
||||
editor.commit_changes=Değişiklikleri Uygula
|
||||
editor.add_tmpl='<dosyaadi>' eklendi
|
||||
editor.add_tmpl='<%s>' eklendi
|
||||
editor.add_tmpl.filename = dosyaadi
|
||||
editor.add=%s Ekle
|
||||
editor.update=%s Güncelle
|
||||
editor.delete=%s Sil
|
||||
|
@ -3712,4 +3713,4 @@ code_search_unavailable = Kod araması şu anda kullanıma açık değildir. Lü
|
|||
issue_kind = Sorunları ara...
|
||||
pull_kind = Birleştirme isteklerini ara...
|
||||
code_search_by_git_grep = Anlık kod araması sonuçları "git grep" komutu tarafından sağlanmaktadır. Site yöneticisinin kod endekslemesini açması durumunda daha iyi sonuçlar verilmesi mümkün olabilir.
|
||||
keyword_search_unavailable = Anahtar kelime ile arama şu anda kullanıma açık değildir. Lütfen site yöneticisi ile iletişime geçin.
|
||||
keyword_search_unavailable = Anahtar kelime ile arama şu anda kullanıma açık değildir. Lütfen site yöneticisi ile iletişime geçin.
|
||||
|
|
|
@ -166,6 +166,7 @@ filter.not_mirror = Не дзеркала
|
|||
filter.not_template = Не шаблони
|
||||
error413 = Ви вичерпали свою частку.
|
||||
invalid_data = Недійсні дані: %v
|
||||
copy_path = Копіювати шлях
|
||||
|
||||
[aria]
|
||||
footer.software = Про застосунок
|
||||
|
@ -1202,7 +1203,7 @@ editor.or=або
|
|||
editor.cancel_lower=Скасувати
|
||||
editor.commit_signed_changes=Внести підписані зміни
|
||||
editor.commit_changes=Закомітити зміни
|
||||
editor.add_tmpl=Додати «<filename>»
|
||||
editor.add_tmpl=Додати «<%s>»
|
||||
editor.commit_message_desc=Додати необов'язковий розширений опис…
|
||||
editor.signoff_desc=Додати повідомленню в журналі комітів рядок Signed-off-by від свого імені.
|
||||
editor.commit_directly_to_this_branch=Зробіть коміт прямо в гілку <strong class="%[2]s">%[1]s</strong>.
|
||||
|
@ -2416,6 +2417,7 @@ issues.new.assign_to_me = Призначити собі
|
|||
contributors.contribution_type.additions = Додавання
|
||||
settings.add_web_hook_desc = Інтегрувати <a target="_blank" rel="noreferrer" href="%s">%s</a> у цей репозиторій.
|
||||
settings.event_wiki_desc = Вікі-сторінку створено, перейменовано, відредаговано або видалено.
|
||||
settings.mirror_settings.push_mirror.copy_public_key = Копіювати публічний ключ
|
||||
|
||||
[graphs]
|
||||
contributors.what = внески
|
||||
|
@ -3324,4 +3326,4 @@ kib = КіБ
|
|||
mib = МіБ
|
||||
gib = ГіБ
|
||||
tib = ТіБ
|
||||
b = Б
|
||||
b = Б
|
||||
|
|
|
@ -115,7 +115,7 @@ error=错误
|
|||
error404=您正尝试访问的页面 <strong>不存在</strong> 或 <strong>您尚未被授权</strong> 查看该页面。
|
||||
go_back=返回
|
||||
|
||||
never=从不
|
||||
never=从未
|
||||
unknown=未知
|
||||
|
||||
rss_feed=RSS 订阅源
|
||||
|
@ -166,6 +166,7 @@ new_org.title = 创建组织
|
|||
new_repo.link = 创建仓库
|
||||
new_migrate.link = 开始迁移
|
||||
new_org.link = 创建组织
|
||||
copy_path = 复制路径
|
||||
|
||||
[aria]
|
||||
navbar=导航栏
|
||||
|
@ -513,7 +514,7 @@ reset_password.text=如果此请求是您本人作出的,则请在 <b>%s</b>
|
|||
register_success=注册成功
|
||||
|
||||
issue_assigned.pull=@%[1]s 已将仓库 %[3]s 中的合并请求 %[2]s 指派给您。
|
||||
issue_assigned.issue=@%[1]s 已将仓库 %[3]s 中的工单 %[2]s 指派给您
|
||||
issue_assigned.issue=@%[1]s 已将仓库 %[3]s 中的工单 %[2]s 指派给您。
|
||||
|
||||
issue.x_mentioned_you=<b>@%s</b> 提到了您:
|
||||
issue.action.force_push=<b>%[1]s</b> 强制从 %[3]s 推送 <b>%[2]s</b> 至 [4]s。
|
||||
|
@ -599,14 +600,14 @@ Content=内容
|
|||
SSPISeparatorReplacement=分隔符
|
||||
SSPIDefaultLanguage=默认语言
|
||||
|
||||
require_error=不能为空。
|
||||
require_error=` 不能为空。`
|
||||
alpha_dash_error=` 应只包含字母数字、破折号(“-”)和下划线(“_”)字符。`
|
||||
alpha_dash_dot_error=` 应该只包含半角字母、数字、破折号(“-”)、下划线(“_”)和半角句号(“.”) 。`
|
||||
git_ref_name_error=` 必须是格式良好的 git 引用名称。`
|
||||
size_error=长度必须为 %s。
|
||||
min_size_error=长度最小为 %s 个字符。
|
||||
max_size_error=长度最大为 %s 个字符。
|
||||
email_error=不是一个有效的邮箱地址。
|
||||
size_error=`长度必须为 %s。`
|
||||
min_size_error=`长度最小为 %s 个字符。`
|
||||
max_size_error=`长度最大为 %s 个字符。`
|
||||
email_error=`不是一个有效的邮箱地址。`
|
||||
url_error=`'%s' 不是一个有效的 URL。`
|
||||
include_error=`必须包含子字符串 "%s"。`
|
||||
glob_pattern_error=`匹配模式无效:%s.`
|
||||
|
@ -616,7 +617,7 @@ invalid_group_team_map_error=`映射无效: %s`
|
|||
unknown_error=未知错误:
|
||||
captcha_incorrect=验证码不正确。
|
||||
password_not_match=密码不匹配。
|
||||
lang_select_error=从列表中选出语言
|
||||
lang_select_error=从列表中选择一个语言。
|
||||
|
||||
username_been_taken=用户名已被使用。
|
||||
username_change_not_local_user=非本地用户不允许更改用户名。
|
||||
|
@ -641,12 +642,12 @@ password_lowercase_one=至少一个小写字符
|
|||
password_uppercase_one=至少一个大写字符
|
||||
password_digit_one=至少一个数字
|
||||
password_special_one=至少一个特殊字符(标点符号,括号,引号等)
|
||||
enterred_invalid_repo_name=输入的仓库名称不正确
|
||||
enterred_invalid_repo_name=输入的仓库名称不正确。
|
||||
enterred_invalid_org_name=您输入的组织名称不正确。
|
||||
enterred_invalid_owner_name=新的所有者名称无效。
|
||||
enterred_invalid_password=输入的密码不正确
|
||||
user_not_exist=该用户不存在
|
||||
team_not_exist=团队不存在
|
||||
enterred_invalid_password=输入的密码不正确。
|
||||
user_not_exist=该用户不存在。
|
||||
team_not_exist=团队不存在。
|
||||
last_org_owner=您不能从“所有者”团队中删除最后一个用户。组织中必须至少有一个所有者。
|
||||
cannot_add_org_to_team=组织不能被加入到团队中。
|
||||
duplicate_invite_to_team=此用户已被邀请为团队成员。
|
||||
|
@ -756,10 +757,10 @@ update_profile=更新个人资料
|
|||
update_language=更改语言
|
||||
update_language_not_found=语言 %s 不可用。
|
||||
update_language_success=语言已更新。
|
||||
update_profile_success=您的资料信息已经更新
|
||||
update_profile_success=您的个人资料已经更新。
|
||||
change_username=您的用户名已更改。
|
||||
change_username_prompt=注意:更改您的用户名也更改您的帐户 URL。
|
||||
change_username_redirect_prompt=在其他用户使用您的旧用户名注册前,此旧用户名将会重定向到您的新用户名
|
||||
change_username_redirect_prompt=在其他用户使用您的旧用户名注册前,此旧用户名将会重定向到您的新用户名。
|
||||
continue=继续操作
|
||||
cancel=取消操作
|
||||
language=界面语言
|
||||
|
@ -1010,7 +1011,7 @@ remove_account_link=删除已绑定的账号
|
|||
remove_account_link_desc=删除已绑定帐户将吊销其对您的 Forgejo 帐户的访问权限。继续?
|
||||
remove_account_link_success=已取消绑定帐户。
|
||||
|
||||
hooks.desc=添加 Web 钩子,它们将会在您拥有的<strong>所有仓库</strong>上触发
|
||||
hooks.desc=添加会在您拥有的<strong>所有仓库</strong>上触发的 Web 钩子。
|
||||
|
||||
orgs_none=您现在还不是任何组织的成员。
|
||||
repos_none=你并不拥有任何仓库。
|
||||
|
@ -1034,7 +1035,7 @@ visibility.public_tooltip=对所有人可见
|
|||
visibility.limited=受限
|
||||
visibility.limited_tooltip=仅对登录用户可见
|
||||
visibility.private=私有
|
||||
visibility.private_tooltip=仅对您已加入的组织的成员可见。
|
||||
visibility.private_tooltip=仅对您已加入的组织的成员可见
|
||||
blocked_users = 已屏蔽的用户
|
||||
blocked_users_none = 黑名单中没有用户。
|
||||
blocked_since = 自 %s 起被屏蔽
|
||||
|
@ -1076,7 +1077,7 @@ fork_from=派生自
|
|||
already_forked=你已经派生过 %s
|
||||
fork_to_different_account=派生到其他账号
|
||||
fork_visibility_helper=无法更改派生仓库的可见性。
|
||||
fork_branch=要克隆到 Fork 的分支
|
||||
fork_branch=要复制到派生的分支
|
||||
all_branches=所有分支
|
||||
fork_no_valid_owners=这个代码仓库无法被派生,因为没有有效的所有者。
|
||||
use_template=使用此模板
|
||||
|
@ -1246,8 +1247,8 @@ forked_from=派生自
|
|||
generated_from=生成自
|
||||
fork_from_self=无法派生您拥有的仓库。
|
||||
fork_guest_user=请先登录再派生此仓库。
|
||||
watch_guest_user=请登录后再关注此仓库
|
||||
star_guest_user=请登录后再点赞此仓库
|
||||
watch_guest_user=请登录后再关注此仓库。
|
||||
star_guest_user=请登录后再点赞此仓库。
|
||||
unwatch=取消关注
|
||||
watch=关注
|
||||
unstar=取消点赞
|
||||
|
@ -1343,7 +1344,7 @@ editor.cannot_edit_non_text_files=网页不能编辑二进制文件。
|
|||
editor.edit_this_file=编辑文件
|
||||
editor.this_file_locked=文件已锁定
|
||||
editor.must_be_on_a_branch=您必须在某个分支上才能对此文件进行修改操作。
|
||||
editor.fork_before_edit=您必须在派生这个仓库才能对此文件进行修改操作
|
||||
editor.fork_before_edit=您必须先派生这个仓库才能对此文件进行修改操作。
|
||||
editor.delete_this_file=删除文件
|
||||
editor.must_have_write_access=您必须具有写权限才能对此文件进行修改操作。
|
||||
editor.file_delete_success=文件 %s 已被删除。
|
||||
|
@ -1353,7 +1354,7 @@ editor.or=或
|
|||
editor.cancel_lower=取消
|
||||
editor.commit_signed_changes=提交已签名的更改
|
||||
editor.commit_changes=提交变更
|
||||
editor.add_tmpl=添加 “<filename>”
|
||||
editor.add_tmpl=添加 “<%s>”
|
||||
editor.add=添加 %s
|
||||
editor.update=更新 %s
|
||||
editor.delete=删除 %s
|
||||
|
@ -1371,7 +1372,7 @@ editor.new_branch_name=为这次提交的新分支命名
|
|||
editor.new_branch_name_desc=新的分支名称…
|
||||
editor.cancel=取消
|
||||
editor.filename_cannot_be_empty=文件名不能为空。
|
||||
editor.filename_is_invalid=文件名 %s 无效
|
||||
editor.filename_is_invalid=文件名 %s 无效。
|
||||
editor.branch_does_not_exist=此仓库中不存在名为 %s 的分支。
|
||||
editor.branch_already_exists=此仓库已存在名为 %s 的分支。
|
||||
editor.directory_is_a_file=%s 已经作为文件名在此仓库中存在。
|
||||
|
@ -1400,12 +1401,12 @@ editor.require_signed_commit=分支需要签名提交
|
|||
editor.cherry_pick=Cherry-pick %s 到:
|
||||
editor.revert=将 %s 还原到:
|
||||
|
||||
commits.desc=浏览代码修改历史
|
||||
commits.desc=浏览代码修改历史。
|
||||
commits.commits=次代码提交
|
||||
commits.no_commits=没有共同的提交。%s 和 %s 的历史完全不同。
|
||||
commits.nothing_to_compare=这些分支是相同的。
|
||||
commits.search=搜索提交历史
|
||||
commits.search.tooltip=`您可以在关键词前加上前缀,如"author:", "committer:", "after:", 或"before:", 例如 "retrin author:Alice before:2019-01-13"`
|
||||
commits.search.tooltip=您可以在关键词前加上前缀,如"author:", "committer:", "after:", 或"before:", 例如 "retrin author:Alice before:2019-01-13"。
|
||||
commits.find=搜索
|
||||
commits.search_all=所有分支
|
||||
commits.author=作者
|
||||
|
@ -1811,7 +1812,7 @@ issues.content_history.delete_from_history_confirm=从历史记录中删除吗
|
|||
issues.content_history.options=选项
|
||||
issues.reference_link=参考:%s
|
||||
|
||||
compare.compare_base=基准分支
|
||||
compare.compare_base=基准
|
||||
compare.compare_head=比较
|
||||
|
||||
pulls.desc=启用合并请求和代码评审。
|
||||
|
@ -1832,7 +1833,7 @@ pulls.compare_compare=拉取从
|
|||
pulls.switch_comparison_type=切换比较类型
|
||||
pulls.switch_head_and_base=切换 head 和 base
|
||||
pulls.filter_branch=过滤分支
|
||||
pulls.no_results=未找到结果
|
||||
pulls.no_results=未找到结果。
|
||||
pulls.show_all_commits=显示所有提交
|
||||
pulls.show_changes_since_your_last_review=显示自您上次评审以来的更改
|
||||
pulls.showing_only_single_commit=仅显示提交 %[1]s 的更改
|
||||
|
@ -1869,7 +1870,7 @@ pulls.files_conflicted=此合并请求有变更与目标分支冲突。
|
|||
pulls.is_checking=正在进行合并冲突检测,请稍后再试。
|
||||
pulls.is_ancestor=此分支已经包含在目标分支中,没有更改可以合并。
|
||||
pulls.is_empty=此分支上的更改已经在目标分支上。这将是一个空提交。
|
||||
pulls.required_status_check_failed=一些必要的检查没有成功
|
||||
pulls.required_status_check_failed=一些必要的检查没有成功。
|
||||
pulls.required_status_check_missing=缺少一些必要的检查。
|
||||
pulls.required_status_check_administrator=作为管理员,您仍可合并此合并请求
|
||||
pulls.blocked_by_approvals=此合并请求当前还没有通过审批。已获取审批数%d个,共需要审批数%d个。
|
||||
|
@ -2287,7 +2288,7 @@ settings.add_webhook.invalid_channel_name=Webhook 通道名称不能为空且不
|
|||
settings.hooks_desc=当Forgejo事件发生时,Web钩子自动发出HTTP POST请求。在 <a target="_blank" rel="noopener noreferrer" href="%s"> 指南</a> 中阅读更多内容。
|
||||
settings.webhook_deletion=删除 Web 钩子
|
||||
settings.webhook_deletion_desc=删除 web钩子 将删除其设置和历史记录。继续?
|
||||
settings.webhook_deletion_success=Web 钩子删除成功!
|
||||
settings.webhook_deletion_success=Web 钩子已移除。
|
||||
settings.webhook.test_delivery=测试推送
|
||||
settings.webhook.test_delivery_desc=用假事件测试这个 web钩子。
|
||||
settings.webhook.test_delivery_desc_disabled=要用 虚假事件 测试这个Webhook,请激活它。
|
||||
|
@ -2371,9 +2372,9 @@ settings.authorization_header=授权标头
|
|||
settings.authorization_header_desc=当存在时将被作为授权标头包含在内。例如: %s。
|
||||
settings.active=激活
|
||||
settings.active_helper=触发事件的信息将发送到此 webhook 网址。
|
||||
settings.add_hook_success=Web 钩子添加成功!
|
||||
settings.add_hook_success=Web 钩子已添加。
|
||||
settings.update_webhook=更新 Web 钩子
|
||||
settings.update_hook_success=Web 钩子更新成功!
|
||||
settings.update_hook_success=Web 钩子已更新。
|
||||
settings.delete_webhook=删除 Web 钩子
|
||||
settings.recent_deliveries=最近推送记录
|
||||
settings.hook_type=钩子类型
|
||||
|
@ -2407,7 +2408,7 @@ settings.no_deploy_keys=没有部署密钥。
|
|||
settings.title=标题
|
||||
settings.deploy_key_content=密钥文本
|
||||
settings.key_been_used=具有相同内容的部署密钥已在使用中。
|
||||
settings.key_name_used=使用相同名称的部署密钥已经存在!
|
||||
settings.key_name_used=使用相同名称的部署密钥已经存在。
|
||||
settings.add_key_success=部署密钥 %s 添加成功。
|
||||
settings.deploy_key_deletion=删除部署密钥
|
||||
settings.deploy_key_deletion_desc=删除部署密钥将取消此密钥对此仓库的访问权限。继续?
|
||||
|
@ -2509,7 +2510,7 @@ settings.archive.header=归档此仓库
|
|||
settings.archive.text=归档仓库将使其完全只读。它将在首页隐藏。没有人(甚至你!)能够进行新的提交,或打开工单及合并请求。
|
||||
settings.archive.success=仓库已成功归档。
|
||||
settings.archive.error=仓库在归档时出现异常。请通过日志获取详细信息。
|
||||
settings.archive.error_ismirror=请不要对镜像仓库归档,谢谢!
|
||||
settings.archive.error_ismirror=不能归档镜像仓库。
|
||||
settings.archive.branchsettings_unavailable=已归档仓库无法进行分支设置。
|
||||
settings.archive.tagsettings_unavailable=已归档仓库的Git标签设置不可用。
|
||||
settings.archive.mirrors_unavailable = 不能镜像已归档的仓库。
|
||||
|
@ -2844,6 +2845,9 @@ issues.filter_sort.relevance = 相关性
|
|||
diff.git-notes.add = 添加注释
|
||||
diff.git-notes.remove-header = 移除注释
|
||||
diff.git-notes.remove-body = 此注释将被移除。
|
||||
issues.num_reviews_one = %d 评审
|
||||
issues.num_reviews_few = %d 评审
|
||||
issues.summary_card_alt = 仓库 %[2]s 中标题为 %[1]s 的工单的摘要卡片
|
||||
|
||||
[graphs]
|
||||
component_loading=正在加载 %s...
|
||||
|
@ -3999,4 +4003,4 @@ actions.write = <b>写入:</b>手动触发、重启、取消或批准待处理
|
|||
ext_issues = 访问外部工单系统的链接。权限由外部管理。
|
||||
ext_wiki = 访问外部百科的链接。权限由外部管理。
|
||||
projects.write = <b>写入:</b>创建项目和列并进行编辑。
|
||||
pulls.write = <b>写入:</b>关闭合并请求并管理元数据,如标签、里程碑、指派成员、截止日期和依赖。
|
||||
pulls.write = <b>写入:</b>关闭合并请求并管理元数据,如标签、里程碑、指派成员、截止日期和依赖。
|
||||
|
|
|
@ -1296,7 +1296,8 @@ editor.or=或
|
|||
editor.cancel_lower=取消
|
||||
editor.commit_signed_changes=提交簽署的變更
|
||||
editor.commit_changes=提交變更
|
||||
editor.add_tmpl=新增「<檔案>」
|
||||
editor.add_tmpl=新增「<%s>」
|
||||
editor.add_tmpl.filename = 檔案
|
||||
editor.add=新增 %s
|
||||
editor.update=更新 %s
|
||||
editor.delete=刪除 %s
|
||||
|
@ -3808,4 +3809,4 @@ filepreview.lines = %[3]s 中的第 %[1]d 至 %[2]d 行
|
|||
filepreview.line = %[2]s 中的第 %[1]d 行
|
||||
|
||||
[translation_meta]
|
||||
test = 好的
|
||||
test = 好的
|
||||
|
|
26
options/locale/readme.md
Normal file
26
options/locale/readme.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Forgejo translations
|
||||
|
||||
This directory contains all .INI translations.
|
||||
|
||||
## Working on base language
|
||||
|
||||
When you work on Forgejo features, you should only modify `locale_en-US.ini`.
|
||||
|
||||
* consult https://forgejo.org/docs/next/contributor/localization-english/
|
||||
* add strings when your change requires doing so
|
||||
* remove strings when your change renders them unused
|
||||
|
||||
## Working on other languages
|
||||
|
||||
Translations are done on Codeberg Translate and not via individual pull requests.
|
||||
|
||||
* consult https://forgejo.org/docs/next/contributor/localization/
|
||||
* see the project: https://translate.codeberg.org/projects/forgejo/forgejo/
|
||||
|
||||
## Attribution
|
||||
|
||||
Forgejo translators are attributed in commit messages and in monthly updates on the website.
|
||||
|
||||
Gitea translators are mostly not attributed in this repository because Gitea translation commits are lacking attribution, but it may be preserved on Crowdin.
|
||||
|
||||
This directory contains a legacy `TRANSLATORS` file from the Gogs era. It is opt-in and is not actively maintained.
|
2296
package-lock.json
generated
2296
package-lock.json
generated
File diff suppressed because it is too large
Load diff
44
package.json
44
package.json
|
@ -12,7 +12,7 @@
|
|||
"@github/relative-time-element": "4.4.4",
|
||||
"@github/text-expander-element": "2.8.0",
|
||||
"@mcaptcha/vanilla-glue": "0.1.0-alpha-3",
|
||||
"@primer/octicons": "19.13.0",
|
||||
"@primer/octicons": "19.14.0",
|
||||
"ansi_up": "6.0.2",
|
||||
"asciinema-player": "3.8.0",
|
||||
"chart.js": "4.4.5",
|
||||
|
@ -29,7 +29,7 @@
|
|||
"htmx.org": "1.9.12",
|
||||
"idiomorph": "0.3.0",
|
||||
"jquery": "3.7.1",
|
||||
"katex": "0.16.14",
|
||||
"katex": "0.16.18",
|
||||
"mermaid": "11.4.1",
|
||||
"mini-css-extract-plugin": "2.9.2",
|
||||
"minimatch": "10.0.1",
|
||||
|
@ -42,7 +42,7 @@
|
|||
"pretty-ms": "9.0.0",
|
||||
"sortablejs": "1.15.6",
|
||||
"swagger-ui-dist": "5.17.14",
|
||||
"tailwindcss": "3.4.16",
|
||||
"tailwindcss": "3.4.17",
|
||||
"throttle-debounce": "5.0.0",
|
||||
"tinycolor2": "1.6.0",
|
||||
"tippy.js": "6.3.7",
|
||||
|
@ -63,41 +63,41 @@
|
|||
"@eslint-community/eslint-plugin-eslint-comments": "4.4.1",
|
||||
"@playwright/test": "1.48.2",
|
||||
"@stoplight/spectral-cli": "6.14.2",
|
||||
"@stylistic/eslint-plugin-js": "2.10.1",
|
||||
"@stylistic/eslint-plugin-js": "2.12.1",
|
||||
"@stylistic/stylelint-plugin": "3.1.1",
|
||||
"@typescript-eslint/parser": "8.14.0",
|
||||
"@typescript-eslint/parser": "8.18.1",
|
||||
"@vitejs/plugin-vue": "5.1.5",
|
||||
"@vitest/coverage-v8": "2.1.4",
|
||||
"@vitest/eslint-plugin": "1.1.13",
|
||||
"@vitest/coverage-v8": "2.1.8",
|
||||
"@vitest/eslint-plugin": "1.1.16",
|
||||
"@vue/test-utils": "2.4.6",
|
||||
"eslint": "9.14.0",
|
||||
"eslint-import-resolver-typescript": "3.6.3",
|
||||
"eslint": "9.17.0",
|
||||
"eslint-import-resolver-typescript": "3.7.0",
|
||||
"eslint-plugin-array-func": "5.0.2",
|
||||
"eslint-plugin-import-x": "4.4.2",
|
||||
"eslint-plugin-no-jquery": "3.0.2",
|
||||
"eslint-plugin-import-x": "4.5.1",
|
||||
"eslint-plugin-no-jquery": "3.1.0",
|
||||
"eslint-plugin-no-use-extend-native": "0.7.2",
|
||||
"eslint-plugin-playwright": "2.0.1",
|
||||
"eslint-plugin-regexp": "2.6.0",
|
||||
"eslint-plugin-sonarjs": "2.0.4",
|
||||
"eslint-plugin-unicorn": "56.0.0",
|
||||
"eslint-plugin-playwright": "2.1.0",
|
||||
"eslint-plugin-regexp": "2.7.0",
|
||||
"eslint-plugin-sonarjs": "3.0.1",
|
||||
"eslint-plugin-unicorn": "56.0.1",
|
||||
"eslint-plugin-vitest-globals": "1.5.0",
|
||||
"eslint-plugin-vue": "9.31.0",
|
||||
"eslint-plugin-vue-scoped-css": "2.8.1",
|
||||
"eslint-plugin-vue": "9.32.0",
|
||||
"eslint-plugin-vue-scoped-css": "2.9.0",
|
||||
"eslint-plugin-wc": "2.2.0",
|
||||
"globals": "15.13.0",
|
||||
"globals": "15.14.0",
|
||||
"happy-dom": "15.11.7",
|
||||
"license-checker-rseidelsohn": "4.4.2",
|
||||
"markdownlint-cli": "0.42.0",
|
||||
"markdownlint-cli": "0.43.0",
|
||||
"postcss-html": "1.7.0",
|
||||
"stylelint": "16.10.0",
|
||||
"stylelint": "16.12.0",
|
||||
"stylelint-declaration-block-no-ignored-properties": "2.8.0",
|
||||
"stylelint-declaration-strict-value": "1.10.6",
|
||||
"stylelint-value-no-unknown-custom-properties": "6.0.1",
|
||||
"svgo": "3.2.0",
|
||||
"typescript": "5.7.2",
|
||||
"typescript-eslint": "8.14.0",
|
||||
"typescript-eslint": "8.18.1",
|
||||
"vite-string-plugin": "1.3.4",
|
||||
"vitest": "2.1.4"
|
||||
"vitest": "2.1.8"
|
||||
},
|
||||
"browserslist": [
|
||||
"defaults"
|
||||
|
|
|
@ -65,6 +65,7 @@ export default {
|
|||
/* Project-specific settings. */
|
||||
use: {
|
||||
...devices['Desktop Chrome'],
|
||||
permissions: ['clipboard-read', 'clipboard-write'],
|
||||
},
|
||||
},
|
||||
|
||||
|
@ -87,6 +88,7 @@ export default {
|
|||
name: 'Mobile Chrome',
|
||||
use: {
|
||||
...devices['Pixel 5'],
|
||||
permissions: ['clipboard-read', 'clipboard-write'],
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -101,4 +103,5 @@ export default {
|
|||
outputDir: 'tests/e2e/test-artifacts/',
|
||||
/* Folder for explicit snapshots for visual testing */
|
||||
snapshotDir: 'tests/e2e/test-snapshots/',
|
||||
snapshotPathTemplate: '{snapshotDir}/snapshots/{testFilePath}/{projectName}_{arg}{ext}',
|
||||
} satisfies PlaywrightTestConfig;
|
||||
|
|
13
release-notes-published/7.0.10.md
Normal file
13
release-notes-published/7.0.10.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
<!--start release-notes-assistant-->
|
||||
|
||||
## Release notes
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5719) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5723)): <!--number 5723 --><!--line 0 --><!--description Rm9yZ2VqbyBnZW5lcmF0ZXMgYSB0b2tlbiB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB3ZWIgZW5kcG9pbnRzIHRoYXQgYXJlIG9ubHkgbWVhbnQgdG8gYmUgdXNlZCBpbnRlcm5hbGx5LCBmb3IgaW5zdGFuY2Ugd2hlbiB0aGUgU1NIIGRhZW1vbiBpcyB1c2VkIHRvIHB1c2ggYSBjb21taXQgd2l0aCBHaXQuIFRoZSB2ZXJpZmljYXRpb24gb2YgdGhpcyB0b2tlbiB3YXMgbm90IGRvbmUgaW4gY29uc3RhbnQgdGltZSBhbmQgd2FzIHN1c2NlcHRpYmxlIHRvIFt0aW1pbmcgYXR0YWNrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGltaW5nX2F0dGFjaykuIEEgcHJlLWNvbmRpdGlvbiBmb3Igc3VjaCBhbiBhdHRhY2sgaXMgdGhlIHByZWNpc2UgbWVhc3VyZW1lbnRzIG9mIHRoZSB0aW1lIGZvciBlYWNoIG9wZXJhdGlvbi4gU2luY2UgaXQgcmVxdWlyZXMgb2JzZXJ2aW5nIHRoZSB0aW1pbmcgb2YgbmV0d29yayBvcGVyYXRpb25zLCB0aGUgaXNzdWUgaXMgbWl0aWdhdGVkIHdoZW4gYSBGb3JnZWpvIGluc3RhbmNlIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIGludGVybmV0IGJlY2F1c2UgdGhlIElTUCBpbnRyb2R1Y2UgdW5wcmVkaWN0YWJsZSByYW5kb20gZGVsYXlzLg==-->Forgejo generates a token which is used to authenticate web endpoints that are only meant to be used internally, for instance when the SSH daemon is used to push a commit with Git. The verification of this token was not done in constant time and was susceptible to [timing attacks](https://en.wikipedia.org/wiki/Timing_attack). A pre-condition for such an attack is the precise measurements of the time for each operation. Since it requires observing the timing of network operations, the issue is mitigated when a Forgejo instance is accessed over the internet because the ISP introduce unpredictable random delays.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5718) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5720)): <!--number 5720 --><!--line 0 --><!--description QmVjYXVzZSBvZiBhIG1pc3NpbmcgcGVybWlzc2lvbiBjaGVjaywgdGhlIGJyYW5jaCB1c2VkIHRvIHByb3Bvc2UgYSBwdWxsIHJlcXVlc3QgdG8gYSByZXBvc2l0b3J5IGNhbiBhbHdheXMgYmUgZGVsZXRlZCBieSB0aGUgdXNlciBwZXJmb3JtaW5nIHRoZSBtZXJnZS4gSXQgd2FzIGZpeGVkIHNvIHRoYXQgc3VjaCBhIGRlbGV0aW9uIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgdXNlciBwZXJmb3JtaW5nIHRoZSBtZXJnZSBoYXMgd3JpdGUgcGVybWlzc2lvbiB0byB0aGUgcmVwb3NpdG9yeSBmcm9tIHdoaWNoIHRoZSBwdWxsIHJlcXVlc3Qgd2FzIG1hZGUu-->Because of a missing permission check, the branch used to propose a pull request to a repository can always be deleted by the user performing the merge. It was fixed so that such a deletion is only allowed if the user performing the merge has write permission to the repository from which the pull request was made.<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5182) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5401)): <!--number 5401 --><!--line 0 --><!--description VHJhbnNsYXRpb24gYmFja3BvcnRzIHRvIHY3-->Translation backports to v7<!--description-->
|
||||
- Included for completeness but not worth a release note
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5725): <!--number 5725 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgbWVybWFpZCB0byB2MTAuOS4zIFtTRUNVUklUWV0gKHY3LjAvZm9yZ2Vqbyk=-->Update dependency mermaid to v10.9.3 [SECURITY] (v7.0/forgejo)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5241): <!--number 5241 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgZ28gdG8gdjEuMjIuNyAodjcuMC9mb3JnZWpvKQ==-->Update dependency go to v1.22.7 (v7.0/forgejo)<!--description-->
|
||||
<!--end release-notes-assistant-->
|
14
release-notes-published/7.0.11.md
Normal file
14
release-notes-published/7.0.11.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
<!--start release-notes-assistant-->
|
||||
|
||||
## Release notes
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8xY2UzM2FhMzhkMWQyNThkMTQ1MjNmZjJjN2MyZGJmMzM5ZjIyYjc0KSBpdCB3YXMgcG9zc2libGUgdG8gdXNlIGEgdG9rZW4gc2VudCB2aWEgZW1haWwgZm9yIHNlY29uZGFyeSBlbWFpbCB2YWxpZGF0aW9uIHRvIHJlc2V0IHRoZSBwYXNzd29yZCBpbnN0ZWFkLiAgSW4gb3RoZXIgd29yZHMsIGEgdG9rZW4gc2VudCBmb3IgIGEgZ2l2ZW4gYWN0aW9uIChyZWdpc3RyYXRpb24sIHBhc3N3b3JkIHJlc2V0IG9yIHNlY29uZGFyeSBlbWFpbCB2YWxpZGF0aW9uKSBjb3VsZCBiZSB1c2VkIHRvIHBlcmZvcm0gYSBkaWZmZXJlbnQgYWN0aW9uLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdXNlIGEgdG9rZW4gZm9yIGFuIGFjdGlvbiB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIGl0cyBvcmlnaW5hbCBwdXJwb3NlLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/1ce33aa38d1d258d14523ff2c7c2dbf339f22b74) it was possible to use a token sent via email for secondary email validation to reset the password instead. In other words, a token sent for a given action (registration, password reset or secondary email validation) could be used to perform a different action. It is no longer possible to use a token for an action that is different from its original purpose.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8wNjFhYmU2MDA0NTIxMmFjZjhjM2Y1YzQ5YjVjYzc1OGI0Y2JjZGU5KSBhIGZvcmsgb2YgYSBwdWJsaWMgcmVwb3NpdG9yeSB3b3VsZCBzaG93IGluIHRoZSBsaXN0IG9mIGZvcmtzLCBldmVuIGlmIGl0cyBvd25lciB3YXMgbm90IGEgcHVibGljIHVzZXIgb3Igb3JnYW5pemF0aW9uLiBTdWNoIGEgZm9yayBpcyBub3cgaGlkZGVuIGZyb20gdGhlIGxpc3Qgb2YgZm9ya3Mgb2YgdGhlIHB1YmxpYyByZXBvc2l0b3J5Lg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/061abe60045212acf8c3f5c49b5cc758b4cbcde9) a fork of a public repository would show in the list of forks, even if its owner was not a public user or organization. Such a fork is now hidden from the list of forks of the public repository.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8zZTNlZjc2ODA4MTAwY2IxYzg1MzM3ODczM2QwZjZhOTEwMzI0YWM2KSB0aGUgbWVtYmVycyBvZiBhbiBvcmdhbml6YXRpb24gdGVhbSB3aXRoIHJlYWQgYWNjZXNzIHRvIGEgcmVwb3NpdG9yeSAoZS5nLiB0byByZWFkIGlzc3VlcykgYnV0IG5vIHJlYWQgYWNjZXNzIHRvIHRoZSBjb2RlIGNvdWxkIHJlYWQgdGhlIFJTUyBvciBhdG9tIGZlZWRzIHdoaWNoIGluY2x1ZGUgdGhlIGNvbW1pdCBhY3Rpdml0eS4gUmVhZGluZyB0aGUgUlNTIG9yIGF0b20gZmVlZHMgaXMgbm93IGRlbmllZCB1bmxlc3MgdGhlIHRlYW0gaGFzIHJlYWQgcGVybWlzc2lvbnMgb24gdGhlIGNvZGUu-->[commit](https://codeberg.org/forgejo/forgejo/commit/3e3ef76808100cb1c853378733d0f6a910324ac6) the members of an organization team with read access to a repository (e.g. to read issues) but no read access to the code could read the RSS or atom feeds which include the commit activity. Reading the RSS or atom feeds is now denied unless the team has read permissions on the code.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 3 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC85NTA4YWE3NzEzNjMyZWQ0MDEyNGE5MzNkOTFkNTc2NmNmMjM2OWMyKSB0aGUgdG9rZW5zIHVzZWQgd2hlbiBbcmVwbHlpbmcgYnkgZW1haWwgdG8gaXNzdWVzIG9yIHB1bGwgcmVxdWVzdHNdKGh0dHBzOi8vZm9yZ2Vqby5vcmcvZG9jcy92OS4wL3VzZXIvaW5jb21pbmcvKSB3ZXJlIHdlYWtlciB0aGFuIHRoZSBbcmZjMjEwNCByZWNvbW1lbmRhdGlvbnNdKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjEwNCNzZWN0aW9uLTUpLiBUaGUgdG9rZW5zIGFyZSBub3cgdHJ1bmNhdGVkIHRvIDEyOCBiaXRzIGluc3RlYWQgb2YgODAgYml0cy4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHJlcGx5IHRvIGVtYWlscyBzZW50IGJlZm9yZSB0aGUgdXBncmFkZSBiZWNhdXNlIHRoZSB3ZWFrZXIgdG9rZW5zIGFyZSBpbnZhbGlkLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/9508aa7713632ed40124a933d91d5766cf2369c2) the tokens used when [replying by email to issues or pull requests](https://forgejo.org/docs/v9.0/user/incoming/) were weaker than the [rfc2104 recommendations](https://datatracker.ietf.org/doc/html/rfc2104#section-5). The tokens are now truncated to 128 bits instead of 80 bits. It is no longer possible to reply to emails sent before the upgrade because the weaker tokens are invalid.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 4 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC83ODZkZmM3ZmI4MWVlNzZkNDI5MmNhNWZjYjMzZTZlYTdiZGNjYzI5KSBhIHJlZ2lzdGVyZWQgdXNlciBjb3VsZCBtb2RpZnkgdGhlIHVwZGF0ZSBmcmVxdWVuY3kgb2YgYW55IHB1c2ggbWlycm9yIChlLmcuIGV2ZXJ5IDRoIGluc3RlYWQgb2YgZXZlcnkgOGgpLiBUaGV5IGFyZSBub3cgb25seSBhYmxlIHRvIGRvIHRoYXQgaWYgdGhleSBoYXZlIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIG9uIHRoZSByZXBvc2l0b3J5Lg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/786dfc7fb81ee76d4292ca5fcb33e6ea7bdccc29) a registered user could modify the update frequency of any push mirror (e.g. every 4h instead of every 8h). They are now only able to do that if they have administrative permissions on the repository.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 5 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9lNmJiZWNiMDJkNDc3MzBkM2NjNjMwZDQxOWZlMjdlZjJmYjVjYjM5KSBpdCB3YXMgcG9zc2libGUgdG8gdXNlIGJhc2ljIGF1dGhvcml6YXRpb24gKGkuZS4gdXNlcjpwYXNzd29yZCkgZm9yIHJlcXVlc3RzIHRvIHRoZSBBUEkgZXZlbiB3aGVuIHNlY3VyaXR5IGtleXMgd2VyZSBlbnJvbGxlZCBmb3IgYSB1c2VyLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUsIGFuIGFwcGxpY2F0aW9uIHRva2VuIG11c3QgYmUgdXNlZCBpbnN0ZWFkLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/e6bbecb02d47730d3cc630d419fe27ef2fb5cb39) it was possible to use basic authorization (i.e. user:password) for requests to the API even when security keys were enrolled for a user. It is no longer possible, an application token must be used instead.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 6 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC83MDY3Y2M3ZGE0ZjE0NGNjOGEyZmQyYWU2ZTUzMDdlMDQ2NWFjZTdmKSBzb21lIG1hcmt1cCBzYW5pdGF0aW9uIHJ1bGVzIHdlcmUgbm90IGFzIHN0cm9uZyBhcyB0aGV5IGNvdWxkIGJlIChlLmcuIGFsbG93aW5nIGBlbW9qaSBzb21ldGhpbmdlbHNlYCBhcyB3ZWxsIGFzIGBlbW9qaWApLiBUaGUgcnVsZXMgYXJlIG5vdyBzdHJpY3RlciBhbmQgZG8gbm90IGFsbG93IGZvciBzdWNoIGNhc2VzLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/7067cc7da4f144cc8a2fd2ae6e5307e0465ace7f) some markup sanitation rules were not as strong as they could be (e.g. allowing `emoji somethingelse` as well as `emoji`). The rules are now stricter and do not allow for such cases.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): <!--number 5976 --><!--line 7 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9iNzAxOTY2NTNmOWQ3ZDNiOWQ0ZTcyZDExNGU1Y2M2ZjQ3Mjk4OGM0KSB3aGVuIEZvcmdlam8gaXMgY29uZmlndXJlZCB0byBlbmFibGUgaW5zdGFuY2Ugd2lkZSBzZWFyY2ggKGUuZy4gd2l0aCBbYmxldmVdKGh0dHBzOi8vYmxldmVzZWFyY2guY29tLykpLCByZXN1bHRzIGZvdW5kIGluIHRoZSByZXBvc2l0b3JpZXMgb2YgcHJpdmF0ZSBvciBsaW1pdGVkIHVzZXJzIHdlcmUgZGlzcGxheWVkIHRvIGFub255bW91cyB2aXNpdG9ycy4gVGhlIHJlc3VsdHMgZm91bmQgaW4gcHJpdmF0ZSBvciBsaW1pdGVkIG9yZ2FuaXphdGlvbnMgd2VyZSBub3QgZGlzcGxheWVkLiBUaGUgc2VhcmNoIHJlc3VsdHMgZm91bmQgaW4gdGhlIHJlcG9zaXRvcmllcyBvZiBwcml2YXRlIG9yIGxpbWl0ZWQgdXNlciBhcmUgbm8gbG9uZ2VyIGRpc3BsYXllZCB0byBhbm9ueW1vdXMgdmlzaXRvcnMu-->[commit](https://codeberg.org/forgejo/forgejo/commit/b70196653f9d7d3b9d4e72d114e5cc6f472988c4) when Forgejo is configured to enable instance wide search (e.g. with [bleve](https://blevesearch.com/)), results found in the repositories of private or limited users were displayed to anonymous visitors. The results found in private or limited organizations were not displayed. The search results found in the repositories of private or limited user are no longer displayed to anonymous visitors.<!--description-->
|
||||
<!--end release-notes-assistant-->
|
18
release-notes-published/7.0.12.md
Normal file
18
release-notes-published/7.0.12.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
|
||||
<!--start release-notes-assistant-->
|
||||
|
||||
## Release notes
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6248) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6252)): <!--number 6252 --><!--line 0 --><!--description Zml4OiBlbnN1cmUgY29ycmVjdCBzc2ggcHVibGljIGtleSBpcyB1c2VkIGZvciBhdXRoZW50aWNhdGlvbg==-->When Forgejo is configured to run the internal ssh server with `[server].START_SSH_SERVER=true`, it was possible for a registered user to impersonate another user. The rootless container image uses the internal ssh server by default and was vulnerable. A Forgejo instance running from a binary or from a root container image does not use the internal ssh server by default and was not vulnerable. The incorrect use of the crypto package is the root cause of the vulnerability and was fixed for the internal ssh server.<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6124) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6132)): <!--number 6132 --><!--line 0 --><!--description Zml4OiBkb2N0b3IgZmFpbHMgd2l0aCBwcTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIi4iIHdoaWxzdCBjb3VudGluZyBBdXRob3JpemF0aW9uIHRva2VuIHdpdGhvdXQgZXhpc3RpbmcgVXNlcg==-->fix: doctor fails with pq: syntax error at or near "." whilst counting Authorization token without existing User<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6054) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6056)): <!--number 6056 --><!--line 0 --><!--description Zml4OiBEbyBub3QgZGVsZXRlIGdsb2JhbCBPYXV0aDIgYXBwbGljYXRpb25z-->fix: Do not delete global Oauth2 applications<!--description-->
|
||||
- Included for completeness but not worth a release note
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6246): <!--number 6246 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnb2xhbmcub3JnL3gvY3J5cHRvIHRvIHYwLjMxLjAgKHY3LjAvZm9yZ2Vqbyk=-->Update module golang.org/x/crypto to v0.31.0 (v7.0/forgejo)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6223) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6230)): <!--number 6230 --><!--line 0 --><!--description Y2hvcmUoY2kpOiBzZXQgdGhlIG1pbGVzdG9uZSB3aGVuIGEgcHVsbCByZXF1ZXN0IGlzIGNsb3NlZCAodGFrZSA0KQ==-->chore(ci): set the milestone when a pull request is closed (take 4)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6219) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6224)): <!--number 6224 --><!--line 0 --><!--description Y2hvcmUoY2kpOiBzZXQgdGhlIG1pbGVzdG9uZSB3aGVuIGEgcHVsbCByZXF1ZXN0IGlzIG9wZW4gKHRha2UgMyk=-->chore(ci): set the milestone when a pull request is open (take 3)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6211) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6216)): <!--number 6216 --><!--line 0 --><!--description Y2hvcmUoY2kpOiBzZXQgdGhlIG1pbGVzdG9uZSB3aGVuIGEgcHVsbCByZXF1ZXN0IGlzIG9wZW4=-->chore(ci): set the milestone when a pull request is open<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6034) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6036)): <!--number 6036 --><!--line 0 --><!--description Y2hvcmUoY2kpOiByZW1vdmUgdW51c2VkIGV4cGVyaW1lbnRhbCBETlMgdXBkYXRlcw==-->chore(ci): remove unused experimental DNS updates<!--description-->
|
||||
<!--end release-notes-assistant-->
|
13
release-notes-published/7.0.7.md
Normal file
13
release-notes-published/7.0.7.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
This is a security release. See the documentation for more information on the [upgrade procedure](https://forgejo.org/docs/v7.0/admin/upgrade/).
|
||||
|
||||
- Security
|
||||
A [change introduced in Forgejo v1.21](https://codeberg.org/forgejo/forgejo/pulls/1433) allows a Forgejo user with write permission on a repository description to [inject a client-side script into the web page viewed by the visitor](https://en.wikipedia.org/wiki/Cross-site_scripting). This XSS allows for `href` in anchor elements to be set to a `javascript:` URI in the repository description, which will execute the specified script upon clicking (and not upon loading). [`AllowStandardURLs`](https://pkg.go.dev/github.com/microcosm-cc/bluemonday#Policy.AllowStandardURLs) is now called for the repository description policy, which ensures that URIs in anchor elements are `mailto:`, `http://` or `https://` and thereby disallowing the `javascript:` URI.
|
||||
|
||||
<!--start release-notes-assistant-->
|
||||
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4896) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4900)): <!--number 4900 --><!--line 0 --><!--description ZGlzYWxsb3cgamF2YXNjcmlwdDogVVJJIGluIHRoZSByZXBvc2l0b3J5IGRlc2NyaXB0aW9u-->disallow javascript: URI in the repository description<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4568) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4882)): <!--number 4882 --><!--line 0 --><!--description aTE4bjogYmFja3BvcnQgb2YgIzQ1NjggIzQ2NjggYW5kICM0NzgzIHRvIHY3-->i18n: backport of #4568 #4668 and #4783 to v7<!--description-->
|
||||
<!--end release-notes-assistant-->
|
18
release-notes-published/7.0.8.md
Normal file
18
release-notes-published/7.0.8.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
This is a security release. See the documentation for more information on the [upgrade procedure](https://forgejo.org/docs/v7.0/admin/upgrade/).
|
||||
|
||||
- Security bug fixes
|
||||
[The scope of application tokens was not verified](https://codeberg.org/forgejo/forgejo/pulls/5149) when writing containers or Conan packages. This is of no consequence when the user associated with the application token does not have write access to packages. If the user has write access to packages, such a token can be used to write containers and Conan packages. An application token that was used to write containers or Conan packages without the `package:write` scope will now fail with an unauthorized error. It must be re-created to include the `package:write` scope.
|
||||
|
||||
|
||||
<!--start release-notes-assistant-->
|
||||
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- User Interface bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5029) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5033)): <!--number 5033 --><!--line 0 --><!--description W1BPUlRdIEZpeCBvdmVyZmxvdyBmb3IgaW1hZ2VzIG9uIHByb2plY3QgY2FyZHMgKGdpdGVhIzMxNjgzKQ==-->Overflow for images on project cards.<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5149) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5150)): <!--number 5150 --><!--line 0 --><!--description VGhlIHNjb3BlIG9mIGFwcGxpY2F0aW9uIHRva2VucyBpcyBub3QgdmVyaWZpZWQgd2hlbiB3cml0aW5nIGNvbnRhaW5lcnMgb3IgQ29uYW4gcGFja2FnZXMuIFRoaXMgaXMgb2Ygbm8gY29uc2VxdWVuY2Ugd2hlbiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9uIHRva2VuIGRvZXMgbm90IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHBhY2thZ2VzLiBJZiB0aGUgdXNlciBoYXMgd3JpdGUgYWNjZXNzIHRvIHBhY2thZ2VzLCBzdWNoIGEgdG9rZW4gY2FuIGJlIHVzZWQgdG8gd3JpdGUgY29udGFpbmVycyBhbmQgQ29uYW4gcGFja2FnZXMu-->The scope of application tokens is not verified when writing containers or Conan packages.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4885) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4950)): <!--number 4950 --><!--line 0 --><!--description Zml4OiBSdW4gZnVsbCBQUiBjaGVja3Mgb24gYWdpdCBwdXNo-->Run full PR checks on AGit push.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/3264) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4999)): <!--number 4999 --><!--line 4 --><!--description LSBmaXg6IFtjb21taXRdKGh0dHBzOi8vY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2Vqby9jb21taXQvMzY0OTIyYzZlNGYyODI2NGFkZDllMjUwMWEzNTJjMjVhZDZhMDk5Mykgd2hlbiBhIHJlcG9zaXRvcnkgaXMgYWRvcHRlZCwgaXRzIG9iamVjdCBmb3JtYXQgaXMgbm90IHNldCBpbiB0aGUgZGF0YWJhc2Uu-->- [commit](https://codeberg.org/forgejo/forgejo/commit/364922c6e4f28264add9e2501a352c25ad6a0993) When a repository is adopted, its object format is not set in the database.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/3264) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4999)): <!--number 4999 --><!--line 5 --><!--description LSBmaXg6IFtjb21taXRdKGh0dHBzOi8vY29kZWJlcmcub3JnL2Zvcmdlam8vZm9yZ2Vqby9jb21taXQvZTdmMzMyYTU1ZDZhNDhhM2YzYjRmMmJmYTQzZDE4NDU1YWMwMGFjYykgZHVyaW5nIGEgbWlncmF0aW9uIGZyb20gYml0YnVja2V0LCBMRlMgZG93bmxvYWRzIGZhaWwu-->- [commit](https://codeberg.org/forgejo/forgejo/commit/e7f332a55d6a48a3f3b4f2bfa43d18455ac00acc) During a migration from bitbucket, LFS downloads fail.<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4889) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5138)): <!--number 5138 --><!--line 0 --><!--description QmFja3BvcnRzIG9mICM0ODg5IGFuZCAjNDk4NCB0byB2Nw==-->Backports of #4889 and #4984 to v7<!--description-->
|
9
release-notes-published/7.0.9.md
Normal file
9
release-notes-published/7.0.9.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
<!--start release-notes-assistant-->
|
||||
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5244) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5246)): <!--number 5246 --><!--line 0 --><!--description cmVwbGFjZSB2LWh0bWwgd2l0aCB2LXRleHQgaW4gYnJhbmNoIHNlYXJjaCBpbnB1dGJveCBmb3IgWFNTIHByb3RlY3Rpb24=-->replace v-html with v-text in branch search inputbox for XSS protection<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5201): <!--number 5201 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgd2VicGFjayB0byB2NS45NC4wIFtTRUNVUklUWV0gKHY3LjAvZm9yZ2Vqbyk=-->Upgrade [webpack to v5.94.0](https://github.com/webpack/webpack/releases/tag/v5.94.0) as a precaution to mitigate [CVE-2024-43788](https://github.com/advisories/GHSA-4vvj-4cpr-p986), although we were not yet able to confirm that this can be exploited in Forgejo.<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5070) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5181)): <!--number 5181 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
|
||||
<!--end release-notes-assistant-->
|
20
release-notes-published/8.0.1.md
Normal file
20
release-notes-published/8.0.1.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
This is a security release. See the documentation for more information on the [upgrade procedure](https://forgejo.org/docs/v8.0/admin/upgrade/).
|
||||
|
||||
- Security bug fixes
|
||||
A [change introduced in Forgejo v1.21](https://codeberg.org/forgejo/forgejo/pulls/1433) allows a Forgejo user with write permission on a repository description to [inject a client-side script into the web page viewed by the visitor](https://en.wikipedia.org/wiki/Cross-site_scripting). This XSS allows for `href` in anchor elements to be set to a `javascript:` URI in the repository description, which will execute the specified script upon clicking (and not upon loading). [`AllowStandardURLs`](https://pkg.go.dev/github.com/microcosm-cc/bluemonday#Policy.AllowStandardURLs) is now called for the repository description policy, which ensures that URIs in anchor elements are `mailto:`, `http://` or `https://` and thereby disallowing the `javascript:` URI.
|
||||
|
||||
<!--start release-notes-assistant-->
|
||||
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- User Interface bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4835) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4848)): <!--number 4848 --><!--line 0 --><!--description RG8gbm90IGluY2x1ZGUgdHJhaWxpbmcgRU9MIGNoYXJhY3RlciB3aGVuIGNvdW50aW5nIGxpbmVz-->Do not include trailing EOL character when counting lines<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4836) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4847)): <!--number 4847 --><!--line 0 --><!--description QWRkIGJhY2tncm91bmQgdG8gcmVhY3Rpb25zIG9uIGhvdmVy-->Add background to reactions on hover<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4806) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4807)): <!--number 4807 --><!--line 0 --><!--description UHJldmVudCB1cHBlcmNhc2UgaW4gaGVhZGVyIG9mIGRhc2hib2FyZCBjb250ZXh0IHNlbGVjdG9y-->Prevent uppercase in header of dashboard context selector<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4754) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4756)): <!--number 4756 --><!--line 0 --><!--description Rml4IHBhZ2UgbGF5b3V0IGluIGFkbWluIHNldHRpbmdz-->Fix page layout in admin settings<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4896) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4901)): <!--number 4901 --><!--line 0 --><!--description ZGlzYWxsb3cgamF2YXNjcmlwdDogVVJJIGluIHRoZSByZXBvc2l0b3J5IGRlc2NyaXB0aW9u-->disallow javascript: URI in the repository description<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4852) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4865)): <!--number 4865 --><!--line 0 --><!--description RW5zdXJlIGFsbCBmaWx0ZXJzIGFyZSBwZXJzaXN0ZW50IGluIGlzc3VlIGZpbHRlcnM=-->Ensure all filters are persistent in issue filters<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4828) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4840)): <!--number 4840 --><!--line 0 --><!--description QWxsb3cgNCBjaGFyYWNodGVyIFNIQSBpbiBgL3NyYy9jb21taXRg-->Allow 4 charachter SHA in `/src/commit`<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4668) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4881)): <!--number 4881 --><!--line 0 --><!--description aTE4bjogYmFja3BvcnQgb2YgIzQ2NjggYW5kICM0NzgzIHRvIHY4-->i18n: backport of #4668 and #4783 to v8<!--description-->
|
||||
<!--end release-notes-assistant-->
|
24
release-notes-published/8.0.2.md
Normal file
24
release-notes-published/8.0.2.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
This is a security release. See the documentation for more information on the [upgrade procedure](https://forgejo.org/docs/v8.0/admin/upgrade/).
|
||||
|
||||
- Security
|
||||
[The scope of application tokens was not verified](https://codeberg.org/forgejo/forgejo/pulls/5149) when writing containers or Conan packages. This is of no consequence when the user associated with the application token does not have write access to packages. If the user has write access to packages, such a token can be used to write containers and Conan packages. An application token that was used to write containers or Conan packages without the `package:write` scope will now fail with an unauthorized error. It must be re-created to include the `package:write` scope.
|
||||
|
||||
<!--start release-notes-assistant-->
|
||||
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- User Interface bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5029) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5032)): <!--number 5032 --><!--line 0 --><!--description W1BPUlRdIEZpeCBvdmVyZmxvdyBmb3IgaW1hZ2VzIG9uIHByb2plY3QgY2FyZHMgKGdpdGVhIzMxNjgzKQ==-->Overflow for images on project cards.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4798) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4919)): <!--number 4919 --><!--line 0 --><!--description Zml4KHVpKTogYWxsb3cgdW5yZWFjdGluZyBmcm9tIGNvbW1lbnQgcG9wb3Zlcg==-->Allow unreacting from comment popover.<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5149) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5151)): <!--number 5151 --><!--line 0 --><!--description VGhlIHNjb3BlIG9mIGFwcGxpY2F0aW9uIHRva2VucyBpcyBub3QgdmVyaWZpZWQgd2hlbiB3cml0aW5nIGNvbnRhaW5lcnMgb3IgQ29uYW4gcGFja2FnZXMuIFRoaXMgaXMgb2Ygbm8gY29uc2VxdWVuY2Ugd2hlbiB0aGUgdXNlciBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9uIHRva2VuIGRvZXMgbm90IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHBhY2thZ2VzLiBJZiB0aGUgdXNlciBoYXMgd3JpdGUgYWNjZXNzIHRvIHBhY2thZ2VzLCBzdWNoIGEgdG9rZW4gY2FuIGJlIHVzZWQgdG8gd3JpdGUgY29udGFpbmVycyBhbmQgQ29uYW4gcGFja2FnZXMu-->The scope of application tokens is not verified when writing containers or Conan packages.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5065) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5080)): <!--number 5080 --><!--line 0 --><!--description d2hlbiBhIEZvcmdlam8gQWN0aW9ucyB3b3JrZmxvdyBpbmNsdWRlcyBhIGB3b3JrZmxvd19kaXNwYXRjaGAgd2l0aCBgaW5wdXRzYCBhbmQgb3RoZXIgZXZlbnRzIChmb3IgaW5zdGFuY2UgYHB1c2hgKSwgaXQgaXMgc2lsZW50bHkgaWdub3JlZCBiZWNhdXNlIG9mIGEgcGFyc2luZyBlcnJvci4=-->When a Forgejo Actions workflow includes a `workflow_dispatch` with `inputs` and other events (for instance `push`), it is silently ignored because of a parsing error.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5053): <!--number 5053 --><!--line 0 --><!--description W1BPUlRdIEZpeCBhdXRvbWVyZ2Ugb24gQUdpdCBQUnMgKGdpdGVhIzMxODgxKQ==-->Automerge on AGit pull requests is ignored.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): <!--number 5050 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC83ZjFkYjFkZjNlZThkNjIwZjk5N2I4ZTcwYTQwYzJmNDhhZTk2YzBmKSBTaG93IGxvY2sgb3duZXIgaW5zdGVhZCBvZiByZXBvIG93bmVyIG9uIExGUyBzZXR0aW5nIHBhZ2Uu-->[commit](https://codeberg.org/forgejo/forgejo/commit/7f1db1df3ee8d620f997b8e70a40c2f48ae96c0f) Show lock owner instead of repo owner on LFS setting page.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): <!--number 5050 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9lYmZkYzY1OWQ4MTQ1NjFmODc4MzA5NGUyZWIyNjczOGE1NTAwZTU1KSBSZW5kZXIgcGxhaW4gdGV4dCBmaWxlIGlmIHRoZSBMRlMgb2JqZWN0IGRvZXNuJ3QgZXhpc3Qu-->[commit](https://codeberg.org/forgejo/forgejo/commit/ebfdc659d814561f8783094e2eb26738a5500e55) Render plain text file if the LFS object doesn't exist.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): <!--number 5050 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC85ZTA2NmMzY2FkN2JiMWIzMGUyZGVmMzRiZDA2MDhhYWM4MjVjZjU4KSBGaXggcGFuaWMgb2Ygc3NoIHB1YmxpYyBrZXkgcGFnZSBhZnRlciBkZWxldGlvbiBvZiBhdXRoIHNvdXJjZS4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/9e066c3cad7bb1b30e2def34bd0608aac825cf58) Panic of ssh public key page after deletion of an auth source.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): <!--number 5050 --><!--line 3 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9hOGUyNWU5MDdjNjYxNDA5NjFmMjhiYTkyNDAzMTc2YzgxNmRmYjYwKSBBZGQgbWlzc2luZyByZXBvc2l0b3J5IHR5cGUgZmlsdGVyIHBhcmFtZXRlcnMgdG8gcGFnZXIu-->[commit](https://codeberg.org/forgejo/forgejo/commit/a8e25e907c66140961f28ba92403176c816dfb60) Add missing repository type filter parameters to pager.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4907) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4965)): <!--number 4965 --><!--line 0 --><!--description UmV2ZXJ0ZWQgYSBjaGFuZ2UgZnJvbSBHaXRlYSB3aGljaCBwcmV2ZW50ZWQgYWxsb3cvcmVqZWN0IHJldmlld3Mgb24gbWVyZ2VkIG9yIGNsb3NlZCBQUnMuIFRoaXMgY2hhbmdlIHdhcyBub3QgY29uc2lkZXJlZCBieSB0aGUgRm9yZ2VqbyBVSSB0ZWFtIGFuZCB0aGVyZSBpcyBhIGNvbnNlbnN1cyB0aGF0IGl0IGZlZWxzIGxpa2UgYSByZWdyZXNzaW9uLCBzaW5jZSBpdCBpbnRlcmZlcmVzIHdpdGggd29ya2Zsb3dzIGtub3duIHRvIGJlIHVzZWQgYnkgRm9yZ2VqbyB1c2VycyB3aXRob3V0IHByb3ZpZGluZyBhIHRhbmdpYmxlIGJlbmVmaXQu-->Reverted a change from Gitea which prevented allow/reject reviews on merged or closed PRs. This change was not considered by the Forgejo UI team and there is a consensus that it feels like a regression, since it interferes with workflows known to be used by Forgejo users without providing a tangible benefit.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4885) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4951)): <!--number 4951 --><!--line 0 --><!--description Zml4OiBSdW4gZnVsbCBQUiBjaGVja3Mgb24gYWdpdCBwdXNo-->Run full PR checks on AGit push.<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4984) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5116)): <!--number 5116 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4889) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5114)): <!--number 5114 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
|
10
release-notes-published/8.0.3.md
Normal file
10
release-notes-published/8.0.3.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
<!--start release-notes-assistant-->
|
||||
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5244) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5247)): <!--number 5247 --><!--line 0 --><!--description cmVwbGFjZSB2LWh0bWwgd2l0aCB2LXRleHQgaW4gYnJhbmNoIHNlYXJjaCBpbnB1dGJveCBmb3IgWFNTIHByb3RlY3Rpb24=-->replace v-html with v-text in branch search inputbox for XSS protection<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5202): <!--number 5202 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgd2VicGFjayB0byB2NS45NC4wIFtTRUNVUklUWV0gKHY4LjAvZm9yZ2Vqbyk=-->Upgrade [webpack to v5.94.0](https://github.com/webpack/webpack/releases/tag/v5.94.0) as a precaution to mitigate [CVE-2024-43788](https://github.com/advisories/GHSA-4vvj-4cpr-p986), although we were not yet able to confirm that this can be exploited in Forgejo.<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5182) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5230)): <!--number 5230 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5070) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5161)): <!--number 5161 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
|
||||
<!--end release-notes-assistant-->
|
114
release-notes-published/9.0.0.md
Normal file
114
release-notes-published/9.0.0.md
Normal file
|
@ -0,0 +1,114 @@
|
|||
A [companion blog post](https://forgejo.org/2024-10-release-v9-0/) provides additional context on this major release.
|
||||
|
||||
<!--start release-notes-assistant-->
|
||||
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Breaking changes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4724): <!--number 4724 --><!--line 0 --><!--description T0lEQyBpbnRlZ3JhdGlvbnMgdGhhdCBQT1NUIHRvIGAvbG9naW4vb2F1dGgvaW50cm9zcGVjdGAgd2l0aG91dCBzZW5kaW5nIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24gd2lsbCBub3cgZmFpbCB3aXRoIGEgNDAxIEhUVFAgVW5hdXRob3JpemVkIGVycm9yLiBUbyBmaXggdGhlIGVycm9yLCB0aGUgY2xpZW50IG11c3QgYmVnaW4gc2VuZGluZyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHdpdGggYSB2YWxpZCBjbGllbnQgSUQgYW5kIHNlY3JldC4gVGhpcyBlbmRwb2ludCB3YXMgcHJldmlvdXNseSBhdXRoZW50aWNhdGVkIHZpYSB0aGUgaW50cm9zcGVjdGlvbiB0b2tlbiBpdHNlbGYsIHdoaWNoIGlzIGxlc3Mgc2VjdXJlLg==-->OIDC integrations that POST to `/login/oauth/introspect` without sending HTTP basic authentication will now fail with a 401 HTTP Unauthorized error. To fix the error, the client must begin sending HTTP basic authentication with a valid client ID and secret. This endpoint was previously authenticated via the introspection token itself, which is less secure.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5515) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5526)): <!--number 5526 --><!--line 0 --><!--description KipGaXhpbmcgdGhpcyBidWcgaXMgYSBicmVha2luZyBjaGFuZ2UgYmVjYXVzZSBleGlzdGluZyB0b2tlbnMgd2l0aCBhIHB1YmxpYyBzY29wZSB3aWxsIG5vIGxvbmdlciByZXR1cm4gcHJpdmF0ZSByZXNvdXJjZXMuIFRoZXkgaGF2ZSB0byBiZSBkZWxldGVkIGFuZCByZS1jcmVhdGVkIHdpdGhvdXQgdGhlIHB1YmxpYyBzY29wZSB0byByZXN0b3JlIHRoZWlyIG9yaWdpbmFsIGJlaGF2aW9yKiouIFRoZSBwdWJsaWMgc2NvcGUgb2YgYW4gYXBwbGljYXRpb24gdG9rZW4gZG9lcyBub3QgZmlsdGVyIG91dCBwcml2YXRlIHJlcG9zaXRvcmllcywgb3JnYW5pemF0aW9ucyBvciBwYWNrYWdlcyBpbiBzb21lIGNhc2VzLiBUaGlzIHNjb3BlIGlzIG5vdCB0aGUgZGVmYXVsdCwgaXQgaGFzIHRvIGJlIG1hbnVhbGx5IHNldCB2aWEgdGhlIHdlYiBVSSBvciB0aGUgQVBJLiBXaGVuIHRoZSBwdWJsaWMgc2NvcGUgaXMgZXhwbGljaXRseSBhZGRlZCB0byBhbiBhcHBsaWNhdGlvbiB0b2tlbiB0aGF0IGlzIGFsbG93ZWQgdG8gbGlzdCB0aGUgcmVwb3NpdG9yaWVzIGFuZCBwYWNrYWdlcyBvZiBhIHVzZXIgb3IgYW4gb3JnYW5pemF0aW9uLCBpdCBpcyBtZWFudCBhcyBhIHJlc3RyaWN0aW9uLiBGb3IgaW5zdGFuY2UgaWYgYSB1c2VyIGhhcyB0d28gcmVwb3NpdG9yaWVzLCBvbmUgcHJpdmF0ZSBhbmQgdGhlIG90aGVyIHB1YmxpY2x5IHZpc2libGUsIGEgdG9rZW4gd2l0aCB0aGUgcHVibGljIHNjb3BlIHVzZWQgd2l0aCB0aGUgQVBJIGVuZHBvaW50IGxpc3RpbmcgdGhlIHJlcG9zaXRvcmllcyB0aGF0IGJlbG9uZyB0byB0aGlzIHVzZXIgbXVzdCBvbmx5IHJldHVybiB0aGUgcHVibGljbHkgdmlzaWJsZSBvbmUgYW5kIG5vdCByZXZlYWwgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcHJpdmF0ZSBvbmUu-->**Fixing this bug is a breaking change because existing tokens with a public scope will no longer return private resources. They have to be deleted and re-created without the public scope to restore their original behavior**. The public scope of an application token does not filter out private repositories, organizations or packages in some cases. This scope is not the default, it has to be manually set via the web UI or the API. When the public scope is explicitly added to an application token that is allowed to list the repositories and packages of a user or an organization, it is meant as a restriction. For instance if a user has two repositories, one private and the other publicly visible, a token with the public scope used with the API endpoint listing the repositories that belong to this user must only return the publicly visible one and not reveal the existence of the private one.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4941): <!--number 4941 --><!--line 0 --><!--description RHJvcCBzdXBwb3J0IHRvIGJ1aWxkIEZvcmdlam8gd2l0aCB0aGUgb3B0aW9uYWwgZ28tZ2l0IEdpdCBiYWNrZW5kLiBJdCBvbmx5IGFmZmVjdHMgdXNlcnMgd2hvIGJ1aWx0IEZvcmdlam8gbWFudWFsbHkgdXNpbmcgYFRBR1M9Z29naXRzYCwgd2hpY2ggbm8gbG9uZ2VyIGhhcyBhbnkgZWZmZWN0LiBNb3ZpbmcgZm9yd2FyZCwgd2Ugb25seSBzdXBwb3J0IHRoZSBkZWZhdWx0IGJhY2tlbmQgdXNpbmcgdGhlIGdpdCBiaW5hcnkuIFBsZWFzZSBnZXQgaW4gdG91Y2ggaWYgeW91IHVzZWQgdGhlIGdvLWdpdCBiYWNrZW5kIGFuZCByZXF1aXJlIGFueSBhc3Npc3RhbmNlIG1vdmluZyBhd2F5IGZyb20gaXQu-->Drop support to build Forgejo with the optional go-git Git backend. It only affects users who built Forgejo manually using `TAGS=gogits`, which no longer has any effect. Moving forward, we only support the default backend using the git binary. Please get in touch if you used the go-git backend and require any assistance moving away from it.<!--description-->
|
||||
- User Interface features
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5286): <!--number 5286 --><!--line 0 --><!--description c2V0IGNyZWF0ZWRfYnkgYXMgdGhlIGRlZmF1bHQgZmlsdGVyIGZvciAvaXNzdWVzIGFuZCAvcHVsbHM=-->Set created_by as the default filter for /issues and /pulls.<!--description-->
|
||||
Note that this also affects /org/*/pulls and /org/*/issues, but for them this default might be reverted back in the future releases.
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5270): <!--number 5270 --><!--line 0 --><!--description c2V0IGZ1enp5IGFzIGRlZmF1bHQgZm9yIGlzc3VlIHNlYXJjaA==-->Set fuzzy as default for issue search.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5214): <!--number 5214 --><!--line 0 --><!--description dWk6IEltcHJvdmUgY29tbWl0IGdyYXBoIGxheW91dA==-->Improve commit graph layout.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5205): <!--number 5205 --><!--line 0 --><!--description bWVybWFpZDogW0FkZCBzdXBwb3J0IGZvciBpY29uaWZ5IGljb25zXShodHRwczovL2dpdGh1Yi5jb20vbWVybWFpZC1qcy9tZXJtYWlkL3B1bGwvNTc5Myku-->mermaid: [Add support for iconify icons](https://github.com/mermaid-js/mermaid/pull/5793).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5205): <!--number 5205 --><!--line 1 --><!--description bWVybWFpZDogW0FsbG93IG11bHRpLWxpbmUgcmVsYXRpb25zaGlwIGxhYmVsc10oaHR0cHM6Ly9naXRodWIuY29tL21lcm1haWQtanMvbWVybWFpZC9wdWxsLzU3MTEpLg==-->mermaid: [Allow multi-line relationship labels](https://github.com/mermaid-js/mermaid/pull/5711).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5205): <!--number 5205 --><!--line 2 --><!--description bWVybWFpZDogW0FkZHMgYXJjaGl0ZWN0dXJlIGRpYWdyYW1zIHdoaWNoIGFsbG93cyB1c2VycyB0byBzaG93IHJlbGF0aW9ucyBiZXR3ZWVuIHNlcnZpY2VzXShodHRwczovL2dpdGh1Yi5jb20vbWVybWFpZC1qcy9tZXJtYWlkL3B1bGwvNTQ1Miku-->mermaid: [Adds architecture diagrams which allows users to show relations between services](https://github.com/mermaid-js/mermaid/pull/5452).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5110): <!--number 5110 --><!--line 0 --><!--description SW1wcm92ZSBkaWZmcyBnZW5lcmF0ZWQgYnkgRm9yZ2Vqbw==-->Improve diffs generated by Forgejo.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5002): <!--number 5002 --><!--line 0 --><!--description ZmVhdCh1aSk6IEFkZCBgcmVsPSJub2ZvbGxvdyJgIHRvIGluLWxpc3QgbGFiZWxz-->Add `rel="nofollow"` to in-list labels.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4782): <!--number 4782 --><!--line 0 --><!--description RGlzdGluZ3Vpc2ggYmV0d2VlbiBuZXcgdGFncywgcmVsZWFzZXMgYW5kIHByZS1yZWxlYXNlcyBvbiBhY3Rpdml0eSBwYWdl-->Distinguish between new tags, releases and pre-releases on activity page.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4749): <!--number 4749 --><!--line 0 --><!--description aGlnaGxpZ2h0ZWQgY29kZSBzZWFyY2ggcmVzdWx0cw==-->Highlighted code search results.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4710): <!--number 4710 --><!--line 0 --><!--description UmVmYWN0b3IgcmVwbyBtaWdyYXRpb24gaXRlbXM=-->Refactor repo migration items.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4697): <!--number 4697 --><!--line 0 --><!--description ZmVhdChVSSk6IGFkZCBwYWNrYWdlIGNvdW50ZXIgdG8gcmVwby91c2VyL29yZyBvdmVydmlldyBwYWdlcw==-->Add package counter to repo/user/org overview pages.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4571): <!--number 4571 --><!--line 0 --><!--description UmVwbGFjZSBgdnVlLWJhci1ncmFwaGAgd2l0aCBgY2hhcnQuanNg-->Replace `vue-bar-graph` with `chart.js`.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4541): <!--number 4541 --><!--line 0 --><!--description ZmVhdCh1aSk6IGFkZCBtb3JlIGVtb2ppIGFuZCBjb2RlIGJsb2NrIHJlbmRlcmluZyBpbiBpc3N1ZXM=-->Add more emoji and code block rendering in issues.<!--description-->
|
||||
- User Interface bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5261): <!--number 5261 --><!--line 0 --><!--description Rml4IGJhZCBzcGFjaW5nIG9uIG5ldyByZWxlYXNlIHBhZ2U=-->Bad spacing on new release page.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5180): <!--number 5180 --><!--line 0 --><!--description Rml4IG1pbGVzdG9uZSBhc3NpZ25tZW50IGluIG5ldyBpc3N1ZQ==-->Milestone assignment in new issue.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4928): <!--number 4928 --><!--line 0 --><!--description Z2l0LWdyZXA6IGVuc3VyZSBib3VuZGVkIGRlZmF1bHQgZm9yIE1hdGNoZXNQZXJGaWxl-->git-grep: ensure bounded default for MatchesPerFile.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4597): <!--number 4597 --><!--line 0 --><!--description Rml4IGdvIHRvIGNpdGF0aW9uIGJ1dHRvbg==-->Incorrect go to citation button.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4538): <!--number 4538 --><!--line 0 --><!--description Zml4KHVpKTogSFRNWCBzdXBwb3J0IGZvciBwcm9maWxlIGNhcmQ=-->Incorrect HTMX support for profile card.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4490): <!--number 4490 --><!--line 0 --><!--description W2FjY2Vzc2liaWxpdHldIEFkZCBrZXlib2FyZCBzdXBwb3J0IGZvciB0ZXN0IGFjdGlvbnM=-->Accessibility keyboard support for test actions.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4455): <!--number 4455 --><!--line 0 --><!--description VXBkYXRlIHB1bGwgcmVxdWVzdCBpY29ucw==-->Update pull request icons.<!--description-->
|
||||
- Features
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5482) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5524)): <!--number 5524 --><!--line 0 --><!--description ZmVhdDogIkFzc2lnbiB0byBtZSIgYnV0dG9uIG9uIFBSIGFuZCBJc3N1ZXMgIzUyMTU=-->"Assign to me" button on PR and Issues.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5351) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5407)): <!--number 5407 --><!--line 0 --><!--description ZmVhdDogIGFkZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVtb3ZhbCBzdXBwb3J0IGZvciBhcmNoIHBhY2thZ2U=-->Add architecture-specific removal support for arch package.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): <!--number 5406 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC85ZDM0NzMxMTk4OTNmZmRlMGFiMzZkOThlN2EwZTQxYzVkMGJhOWEzKSBBZGQgYmluIHRvIENvbXBvc2VyIE1ldGFkYXRhLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/9d3473119893ffde0ab36d98e7a0e41c5d0ba9a3) Add bin to Composer Metadata.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5383): <!--number 5383 --><!--line 0 --><!--description aTE4bjogVVggaW1wcm92ZW1lbnRzOiBUZWFtIHBlcm1pc3Npb25zIGFuZCBpc3N1ZSBjbG9zaW5n-->Internationalization user experience improvements on team permissions and issue closing.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5325): <!--number 5325 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8yZGEwZWJiZDIzMTRmMTJiMjg3Njk0YzM3OGE4ODgzMTFkZDMzN2JjKSBTdXBwb3J0IGFsbG93ZWQgaG9zdHMgZm9yIG1pZ3JhdGlvbnMgdG8gd29yayB3aXRoIHByb3h5Lg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/2da0ebbd2314f12b287694c378a888311dd337bc) Support allowed hosts for migrations to work with proxy.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5125): <!--number 5125 --><!--line 0 --><!--description VHJpdmlhbCBkZWZhdWx0IHF1b3RhIGNvbmZpZ3VyYXRpb24=-->Trivial default quota configuration.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5120): <!--number 5120 --><!--line 0 --><!--description TGFuZ3VhZ2UgZGV0ZWN0aW9uIGluIHRoZSByZXBvc2l0b3J5IGxlYXJuZWQgYWJvdXQgdGhlIGZvbGxvd2luZyBsYW5ndWFnZXM6IFtMdWF1XShodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViLWxpbmd1aXN0L2xpbmd1aXN0L3B1bGwvNjYxMiksIFtCUU5dKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82NjIzKSwgW0Nyb24gdGFibGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82NzU5KSwgW05NT0RMXShodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViLWxpbmd1aXN0L2xpbmd1aXN0L3B1bGwvNjc3NiksIFtQa2xdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82NzMwKSwgW3RlbXBsXShodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViLWxpbmd1aXN0L2xpbmd1aXN0L3B1bGwvNjc5OCksIFtGSVJSVExdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82ODQ4KSwgW0p1bGlhIFJFUExdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82ODU5KSwgW0NhZGR5ZmlsZV0oaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi1saW5ndWlzdC9saW5ndWlzdC9wdWxsLzY4NjIpLg==-->Language detection in the repository learned about the following languages: [Luau](https://github.com/github-linguist/linguist/pull/6612), [BQN](https://github.com/github-linguist/linguist/pull/6623), [Cron table](https://github.com/github-linguist/linguist/pull/6759), [NMODL](https://github.com/github-linguist/linguist/pull/6776), [Pkl](https://github.com/github-linguist/linguist/pull/6730), [templ](https://github.com/github-linguist/linguist/pull/6798), [FIRRTL](https://github.com/github-linguist/linguist/pull/6848), [Julia REPL](https://github.com/github-linguist/linguist/pull/6859), [Caddyfile](https://github.com/github-linguist/linguist/pull/6862).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5120): <!--number 5120 --><!--line 1 --><!--description VGhlIGZvbGxvd2luZyBleHRlbnNpb25zIG9yIGZpbGVuYW1lcyBpbiBhIHJlcG9zaXRvcnkgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWF0Y2hpbmcgbGFuZ3VhZ2U6IFsuc3VibGltZS1jb2xvci1zY2hlbWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82NzU4KSwgW01PRFVMRS5iYXplbC5sb2NrXShodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViLWxpbmd1aXN0L2xpbmd1aXN0L3B1bGwvNjc4MyksIFtDYXJnby50b21sLm9yaWddKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82Nzg3KSwgW3RzeF0oaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi1saW5ndWlzdC9saW5ndWlzdC9wdWxsLzY3ODgpLCBbanVzdGZpbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82Nzk1KSwgWy56aWcuem9uXShodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViLWxpbmd1aXN0L2xpbmd1aXN0L3B1bGwvNjgyMCksIFsuZW52cmNdKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWItbGluZ3Vpc3QvbGluZ3Vpc3QvcHVsbC82ODY1KS4=-->The following extensions or filenames in a repository are associated with the matching language: [.sublime-color-scheme](https://github.com/github-linguist/linguist/pull/6758), [MODULE.bazel.lock](https://github.com/github-linguist/linguist/pull/6783), [Cargo.toml.orig](https://github.com/github-linguist/linguist/pull/6787), [tsx](https://github.com/github-linguist/linguist/pull/6788), [justfile](https://github.com/github-linguist/linguist/pull/6795), [.zig.zon](https://github.com/github-linguist/linguist/pull/6820), [.envrc](https://github.com/github-linguist/linguist/pull/6865).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5090): <!--number 5090 --><!--line 0 --><!--description UmVtb3ZlIHN1cHBvcnQgZm9yIENvdWNoYmFzZSBhcyBhIHNlc3Npb24gcHJvdmlkZXI7IGl0IGluc3RlYWQgd2lsbCBub3cgZmFsbGJhY2sgdG8gdGhlIGZpbGUgcHJvdmlkZXIuIFRoZSByYXRpb25hbGUgZm9yIHJlbW92aW5nIENvdWNoYmFzZSBzdXBwb3J0IGlzIHRoYXQgaXQncyBub3QgZnJlZSBzb2Z0d2FyZSwgaHR0cHM6Ly93d3cuY291Y2hiYXNlLmNvbS9ibG9nL2NvdWNoYmFzZS1hZG9wdHMtYnNsLWxpY2Vuc2UvLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSB0ZXN0ZWQgaW4gRm9yZ2VqbyBhbmQgbmVpdGhlciBzaG91bGQgYmUgc3VwcG9ydGVkLg==-->Remove support for Couchbase as a session provider; it instead will now fallback to the file provider. The rationale for removing Couchbase support is that it's not free software, https://www.couchbase.com/blog/couchbase-adopts-bsl-license/, and therefore cannot be tested in Forgejo and neither should be supported.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4967): <!--number 4967 --><!--line 0 --><!--description Z2l0LWdyZXA6IGFsbG93IHNlYXJjaGluZyBmb3Igd29yZHMgd2l0aCBpbml0aWFsIGRhc2hlcw==-->git-grep: allow searching for words with initial dashes.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4927): <!--number 4927 --><!--line 0 --><!--description Z2l0LWdyZXA6IHNraXAgYmluYXJ5IGZpbGVz-->git-grep: skip binary files.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4924): <!--number 4924 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9iZjczNzNhMjUyMGFlNTZhMWRjMDA0MTZlZmEwMmRlOTc0OWI2M2QzKSBGb3JnZWpvIEFjdGlvbnMgbG9ncyBhcmUgY29tcHJlc3NlZCBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBgW2FjdGlvbnNdLkxPR19DT01QUkVTU0lPTj1ub25lYC4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/bf7373a2520ae56a1dc00416efa02de9749b63d3) Forgejo Actions logs are compressed by default. It can be disabled by setting `[actions].LOG_COMPRESSION=none`.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4903): <!--number 4903 --><!--line 0 --><!--description c3VwcG9ydCBncm91cGluZyBieSBhbnkgcGF0aCBmb3IgYXJjaCBwYWNrYWdl-->Support grouping by any path for arch package.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4891): <!--number 4891 --><!--line 0 --><!--description UGVyZm9ybWFuY2U6IFJlbW92ZSBleHBlbnNpdmUgbmVhcmVzdCBicmFuY2ggY2FsY3VsYXRhdGlvbnMgKGAkLkJyYW5jaE5hbWVgKSBmcm9tIGNvbW1pdCBkaWZmIHZpZXcgKGAvOm93bmVyLzpyZXBvL2NvbW1pdC86Y29tbWl0YCk=-->Remove expensive nearest branch calculatations (`$.BranchName`) from commit diff view (`/:owner/:repo/commit/:commit`).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4819): <!--number 4819 --><!--line 0 --><!--description QWxsb3cgcHVzaCBtaXJyb3JzIHRvIHVzZSBhIFNTSCBrZXkgYXMgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBmb3IgdGhlIG1pcnJvcmluZyBhY3Rpb24gaW5zdGVhZCBvZiB1c2luZyB1c2VyOnBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uLiBUaGUgU1NIIGtleXBhaXIgaXMgY3JlYXRlZCBieSBGb3JnZWpvIGFuZCB0aGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeSBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgcHVibGljIGtleSB0byBhbGxvdyBmb3IgcHVzaCBvdmVyIFNTSC4=-->Allow push mirrors to use a SSH key as the authentication method for the mirroring action instead of using user:password authentication. The SSH keypair is created by Forgejo and the destination repository must be configured with the public key to allow for push over SSH.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 5 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8xMWI2MjUzZTc1MzJiYTExZGVlOGJjMzFkNGMyNjJiMTAyNjc0YTRkKSBVc2UgVVRDIGFzIGEgdGltZXpvbmUgd2hlbiBydW5uaW5nIHNjaGVkdWxlZCBhY3Rpb25zIHRhc2tzLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/11b6253e7532ba11dee8bc31d4c262b102674a4d) Use UTC as a timezone when running scheduled actions tasks.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 6 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9mZWI0M2IyNTg0YjdmNjRlYzdmOTk1MmFmMmI1MGIyMjEwZTZlNmNmKSBUaGUgYWN0aW9ucyBsb2dzIG9sZGVyIHRoYW4gYFthY3Rpb25zXS5MT0dfUkVURU5USU9OX0RBWVNgIGRheXMgYXJlIHJlbW92ZWQgKHRoZSBkZWZhdWx0IGlzIDM2NSku-->[commit](https://codeberg.org/forgejo/forgejo/commit/feb43b2584b7f64ec7f9952af2b50b2210e6e6cf) The actions logs older than `[actions].LOG_RETENTION_DAYS` days are removed (the default is 365).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4780): <!--number 4780 --><!--line 0 --><!--description QWRkIHNpZ25hdHVyZSBzdXBwb3J0IGZvciB0aGUgUlBNIG1vZHVsZQ==-->Add signature support for the RPM module.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4766): <!--number 4766 --><!--line 0 --><!--description QWxsb3cgY29sb3IgYW5kIGJhY2tncm91bmQtY29sb3Igc3R5bGUgcHJvcGVydGllcyBmb3IgdGFibGUgY2VsbHM=-->Allow color and background-color style properties for table cells.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): <!--number 4716 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC84ZDIzNDMzZGFiMDhmY2JiODA0M2U1ZDIzOTE3MWZiYTU5YzUzMTA4KTogc3VwcG9ydCBwdWxsX3JlcXVlc3RfdGFyZ2V0IGV2ZW50IGZvciBjb21taXQgc3RhdHVzLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/8d23433dab08fcbb8043e5d239171fba59c53108): support pull_request_target event for commit status.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): <!--number 4716 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9jYjkwNzFiYmY0MzM3MTVmMGUxNmUzOWNiNjAxMjZiNjVmODIzNmEwKTogc3VwcG9ydCBkZWxldGUgdXNlciBlbWFpbCBpbiBhZG1pbiBwYW5lbC4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/cb9071bbf433715f0e16e39cb60126b65f8236a0): support delete user email in admin panel.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4704): <!--number 4704 --><!--line 0 --><!--description W1NFQ10gTm90aWZ5IG93bmVyIGFib3V0IFRPVFAgZW5yb2xsbWVudA==-->Notify owner about TOTP enrollment.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4635): <!--number 4635 --><!--line 0 --><!--description RW1haWwgbm90aWZpY2F0aW9ucyBhcmUgbm93IHNlbnQgd2hlbiBhY2NvdW50IHNlY3VyaXR5IGNoYW5nZXMgYXJlIG1hZGU6IHBhc3N3b3JkIGNoYW5nZWQsIHByaW1hcnkgZW1haWwgY2hhbmdlZCAoZW1haWwgc2VudCB0byBvbGQgcHJpbWFyeSBtYWlsKSwgVE9UUCBkaXNhYmxlZCBvciBhIHNlY3VyaXR5IGtleSByZW1vdmVkLg==-->Email notifications are now sent when account security changes are made: password changed, primary email changed (email sent to old primary mail), TOTP disabled or a security key removed.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4633): <!--number 4633 --><!--line 0 --><!--description RW5hYmxlIGBJTlZBTElEQVRFX1JFRlJFU0hfVE9LRU5TYA==-->Enable `INVALIDATE_REFRESH_TOKENS`.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4625): <!--number 4625 --><!--line 0 --><!--description ZmVhdCh1aSk6IHNvcnQgbWlsZXN0b25lcyBieSBuYW1lIGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiB0aGUgZHVlIGRhdGU=-->Sort milestones by name by default instead of the due date.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4607): <!--number 4607 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8yMWZkZDI4ZjA4NGU3ZjFhZWYzMDljOWViZDc1OTlmZmE2OTg2NDUzKSBhbGxvdyBzeW5jaHJvbml6aW5nIHVzZXIgc3RhdHVzIGZyb20gT0F1dGgyIGxvZ2luIHByb3ZpZGVycy4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/21fdd28f084e7f1aef309c9ebd7599ffa6986453) allow synchronizing user status from OAuth2 login providers.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4607): <!--number 4607 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8wMDRjYzZkYzBhYjdjYzljMzI0Y2NiNGVjZDQyMGM2YWVlYjIwNTAwKSBhZGQgb3B0aW9uIHRvIGNoYW5nZSBtYWlsIGZyb20gdXNlciBkaXNwbGF5IG5hbWUu-->[commit](https://codeberg.org/forgejo/forgejo/commit/004cc6dc0ab7cc9c324ccb4ecd420c6aeeb20500) add option to change mail from user display name.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4607): <!--number 4607 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9kMDIyN2MyMzZhYTE5NWJkMDM5OTAyMTBmOTY4YjhlNTJlYjIwYjc5KSBpc3N1ZSBUZW1wbGF0ZXM6IGFkZCBvcHRpb24gdG8gaGF2ZSBkcm9wZG93biBwcmludGVkIGxpc3Qu-->[commit](https://codeberg.org/forgejo/forgejo/commit/d0227c236aa195bd03990210f968b8e52eb20b79) issue Templates: add option to have dropdown printed list.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4605): <!--number 4605 --><!--line 0 --><!--description dGhlIGRlZmF1bHQgc2V0dGluZyBhdHRhY2htZW50LkFMTE9XRURfVFlQRVMgd2FzIGFkanVzdGVkIHRvIGFsbG93IC53ZWJwIGF0dGFjaG1lbnRzIGluIGlzc3VlcyAtIGEgbW9yZSBlZmZpY2llbnQgZm9ybWF0IGZvciBpbWFnZXMgbGlrZSBzY3JlZW5zaG90cy4gQWxsIGF0dGFjaG1lbnRzIGFyZSB0cmVhdGVkIGFzIG5vcm1hbCBmaWxlcyBhbmQgYXJlIG5vdCByZS1lbmNvZGVkIGJ5IEZvcmdlam8uIElmIHlvdSBoYXZlIGN1c3RvbWl6ZWQgdGhpcyBzZXR0aW5nLCB5b3UgbWF5IGFsc28gd2FudCB0byBhZGQgLndlYnAgdG8gaXQgZm9yIHRoZSBiZW5lZml0IG9mIHlvdXIgdXNlcnMsIGFzIHdlbGwgYXMgdG8gcmVkdWNlIHNlcnZlciB0cmFmZmljIGFuZCBzdG9yYWdlIHVzYWdlLg==-->the default setting attachment.ALLOWED_TYPES was adjusted to allow .webp attachments in issues - a more efficient format for images like screenshots. All attachments are treated as normal files and are not re-encoded by Forgejo. If you have customized this setting, you may also want to add .webp to it for the benefit of your users, as well as to reduce server traffic and storage usage.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4542): <!--number 4542 --><!--line 0 --><!--description Q29udmVydCBtaWxlc3RvbmUgdG8gSFRNWA==-->Convert milestone to HTMX.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4516): <!--number 4516 --><!--line 0 --><!--description dXNlIHRoZSBmdWxsIHVzZXIgbmFtZSBpbiBlbWFpbHMgdG8gYWRkcmVzcyB0aGUgcmVjaXBpZW50LCB3aGVuIGF2YWlsYWJsZQ==-->Use the full user name in emails to address the recipient, when available.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4449): <!--number 4449 --><!--line 0 --><!--description RW5oYW5jaW5nIEdpdGVhIE9BdXRoMiBQcm92aWRlciB3aXRoIEdyYW51bGFyIFNjb3BlcyBmb3IgUmVzb3VyY2UgQWNjZXNz-->Enhancing OAuth2 Provider with Granular Scopes for Resource Access.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4429): <!--number 4429 --><!--line 0 --><!--description W2Rpc3BsYXkgVVJMcyBpbiAuc2gtc2Vzc2lvbiBmaWxlc10oaHR0cHM6Ly9naXRodWIuY29tL2J1aWxka2l0ZS90ZXJtaW5hbC10by1odG1sL3B1bGwvMTYzKQ==-->[Display URLs in .sh-session files](https://github.com/buildkite/terminal-to-html/pull/163).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4367): <!--number 4367 --><!--line 0 --><!--description VGhlIGNhY2hpbmcgb2YgY29udHJpYnV0b3Igc3RhdHMgd2FzIGltcHJvdmVkICh0aGUgZGF0YSB1c2VkIGJ5IGAvPHVzZXI+LzxyZXBvPi9hY3Rpdml0eS9yZWNlbnQtY29tbWl0c2ApIHRvIHVzZSB0aGUgY29uZmlndXJlZCBjYWNoZSBUVEwgZnJvbSB0aGUgY29uZmlnIChgW2NhY2hlXS5JVEVNX1RUTGApIGluc3RlYWQgb2YgYSBoYXJkY29kZWQgVFRMIG9mIHRlbiBtaW51dGVzLiBUaGUgY29tcHV0YXRpb24gb2YgdGhpcyBvcGVyYXRpb24gaXMgY29tcHV0YXRpb25hbGx5IGhlYXZ5IGFuZCBtYWtlcyBhIGxvdCBvZiByZXF1ZXN0cyB0byB0aGUgZGF0YWJhc2UgYW5kIEdpdCBvbiByZXBvc2l0b3JpZXMgd2l0aCBhIGxvdCBvZiBjb21taXRzLiBJdCBzaG91bGQgYmUgY2FjaGVkIGZvciBsb25nZXIgdGhhbiB3aGF0IHdhcyBwcmV2aW91c2x5IGhhcmRjb2RlZCwgdGVuIG1pbnV0ZXMu-->The caching of contributor stats was improved (the data used by `/<user>/<repo>/activity/recent-commits`) to use the configured cache TTL from the config (`[cache].ITEM_TTL`) instead of a hardcoded TTL of ten minutes. The computation of this operation is computationally heavy and makes a lot of requests to the database and Git on repositories with a lot of commits. It should be cached for longer than what was previously hardcoded, ten minutes.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4266): <!--number 4266 --><!--line 0 --><!--description LSBhZGQgc3VwcG9ydCBmb3IgTEZTIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgd2hpY2ggaGF2ZSBiYXRjaCBBUEkgcmVzcG9uc2VzIGluIGFuIG9sZGVyL2RlcHJlY2F0ZWQgc2NoZW1h-->Add support for LFS server implementations which have batch API responses in an older/deprecated schema.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4218): <!--number 4218 --><!--line 0 --><!--description W0Zvcmdlam8gQWN0aW9ucyBhcnRpZmFjdHNdKGh0dHBzOi8vZm9yZ2Vqby5vcmcvZG9jcy9uZXh0L3VzZXIvYWN0aW9ucy8jYXJ0aWZhY3RzKSBzdXBwb3J0IFtyYW5nZSByZXF1ZXN0c10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnl0ZV9zZXJ2aW5nKSB0byByZXN1bWUgYSBkb3dubG9hZA==-->[Forgejo Actions artifacts](https://forgejo.org/docs/next/user/actions/#artifacts) support [range requests](https://en.wikipedia.org/wiki/Byte_serving) to resume a download.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4212): <!--number 4212 --><!--line 0 --><!--description QWRkZWQgdGhlIGZvdW5kYXRpb25zIG9mIGEgZmxleGlibGUsIGNvbmZpZ3VyYWJsZSBxdW90YSBzeXN0ZW0=-->Added the foundations of a flexible, configurable quota system.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/2869): <!--number 2869 --><!--line 0 --><!--description bG9nOiBqb3VybmFsZCBpbnRlZ3JhdGlvbg==-->Logs journald integration.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/1445): <!--number 1445 --><!--line 0 --><!--description YSByZWxlYXNlIGFzc2V0IGNhbiBiZSBhIFVSTCBpbnN0ZWFkIG9mIGEgZmlsZQ==-->A release asset can be a URL instead of a file.<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5529) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5565)): <!--number 5565 --><!--line 0 --><!--description RG9uJ3QgYWxsb3cgb3duZXIgdGVhbSB3aXRoIGluY29ycmVjdCB1bml0IGFjY2VzcyAoaW5jbHVkZXMgZG9jdG9yIGZpeCk=-->Don't allow owner team with incorrect unit access (includes doctor fix).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5470) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5547)): <!--number 5547 --><!--line 0 --><!--description Zml4OiBkb24ndCBjYW5jZWwgc2NoZWR1bGUgd29ya2Zsb3dzIG9uIHB1c2ggdG8gbWFpbiBicmFuY2g=-->Schedule workflows are canceled when pushing to the default branch.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5492) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5507)): <!--number 5507 --><!--line 0 --><!--description Zml4OiBjb3JyZWN0IERpc2NvcmQgd2ViaG9vayBKU09OIGZvciBpc3N1ZSBldmVudHM=-->Incorrect Discord webhook JSON for issue events.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): <!--number 5406 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9mNzA5ZGUyNDAzOWFiN2U2MDVkM2UwOWUzYjYxMjQwODM2MzgxNjAzKSBGaXggd3JvbmcgbGFzdCBtb2RpZnkgdGltZS4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/f709de24039ab7e605d3e09e3b61240836381603) wrong last modify time.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): <!--number 5406 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8yNjc1YTI0NjQ5YWYyZmZmMzRmNWM3ZTQxNmQ2ZmY3ODU5MWQ4ZDljKSBSZXBvIEFjdGl2aXR5OiBjb3VudCBuZXcgaXNzdWVzIHRoYXQgd2VyZSBjbG9zZWQu-->[commit](https://codeberg.org/forgejo/forgejo/commit/2675a24649af2fff34f5c7e416d6ff78591d8d9c) Repo Activity: count new issues that were closed.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): <!--number 5406 --><!--line 3 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC81MjYwNTQzMzJhY2IyMjFlMDYxZDM5MDBiYmEyZGM2ZTAxMmRhNTJkKSBGaXggaW5jb3JyZWN0IC90b2tlbnMgYXBpLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/526054332acb221e061d3900bba2dc6e012da52d) incorrect /tokens API.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): <!--number 5406 --><!--line 4 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8wY2FmZWM0YzdhMmZhZjgxMDk1M2U5ZDUyMmZhZjVkYzAxOWUxNTIyKSBEbyBub3QgZXNjYXBlIHJlbGF0aXZlIHBhdGggaW4gUlBNIHByaW1hcnkgaW5kZXgu-->[commit](https://codeberg.org/forgejo/forgejo/commit/0cafec4c7a2faf810953e9d522faf5dc019e1522) Do not escape relative path in RPM primary index.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5325): <!--number 5325 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9lYjc2NWRhYmZkNDNlMzUzYmQyMjA4ZTgzNzViMTAyOTM1ZDBmMTAzKSBIYW5kbGUgaW52YWxpZCB0YXJnZXQgd2hlbiBjcmVhdGluZyByZWxlYXNlcyB1c2luZyBBUEku-->[commit](https://codeberg.org/forgejo/forgejo/commit/eb765dabfd43e353bd2208e8375b102935d0f103) Handle invalid target when creating releases using API.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5325): <!--number 5325 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC81YWYxNjhmYjkyZTVkZDNiMGM4MWQ5N2JhMjdhNmYxOTczOWJlZjE4KSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve2luZGV4fS9maWxlcyBlbmRwb2ludCBub3QgcG9wdWxhdGluZyBwcmV2aW91c19maWxlbmFtZS4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/5af168fb92e5dd3b0c81d97ba27a6f19739bef18) /repos/{owner}/{repo}/pulls/{index}/files endpoint not populating previous_filename.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5269): <!--number 5269 --><!--line 0 --><!--description SW1wcm92ZSB0ZXh0YXJlYSBwYXN0ZSAocGFydCBvZiBnaXRlYSMzMTk0OCk=-->Improve textarea paste.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5195): <!--number 5195 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8xOTY5MDdlMzU5NDIwZjYzMDAzZjg4NGQxY2Y4MjdiNGE0ZDdhNGU1KSBIYW5kbGUgImNsb3NlIiBhY3Rpb25hYmxlIHJlZmVyZW5jZXMgZm9yIG1hbnVhbCBtZXJnZXMu-->[commit](https://codeberg.org/forgejo/forgejo/commit/196907e359420f63003f884d1cf827b4a4d7a4e5) Handle "close" actionable references for manual merges.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5195): <!--number 5195 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC80NmIxZjJlN2U0ZTc5NTMzMWYyOGY3NDY2NjA5NGM5NDE2NDk5ZTAzKSBUZWFtIGFkbWlucyBhcmUgYWxsb3dlZCB0byBzZWFyY2ggdGVhbSBtZW1iZXJzIHZpYSB0aGUgQVBJLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/46b1f2e7e4e795331f28f74666094c9416499e03) Team admins are allowed to search team members via the API.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5109): <!--number 5109 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8zYWRlNGQ5YjJiZmE2YWU4NGExZGVkOTMyOTA3YTUzMDYwNTY1NTc1KSBEb24ndCByZXR1cm4gNTAwIGlmIG1pcnJvciB1cmwgY29udGFpbnMgc3BlY2lhbCBjaGFycw==-->[commit](https://codeberg.org/forgejo/forgejo/commit/3ade4d9b2bfa6ae84a1ded932907a53060565575) Don't return 500 if mirror url contains special chars.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5109): <!--number 5109 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9kZGE1MzU2OWIxYjcwNTA3NDY5ZmMyOTY4ODFlZWM4OTYwNmFiOWMzKSBGaXggYWdpdCBhdXRvbWVyZ2U=-->[commit](https://codeberg.org/forgejo/forgejo/commit/dda53569b1b70507469fc296881eec89606ab9c3) Agit automerge is not working properly.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5075): <!--number 5075 --><!--line 0 --><!--description aW1wcm92ZSB0aGUgZGlzcGxheSBvZiBQUiAmIGlzc3VlIHNob3J0IGxpbmtz-->Improve the display of PR & issue short links.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4978): <!--number 4978 --><!--line 0 --><!--description TWlncmF0ZSBzY29wZWQgR2l0TGFiIGxhYmVscyBhcyBzY29wZWQgRm9yZ2VqbyBsYWJlbHM=-->Migrate scoped GitLab labels as scoped Forgejo labels.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4924): <!--number 4924 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC85ODEyYjdhZjkxYjY5Mzg2YzVkNGMwODk4MmFlY2U3YmQ4ZjlhMTc0KSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve2luZGV4fSBbcmVxdWVzdGVkX3Jldmlld2VycyBjb250YWlucyBudWxsIGZvciB0ZWFtc10oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2lzc3Vlcy80MTA4KS4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/9812b7af91b69386c5d4c08982aece7bd8f9a174) /repos/{owner}/{repo}/pulls/{index} [requested_reviewers contains null for teams](https://codeberg.org/forgejo/forgejo/issues/4108).<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4809): <!--number 4809 --><!--line 0 --><!--description dmFsaWRhdGUgdGl0bGUgbGVuZ3RoIHdoZW4gdXBkYXRpbmcgYW4gaXNzdWU=-->Validate title length when updating an issue.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8wZGJjNjIzMDI4NmUxMTNhY2NiYzZkNWU4MjljZThkYWUxZDFmNWQ0KSBIaWRlIHRoZSAiRGV0YWlscyIgbGluayBvZiBjb21taXQgc3RhdHVzIHdoZW4gdGhlIHVzZXIgY2Fubm90IGFjY2VzcyBhY3Rpb25zLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/0dbc6230286e113accbc6d5e829ce8dae1d1f5d4) Hide the "Details" link of commit status when the user cannot access actions.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC82ZTYzYWZlMzFmNDNlYWY1ZmY3Yzg1OTVkZGVhZjg1MTVjMmRjMGMwKSBUaGUgQVBJIGVuZHBvaW50IHRvIGdldCB0aGUgYWN0aW9ucyByZWdpc3RyYXRpb24gdG9rZW4gaXMgR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuIGFuZCBub3QgR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlbi4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/6e63afe31f43eaf5ff7c8595ddeaf8515c2dc0c0) The API endpoint to get the actions registration token is GET /repos/{owner}/{repo}/actions/runners/registration-token and not GET /repos/{owner}/{repo}/runners/registration-token.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC82ZTYzYWZlMzFmNDNlYWY1ZmY3Yzg1OTVkZGVhZjg1MTVjMmRjMGMwKSBSdW5uZXIgcmVnaXN0cmF0aW9uIHRva2VuIHZpYSBBUEkgaXMgYnJva2VuIGZvciByZXBvIGxldmVsIHJ1bm5lcnMu-->[commit](https://codeberg.org/forgejo/forgejo/commit/6e63afe31f43eaf5ff7c8595ddeaf8515c2dc0c0) Runner registration token via API is broken for repo level runners.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 3 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9jNzg0YTU4NzQwNjZjYTFhMWZkNTE4NDA4ZDU3NjdiNGViNTdiZDY5KSBEZWxldGVkIHByb2plY3RzIGNhdXNlcyBiYWQgcG9wb3ZlciB0ZXh0IG9uIGlzc3Vlcy4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/c784a5874066ca1a1fd518408d5767b4eb57bd69) Deleted projects causes bad popover text on issues.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 4 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC80MmJiNTFhZjliODI4MzA3MWUxNWFjNjQ3MGFkYTk4MjRkODdjZDQwKSBEaXN0aW5ndWlzaCBMRlMgb2JqZWN0IGVycm9ycyB0byBpZ25vcmUgbWlzc2luZyBvYmplY3RzIGR1cmluZyBtaWdyYXRpb24u-->[commit](https://codeberg.org/forgejo/forgejo/commit/42bb51af9b8283071e15ac6470ada9824d87cd40) Distinguish LFS object errors to ignore missing objects during migration.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 7 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC82MzI4ZjY0OGRlY2MyNzU0ZWYxMGVlNWNhNmNhOTc4NWExNTY2MTRjKSBXaGVuIHZpZXdpbmcgdGhlIHJldmlzaW9uIGhpc3Rvcnkgb2Ygd2lraSBwYWdlcywgdGhlIHBhZ2luYXRpb24gbGlua3MgYXJlIGJyb2tlbjogaW5zdGVhZCBvZiBvcmcvcmVwby93aWtpL1BhZ2U/YWN0aW9uPV9yZXZpc2lvbiZwYWdlPTIsIHRoZSBsaW5rIGlzIG9ubHkgb3JnL3JlcG8vd2lraS9QYWdlP3BhZ2U9MiwgdGh1cyBicmluZ2luZyB0aGUgdXNlciBiYWNrIHRvIHRoZSB3aWtpIHBhZ2Uu-->[commit](https://codeberg.org/forgejo/forgejo/commit/6328f648decc2754ef10ee5ca6ca9785a156614c) When viewing the revision history of wiki pages, the pagination links are broken: instead of org/repo/wiki/Page?action=_revision&page=2, the link is only org/repo/wiki/Page?page=2, thus bringing the user back to the wiki page.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): <!--number 4801 --><!--line 8 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8yMzEwNTU2MTU4ZDcwYmYxZGJmY2E5NmRjOTI4ZTFiZTNkM2Y0MWJlKSBBbHNvIHJlbmFtZSB0aGUgaGVhZCBicmFuY2ggb2Ygb3BlbiBwdWxsIHJlcXVlc3RzIHdoZW4gcmVuYW1pbmcgYSBicmFuY2gu-->[commit](https://codeberg.org/forgejo/forgejo/commit/2310556158d70bf1dbfca96dc928e1be3d3f41be) Also rename the head branch of open pull requests when renaming a branch.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): <!--number 4716 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9lZTExYTI2M2Y4YzlkZTMzZDQyZmMxMTc0NDNmNDA1NGEzMTFjODc1KTogYWRkIHJldHVybiB0eXBlIHRvIEdldFJhd0ZpbGVPckxGUyBhbmQgR2V0UmF3RmlsZS4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/ee11a263f8c9de33d42fc117443f4054a311c875): add return type to GetRawFileOrLFS and GetRawFile.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): <!--number 4716 --><!--line 3 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9mNjE4NzNjN2U0MmI2MTM0MDVkMzY3NDIxYWQxOWRiODBmODMxMDUzKTogcHJvcGVybHkgZmlsdGVyIGlzc3VlIGxpc3QgZ2l2ZW4gbm8gYXNzaWduZWVzIGZpbHRlci4=-->[commit](https://codeberg.org/forgejo/forgejo/commit/f61873c7e42b613405d367421ad19db80f831053): properly filter issue list given no assignees filter.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4698): <!--number 4698 --><!--line 0 --><!--description Y3JvbiB0YXNrIHRvIGNsZWFudXAgZGFuZ2xpbmcgY29udGFpbmVyIGltYWdlcyB3aXRoIHZlcnNpb24gc2hhMjU2Oio=-->Cron task to cleanup dangling container images with version sha256:*.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4619): <!--number 4619 --><!--line 0 --><!--description ZmVhdChjbGkpOiBhbGxvdyB1cGRhdGVzIHRvIHJ1bm5lcnMnIHNlY3JldHM=-->Allow updates to runners' secrets.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4487): <!--number 4487 --><!--line 0 --><!--description RG8gbm90IGZpcmUgd2ViaG9vayBub3RpZmljYXRpb25zIGZvciB1cGRhdGVzIGFuZCBkZWxldGlvbnMgb2YgY29tbWVudHMgdGhhdCBhcmUgcGFydCBvZiBhbiBvbmdvaW5nIHJldmlldyAoYSByZXZpZXcgdGhhdCBpcyBzdGlsbCBpbiBkcmFmdCkuIEFsc28sIGNvbnRlbnQgaGlzdG9yeSB3aWxsIG5vdCBiZSBzYXZlZCBmb3Igc3VjaCBjb21tZW50cywgdG8gYXZvaWQgZXhwb3NpbmcgZml4aW5nIGVtYmFycmFzc2luZyB0eXBvcyB5b3UndmUgaGF2ZSBtYWRlIHdoaWxlIHRoZSByZXZpZXcgd2FzIHN0aWxsIHBlbmRpbmcu-->Do not fire webhook notifications for updates and deletions of comments that are part of an ongoing review (a review that is still in draft). Also, content history will not be saved for such comments, to avoid exposing fixing embarrassing typos you've have made while the review was still pending.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4427): <!--number 4427 --><!--line 0 --><!--description Rml4ZWQgc29jaWFsIG1lZGlhIHByZXZpZXdzIGZvciBsaW5rcyB0byB3aWtpIHBhZ2VzLg==-->Fixed social media previews for links to wiki pages.<!--description-->
|
||||
- Localization
|
||||
- Updates of translations from [Codeberg Translate](https://translate.codeberg.org/projects/forgejo/forgejo/).
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4980): <!--number 4980 --><!--line 0 --><!--description aTE4bjogSW1wcm92ZSBjbGFyaXR5IG9mIGNvbmZpcm1hdGlvbiBlbWFpbCBtZXNzYWdlcw==-->Improve the clarity of confirmation in email messages.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5523) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5534)): <!--number 5534 --><!--line 0 --><!--description aTE4bjogRmluZSB0dW5lIGxhbmd1YWdlIGZvciB1bml0cw==-->Fine tune language for units.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5537) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5538)): <!--number 5538 --><!--line 0 --><!--description aTE4bjogSW1wcm92ZSB0cmFuc2xhdGlvbiBzdHJpbmdzIGZvciB3ZWJob29rIGV2ZW50cw==-->Improve translation strings for webhook events.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4829): <!--number 4829 --><!--line 0 --><!--description QWxsb3cgZGlmZmVyZW50IHRyYW5zbGF0aW9ucyBvZiBjcmVhdGlvbiBsaW5rcyBhbmQgdGl0bGVz-->Allow different translations of creation links and titles.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4599): <!--number 4599 --><!--line 0 --><!--description RW5nbGlzaCBpbXByb3ZlbWVudHM=-->English strings improvements for internationalization.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/4596): <!--number 4596 --><!--line 0 --><!--description RW5jb3VyYWdlIHBhcnRpY2lwYXRpb24gaW4gdGhlIGxvY2FsaXphdGlvbiBvZiBGb3JnZWpvIGluIGxhbmd1YWdlIHNldHRpbmdz-->Encourage participation in the localization of Forgejo in language settings.<!--description-->
|
||||
<!--end release-notes-assistant-->
|
33
release-notes-published/9.0.1.md
Normal file
33
release-notes-published/9.0.1.md
Normal file
|
@ -0,0 +1,33 @@
|
|||
<!--start release-notes-assistant-->
|
||||
|
||||
## Release notes
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5719) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5724)): <!--number 5724 --><!--line 0 --><!--description Rm9yZ2VqbyBnZW5lcmF0ZXMgYSB0b2tlbiB3aGljaCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB3ZWIgZW5kcG9pbnRzIHRoYXQgYXJlIG9ubHkgbWVhbnQgdG8gYmUgdXNlZCBpbnRlcm5hbGx5LCBmb3IgaW5zdGFuY2Ugd2hlbiB0aGUgU1NIIGRhZW1vbiBpcyB1c2VkIHRvIHB1c2ggYSBjb21taXQgd2l0aCBHaXQuIFRoZSB2ZXJpZmljYXRpb24gb2YgdGhpcyB0b2tlbiB3YXMgbm90IGRvbmUgaW4gY29uc3RhbnQgdGltZSBhbmQgd2FzIHN1c2NlcHRpYmxlIHRvIFt0aW1pbmcgYXR0YWNrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGltaW5nX2F0dGFjaykuIEEgcHJlLWNvbmRpdGlvbiBmb3Igc3VjaCBhbiBhdHRhY2sgaXMgdGhlIHByZWNpc2UgbWVhc3VyZW1lbnRzIG9mIHRoZSB0aW1lIGZvciBlYWNoIG9wZXJhdGlvbi4gU2luY2UgaXQgcmVxdWlyZXMgb2JzZXJ2aW5nIHRoZSB0aW1pbmcgb2YgbmV0d29yayBvcGVyYXRpb25zLCB0aGUgaXNzdWUgaXMgbWl0aWdhdGVkIHdoZW4gYSBGb3JnZWpvIGluc3RhbmNlIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIGludGVybmV0IGJlY2F1c2UgdGhlIElTUCBpbnRyb2R1Y2UgdW5wcmVkaWN0YWJsZSByYW5kb20gZGVsYXlzLg==-->Forgejo generates a token which is used to authenticate web endpoints that are only meant to be used internally, for instance when the SSH daemon is used to push a commit with Git. The verification of this token was not done in constant time and was susceptible to [timing attacks](https://en.wikipedia.org/wiki/Timing_attack). A pre-condition for such an attack is the precise measurements of the time for each operation. Since it requires observing the timing of network operations, the issue is mitigated when a Forgejo instance is accessed over the internet because the ISP introduce unpredictable random delays.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5718) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5721)): <!--number 5721 --><!--line 0 --><!--description QmVjYXVzZSBvZiBhIG1pc3NpbmcgcGVybWlzc2lvbiBjaGVjaywgdGhlIGJyYW5jaCB1c2VkIHRvIHByb3Bvc2UgYSBwdWxsIHJlcXVlc3QgdG8gYSByZXBvc2l0b3J5IGNhbiBhbHdheXMgYmUgZGVsZXRlZCBieSB0aGUgdXNlciBwZXJmb3JtaW5nIHRoZSBtZXJnZS4gSXQgd2FzIGZpeGVkIHNvIHRoYXQgc3VjaCBhIGRlbGV0aW9uIGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgdXNlciBwZXJmb3JtaW5nIHRoZSBtZXJnZSBoYXMgd3JpdGUgcGVybWlzc2lvbiB0byB0aGUgcmVwb3NpdG9yeSBmcm9tIHdoaWNoIHRoZSBwdWxsIHJlcXVlc3Qgd2FzIG1hZGUu-->Because of a missing permission check, the branch used to propose a pull request to a repository can always be deleted by the user performing the merge. It was fixed so that such a deletion is only allowed if the user performing the merge has write permission to the repository from which the pull request was made.<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5439) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5708)): <!--number 5708 --><!--line 0 --><!--description Rml4IGJvb2xlYW4gaW5wdXRzIGluIHdvcmtmbG93X2Rpc3BhdGNo-->Fix boolean inputs in workflow_dispatch<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5634) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5636)): <!--number 5636 --><!--line 0 --><!--description cGFja2FnZSBhcmNoICBkYXRhYmFzZSBub3QgdXBkYXRpbmcgd2hlbiB1cGxvYWRpbmcgImFueSIgYXJjaGl0ZWN0dXJl-->package arch database not updating when uploading "any" architecture<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5627) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5631)): <!--number 5631 --><!--line 0 --><!--description Y29ycmVjdCBTUUwgcXVlcnkgZm9yIGFjdGl2ZSBpc3N1ZXM=-->correct SQL query for active issues<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5626) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5629)): <!--number 5629 --><!--line 0 --><!--description c3BlY2lmeSBkZWZhdWx0IHZhbHVlIGZvciBgRVhQTE9SRV9ERUZBVUxUX1NPUlRgLg==-->specify default value for `EXPLORE_DEFAULT_SORT`.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5613) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5624)): <!--number 5624 --><!--line 0 --><!--description Zml4OiBBZGQgYHJlY2VudHVwZGF0ZWRgIGFzIHJlY29nbml6ZWQgc29ydCBvcHRpb24=-->fix: Add `recentupdated` as recognized sort option<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5616): <!--number 5616 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgbWVybWFpZCB0byB2MTEuMy4wICh2OS4wL2Zvcmdlam8p-->Update dependency mermaid to v11.3.0 (v9.0/forgejo)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5587) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5588)): <!--number 5588 --><!--line 0 --><!--description RG9ja2VyZmlsZTogdXNlIGFscGluZTozLjIwIGluc3RlYWQgb2YgZ29sYW5nOjEuMjMtYWxwaW5lMy4yMA==-->Dockerfile: use alpine:3.20 instead of golang:1.23-alpine3.20<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5585) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5586)): <!--number 5586 --><!--line 0 --><!--description RG9ja2VyZmlsZTogdW5uZWNlc3NhcnkgY29udGFpbmVyIGltYWdlIGxheWVyIGR1cGxpY2F0aW9u-->Dockerfile: unnecessary container image layer duplication<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5647): <!--number 5647 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8xOTEzMzk5ZDgxNzY5NDRmMTcwZDRmMWMwMzJkYzM3MDAzYWFhZmMwKSBBbHdheXMgdXBkYXRlIGV4cGlyYXRpb24gdGltZSB3aGVuIGNyZWF0aW5nIGFuIGFydGlmYWN0-->[commit](https://codeberg.org/forgejo/forgejo/commit/1913399d8176944f170d4f1c032dc37003aaafc0) Always update expiration time when creating an artifact<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5647): <!--number 5647 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC80ZmUzMTFlN2MwMjkyZTNhYzc5ZjhiYzA2M2YxYmNhY2VmNDQ5NGYwKSBVcGRhdGUgc2NoZWR1bGVkIHRhc2tzIGV2ZW4gaWYgY2hhbmdlcyBhcmUgcHVzaGVkIGJ5ICJBY3Rpb25zVXNlciI=-->[commit](https://codeberg.org/forgejo/forgejo/commit/4fe311e7c0292e3ac79f8bc063f1bcacef4494f0) Update scheduled tasks even if changes are pushed by "ActionsUser"<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5715): <!--number 5715 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC83Njg0MDJjODg0MWRiNWU4YWNjOTc5MTkxNDliYTMyOWQ1MTI0ZTE3KSBGaXggZGlzYWJsZSAyZmEgYnVn-->[commit](https://codeberg.org/forgejo/forgejo/commit/768402c8841db5e8acc97919149ba329d5124e17) Fix disable 2fa bug<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5583) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5680)): <!--number 5680 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate<!--description-->
|
||||
- Included for completeness but not worth a release note
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5702) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5710)): <!--number 5710 --><!--line 0 --><!--description Zml4OiB1c2UgYnVmZmVyZWQgaXRlcmF0ZSBmb3IgZGViaWFuIHNlYXJjaHBhY2thZ2Vz-->fix: use buffered iterate for debian searchpackages<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5688) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5691)): <!--number 5691 --><!--line 0 --><!--description Zml4OiBtYWtlIGJyYW5jaCBwcm90ZWN0aW9uIHdvcmsgZm9yIG5ldyBicmFuY2hlcw==-->fix: make branch protection work for new branches<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5651) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5656)): <!--number 5656 --><!--line 0 --><!--description bGluayB0byBzZWN1cml0eSBwb2xpY3kgaW4gc2VjdXJpdHkudHh0-->link to security policy in security.txt<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5653) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5655)): <!--number 5655 --><!--line 0 --><!--description Zml4OiBkb24ndCBzaG93IHRydW5jYXRlZCBjb21tZW50cyBpbiBSU1MvQXRvbSBmZWVkcw==-->fix: don't show truncated comments in RSS/Atom feeds<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5652) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5654)): <!--number 5654 --><!--line 0 --><!--description Zml4OiB0eXBvIG9uIHJlbGVhc2VzIGZvciBzb3VyY2UgY29kZSBkb3dubG9hZHM=-->fix: typo on releases for source code downloads<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5640) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5645)): <!--number 5645 --><!--line 0 --><!--description UmV2ZXJ0ICJhZGQgZ2FwIGJldHdlZW4gYnJhbmNoIGRyb3Bkb3duIGFuZCBQUiBidXR0b24i-->Revert "add gap between branch dropdown and PR button"<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5615) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5618)): <!--number 5618 --><!--line 0 --><!--description Zml4OiBEb24ndCBkb3VibGUgZXNjYXBlIGRlbGV0ZSBicmFuY2ggdGV4dA==-->fix: Don't double escape delete branch text<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5595) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5596)): <!--number 5596 --><!--line 0 --><!--description Zml4OiBBZGQgc2VydmVyIGxvZ2dpbmcgZm9yIE9BdXRoIHNlcnZlciBlcnJvcnM=-->fix: Add server logging for OAuth server errors<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5592) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5594)): <!--number 5594 --><!--line 0 --><!--description Zm9yZ2Vqby1jbGkgaXMgbm93IGEgc3ltbGluayBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIHNhbml0eSBjaGVja3M=-->forgejo-cli is now a symlink and cannot be used for sanity checks<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5491) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5575)): <!--number 5575 --><!--line 0 --><!--description Zml4OiBjb3JyZWN0IGRvY3VtZW50YXRpb24gZm9yIG5vbiAyMDAgcmVzcG9uc2VzIGluIHN3YWdnZXI=-->fix: correct documentation for non 200 responses in swagger<!--description-->
|
||||
<!--end release-notes-assistant-->
|
26
release-notes-published/9.0.2.md
Normal file
26
release-notes-published/9.0.2.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
<!--start release-notes-assistant-->
|
||||
|
||||
## Release notes
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 0 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8xY2UzM2FhMzhkMWQyNThkMTQ1MjNmZjJjN2MyZGJmMzM5ZjIyYjc0KSBpdCB3YXMgcG9zc2libGUgdG8gdXNlIGEgdG9rZW4gc2VudCB2aWEgZW1haWwgZm9yIHNlY29uZGFyeSBlbWFpbCB2YWxpZGF0aW9uIHRvIHJlc2V0IHRoZSBwYXNzd29yZCBpbnN0ZWFkLiAgSW4gb3RoZXIgd29yZHMsIGEgdG9rZW4gc2VudCBmb3IgIGEgZ2l2ZW4gYWN0aW9uIChyZWdpc3RyYXRpb24sIHBhc3N3b3JkIHJlc2V0IG9yIHNlY29uZGFyeSBlbWFpbCB2YWxpZGF0aW9uKSBjb3VsZCBiZSB1c2VkIHRvIHBlcmZvcm0gYSBkaWZmZXJlbnQgYWN0aW9uLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdXNlIGEgdG9rZW4gZm9yIGFuIGFjdGlvbiB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIGl0cyBvcmlnaW5hbCBwdXJwb3NlLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/1ce33aa38d1d258d14523ff2c7c2dbf339f22b74) it was possible to use a token sent via email for secondary email validation to reset the password instead. In other words, a token sent for a given action (registration, password reset or secondary email validation) could be used to perform a different action. It is no longer possible to use a token for an action that is different from its original purpose.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 1 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8wNjFhYmU2MDA0NTIxMmFjZjhjM2Y1YzQ5YjVjYzc1OGI0Y2JjZGU5KSBhIGZvcmsgb2YgYSBwdWJsaWMgcmVwb3NpdG9yeSB3b3VsZCBzaG93IGluIHRoZSBsaXN0IG9mIGZvcmtzLCBldmVuIGlmIGl0cyBvd25lciB3YXMgbm90IGEgcHVibGljIHVzZXIgb3Igb3JnYW5pemF0aW9uLiBTdWNoIGEgZm9yayBpcyBub3cgaGlkZGVuIGZyb20gdGhlIGxpc3Qgb2YgZm9ya3Mgb2YgdGhlIHB1YmxpYyByZXBvc2l0b3J5Lg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/061abe60045212acf8c3f5c49b5cc758b4cbcde9) a fork of a public repository would show in the list of forks, even if its owner was not a public user or organization. Such a fork is now hidden from the list of forks of the public repository.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 2 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC8zZTNlZjc2ODA4MTAwY2IxYzg1MzM3ODczM2QwZjZhOTEwMzI0YWM2KSB0aGUgbWVtYmVycyBvZiBhbiBvcmdhbml6YXRpb24gdGVhbSB3aXRoIHJlYWQgYWNjZXNzIHRvIGEgcmVwb3NpdG9yeSAoZS5nLiB0byByZWFkIGlzc3VlcykgYnV0IG5vIHJlYWQgYWNjZXNzIHRvIHRoZSBjb2RlIGNvdWxkIHJlYWQgdGhlIFJTUyBvciBhdG9tIGZlZWRzIHdoaWNoIGluY2x1ZGUgdGhlIGNvbW1pdCBhY3Rpdml0eS4gUmVhZGluZyB0aGUgUlNTIG9yIGF0b20gZmVlZHMgaXMgbm93IGRlbmllZCB1bmxlc3MgdGhlIHRlYW0gaGFzIHJlYWQgcGVybWlzc2lvbnMgb24gdGhlIGNvZGUu-->[commit](https://codeberg.org/forgejo/forgejo/commit/3e3ef76808100cb1c853378733d0f6a910324ac6) the members of an organization team with read access to a repository (e.g. to read issues) but no read access to the code could read the RSS or atom feeds which include the commit activity. Reading the RSS or atom feeds is now denied unless the team has read permissions on the code.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 3 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC85NTA4YWE3NzEzNjMyZWQ0MDEyNGE5MzNkOTFkNTc2NmNmMjM2OWMyKSB0aGUgdG9rZW5zIHVzZWQgd2hlbiBbcmVwbHlpbmcgYnkgZW1haWwgdG8gaXNzdWVzIG9yIHB1bGwgcmVxdWVzdHNdKGh0dHBzOi8vZm9yZ2Vqby5vcmcvZG9jcy92OS4wL3VzZXIvaW5jb21pbmcvKSB3ZXJlIHdlYWtlciB0aGFuIHRoZSBbcmZjMjEwNCByZWNvbW1lbmRhdGlvbnNdKGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjEwNCNzZWN0aW9uLTUpLiBUaGUgdG9rZW5zIGFyZSBub3cgdHJ1bmNhdGVkIHRvIDEyOCBiaXRzIGluc3RlYWQgb2YgODAgYml0cy4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHJlcGx5IHRvIGVtYWlscyBzZW50IGJlZm9yZSB0aGUgdXBncmFkZSBiZWNhdXNlIHRoZSB3ZWFrZXIgdG9rZW5zIGFyZSBpbnZhbGlkLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/9508aa7713632ed40124a933d91d5766cf2369c2) the tokens used when [replying by email to issues or pull requests](https://forgejo.org/docs/v9.0/user/incoming/) were weaker than the [rfc2104 recommendations](https://datatracker.ietf.org/doc/html/rfc2104#section-5). The tokens are now truncated to 128 bits instead of 80 bits. It is no longer possible to reply to emails sent before the upgrade because the weaker tokens are invalid.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 4 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC83ODZkZmM3ZmI4MWVlNzZkNDI5MmNhNWZjYjMzZTZlYTdiZGNjYzI5KSBhIHJlZ2lzdGVyZWQgdXNlciBjb3VsZCBtb2RpZnkgdGhlIHVwZGF0ZSBmcmVxdWVuY3kgb2YgYW55IHB1c2ggbWlycm9yIChlLmcuIGV2ZXJ5IDRoIGluc3RlYWQgb2YgZXZlcnkgOGgpLiBUaGV5IGFyZSBub3cgb25seSBhYmxlIHRvIGRvIHRoYXQgaWYgdGhleSBoYXZlIGFkbWluaXN0cmF0aXZlIHBlcm1pc3Npb25zIG9uIHRoZSByZXBvc2l0b3J5Lg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/786dfc7fb81ee76d4292ca5fcb33e6ea7bdccc29) a registered user could modify the update frequency of any push mirror (e.g. every 4h instead of every 8h). They are now only able to do that if they have administrative permissions on the repository.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 5 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9lNmJiZWNiMDJkNDc3MzBkM2NjNjMwZDQxOWZlMjdlZjJmYjVjYjM5KSBpdCB3YXMgcG9zc2libGUgdG8gdXNlIGJhc2ljIGF1dGhvcml6YXRpb24gKGkuZS4gdXNlcjpwYXNzd29yZCkgZm9yIHJlcXVlc3RzIHRvIHRoZSBBUEkgZXZlbiB3aGVuIHNlY3VyaXR5IGtleXMgd2VyZSBlbnJvbGxlZCBmb3IgYSB1c2VyLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUsIGFuIGFwcGxpY2F0aW9uIHRva2VuIG11c3QgYmUgdXNlZCBpbnN0ZWFkLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/e6bbecb02d47730d3cc630d419fe27ef2fb5cb39) it was possible to use basic authorization (i.e. user:password) for requests to the API even when security keys were enrolled for a user. It is no longer possible, an application token must be used instead.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 6 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC83MDY3Y2M3ZGE0ZjE0NGNjOGEyZmQyYWU2ZTUzMDdlMDQ2NWFjZTdmKSBzb21lIG1hcmt1cCBzYW5pdGF0aW9uIHJ1bGVzIHdlcmUgbm90IGFzIHN0cm9uZyBhcyB0aGV5IGNvdWxkIGJlIChlLmcuIGFsbG93aW5nIGBlbW9qaSBzb21ldGhpbmdlbHNlYCBhcyB3ZWxsIGFzIGBlbW9qaWApLiBUaGUgcnVsZXMgYXJlIG5vdyBzdHJpY3RlciBhbmQgZG8gbm90IGFsbG93IGZvciBzdWNoIGNhc2VzLg==-->[commit](https://codeberg.org/forgejo/forgejo/commit/7067cc7da4f144cc8a2fd2ae6e5307e0465ace7f) some markup sanitation rules were not as strong as they could be (e.g. allowing `emoji somethingelse` as well as `emoji`). The rules are now stricter and do not allow for such cases.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): <!--number 5975 --><!--line 7 --><!--description W2NvbW1pdF0oaHR0cHM6Ly9jb2RlYmVyZy5vcmcvZm9yZ2Vqby9mb3JnZWpvL2NvbW1pdC9iNzAxOTY2NTNmOWQ3ZDNiOWQ0ZTcyZDExNGU1Y2M2ZjQ3Mjk4OGM0KSB3aGVuIEZvcmdlam8gaXMgY29uZmlndXJlZCB0byBlbmFibGUgaW5zdGFuY2Ugd2lkZSBzZWFyY2ggKGUuZy4gd2l0aCBbYmxldmVdKGh0dHBzOi8vYmxldmVzZWFyY2guY29tLykpLCByZXN1bHRzIGZvdW5kIGluIHRoZSByZXBvc2l0b3JpZXMgb2YgcHJpdmF0ZSBvciBsaW1pdGVkIHVzZXJzIHdlcmUgZGlzcGxheWVkIHRvIGFub255bW91cyB2aXNpdG9ycy4gVGhlIHJlc3VsdHMgZm91bmQgaW4gcHJpdmF0ZSBvciBsaW1pdGVkIG9yZ2FuaXphdGlvbnMgd2VyZSBub3QgZGlzcGxheWVkLiBUaGUgc2VhcmNoIHJlc3VsdHMgZm91bmQgaW4gdGhlIHJlcG9zaXRvcmllcyBvZiBwcml2YXRlIG9yIGxpbWl0ZWQgdXNlciBhcmUgbm8gbG9uZ2VyIGRpc3BsYXllZCB0byBhbm9ueW1vdXMgdmlzaXRvcnMu-->[commit](https://codeberg.org/forgejo/forgejo/commit/b70196653f9d7d3b9d4e72d114e5cc6f472988c4) when Forgejo is configured to enable instance wide search (e.g. with [bleve](https://blevesearch.com/)), results found in the repositories of private or limited users were displayed to anonymous visitors. The results found in private or limited organizations were not displayed. The search results found in the repositories of private or limited user are no longer displayed to anonymous visitors.<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5941) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5945)): <!--number 5945 --><!--line 0 --><!--description Zml4OiBoYW5kbGUgcmVuYW1lZCBkZXBlbmRlbmN5IGZvciBjYXJnbyByZWdpc3RyeQ==-->fix: handle renamed dependency for cargo registry.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5795) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5800)): <!--number 5800 --><!--line 0 --><!--description Zml4OiBzdXBwb3J0IGB3d3cuZ2l0aHViLmNvbWAgZm9yIG1pZ3JhdGlvbnM=-->support `www.github.com` for migrations.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5887): <!--number 5887 --><!--line 0 --><!--description Zml4OiBNb3ZlIGZvcmdvdF9wYXNzd29yZC1saW5rIHRvIGZpeCBsb2dpbiB0YWIgb3JkZXI=-->move forgot_password-link to fix login tab order.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5850) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5879)): <!--number 5879 --><!--line 0 --><!--description W1BPUlRdIEZpeCBjb2RlIG93bmVycyB3aWxsIG5vdCBiZSBtZW50aW9uZWQgd2hlbiBhIHB1bGwgcmVxdWVzdCBjb21lcyBmcm9tIGEgZm9ya2VkIHJlcG9zaXRvcnkgKGdpdGVhIzMwNDc2KQ==-->code owners will not be mentioned when a pull request comes from a forked repository.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5831) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5834)): <!--number 5834 --><!--line 0 --><!--description Zml4OiBsYWJlbHMgYXJlIG1pc3NpbmcgaW4gdGhlIHB1bGwgcmVxdWVzdCBwYXlsb2FkIHJlbW92aW5nIGEgbGFiZWw=-->labels are missing in the pull request payload removing a label.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5778) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5810)): <!--number 5810 --><!--line 0 --><!--description SW4gYSBGb3JnZWpvIEFjdGlvbnMgd29ya2Zsb3csIHRoZSBgdW5sYWJlbGVkYCBldmVudCB0eXBlIGZvciBwdWxsIHJlcXVlc3RzIHdhcyBpbmNvcnJlY3RseSBtYXBwZWQgdG8gdGhlIGxhYmVsZWQgZXZlbnQgdHlwZS4=-->in a Forgejo Actions workflow, the `unlabeled` event type for pull requests was incorrectly mapped to the labeled event type.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5778) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5810)): <!--number 5810 --><!--line 1 --><!--description V2hlbiBhIEZvcmdlam8gQWN0aW9ucyBpc3N1ZSBvciBwdWxsIHJlcXVlc3Qgd29ya2Zsb3cgaXMgdHJpZ2dlcmVkIGJ5IGFuIGBsYWJlbGVkYCBvciBgdW5sYWJlbGVkYCBldmVudCB0eXBlLCBpdCBtaXNzZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhYmVsIGFkZGVkIG9yIHJlbW92ZWQuIEl0IGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIGBsYWJlbGAgZGF0YSBtZW1iZXIgb2YgdGhlIGV2ZW50IHBheWxvYWQu-->when a Forgejo Actions issue or pull request workflow is triggered by an `labeled` or `unlabeled` event type, it misses information about the label added or removed. It is now available in the `label` data member of the event payload.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5778) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5810)): <!--number 5810 --><!--line 2 --><!--description VGhlIHB1bGwgcmVxdWVzdCB3b3JrZmxvdyBtdXN0IGFsd2F5cyB1cGRhdGUgdGhlIGhlYWQgU0hBIGNvbW1pdCBzdGF0dXMuIE5vdCBqdXN0IHdoZW4gdGhlIFBSIGlzIHN5bmNocm9uaXplZCwgb3BlbmVkIG9yIGNsb3NlZC4gT3RoZXJ3aXNlIGl0IG1ha2VzIGl0IGltcG9zc2libGUgdG8gZGVmaW5lIGEgam9iIHRvIGJlIGEgcmVxdWlyZWQgY2hlY2sgKGZvciBpbnN0YW5jZSBhIGpvYiB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIGxhYmVscyBhcmUgbW9kaWZpZWQgYW5kIHZlcmlmaWVzIHRoYXQgYSBnaXZlbiBjb21iaW5hdGlvbiBpcyBwcmVzZW50KS4=-->the pull request workflow must always update the head SHA commit status. Not just when the PR is synchronized, opened or closed. Otherwise, a job that is run more often than on commits (e.g. checking for specific labels or approvals) cannot be defined as a required check.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5746) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5759)): <!--number 5759 --><!--line 0 --><!--description Zml4IGdpdC1ncmVwIGZvciBjb2RlIHNlYXJjaCB3aGVuIGdpdCB2ZXJzaW9uIGlzIGJlbG93IDIuMzg=-->fix git-grep for code search when git version is below 2.38.<!--description-->
|
||||
- Localization
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5681) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5748)): <!--number 5748 --><!--line 0 --><!--description aTE4bjogdXBkYXRlIG9mIHRyYW5zbGF0aW9ucyBmcm9tIENvZGViZXJnIFRyYW5zbGF0ZQ==-->i18n: update of translations from Codeberg Translate.<!--description-->
|
||||
<!--end release-notes-assistant-->
|
39
release-notes-published/9.0.3.md
Normal file
39
release-notes-published/9.0.3.md
Normal file
|
@ -0,0 +1,39 @@
|
|||
|
||||
|
||||
<!--start release-notes-assistant-->
|
||||
|
||||
## Release notes
|
||||
<!--URL:https://codeberg.org/forgejo/forgejo-->
|
||||
- Security bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6248) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6253)): <!--number 6253 --><!--line 0 --><!--description Zml4OiBlbnN1cmUgY29ycmVjdCBzc2ggcHVibGljIGtleSBpcyB1c2VkIGZvciBhdXRoZW50aWNhdGlvbg==-->When Forgejo is configured to run the internal ssh server with `[server].START_SSH_SERVER=true`, it was possible for a registered user to impersonate another user. The rootless container image uses the internal ssh server by default and was vulnerable. A Forgejo instance running from a binary or from a root container image does not use the internal ssh server by default and was not vulnerable. The incorrect use of the crypto package is the root cause of the vulnerability and was fixed for the internal ssh server.<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6249) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6251)): <!--number 6251 --><!--line 0 --><!--description Zml4OiBSZXZlcnQgImFsbG93IHN5bmNocm9uaXppbmcgdXNlciBzdGF0dXMgZnJvbSBPQXV0aDIgbG9naW4gcHJvdmlkZXJzICgjMzE1NzIpIg==-->Revert "allow synchronizing user status from OAuth2 login providers"<!--description-->
|
||||
- User Interface bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6104): <!--number 6104 --><!--line 0 --><!--description Rml4IHdpa2kgc2VhcmNoIG92ZXJmbG93aW5nIG9uIHdpZGUgc2NyZWVucyAoIzYwNDcp-->Fix wiki search overflowing on wide screens (#6047)<!--description-->
|
||||
- Bug fixes
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6097) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6168)): <!--number 6168 --><!--line 0 --><!--description RG8gbm90IHJld3JpdGUgc3NoIGtleXMgZmlsZXMgd2hlbiBkZWxldGluZyBhIHVzZXIgd2l0aG91dCBvbmU=-->Do not rewrite ssh keys files when deleting a user without one<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6124) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6129)): <!--number 6129 --><!--line 0 --><!--description Zml4OiBkb2N0b3IgZmFpbHMgd2l0aCBwcTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIi4iIHdoaWxzdCBjb3VudGluZyBBdXRob3JpemF0aW9uIHRva2VuIHdpdGhvdXQgZXhpc3RpbmcgVXNlcg==-->fix: doctor fails with pq: syntax error at or near "." whilst counting Authorization token without existing User<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6054) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6057)): <!--number 6057 --><!--line 0 --><!--description Zml4OiBEbyBub3QgZGVsZXRlIGdsb2JhbCBPYXV0aDIgYXBwbGljYXRpb25z-->fix: Do not delete global Oauth2 applications<!--description-->
|
||||
- Other changes without a feature or bug label
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6064): <!--number 6064 --><!--line 0 --><!--description W2dpdGVhXSB3ZWVrIDIwMjQtNDgtdjkuMCBjaGVycnkgcGljayAoZ2l0ZWEvbWFpbiAtPiB2OS4wL2Zvcmdlam8p-->[gitea] week 2024-48-v9.0 cherry pick (gitea/main -> v9.0/forgejo)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5998): <!--number 5998 --><!--line 0 --><!--description W2dpdGVhXSB3ZWVrIDIwMjQtNDctdjkuMCBjaGVycnkgcGljayAoZ2l0ZWEvbWFpbiAtPiB2OS4wL2Zvcmdlam8p-->[commit](https://codeberg.org/forgejo/forgejo/commit/53c546951115d9e269a2778f90e43b0cb413eab6) Strict matching of allowed content for sanitizer for asciicast and csv rendering<!--description-->
|
||||
- Included for completeness but not worth a release note
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6247): <!--number 6247 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnb2xhbmcub3JnL3gvY3J5cHRvIHRvIHYwLjMxLjAgKHY5LjAvZm9yZ2Vqbyk=-->Update module golang.org/x/crypto to v0.31.0 (v9.0/forgejo)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6223) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6231)): <!--number 6231 --><!--line 0 --><!--description Y2hvcmUoY2kpOiBzZXQgdGhlIG1pbGVzdG9uZSB3aGVuIGEgcHVsbCByZXF1ZXN0IGlzIGNsb3NlZCAodGFrZSA0KQ==-->chore(ci): set the milestone when a pull request is closed (take 4)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6219) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6225)): <!--number 6225 --><!--line 0 --><!--description Y2hvcmUoY2kpOiBzZXQgdGhlIG1pbGVzdG9uZSB3aGVuIGEgcHVsbCByZXF1ZXN0IGlzIG9wZW4gKHRha2UgMyk=-->chore(ci): set the milestone when a pull request is open (take 3)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6211) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6217)): <!--number 6217 --><!--line 0 --><!--description Y2hvcmUoY2kpOiBzZXQgdGhlIG1pbGVzdG9uZSB3aGVuIGEgcHVsbCByZXF1ZXN0IGlzIG9wZW4=-->chore(ci): set the milestone when a pull request is open<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6176): <!--number 6176 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgQGdpdGh1Yi9yZWxhdGl2ZS10aW1lLWVsZW1lbnQgdG8gdjQuNC40ICh2OS4wL2Zvcmdlam8p-->Update dependency @github/relative-time-element to v4.4.4 (v9.0/forgejo)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6152) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6155)): <!--number 6155 --><!--line 0 --><!--description Zml4OiByZW1vdmUgc29mdGJyZWFrIGZyb20gZ2l0aHViIGxlZ2FjeSBjYWxsb3V0-->fix: remove softbreak from github legacy callout<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6144) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6149)): <!--number 6149 --><!--line 0 --><!--description Zml4OiBjb3JyZWN0IHBlcm1pc3Npb24gbG9hZGluZyBmb3IgbGltaXRlZCBvcmdhbmlzYXRpb24=-->fix: correct permission loading for limited organisation<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6128) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6131)): <!--number 6131 --><!--line 0 --><!--description Zml4OiBjbGVhbiB1cCBsb2cgZmlsZXMgdGhhdCBubyBsb25nZXIgZXhpc3Q=-->fix: clean up log files that no longer exist<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6114) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6127)): <!--number 6127 --><!--line 0 --><!--description Zml4OiByZXR1cm4gY29ycmVjdCB0eXBlIGluIGBHZXRTdWJNb2R1bGVg-->fix: return correct type in `GetSubModule`<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6050) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6092)): <!--number 6092 --><!--line 0 --><!--description SW1wcm92ZSBTd2FnZ2VyIGRvY3VtZW50YXRpb24gZm9yIHVzZXIgZW5kcG9pbnRz-->Improve Swagger documentation for user endpoints<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6084) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6085)): <!--number 6085 --><!--line 0 --><!--description Zml4OiBub3JtYWxpemUgZ3Vlc3NlZCBsYW5ndWFnZXMgZnJvbSBlbnJ5-->fix: normalize guessed languages from enry<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6052) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6070)): <!--number 6070 --><!--line 0 --><!--description U2hvdyBwYWdlIHRpdGxlcyBpbiB3aWtpIHNlYXJjaCByZXN1bHRzICgjNjA0OCk=-->Show page titles in wiki search results (#6048)<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6060): <!--number 6060 --><!--line 0 --><!--description aTE4bjogYmFja3BvcnQgb2YgdHJhbnNsYXRpb24gdXBkYXRlcyA1NzU0LCA1ODQ1LCA1OTYw-->i18n: backport of translation updates 5754, 5845, 5960<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6034) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6035)): <!--number 6035 --><!--line 0 --><!--description Y2hvcmUoY2kpOiByZW1vdmUgdW51c2VkIGV4cGVyaW1lbnRhbCBETlMgdXBkYXRlcw==-->chore(ci): remove unused experimental DNS updates<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6013) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6016)): <!--number 6016 --><!--line 0 --><!--description Zml4KHRlc3QpOiBUZXN0R2l0QXR0cmlidXRlQ2hlY2tlckVycm9yIG11c3QgYWxsb3cgYnJva2VuIHBpcGU=-->fix(test): TestGitAttributeCheckerError must allow broken pipe<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5996) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6005)): <!--number 6005 --><!--line 0 --><!--description Zml4OiBjaGVjayByZWFkIHBlcm1pc3Npb25zIGZvciBjb2RlIG93bmVyIHJldmlldyByZXF1ZXN0cw==-->fix: check read permissions for code owner review requests<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5989) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6004)): <!--number 6004 --><!--line 0 --><!--description Zml4OiB1c2UgYmV0dGVyIGNvZGUgdG8gZ3JvdXAgVUlEIGFuZCBzdG9wd2F0Y2hlcw==-->fix: use better code to group UID and stopwatches<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5991) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5993)): <!--number 5993 --><!--line 0 --><!--description Zml4OiBhcGkgcmVwbyBjb21wYXJlIHdpdGggY29tbWl0IGhhc2hlcw==-->fix: api repo compare with commit hashes<!--description-->
|
||||
- [PR](https://codeberg.org/forgejo/forgejo/pulls/5986) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5992)): <!--number 5992 --><!--line 0 --><!--description YnVnOiBjb3JyZWN0bHkgZ2VuZXJhdGUgb2F1dGgyIGp3dCBzaWduaW5nIGtleQ==-->bug: correctly generate oauth2 jwt signing key<!--description-->
|
||||
<!--end release-notes-assistant-->
|
1
release-notes-published/up-to-and-including-8.0.0.md
Symbolic link
1
release-notes-published/up-to-and-including-8.0.0.md
Symbolic link
|
@ -0,0 +1 @@
|
|||
../RELEASE-NOTES.md
|
4
release-notes/6271.md
Normal file
4
release-notes/6271.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
fix: [commit](https://codeberg.org/forgejo/forgejo/commit/96a7f0a3f065c5db8fdf352c93c8367e24d259de) Fix missing outputs for jobs with matrix
|
||||
fix: [commit](https://codeberg.org/forgejo/forgejo/commit/2b5c69c451a684b20119e2521dc23734c7869241) Detect whether action view branch was deleted
|
||||
feat: [commit](https://codeberg.org/forgejo/forgejo/commit/b0d6a7f07bff836190a8e87fe5645d5557893e32) Implement update branch API
|
||||
fix: [commit](https://codeberg.org/forgejo/forgejo/commit/bf934c96c92d643678ac7a18697b6563bc9d20a5) Add standard-compliant route to serve outdated R packages
|
|
@ -1,14 +1,16 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package oauth2
|
||||
package runner
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
|
||||
_ "code.gitea.io/gitea/models/forgefed"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
unittest.MainTest(m, &unittest.TestOptions{})
|
||||
unittest.MainTest(m)
|
||||
}
|
|
@ -162,28 +162,56 @@ func findTaskNeeds(ctx context.Context, task *actions_model.ActionTask) (map[str
|
|||
return nil, fmt.Errorf("FindRunJobs: %w", err)
|
||||
}
|
||||
|
||||
ret := make(map[string]*runnerv1.TaskNeed, len(needs))
|
||||
jobIDJobs := make(map[string][]*actions_model.ActionRunJob)
|
||||
for _, job := range jobs {
|
||||
if !needs.Contains(job.JobID) {
|
||||
jobIDJobs[job.JobID] = append(jobIDJobs[job.JobID], job)
|
||||
}
|
||||
|
||||
ret := make(map[string]*runnerv1.TaskNeed, len(needs))
|
||||
for jobID, jobsWithSameID := range jobIDJobs {
|
||||
if !needs.Contains(jobID) {
|
||||
continue
|
||||
}
|
||||
if job.TaskID == 0 || !job.Status.IsDone() {
|
||||
// it shouldn't happen, or the job has been rerun
|
||||
continue
|
||||
var jobOutputs map[string]string
|
||||
for _, job := range jobsWithSameID {
|
||||
if job.TaskID == 0 || !job.Status.IsDone() {
|
||||
// it shouldn't happen, or the job has been rerun
|
||||
continue
|
||||
}
|
||||
got, err := actions_model.FindTaskOutputByTaskID(ctx, job.TaskID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("FindTaskOutputByTaskID: %w", err)
|
||||
}
|
||||
outputs := make(map[string]string, len(got))
|
||||
for _, v := range got {
|
||||
outputs[v.OutputKey] = v.OutputValue
|
||||
}
|
||||
if len(jobOutputs) == 0 {
|
||||
jobOutputs = outputs
|
||||
} else {
|
||||
jobOutputs = mergeTwoOutputs(outputs, jobOutputs)
|
||||
}
|
||||
}
|
||||
outputs := make(map[string]string)
|
||||
got, err := actions_model.FindTaskOutputByTaskID(ctx, job.TaskID)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("FindTaskOutputByTaskID: %w", err)
|
||||
}
|
||||
for _, v := range got {
|
||||
outputs[v.OutputKey] = v.OutputValue
|
||||
}
|
||||
ret[job.JobID] = &runnerv1.TaskNeed{
|
||||
Outputs: outputs,
|
||||
Result: runnerv1.Result(job.Status),
|
||||
ret[jobID] = &runnerv1.TaskNeed{
|
||||
Outputs: jobOutputs,
|
||||
Result: runnerv1.Result(actions_model.AggregateJobStatus(jobsWithSameID)),
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
// mergeTwoOutputs merges two outputs from two different ActionRunJobs
|
||||
// Values with the same output name may be overridden. The user should ensure the output names are unique.
|
||||
// See https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#using-job-outputs-in-a-matrix-job
|
||||
func mergeTwoOutputs(o1, o2 map[string]string) map[string]string {
|
||||
ret := make(map[string]string, len(o1))
|
||||
for k1, v1 := range o1 {
|
||||
if len(v1) > 0 {
|
||||
ret[k1] = v1
|
||||
} else {
|
||||
ret[k1] = o2[k1]
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
|
29
routers/api/actions/runner/utils_test.go
Normal file
29
routers/api/actions/runner/utils_test.go
Normal file
|
@ -0,0 +1,29 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package runner
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
actions_model "code.gitea.io/gitea/models/actions"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func Test_findTaskNeeds(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
task := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 51})
|
||||
|
||||
ret, err := findTaskNeeds(context.Background(), task)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, ret, 1)
|
||||
assert.Contains(t, ret, "job1")
|
||||
assert.Len(t, ret["job1"].Outputs, 2)
|
||||
assert.Equal(t, "abc", ret["job1"].Outputs["output_a"])
|
||||
assert.Equal(t, "bbb", ret["job1"].Outputs["output_b"])
|
||||
}
|
|
@ -337,6 +337,7 @@ func CommonRoutes() *web.Route {
|
|||
r.Get("/PACKAGES", cran.EnumerateSourcePackages)
|
||||
r.Get("/PACKAGES{format}", cran.EnumerateSourcePackages)
|
||||
r.Get("/{filename}", cran.DownloadSourcePackageFile)
|
||||
r.Get("/Archive/{packagename}/{filename}", cran.DownloadSourcePackageFile)
|
||||
})
|
||||
r.Put("", reqPackageAccess(perm.AccessModeWrite), enforcePackagesQuota(), cran.UploadSourcePackageFile)
|
||||
})
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"code.gitea.io/gitea/models"
|
||||
asymkey_model "code.gitea.io/gitea/models/asymkey"
|
||||
|
@ -415,6 +416,11 @@ func SearchUsers(ctx *context.APIContext) {
|
|||
// in: query
|
||||
// description: user's login name to search for
|
||||
// type: string
|
||||
// - name: sort
|
||||
// in: query
|
||||
// description: sort order of results
|
||||
// type: string
|
||||
// enum: [oldest, newest, alphabetically, reversealphabetically, recentupdate, leastupdate]
|
||||
// - name: page
|
||||
// in: query
|
||||
// description: page number of results to return (1-based)
|
||||
|
@ -431,12 +437,40 @@ func SearchUsers(ctx *context.APIContext) {
|
|||
|
||||
listOptions := utils.GetListOptions(ctx)
|
||||
|
||||
sort := ctx.FormString("sort")
|
||||
var orderBy db.SearchOrderBy
|
||||
|
||||
switch sort {
|
||||
case "oldest":
|
||||
orderBy = db.SearchOrderByOldest
|
||||
case "newest":
|
||||
orderBy = db.SearchOrderByNewest
|
||||
case "alphabetically":
|
||||
orderBy = db.SearchOrderByAlphabetically
|
||||
case "reversealphabetically":
|
||||
orderBy = db.SearchOrderByAlphabeticallyReverse
|
||||
case "recentupdate":
|
||||
orderBy = db.SearchOrderByRecentUpdated
|
||||
case "leastupdate":
|
||||
orderBy = db.SearchOrderByLeastUpdated
|
||||
default:
|
||||
orderBy = db.SearchOrderByAlphabetically
|
||||
}
|
||||
|
||||
intSource, err := strconv.ParseInt(ctx.FormString("source_id"), 10, 64)
|
||||
var sourceID optional.Option[int64]
|
||||
if ctx.FormString("source_id") == "" || err != nil {
|
||||
sourceID = optional.None[int64]()
|
||||
} else {
|
||||
sourceID = optional.Some(intSource)
|
||||
}
|
||||
|
||||
users, maxResults, err := user_model.SearchUsers(ctx, &user_model.SearchUserOptions{
|
||||
Actor: ctx.Doer,
|
||||
Type: user_model.UserTypeIndividual,
|
||||
LoginName: ctx.FormTrim("login_name"),
|
||||
SourceID: ctx.FormInt64("source_id"),
|
||||
OrderBy: db.SearchOrderByAlphabetically,
|
||||
SourceID: sourceID,
|
||||
OrderBy: orderBy,
|
||||
ListOptions: listOptions,
|
||||
})
|
||||
if err != nil {
|
||||
|
|
|
@ -1153,6 +1153,7 @@ func Routes() *web.Route {
|
|||
m.Get("/*", repo.GetBranch)
|
||||
m.Delete("/*", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, repo.DeleteBranch)
|
||||
m.Post("", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, bind(api.CreateBranchRepoOption{}), context.EnforceQuotaAPI(quota_model.LimitSubjectSizeGitAll, context.QuotaTargetRepo), repo.CreateBranch)
|
||||
m.Patch("/*", reqToken(), reqRepoWriter(unit.TypeCode), mustNotBeArchived, bind(api.UpdateBranchRepoOption{}), repo.UpdateBranch)
|
||||
}, context.ReferencesGitRepo(), reqRepoReader(unit.TypeCode))
|
||||
m.Group("/branch_protections", func() {
|
||||
m.Get("", repo.ListBranchProtections)
|
||||
|
|
|
@ -393,6 +393,77 @@ func ListBranches(ctx *context.APIContext) {
|
|||
ctx.JSON(http.StatusOK, apiBranches)
|
||||
}
|
||||
|
||||
// UpdateBranch updates a repository's branch.
|
||||
func UpdateBranch(ctx *context.APIContext) {
|
||||
// swagger:operation PATCH /repos/{owner}/{repo}/branches/{branch} repository repoUpdateBranch
|
||||
// ---
|
||||
// summary: Update a branch
|
||||
// consumes:
|
||||
// - application/json
|
||||
// produces:
|
||||
// - application/json
|
||||
// parameters:
|
||||
// - name: owner
|
||||
// in: path
|
||||
// description: owner of the repo
|
||||
// type: string
|
||||
// required: true
|
||||
// - name: repo
|
||||
// in: path
|
||||
// description: name of the repo
|
||||
// type: string
|
||||
// required: true
|
||||
// - name: branch
|
||||
// in: path
|
||||
// description: name of the branch
|
||||
// type: string
|
||||
// required: true
|
||||
// - name: body
|
||||
// in: body
|
||||
// schema:
|
||||
// "$ref": "#/definitions/UpdateBranchRepoOption"
|
||||
// responses:
|
||||
// "204":
|
||||
// "$ref": "#/responses/empty"
|
||||
// "403":
|
||||
// "$ref": "#/responses/forbidden"
|
||||
// "404":
|
||||
// "$ref": "#/responses/notFound"
|
||||
// "422":
|
||||
// "$ref": "#/responses/validationError"
|
||||
|
||||
opt := web.GetForm(ctx).(*api.UpdateBranchRepoOption)
|
||||
|
||||
oldName := ctx.Params("*")
|
||||
repo := ctx.Repo.Repository
|
||||
|
||||
if repo.IsEmpty {
|
||||
ctx.Error(http.StatusNotFound, "", "Git Repository is empty.")
|
||||
return
|
||||
}
|
||||
|
||||
if repo.IsMirror {
|
||||
ctx.Error(http.StatusForbidden, "", "Git Repository is a mirror.")
|
||||
return
|
||||
}
|
||||
|
||||
msg, err := repo_service.RenameBranch(ctx, repo, ctx.Doer, ctx.Repo.GitRepo, oldName, opt.Name)
|
||||
if err != nil {
|
||||
ctx.Error(http.StatusInternalServerError, "RenameBranch", err)
|
||||
return
|
||||
}
|
||||
if msg == "target_exist" {
|
||||
ctx.Error(http.StatusUnprocessableEntity, "", "Cannot rename a branch using the same name or rename to a branch that already exists.")
|
||||
return
|
||||
}
|
||||
if msg == "from_not_exist" {
|
||||
ctx.Error(http.StatusNotFound, "", "Branch doesn't exist.")
|
||||
return
|
||||
}
|
||||
|
||||
ctx.Status(http.StatusNoContent)
|
||||
}
|
||||
|
||||
// GetBranchProtection gets a branch protection
|
||||
func GetBranchProtection(ctx *context.APIContext) {
|
||||
// swagger:operation GET /repos/{owner}/{repo}/branch_protections/{name} repository repoGetBranchProtection
|
||||
|
|
|
@ -101,6 +101,8 @@ type swaggerParameterBodies struct {
|
|||
// in:body
|
||||
EditRepoOption api.EditRepoOption
|
||||
// in:body
|
||||
UpdateBranchRepoOption api.UpdateBranchRepoOption
|
||||
// in:body
|
||||
TransferRepoOption api.TransferRepoOption
|
||||
// in:body
|
||||
CreateForkOption api.CreateForkOption
|
||||
|
|
|
@ -599,8 +599,10 @@ func handleUserCreated(ctx *context.Context, u *user_model.User, gothUser *goth.
|
|||
notify_service.NewUserSignUp(ctx, u)
|
||||
// update external user information
|
||||
if gothUser != nil {
|
||||
if err := externalaccount.EnsureLinkExternalToUser(ctx, u, *gothUser); err != nil {
|
||||
log.Error("EnsureLinkExternalToUser failed: %v", err)
|
||||
if err := externalaccount.UpdateExternalUser(ctx, u, *gothUser); err != nil {
|
||||
if !errors.Is(err, util.ErrNotExist) {
|
||||
log.Error("UpdateExternalUser failed: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1205,39 +1205,9 @@ func handleOAuth2SignIn(ctx *context.Context, source *auth.Source, u *user_model
|
|||
|
||||
groups := getClaimedGroups(oauth2Source, &gothUser)
|
||||
|
||||
opts := &user_service.UpdateOptions{}
|
||||
|
||||
// Reactivate user if they are deactivated
|
||||
if !u.IsActive {
|
||||
opts.IsActive = optional.Some(true)
|
||||
}
|
||||
|
||||
// Update GroupClaims
|
||||
opts.IsAdmin, opts.IsRestricted = getUserAdminAndRestrictedFromGroupClaims(oauth2Source, &gothUser)
|
||||
|
||||
if oauth2Source.GroupTeamMap != "" || oauth2Source.GroupTeamMapRemoval {
|
||||
if err := source_service.SyncGroupsToTeams(ctx, u, groups, groupTeamMapping, oauth2Source.GroupTeamMapRemoval); err != nil {
|
||||
ctx.ServerError("SyncGroupsToTeams", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err := externalaccount.EnsureLinkExternalToUser(ctx, u, gothUser); err != nil {
|
||||
ctx.ServerError("EnsureLinkExternalToUser", err)
|
||||
return
|
||||
}
|
||||
|
||||
// If this user is enrolled in 2FA and this source doesn't override it,
|
||||
// we can't sign the user in just yet. Instead, redirect them to the 2FA authentication page.
|
||||
if !needs2FA {
|
||||
// Register last login
|
||||
opts.SetLastLogin = true
|
||||
|
||||
if err := user_service.UpdateUser(ctx, u, opts); err != nil {
|
||||
ctx.ServerError("UpdateUser", err)
|
||||
return
|
||||
}
|
||||
|
||||
if err := updateSession(ctx, nil, map[string]any{
|
||||
"uid": u.ID,
|
||||
}); err != nil {
|
||||
|
@ -1248,6 +1218,29 @@ func handleOAuth2SignIn(ctx *context.Context, source *auth.Source, u *user_model
|
|||
// Clear whatever CSRF cookie has right now, force to generate a new one
|
||||
ctx.Csrf.DeleteCookie(ctx)
|
||||
|
||||
opts := &user_service.UpdateOptions{
|
||||
SetLastLogin: true,
|
||||
}
|
||||
opts.IsAdmin, opts.IsRestricted = getUserAdminAndRestrictedFromGroupClaims(oauth2Source, &gothUser)
|
||||
if err := user_service.UpdateUser(ctx, u, opts); err != nil {
|
||||
ctx.ServerError("UpdateUser", err)
|
||||
return
|
||||
}
|
||||
|
||||
if oauth2Source.GroupTeamMap != "" || oauth2Source.GroupTeamMapRemoval {
|
||||
if err := source_service.SyncGroupsToTeams(ctx, u, groups, groupTeamMapping, oauth2Source.GroupTeamMapRemoval); err != nil {
|
||||
ctx.ServerError("SyncGroupsToTeams", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// update external user information
|
||||
if err := externalaccount.UpdateExternalUser(ctx, u, gothUser); err != nil {
|
||||
if !errors.Is(err, util.ErrNotExist) {
|
||||
log.Error("UpdateExternalUser failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := resetLocale(ctx, u); err != nil {
|
||||
ctx.ServerError("resetLocale", err)
|
||||
return
|
||||
|
@ -1263,13 +1256,22 @@ func handleOAuth2SignIn(ctx *context.Context, source *auth.Source, u *user_model
|
|||
return
|
||||
}
|
||||
|
||||
if opts.IsActive.Has() || opts.IsAdmin.Has() || opts.IsRestricted.Has() {
|
||||
opts := &user_service.UpdateOptions{}
|
||||
opts.IsAdmin, opts.IsRestricted = getUserAdminAndRestrictedFromGroupClaims(oauth2Source, &gothUser)
|
||||
if opts.IsAdmin.Has() || opts.IsRestricted.Has() {
|
||||
if err := user_service.UpdateUser(ctx, u, opts); err != nil {
|
||||
ctx.ServerError("UpdateUser", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if oauth2Source.GroupTeamMap != "" || oauth2Source.GroupTeamMapRemoval {
|
||||
if err := source_service.SyncGroupsToTeams(ctx, u, groups, groupTeamMapping, oauth2Source.GroupTeamMapRemoval); err != nil {
|
||||
ctx.ServerError("SyncGroupsToTeams", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err := updateSession(ctx, nil, map[string]any{
|
||||
// User needs to use 2FA, save data and redirect to 2FA page.
|
||||
"twofaUid": u.ID,
|
||||
|
|
|
@ -12,11 +12,13 @@ import (
|
|||
|
||||
actions_model "code.gitea.io/gitea/models/actions"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
git_model "code.gitea.io/gitea/models/git"
|
||||
"code.gitea.io/gitea/models/unit"
|
||||
"code.gitea.io/gitea/modules/actions"
|
||||
"code.gitea.io/gitea/modules/base"
|
||||
"code.gitea.io/gitea/modules/container"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/optional"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
|
@ -222,6 +224,10 @@ func List(ctx *context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := loadIsRefDeleted(ctx, runs); err != nil {
|
||||
log.Error("LoadIsRefDeleted", err)
|
||||
}
|
||||
|
||||
ctx.Data["Runs"] = runs
|
||||
|
||||
ctx.Data["Repo"] = ctx.Repo
|
||||
|
@ -245,3 +251,31 @@ func List(ctx *context.Context) {
|
|||
|
||||
ctx.HTML(http.StatusOK, tplListActions)
|
||||
}
|
||||
|
||||
// loadIsRefDeleted loads the IsRefDeleted field for each run in the list.
|
||||
// TODO: move this function to models/actions/run_list.go but now it will result in a circular import.
|
||||
func loadIsRefDeleted(ctx *context.Context, runs actions_model.RunList) error {
|
||||
branches := make(container.Set[string], len(runs))
|
||||
for _, run := range runs {
|
||||
refName := git.RefName(run.Ref)
|
||||
if refName.IsBranch() {
|
||||
branches.Add(refName.ShortName())
|
||||
}
|
||||
}
|
||||
if len(branches) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
branchInfos, err := git_model.GetBranches(ctx, ctx.Repo.Repository.ID, branches.Values(), false)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
branchSet := git_model.BranchesToNamesSet(branchInfos)
|
||||
for _, run := range runs {
|
||||
refName := git.RefName(run.Ref)
|
||||
if refName.IsBranch() && !branchSet.Contains(run.Ref) {
|
||||
run.IsRefDeleted = true
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -20,10 +20,13 @@ import (
|
|||
|
||||
actions_model "code.gitea.io/gitea/models/actions"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
git_model "code.gitea.io/gitea/models/git"
|
||||
repo_model "code.gitea.io/gitea/models/repo"
|
||||
"code.gitea.io/gitea/models/unit"
|
||||
"code.gitea.io/gitea/modules/actions"
|
||||
"code.gitea.io/gitea/modules/base"
|
||||
"code.gitea.io/gitea/modules/git"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/setting"
|
||||
"code.gitea.io/gitea/modules/storage"
|
||||
"code.gitea.io/gitea/modules/templates"
|
||||
|
@ -157,8 +160,9 @@ type ViewUser struct {
|
|||
}
|
||||
|
||||
type ViewBranch struct {
|
||||
Name string `json:"name"`
|
||||
Link string `json:"link"`
|
||||
Name string `json:"name"`
|
||||
Link string `json:"link"`
|
||||
IsDeleted bool `json:"isDeleted"`
|
||||
}
|
||||
|
||||
type ViewJobStep struct {
|
||||
|
@ -227,6 +231,16 @@ func ViewPost(ctx *context_module.Context) {
|
|||
Name: run.PrettyRef(),
|
||||
Link: run.RefLink(),
|
||||
}
|
||||
refName := git.RefName(run.Ref)
|
||||
if refName.IsBranch() {
|
||||
b, err := git_model.GetBranch(ctx, ctx.Repo.Repository.ID, refName.ShortName())
|
||||
if err != nil && !git_model.IsErrBranchNotExist(err) {
|
||||
log.Error("GetBranch: %v", err)
|
||||
} else if git_model.IsErrBranchNotExist(err) || (b != nil && b.IsDeleted) {
|
||||
branch.IsDeleted = true
|
||||
}
|
||||
}
|
||||
|
||||
resp.State.Run.Commit = ViewCommit{
|
||||
LocaleCommit: ctx.Locale.TrString("actions.runs.commit"),
|
||||
LocalePushedBy: ctx.Locale.TrString("actions.runs.pushed_by"),
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package oauth2
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/markbates/goth"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
type fakeProvider struct{}
|
||||
|
||||
func (p *fakeProvider) Name() string {
|
||||
return "fake"
|
||||
}
|
||||
|
||||
func (p *fakeProvider) SetName(name string) {}
|
||||
|
||||
func (p *fakeProvider) BeginAuth(state string) (goth.Session, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (p *fakeProvider) UnmarshalSession(string) (goth.Session, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (p *fakeProvider) FetchUser(goth.Session) (goth.User, error) {
|
||||
return goth.User{}, nil
|
||||
}
|
||||
|
||||
func (p *fakeProvider) Debug(bool) {
|
||||
}
|
||||
|
||||
func (p *fakeProvider) RefreshToken(refreshToken string) (*oauth2.Token, error) {
|
||||
switch refreshToken {
|
||||
case "expired":
|
||||
return nil, &oauth2.RetrieveError{
|
||||
ErrorCode: "invalid_grant",
|
||||
}
|
||||
default:
|
||||
return &oauth2.Token{
|
||||
AccessToken: "token",
|
||||
TokenType: "Bearer",
|
||||
RefreshToken: "refresh",
|
||||
Expiry: time.Now().Add(time.Hour),
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func (p *fakeProvider) RefreshTokenAvailable() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func init() {
|
||||
RegisterGothProvider(
|
||||
NewSimpleProvider("fake", "Fake", []string{"account"},
|
||||
func(clientKey, secret, callbackURL string, scopes ...string) goth.Provider {
|
||||
return &fakeProvider{}
|
||||
}))
|
||||
}
|
|
@ -39,7 +39,7 @@ func (source *Source) FromDB(bs []byte) error {
|
|||
return json.UnmarshalHandleDoubleEncode(bs, &source)
|
||||
}
|
||||
|
||||
// ToDB exports an OAuth2Config to a serialized format.
|
||||
// ToDB exports an SMTPConfig to a serialized format.
|
||||
func (source *Source) ToDB() ([]byte, error) {
|
||||
return json.Marshal(source)
|
||||
}
|
||||
|
|
|
@ -1,209 +0,0 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package oauth2
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
asymkey_model "code.gitea.io/gitea/models/asymkey"
|
||||
"code.gitea.io/gitea/models/auth"
|
||||
"code.gitea.io/gitea/models/db"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
|
||||
"github.com/markbates/goth"
|
||||
"github.com/markbates/goth/providers/openidConnect"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
// Sync causes this OAuth2 source to synchronize its users with the db.
|
||||
func (source *Source) Sync(ctx context.Context, updateExisting bool) error {
|
||||
log.Trace("Doing: SyncExternalUsers[%s] %d", source.authSource.Name, source.authSource.ID)
|
||||
|
||||
if !updateExisting {
|
||||
log.Info("SyncExternalUsers[%s] not running since updateExisting is false", source.authSource.Name)
|
||||
return nil
|
||||
}
|
||||
|
||||
provider, err := createProvider(source.authSource.Name, source)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !provider.RefreshTokenAvailable() {
|
||||
log.Trace("SyncExternalUsers[%s] provider doesn't support refresh tokens, can't synchronize", source.authSource.Name)
|
||||
return nil
|
||||
}
|
||||
|
||||
opts := user_model.FindExternalUserOptions{
|
||||
HasRefreshToken: true,
|
||||
Expired: true,
|
||||
LoginSourceID: source.authSource.ID,
|
||||
}
|
||||
|
||||
return user_model.IterateExternalLogin(ctx, opts, func(ctx context.Context, u *user_model.ExternalLoginUser) error {
|
||||
return source.refresh(ctx, provider, u)
|
||||
})
|
||||
}
|
||||
|
||||
func (source *Source) refresh(ctx context.Context, provider goth.Provider, u *user_model.ExternalLoginUser) error {
|
||||
log.Trace("Syncing login_source_id=%d external_id=%s expiration=%s", u.LoginSourceID, u.ExternalID, u.ExpiresAt)
|
||||
|
||||
shouldDisable := false
|
||||
|
||||
token, err := provider.RefreshToken(u.RefreshToken)
|
||||
if err != nil {
|
||||
if err, ok := err.(*oauth2.RetrieveError); ok && err.ErrorCode == "invalid_grant" {
|
||||
// this signals that the token is not valid and the user should be disabled
|
||||
shouldDisable = true
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
user := &user_model.User{
|
||||
LoginName: u.ExternalID,
|
||||
LoginType: auth.OAuth2,
|
||||
LoginSource: u.LoginSourceID,
|
||||
}
|
||||
|
||||
hasUser, err := user_model.GetUser(ctx, user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// If the grant is no longer valid, disable the user and
|
||||
// delete local tokens. If the OAuth2 provider still
|
||||
// recognizes them as a valid user, they will be able to login
|
||||
// via their provider and reactivate their account.
|
||||
if shouldDisable {
|
||||
log.Info("SyncExternalUsers[%s] disabling user %d", source.authSource.Name, user.ID)
|
||||
|
||||
return db.WithTx(ctx, func(ctx context.Context) error {
|
||||
if hasUser {
|
||||
user.IsActive = false
|
||||
err := user_model.UpdateUserCols(ctx, user, "is_active")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Delete stored tokens, since they are invalid. This
|
||||
// also provents us from checking this in subsequent runs.
|
||||
u.AccessToken = ""
|
||||
u.RefreshToken = ""
|
||||
u.ExpiresAt = time.Time{}
|
||||
|
||||
return user_model.UpdateExternalUserByExternalID(ctx, u)
|
||||
})
|
||||
}
|
||||
|
||||
// Otherwise, update the tokens
|
||||
u.AccessToken = token.AccessToken
|
||||
u.ExpiresAt = token.Expiry
|
||||
|
||||
// Some providers only update access tokens provide a new
|
||||
// refresh token, so avoid updating it if it's empty
|
||||
if token.RefreshToken != "" {
|
||||
u.RefreshToken = token.RefreshToken
|
||||
}
|
||||
|
||||
needUserFetch := source.ProvidesSSHKeys()
|
||||
|
||||
if needUserFetch {
|
||||
fetchedUser, err := fetchUser(provider, token)
|
||||
if err != nil {
|
||||
log.Error("fetchUser: %v", err)
|
||||
} else {
|
||||
err = updateSSHKeys(ctx, source, user, &fetchedUser)
|
||||
if err != nil {
|
||||
log.Error("updateSshKeys: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
err = user_model.UpdateExternalUserByExternalID(ctx, u)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func fetchUser(provider goth.Provider, token *oauth2.Token) (goth.User, error) {
|
||||
state, err := util.CryptoRandomString(40)
|
||||
if err != nil {
|
||||
return goth.User{}, err
|
||||
}
|
||||
|
||||
session, err := provider.BeginAuth(state)
|
||||
if err != nil {
|
||||
return goth.User{}, err
|
||||
}
|
||||
|
||||
if s, ok := session.(*openidConnect.Session); ok {
|
||||
s.AccessToken = token.AccessToken
|
||||
s.RefreshToken = token.RefreshToken
|
||||
s.ExpiresAt = token.Expiry
|
||||
s.IDToken = token.Extra("id_token").(string)
|
||||
}
|
||||
|
||||
gothUser, err := provider.FetchUser(session)
|
||||
if err != nil {
|
||||
return goth.User{}, err
|
||||
}
|
||||
|
||||
return gothUser, nil
|
||||
}
|
||||
|
||||
func updateSSHKeys(
|
||||
ctx context.Context,
|
||||
source *Source,
|
||||
user *user_model.User,
|
||||
fetchedUser *goth.User,
|
||||
) error {
|
||||
if source.ProvidesSSHKeys() {
|
||||
sshKeys, err := getSSHKeys(source, fetchedUser)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(sshKeys) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if asymkey_model.SynchronizePublicKeys(ctx, user, source.authSource, sshKeys) {
|
||||
err = asymkey_model.RewriteAllPublicKeys(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getSSHKeys(source *Source, gothUser *goth.User) ([]string, error) {
|
||||
key := source.AttributeSSHPublicKey
|
||||
value, exists := gothUser.RawData[key]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("attribute '%s' not found in user data", key)
|
||||
}
|
||||
|
||||
rawSlice, ok := value.([]any)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("unexpected type for SSH public key, expected []interface{} but got %T", value)
|
||||
}
|
||||
|
||||
sshKeys := make([]string, 0, len(rawSlice))
|
||||
for i, v := range rawSlice {
|
||||
str, ok := v.(string)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("unexpected element type at index %d in SSH public key array, expected string but got %T", i, v)
|
||||
}
|
||||
sshKeys = append(sshKeys, str)
|
||||
}
|
||||
|
||||
return sshKeys, nil
|
||||
}
|
|
@ -1,101 +0,0 @@
|
|||
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package oauth2
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"code.gitea.io/gitea/models/auth"
|
||||
"code.gitea.io/gitea/models/unittest"
|
||||
user_model "code.gitea.io/gitea/models/user"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestSource(t *testing.T) {
|
||||
require.NoError(t, unittest.PrepareTestDatabase())
|
||||
|
||||
source := &Source{
|
||||
Provider: "fake",
|
||||
authSource: &auth.Source{
|
||||
ID: 12,
|
||||
Type: auth.OAuth2,
|
||||
Name: "fake",
|
||||
IsActive: true,
|
||||
IsSyncEnabled: true,
|
||||
},
|
||||
}
|
||||
|
||||
user := &user_model.User{
|
||||
LoginName: "external",
|
||||
LoginType: auth.OAuth2,
|
||||
LoginSource: source.authSource.ID,
|
||||
Name: "test",
|
||||
Email: "external@example.com",
|
||||
}
|
||||
|
||||
err := user_model.CreateUser(context.Background(), user, &user_model.CreateUserOverwriteOptions{})
|
||||
require.NoError(t, err)
|
||||
|
||||
e := &user_model.ExternalLoginUser{
|
||||
ExternalID: "external",
|
||||
UserID: user.ID,
|
||||
LoginSourceID: user.LoginSource,
|
||||
RefreshToken: "valid",
|
||||
}
|
||||
err = user_model.LinkExternalToUser(context.Background(), user, e)
|
||||
require.NoError(t, err)
|
||||
|
||||
provider, err := createProvider(source.authSource.Name, source)
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("refresh", func(t *testing.T) {
|
||||
t.Run("valid", func(t *testing.T) {
|
||||
err := source.refresh(context.Background(), provider, e)
|
||||
require.NoError(t, err)
|
||||
|
||||
e := &user_model.ExternalLoginUser{
|
||||
ExternalID: e.ExternalID,
|
||||
LoginSourceID: e.LoginSourceID,
|
||||
}
|
||||
|
||||
ok, err := user_model.GetExternalLogin(context.Background(), e)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, ok)
|
||||
assert.Equal(t, "refresh", e.RefreshToken)
|
||||
assert.Equal(t, "token", e.AccessToken)
|
||||
|
||||
u, err := user_model.GetUserByID(context.Background(), user.ID)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, u.IsActive)
|
||||
})
|
||||
|
||||
t.Run("expired", func(t *testing.T) {
|
||||
err := source.refresh(context.Background(), provider, &user_model.ExternalLoginUser{
|
||||
ExternalID: "external",
|
||||
UserID: user.ID,
|
||||
LoginSourceID: user.LoginSource,
|
||||
RefreshToken: "expired",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
e := &user_model.ExternalLoginUser{
|
||||
ExternalID: e.ExternalID,
|
||||
LoginSourceID: e.LoginSourceID,
|
||||
}
|
||||
|
||||
ok, err := user_model.GetExternalLogin(context.Background(), e)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, ok)
|
||||
assert.Equal(t, "", e.RefreshToken)
|
||||
assert.Equal(t, "", e.AccessToken)
|
||||
|
||||
u, err := user_model.GetUserByID(context.Background(), user.ID)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, u.IsActive)
|
||||
})
|
||||
})
|
||||
}
|
|
@ -71,14 +71,14 @@ func LinkAccountToUser(ctx context.Context, user *user_model.User, gothUser goth
|
|||
return nil
|
||||
}
|
||||
|
||||
// EnsureLinkExternalToUser link the gothUser to the user
|
||||
func EnsureLinkExternalToUser(ctx context.Context, user *user_model.User, gothUser goth.User) error {
|
||||
// UpdateExternalUser updates external user's information
|
||||
func UpdateExternalUser(ctx context.Context, user *user_model.User, gothUser goth.User) error {
|
||||
externalLoginUser, err := toExternalLoginUser(ctx, user, gothUser)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return user_model.EnsureLinkExternalToUser(ctx, externalLoginUser)
|
||||
return user_model.UpdateExternalUserByExternalID(ctx, externalLoginUser)
|
||||
}
|
||||
|
||||
// UpdateMigrationsByType updates all migrated repositories' posterid from gitServiceType to replace originalAuthorID to posterID
|
||||
|
|
|
@ -254,7 +254,7 @@ func SyncBranchesToDB(ctx context.Context, repoID, pusherID int64, branchNames,
|
|||
}
|
||||
|
||||
return db.WithTx(ctx, func(ctx context.Context) error {
|
||||
branches, err := git_model.GetBranches(ctx, repoID, branchNames)
|
||||
branches, err := git_model.GetBranches(ctx, repoID, branchNames, true)
|
||||
if err != nil {
|
||||
return fmt.Errorf("git_model.GetBranches: %v", err)
|
||||
}
|
||||
|
|
|
@ -425,7 +425,7 @@
|
|||
<p class="help">{{ctx.Locale.Tr "admin.auths.sspi_default_language_helper"}}</p>
|
||||
</div>
|
||||
{{end}}
|
||||
{{if (or .Source.IsLDAP .Source.IsOAuth2)}}
|
||||
{{if .Source.IsLDAP}}
|
||||
<div class="inline field">
|
||||
<div class="ui checkbox">
|
||||
<label><strong>{{ctx.Locale.Tr "admin.auths.syncenabled"}}</strong></label>
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
<input name="attributes_in_bind" type="checkbox" {{if .attributes_in_bind}}checked{{end}}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oauth2 ldap inline field {{if not (or (eq .type 2) (eq .type 6))}}tw-hidden{{end}}">
|
||||
<div class="ldap inline field {{if not (eq .type 2)}}tw-hidden{{end}}">
|
||||
<div class="ui checkbox">
|
||||
<label><strong>{{ctx.Locale.Tr "admin.auths.syncenabled"}}</strong></label>
|
||||
<input name="is_sync_enabled" type="checkbox" {{if .is_sync_enabled}}checked{{end}}>
|
||||
|
|
|
@ -13,20 +13,20 @@
|
|||
<a class="text primary name" href="{{.Link}}">{{.Name}}</a>
|
||||
<span class="label-list">
|
||||
{{if .IsArchived}}
|
||||
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.archived"}}</span>
|
||||
<span class="ui label">{{ctx.Locale.Tr "repo.desc.archived"}}</span>
|
||||
{{end}}
|
||||
{{if .IsPrivate}}
|
||||
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.private"}}</span>
|
||||
<span class="ui label">{{ctx.Locale.Tr "repo.desc.private"}}</span>
|
||||
{{else}}
|
||||
{{if .Owner.Visibility.IsPrivate}}
|
||||
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.internal"}}</span>
|
||||
<span class="ui label">{{ctx.Locale.Tr "repo.desc.internal"}}</span>
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{if .IsTemplate}}
|
||||
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.template"}}</span>
|
||||
<span class="ui label">{{ctx.Locale.Tr "repo.desc.template"}}</span>
|
||||
{{end}}
|
||||
{{if eq .ObjectFormatName "sha256"}}
|
||||
<span class="ui basic label">{{ctx.Locale.Tr "repo.desc.sha256"}}</span>
|
||||
<span class="ui label">{{ctx.Locale.Tr "repo.desc.sha256"}}</span>
|
||||
{{end}}
|
||||
</span>
|
||||
</div>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<div class="flex-item-title">
|
||||
{{template "shared/user/name" .}}
|
||||
{{if .Visibility.IsPrivate}}
|
||||
<span class="ui basic tiny label">{{ctx.Locale.Tr "repo.desc.private"}}</span>
|
||||
<span class="ui label">{{ctx.Locale.Tr "repo.desc.private"}}</span>
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="flex-item-body">
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue