diff --git a/.forgejo/workflows/build-release-integration.yml b/.forgejo/workflows/build-release-integration.yml index d10f40f7c7..9604451d85 100644 --- a/.forgejo/workflows/build-release-integration.yml +++ b/.forgejo/workflows/build-release-integration.yml @@ -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 diff --git a/.forgejo/workflows/build-release.yml b/.forgejo/workflows/build-release.yml index e894d4c7e9..66f5cccd37 100644 --- a/.forgejo/workflows/build-release.yml +++ b/.forgejo/workflows/build-release.yml @@ -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 }} diff --git a/.forgejo/workflows/cascade-setup-end-to-end.yml b/.forgejo/workflows/cascade-setup-end-to-end.yml index e9e9574840..d5aada4284 100644 --- a/.forgejo/workflows/cascade-setup-end-to-end.yml +++ b/.forgejo/workflows/cascade-setup-end-to-end.yml @@ -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 }} diff --git a/.forgejo/workflows/publish-release.yml b/.forgejo/workflows/publish-release.yml index 137af41e93..6fc8e667bf 100644 --- a/.forgejo/workflows/publish-release.yml +++ b/.forgejo/workflows/publish-release.yml @@ -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 }} diff --git a/.forgejo/workflows/renovate.yml b/.forgejo/workflows/renovate.yml index d3d26f3720..dc9dc2200a 100644 --- a/.forgejo/workflows/renovate.yml +++ b/.forgejo/workflows/renovate.yml @@ -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 diff --git a/Makefile b/Makefile index 001abb0d78..ed6d609c98 100644 --- a/Makefile +++ b/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: ... diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index c5f3831cf9..a2749563d2 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -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 diff --git a/build/lint-locale.go b/build/lint-locale.go index 3f44e1d5f9..c49e236938 100644 --- a/build/lint-locale.go +++ b/build/lint-locale.go @@ -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") } diff --git a/go.mod b/go.mod index c2b6f9af83..71b732168b 100644 --- a/go.mod +++ b/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 diff --git a/go.sum b/go.sum index 95e461e15c..3bea73ee7c 100644 --- a/go.sum +++ b/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= diff --git a/models/actions/run.go b/models/actions/run.go index 06a1290d5d..c5512106b9 100644 --- a/models/actions/run.go +++ b/models/actions/run.go @@ -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 diff --git a/models/actions/run_job.go b/models/actions/run_job.go index 4b8664077d..2319af8e08 100644 --- a/models/actions/run_job.go +++ b/models/actions/run_job.go @@ -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 diff --git a/models/auth/source.go b/models/auth/source.go index 8f7c2a89db..d03d4975dc 100644 --- a/models/auth/source.go +++ b/models/auth/source.go @@ -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 } diff --git a/models/db/context_committer_test.go b/models/db/context_committer_test.go index 38e91f22ed..849c5dea41 100644 --- a/models/db/context_committer_test.go +++ b/models/db/context_committer_test.go @@ -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) diff --git a/models/fixtures/action_run.yml b/models/fixtures/action_run.yml index 9c60b352f9..2fe9094d13 100644 --- a/models/fixtures/action_run.yml +++ b/models/fixtures/action_run.yml @@ -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" diff --git a/models/fixtures/action_run_job.yml b/models/fixtures/action_run_job.yml index 0b02d0e17e..117bb5ea05 100644 --- a/models/fixtures/action_run_job.yml +++ b/models/fixtures/action_run_job.yml @@ -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 diff --git a/models/fixtures/action_task.yml b/models/fixtures/action_task.yml index d88a8ed8a9..506a47d8a0 100644 --- a/models/fixtures/action_task.yml +++ b/models/fixtures/action_task.yml @@ -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 diff --git a/models/fixtures/action_task_output.yml b/models/fixtures/action_task_output.yml new file mode 100644 index 0000000000..314e9f7115 --- /dev/null +++ b/models/fixtures/action_task_output.yml @@ -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 diff --git a/models/fixtures/user.yml b/models/fixtures/user.yml index dbc6fc3e38..c23abbb17e 100644 --- a/models/fixtures/user.yml +++ b/models/fixtures/user.yml @@ -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 diff --git a/models/git/branch.go b/models/git/branch.go index f004d502ac..702d767c75 100644 --- a/models/git/branch.go +++ b/models/git/branch.go @@ -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). diff --git a/models/user/external_login_user.go b/models/user/external_login_user.go index 0e764efb9f..965b7a5ed1 100644 --- a/models/user/external_login_user.go +++ b/models/user/external_login_user.go @@ -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) -} diff --git a/models/user/search.go b/models/user/search.go index 558daf2e6a..cb90ca850e 100644 --- a/models/user/search.go +++ b/models/user/search.go @@ -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}) diff --git a/models/user/user_test.go b/models/user/user_test.go index ee456e3ce4..1c734fa926 100644 --- a/models/user/user_test.go +++ b/models/user/user_test.go @@ -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) diff --git a/modules/lfs/http_client.go b/modules/lfs/http_client.go index 3060e25754..3acd23b8f7 100644 --- a/modules/lfs/http_client.go +++ b/modules/lfs/http_client.go @@ -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 } diff --git a/modules/lfs/shared.go b/modules/lfs/shared.go index a4326b57b2..ae4bb1f86b 100644 --- a/modules/lfs/shared.go +++ b/modules/lfs/shared.go @@ -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. diff --git a/modules/log/groutinelabel.go b/modules/log/groutinelabel.go index 56d7af42da..cd5fb96d52 100644 --- a/modules/log/groutinelabel.go +++ b/modules/log/groutinelabel.go @@ -1,3 +1,5 @@ +//go:build !go1.24 + // Copyright 2022 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT diff --git a/modules/log/groutinelabel_go1.24.go b/modules/log/groutinelabel_go1.24.go new file mode 100644 index 0000000000..e849811bc2 --- /dev/null +++ b/modules/log/groutinelabel_go1.24.go @@ -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 +} diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go index f8e4f569b8..6ee10f718b 100644 --- a/modules/ssh/ssh.go +++ b/modules/ssh/ssh.go @@ -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 } diff --git a/modules/structs/repo.go b/modules/structs/repo.go index f2fe9c7ac3..36190fe36b 100644 --- a/modules/structs/repo.go +++ b/modules/structs/repo.go @@ -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 { diff --git a/options/locale/locale_ar.ini b/options/locale/locale_ar.ini index d30a27a44a..b7b3a0c883 100644 --- a/options/locale/locale_ar.ini +++ b/options/locale/locale_ar.ini @@ -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 = أضف '' +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 = البحث من خلال الكلمات المفتاحية ليس متوفر حالياً. رجاءاً تواصل مع مشرف الموقع. \ No newline at end of file +keyword_search_unavailable = البحث من خلال الكلمات المفتاحية ليس متوفر حالياً. رجاءاً تواصل مع مشرف الموقع. diff --git a/options/locale/locale_bg.ini b/options/locale/locale_bg.ini index 94d8b1db1d..924ce710e0 100644 --- a/options/locale/locale_bg.ini +++ b/options/locale/locale_bg.ini @@ -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 = окей \ No newline at end of file +test = окей diff --git a/options/locale/locale_cs-CZ.ini b/options/locale/locale_cs-CZ.ini index 7a1f9efec1..13e554281d 100644 --- a/options/locale/locale_cs-CZ.ini +++ b/options/locale/locale_cs-CZ.ini @@ -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 „“ +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 = Zapisovat: 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 = Číst: Přístup a klonování kódu v repozitáři. issues.read = Číst: Čí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ě. \ No newline at end of file +ext_issues = Přístup k odkazu v externím sledovacím systému problémů. Oprávnění jsou spravována externě. diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index 8143948ed7..710cff0cdb 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -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=„“ 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 = Lesen: Integrierte CI/CD-Pipelines und ihre Logs betrachte actions.write = Schreiben: 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 = Schreiben: Pull-Requests schließen und Metadaten wie Labels, Meilensteine, Zuweisungen, Fälligkeitsdaten und Abhängigkeiten verwalten. \ No newline at end of file +pulls.write = Schreiben: Pull-Requests schließen und Metadaten wie Labels, Meilensteine, Zuweisungen, Fälligkeitsdaten und Abhängigkeiten verwalten. diff --git a/options/locale/locale_el-GR.ini b/options/locale/locale_el-GR.ini index 1a2abd311a..a32d616814 100644 --- a/options/locale/locale_el-GR.ini +++ b/options/locale/locale_el-GR.ini @@ -1340,7 +1340,7 @@ editor.or=ή editor.cancel_lower=Ακύρωση editor.commit_signed_changes=Υποβολή υπογεγραμμένων αλλαγών editor.commit_changes=Υποβολή αλλαγών -editor.add_tmpl=Προσθήκη «» +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 \ No newline at end of file +test = ok diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index b063ae02f2..6e1524f583 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -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? Migrate repository. +new_repo_helper = A repository contains all project files, including revision history. Already hosting one elsewhere? Migrate repository. 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 Choose a license. +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 Choose a license. 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 "" +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 %s @@ -3628,7 +3629,7 @@ alpine.registry = Setup this registry by adding the url in your /etc/apk/r alpine.registry.key = Download the registry public RSA key into the /etc/apk/keys/ 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 /etc/pacman.conf : 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 ~/.composer/config.json 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 .condarc 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 .npmrc 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 :) + + diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini index ffaa5389c2..4f9d141423 100644 --- a/options/locale/locale_es-ES.ini +++ b/options/locale/locale_es-ES.ini @@ -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 "" +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 de etiquetas protegidas. -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 modificado %d ficheros con %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=%d 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 Admin teams.invite.title=Has sido invitado a unirte al equipo %s en la organización %s. 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 \ No newline at end of file +filepreview.line = Línea %[1]d en %[2]s + +[repo.permissions] +pulls.read = Lectura: Leer y crear pull requests. +releases.write = Write: Publicar, editar y eliminar lanzamientos y sus archivos. +packages.read = Lectura: Ver y descargar paquetes asignados al repositorio. +wiki.read = Lectura: Leer la wiki integrada y su historial. +issues.read = Lectura: Leer y crear incidencias y comentarios. +pulls.write = Escritura: Cerrar pull requests y gestionar metadatos como etiquetas, hitos, asignaciones, fechas de vencimiento y dependencias. +releases.read = Lectura: Ver y descagar lanzamientos. +wiki.write = Escritura: Crear, actualizar y eliminar páginas en la wiki integrada. +projects.read = Lectura: Acceso a las tablas de proyecto del repositorio. +projects.write = Escritura: 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 = Lectura: 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 = Escritura: Push al repositorio, crear ramas y tags. +issues.write = Escritura: Cerrar incidencias y gestion de metadatos como etiquetas, hitos, asignaciones, fechas de vencimiento y dependencias. +packages.write = Escritura: Publicar y eliminar paquetes asignados al repositorio. diff --git a/options/locale/locale_fa-IR.ini b/options/locale/locale_fa-IR.ini index b6cb469f54..8960be8bf4 100644 --- a/options/locale/locale_fa-IR.ini +++ b/options/locale/locale_fa-IR.ini @@ -981,7 +981,7 @@ editor.or=یا editor.cancel_lower=انصراف editor.commit_signed_changes=اعمال تغییرات امضا شده editor.commit_changes=تغییرات کامیت -editor.add_tmpl=افزودن '' +editor.add_tmpl=افزودن '<%s>' editor.commit_message_desc=توضیحی تخصصی به دلخواه اضافه نمایید… editor.signoff_desc=یک تریلر Signed-off-by توسط committer در انتهای پیام گزارش commit اضافه کنید. editor.commit_directly_to_this_branch=ثبت کامیت به صورت مستقیم در انشعاب %[1]s. @@ -2668,4 +2668,4 @@ symbolic_link=پیوند نمادین executable_file = فایل اجرایی normal_file = فایل معمولی changed_filemode = %[1] ها ← %[2] ها -directory = پوشه \ No newline at end of file +directory = پوشه diff --git a/options/locale/locale_fi-FI.ini b/options/locale/locale_fi-FI.ini index 459eaaf830..ee70bafa04 100644 --- a/options/locale/locale_fi-FI.ini +++ b/options/locale/locale_fi-FI.ini @@ -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ää "" +editor.add_tmpl=Lisää "<%s>" editor.commit_directly_to_this_branch=Commitoi suoraan %[1]s haaraan. editor.create_new_branch=Luo uusi haara tälle commitille ja aloita vetopyyntö. editor.create_new_branch_np=Luo uusi haara 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... \ No newline at end of file +runner_kind = Etsi ajajia... diff --git a/options/locale/locale_fil.ini b/options/locale/locale_fil.ini index ec7bef1dfe..08396db59f 100644 --- a/options/locale/locale_fil.ini +++ b/options/locale/locale_fil.ini @@ -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 "" +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 %[3]s 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. Mag-click dito upang makita ang mga pagbabago o Mag-commit ng mga pagbabago muli 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 = %d nabagong mga file na may %d mga pagdagdag at %d mga pagtanggal @@ -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 %s sa %s %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 = Mag-sign in 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]%[2]s` +pulls.commit_ref_at = `isinangguni ang hiling sa paghila mula sa isang commit %[2]s` wiki.last_commit_info = Binago ni %s ang pahinang ito %s issues.content_history.edited = binago issues.ref_pull_from = `isinangguni ang hiling sa paghila na ito %[4]s %[2]s` @@ -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%[2]s` -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 %[2]s` +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%[2]s 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] %[1]s%[2]s +pulls.recently_pushed_new_branches = Nagtulak sa branch na %[1]s %[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 POST request ba may tinakdang Content-Type sa target URL. Magbasa pa sa guide ng mga webhook. +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 magtulak 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 (index). +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 = HINDI MABABAWI 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 %s 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 = Babala: 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 (user), (repo) at (index) 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 = - HINDI MABABAWI ang operasyon na ito. +settings.delete_notices_2 = - Permanenteng buburahin ang %s 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 guide ng mga webhook. +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 *, inuulat ang event para sa lahat ng mga branch. Tignan ang %[2]s na dokumentasyon para sa syntax. Halimbawa: master, {master,release*}. +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 "%s" +settings.sourcehut_builds.access_token_helper = Access token na may JOBS:RW na grant. Mag-generate ng builds.sr.ht na token o ng builds.sr.ht na token na may secrets access 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 \ No newline at end of file +test = I love Forgejo and Bocchi The Rock! -- Ikuyo Kita diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index 16aa09ec9d..e45e27e7f0 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -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 "" +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 démarrage rapide dans la documentation utilisateur pour écrire votre premier workflow, puis mettre en place un Forgejo runner pour exécuter vos jobs. -runs.no_workflows.help_no_write_access = Pour en savoir plus sur les Actions Forgejo, consultez la documentation. +runs.no_workflows.help_write_access = Vous ne savez pas par où commencer avec Forgejo Actions ? Regardez la section démarrage rapide dans la documentation utilisateur pour écrire votre premier workflow, puis mettre en place un Forgejo runner pour exécuter vos jobs. +runs.no_workflows.help_no_write_access = Pour en savoir plus sur Forgejo Actions, consultez la documentation. [projects] type-1.display_name=Projet personnel @@ -4001,4 +4001,4 @@ issues.write = Écrire : Fermer des tickets et gérer les métadonnées t pulls.read = Lire : 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 :) \ No newline at end of file +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 :) diff --git a/options/locale/locale_hu-HU.ini b/options/locale/locale_hu-HU.ini index c7fec13fe6..57555b90a2 100644 --- a/options/locale/locale_hu-HU.ini +++ b/options/locale/locale_hu-HU.ini @@ -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='' 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) %[1]s ágba. editor.create_new_branch=Hozzon létre egy új ágat 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. \ No newline at end of file +keyword_search_unavailable = A kulcsszó alapú keresés jelenleg nem elérhető. Kérlek értesítsd az oldal rendszergazdáját. diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 071fe356a6..1e0044e4ce 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -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 '' +editor.add_tmpl=Tambahkan '<%s>' editor.commit_message_desc=Tambahkan deskripsi opsional yang panjang… editor.commit_directly_to_this_branch=Komitmen langsung ke %[1]s cabang. editor.create_new_branch=Membuat new branch untuk tarik komit ini mulai permintaan. @@ -1344,4 +1344,4 @@ runs.commit=Memperbuat [projects] -[git.filemode] \ No newline at end of file +[git.filemode] diff --git a/options/locale/locale_is-IS.ini b/options/locale/locale_is-IS.ini index c194da87f0..3a6e844de2 100644 --- a/options/locale/locale_is-IS.ini +++ b/options/locale/locale_is-IS.ini @@ -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ð „“ +editor.add_tmpl=Bæta við „<%s>“ editor.create_new_branch=Búðu til nýja grein og sameiningarbeiðni fyrir þetta framlag. editor.create_new_branch_np=Búðu til nýja grein fyrir þetta framlag. editor.new_branch_name_desc=Heiti nýjar greinar… @@ -1370,4 +1370,4 @@ runs.commit=Framlag [projects] -[git.filemode] \ No newline at end of file +[git.filemode] diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index f4fb34b95f..e462cc17f2 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -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 "" +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 \ No newline at end of file +filepreview.line = Linea %[1]d in %[2]s diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini index 551df52979..b0fc38d911 100644 --- a/options/locale/locale_ja-JP.ini +++ b/options/locale/locale_ja-JP.ini @@ -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 = 読み取り: リポジトリ プロジェクト ボー actions.read = 読み取り: 統合された CI/CD パイプラインとそのログを表示します。 [translation_meta] -test = これはテスト文字列です。Forgejo UI には表示されませんが、テスト目的で使用されます。早く済ませるために"ok"と入力するか楽しかった出来事を入力して下さい。そうすれば、完了することができます :) \ No newline at end of file +test = これはテスト文字列です。Forgejo UI には表示されませんが、テスト目的で使用されます。早く済ませるために"ok"と入力するか楽しかった出来事を入力して下さい。そうすれば、完了することができます :) diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index f933f96faf..5cd31445b2 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -1,6 +1,6 @@ [common] home=Sākums -dashboard=Infopanelis +dashboard=Pārskata panelis explore=Izpētīt help=Palīdzība logo=Logo @@ -17,7 +17,7 @@ page=Lapa template=Sagatave language=Valoda notifications=Paziņojumi -active_stopwatch=Aktīvā laika uzskaite +active_stopwatch=Pašreizējā laika uzskaite tracked_time_summary=Izsekojamā laika apkopojums, kas ir balstīts uz pieteikumu saraksta atlasi create_new=Izveidot… user_profile_and_more=Profils un iestatījumi… @@ -53,11 +53,11 @@ webauthn_reload=Pārlādēt repository=Glabātava organization=Organizācija -mirror=Spogulis +mirror=Spoguļglabātava new_repo=Jauns repozitorijs new_migrate=Jauna migrācija -new_mirror=Jauns spoguļserveris -new_fork=Jauns atdalīts repozitorijs +new_mirror=Jauna spoguļglabātava +new_fork=Jauns glabātavas atzarojums new_org=Jauna organizācija new_project=Jauns projekts new_project_column=Jauna kolonna @@ -71,9 +71,9 @@ your_settings=Iestatījumi all=Visi sources=Avoti -mirrors=Spoguļi +mirrors=Spoguļglabātavas collaborative=Sadarbības -forks=Atdalītie +forks=Atzarojumi activities=Aktivitāte pull_requests=Izmaiņu pieprasījumi @@ -108,7 +108,7 @@ copy_error=Kopēšana neizdevās copy_type_unsupported=Šāda veida datnes nevar ievietot starpliktuvē write=Rakstīt -preview=Priekšskatītījums +preview=Priekšskatījums loading=Notiek ielāde… error=Kļūda @@ -168,7 +168,7 @@ filter.clear = Notīrīt atlasi confirm_delete_artifact = Vai tiešām izdzēst artefaktu '%s'? [aria] -navbar=Navigācijas josla +navbar=Pāriešanas josla footer=Kājene footer.software=Par šo programmatūru footer.links=Saites @@ -241,7 +241,7 @@ path=Ceļš sqlite_helper=SQLite3 datubāzes datnes ceļš.
Jāievada pilns ceļš, ja Forgejo tiek palaists kā sistēmas pakalpojums. reinstall_error=Nevar instalēt datubāzē, kura jau satur Forgejo datus reinstall_confirm_message=Atkārtota uzstādīšana ar esošu Forgejo datubāzi var izraisīt vairākas nebūšanas. Vairumā gadījumu vajadzētu izmantot esošo "app.ini", lai palaistu Forgejo. Jāapstiprina zemāk esošais, ja ir skaidrs, kas tiek darīts: -reinstall_confirm_check_1=Dati, kas šifrēti ar SECRET_KEY, kas ir norādīts app.ini datnē, var tikt pazaudēti: lietotāji nevarēs pieteikties ar 2FA/OTP, kā arī spoguļserveri var pārstāt darboties. Ar šīs izvēles rūtiņas atzīmēšanu tiek apstiprināts, ka pašreizējā app.ini datne satur pareizu SECRET_KEY vērtību. +reinstall_confirm_check_1=Dati, kas šifrēti ar SECRET_KEY, kas ir norādīts app.ini datnē, var tikt pazaudēti: lietotāji nevarēs pieteikties ar 2FA/OTP, kā arī spoguļglabātavas var pārstāt darboties. Ar šīs izvēles rūtiņas atzīmēšanu tiek apstiprināts, ka pašreizējā app.ini datne satur pareizu SECRET_KEY vērtību. reinstall_confirm_check_2=Glabātavas un iestatījumus var būt nepieciešams atkārtoti sinhronizēt. Ar šīs izvēles rūtiņas atzīmēšanu tiek apstiprināts, ka pašrocīgi tiks veikta glabātavu aizķeru un authorized_keys datnes atkārtota sinhronizēšana, kā arī tiek apstiprināts, ka tiks nodrošināts, ka glabātavas un spoguļošanas iestatījumi ir pareizi. reinstall_confirm_check_3=Ar šo tiek apstiprināts, ka ir pilnīga pārliecība, ka Forgejo darbojas ar pareizu app.ini atrašanāš vietu un ka tiešām ir nepieciešama atkārtota uzstādīšana. Tiek apliecināts, ka iepriekšminētais var novest pie kļūmēm. err_empty_db_path=Nav norādīts SQLite3 datu bāzes ceļš. @@ -252,10 +252,10 @@ err_admin_name_is_reserved=Pārvaldītāja lietotājvārds ir nederīgs, šis li err_admin_name_pattern_not_allowed=Pārvaldītāja lietotājvārds ir nederīgs, šis lietotājvārds atbilst aizņemto lietotājvārdu paraugam err_admin_name_is_invalid=Pārvaldītāja lietotājvārds ir nederīgs -general_title=Vispārīgie iestatījumi +general_title=Vispārīgi iestatījumi app_name=Vietnes nosaukums app_name_helper=Šeit ir ievadāms sava servera nosaukums. Tas tiks attēlots katrā lapā. -repo_path=Repozitoriju glabāšanas ceļš +repo_path=Glabātavu atrašanās vieta repo_path_helper=Attālās Git glabātavas tiks saglabātas šajā mapē. lfs_path=Git LFS glabāšanas vieta lfs_path_helper=Datnes, kas pievienotas Git LFS, tiks glabātas šajā mapē. Atstāt tukšu, lai atspējotu. @@ -287,33 +287,33 @@ offline_mode=Iespējot bezsaistes režīmu offline_mode.description=Atspējot ārējos satura piegādes tīklus, lai visi resursi tiktu nodrošināti vietēji. disable_gravatar=Atspējot Gravatar disable_gravatar.description=Atspējot Gravatar un citu trešo pušu avotu izmantošanu. Kā lietotāju attēli tiks izmantoti noklusējuma attēli, līdz lietotāji augšupielādēs paši savus attēlus. -federated_avatar_lookup=Iespējot apvienotās profila bildes +federated_avatar_lookup=Iespējot apvienotos profila attēlus federated_avatar_lookup.description=Uzmeklēt profila attēlus ar Libravatar. -disable_registration=Atspējot lietotāju reģistrāciju +disable_registration=Atspējot pašreģistrēšanos disable_registration.description=Tikai servera pārvaldītāji varēs izveidot jaunus lietotāju kontus. Ir ļoti ieteicams reģistrēšanos paturēt atspējotu, ja vien nav iecerēts mitināt visiem pieejamu publisku serveri un ir gatavība tikt galā ar lielu negodprātīgu kontu skaitu. allow_only_external_registration.description=Lietotāji varēs izveidot jaunos kontus tikai izmantojot konfigurētus ārējos pakalpojumus. openid_signin=Iespējot pieteikšanos ar OpenID openid_signin.description=Ļaut lietotājiem pieteikties ar OpenID. -openid_signup=Iespējot reģistrāciju, izmantojot OpenID +openid_signup=Iespējot pašreģistrēšanos ar OpenID openid_signup.description=Ļaut lietotājiem izveidot kontus caur OpenID, ja ir iespējota pašreģistrēšanās. enable_captcha=Pieprasīt drošības kodu lietotāju reģistrācijā enable_captcha.description=Pieprasīt lietotājus atrisināt CAPTCHA, lai varētu izveidot kontus. -require_sign_in_view=Pieprasīt pieteikšanos, lai aplūkotu lapas +require_sign_in_view=Pieprasīt pieteikšanos, lai skatītu servera saturu require_sign_in_view.description=Ierobežot piekļuvi saturam tikai lietotājiem, kuri ir pieteikušies. Viesi varēs apmeklēt tikai autentificēšanās lapas. admin_setting.description=Var izvēlēties, vai izveidot pārvaldītāja kontu vai nē. Pirmais reģistrētais lietotājs automātiski kļūs par pārvaldītāju. admin_title=Pārvaldītāja konta iestatījumi admin_name=Pārvaldītāja lietotājvārds admin_password=Parole -confirm_password=Apstipriniet paroli +confirm_password=Apstiprināt paroli admin_email=E-pasta adrese install_btn_confirm=Instalēt Forgejo -test_git_failed=Kļūda pārbaudot 'git' komandu: %v +test_git_failed=Nevarēja pārbaudīt "git" komandu: %v sqlite3_not_available=Šī Forgejo versija neatbalsta SQLite3. Lūgums lejupielādēt oficiālo bināro versiju no %s (ne 'gobuild' versiju). invalid_db_setting=Nederīgi datu bāzes iestatījumi: %v invalid_db_table=Datubāzes tabula "%s" ir kļūdaina: %v invalid_repo_path=Nederīga repozitorija glabāšanas vieta: %v invalid_app_data_path=Lietojumprogrammas datu ceļš ir kļūdains: %v -run_user_not_match=Izpildes lietotājs nav pašreizējais lietotājs: %s -> %s +run_user_not_match="Izpildīt kā lietotājam" lietotājvārds neatbilst pašreizējam lietotājam: %s -> %s internal_token_failed=Neizdevās uzģenerēt iekšējās saziņas pilnvaru: %v secret_key_failed=Neizdevās uzģenerēt drošības atslēgu: %v save_config_failed=Neizdevās saglabāt konfigurāciju: %v @@ -321,16 +321,16 @@ invalid_admin_setting=Pārvaldītāja konta iestatījums ir nederīgs: %v invalid_log_root_path=Nederīgs žurnalizēšanas ceļš: %v default_keep_email_private=Pēc noklusējuma slēpt e-pasta adreses default_keep_email_private.description=Pēc noklusējuma iespējot e-pasta adreses slēpšanu jauniem lietotājiem, lai šī informāciju nenoplūstu uzreiz pēc reģistrēšanās. -default_allow_create_organization=Pēc noklusējuma ļaut veidot organizācijas +default_allow_create_organization=Pēc noklusējuma ļaut apvienību izveidošanu default_allow_create_organization.description=Pēc noklusējuma ļaut jauniem lietotājiem izveidot apvienības. Kad šī iespēja ir atspējota, pārvaldītājam būs jānodrošina apvienību izveidošanas atļauja jaunajiem lieotājiem. default_enable_timetracking=Pēc noklusējuma iespējot laika uzskaiti default_enable_timetracking.description=Pēc noklusējuma ļaut laika uzskaites iespējas izmantošanu jaunās glabātavās. -no_reply_address=Neatbildēt e-pasta adreses domēns -no_reply_address_helper=Domēns lietotāja e-pasta adresei git žurnālos, ja lietotājs izvēlas paturēt savu e-pasta adresi privātu. Piemēram, ja lietotājs ir 'janis' un domēns 'neatbildet.piemers.lv', tad e-pasta adrese būs 'janis@neatbildet.piemers.lv'. -password_algorithm=Paroles jaucējsummas algoritms +no_reply_address=Slēpjamo e-pasta adrešu domēna vārds +no_reply_address_helper=Domēna vārds lietotājiem ar paslēptu e-pasta adresi. Piemēram, lietotājs 'janis' tiks ierakstīts žurnālā kā 'janis@noreply.example.org', ja kā paslēpto e-pasta adrešu domēna vārds ir iestatīts 'noreply.example.org'. +password_algorithm=Paroles jaucējkoda algoritms invalid_password_algorithm=Kļūdaina paroles jaucējfunkcija password_algorithm_helper=Norādiet paroles jaucējalgoritmu. Algoritmi atšķirās pēc prasībām pret resursiem un stipruma. Argon2 algoritms ir drošs, bet tam nepieciešams daudz operatīvās atmiņas, līdz ar ko tas var nebūt piemērots sistēmām ar maz pieejamajiem resursiem. -enable_update_checker=Iespējot jaunu versiju paziņojumus +enable_update_checker=Iespējot atjauninājumu pārbaudītāju env_config_keys=Vides konfigurācija env_config_keys_prompt=Šie vides mainīgie tiks pielietoti arī konfigurācijas datnē: smtp_from_invalid = "Sūtīt e-pastu kā" adrese ir nederīga @@ -342,17 +342,17 @@ app_slogan_helper = Šeit ir ievadāms servera sauklis. Atstāt tukšu, lai atsp enable_update_checker_helper_forgejo = Tas laiku pa laikam pārbaudīs, vai ir pieejamas jaunas Forgejo versijas, izmantojot release.forgejo.org TXT DNS ierakstu. [home] -uname_holder=Lietotājvārds vai e-pasts +uname_holder=Lietotājvārds vai e-pasta adrese password_holder=Parole switch_dashboard_context=Mainīt pārskata paneļa kontekstu -my_repos=Repozitoriji +my_repos=Glabātavas show_more_repos=Parādīt vairāk repozitorijus… collaborative_repos=Sadarbības repozitoriji my_orgs=Apvienības my_mirrors=Mani spoguļi view_home=Skatīties %s search_repos=Meklēt repozitoriju… -filter=Citi filtri +filter=Citas atlases filter_by_team_repositories=Filtrēt pēc komandas repozitorijiem feed_of=`"%s" plūsma` @@ -369,7 +369,7 @@ show_only_public=Attēlot tikai publiskos issues.in_your_repos=Jūsu repozitorijos [explore] -repos=Repozitoriji +repos=Glabātavas users=Lietotāji organizations=Organizācijas search=Meklēt @@ -387,8 +387,8 @@ org_no_results=Netika atrasta neviena organizācija, kas atbilstu kritērijiem. code_no_results=Netika atrasts pirmkods, kas atbilstu kritērijiem. code_search_results=`Meklēšanas rezultāti "%s"` code_last_indexed_at=Pēdējo reizi indeksēts %s -relevant_repositories_tooltip=Repozitoriju, kas ir atdalīti vai kuriem nav tēmas, ikonas un apraksta ir paslēpti. -relevant_repositories=Tikai būtiskie repozitoriji tiek rādīti, pārādīt nefiltrētus rezultātus. +relevant_repositories_tooltip=Glabātavas, kas ir atzarojumi vai kam nav temata, ikonas un apraksta, ir paslēptas. +relevant_repositories=Tiek rādītas tikai atbilstošās glabātavas, rādīt neatsijātu iznākumu. stars_one = %d zvaigzne stars_few = %d zvaignznes forks_one = %d atzarojums @@ -407,10 +407,10 @@ forgot_password_title=Aizmirsta parole forgot_password=Aizmirsi paroli? sign_up_now=Nepieciešams konts? Reģistrējies tagad. sign_up_successful=Konts tika veiksmīgi izveidots. Laipni lūdzam! -confirmation_mail_sent_prompt=Jauns apstiprināšanas e-pasts ir nosūtīts uz %s, pārbaudies savu e-pasta kontu tuvāko %s laikā, lai pabeigtu reģistrācijas procesu. +confirmation_mail_sent_prompt=Jauns apstiprināšanas e-pasta ziņojums tika nosūtīts uz %s. Lūgums pārbaudīt savu iesūtni nākamajās %s, lai pabeigtu reģistrēšanos. Ja e-pasta adrese ir nepareiza, ir iespējams pieteikties un pieprasīt vēl viena apstiprināšanas e-pasta ziņojuma nosūtīšanu uz citu adresi. must_change_password=Atjaunināt savu paroli allow_password_change=Pieprasīt lietotājam mainīt paroli (ieteicams) -reset_password_mail_sent_prompt=Apstiprināšanas e-pasts tika nosūtīts uz %s. Pārbaudiet savu e-pasta kontu tuvāko %s laikā, lai pabeigtu paroles atjaunošanas procesu. +reset_password_mail_sent_prompt=Apstiprināšanas e-pasta ziņojums tika nosūtīts uz %s. Lūgums pārbaudīt savu iesūtni un atvērt tajā esošo saiti tuvākajās %s, lai pabeigtu konta atkopšanu. active_your_account=Aktivēt savu kontu account_activated=Konts ir aktivēts prohibit_login=Konta darbība ir apturēta @@ -457,7 +457,7 @@ email_domain_blacklisted=Nav atļauts reģistrēties ar šādu e-pasta adresi. authorize_application=Autorizēt lietotni authorize_redirect_notice=Jūs tiksiet nosūtīts uz %s, ja autorizēsiet šo lietotni. authorize_application_created_by=Šo lietotni izveidoja %s. -authorize_application_description=Ja piešķirsiet tiesības, tā varēs piekļūt un mainīt Jūsu konta informāciju, ieskaitot privātos repozitorijus un organizācijas. +authorize_application_description=Ja nodrošināsi piekļuvi, tā varēs piekļūt visai konta informācijai un mainīt to, tajā skaitā privātās glabātavas un apvienības. authorize_title=Pilnvarot "%s" piekļuvi Tavam kontam? authorization_failed=Autorizācija neizdevās authorization_failed_desc=Pilnvarošana neizdevās, jo tika noteikts nederīgs pieprasījums. Lūgums sazināties ar lietotnes, no kuras tika veikts pilnvarošanas pieprasījums, uzturētāju. @@ -478,7 +478,7 @@ change_unconfirmed_email = Ja reģistrēšanās laikā tika iesniegta nepareiza [mail] view_it_on=Aplūkot %s reply=vai atbildiet uz e-pastu -link_not_working_do_paste=Ja saite nestrādā, mēģiniet to nokopēt un atvērt pārlūkā. +link_not_working_do_paste=Saite nedarbojas? Jāmēģina tā ievietot starpliktuvē un ielīmēt pārlūka adrešu joslā. hi_user_x=Sveiki %s, activate_account=Lūgums aktivēt savu kontu @@ -506,35 +506,35 @@ issue_assigned.pull=@%[1]s piešķīra jums izmaiņu pieprasījumu %[2]s repozit issue_assigned.issue=@%[1]s piešķīra pieteikumu %[2]s glabātavā %[3]s. issue.x_mentioned_you=@%s pieminēja Jūs: -issue.action.force_push=%[1]s veica piespiedu izmaiņu iesūtīšanu atzarā %[2]s no revīzijas %[3]s uz %[4]s. -issue.action.push_1=@%[1]s iesūtīja %[3]d revīziju atzarā %[2]s -issue.action.push_n=@%[1]s iesūtīja %[3]d revīzijas atzarā %[2]s +issue.action.force_push=%[1]s piespiedu kārtā aizgādāja izmaiņas %[2]s no %[3]s uz %[4]s. +issue.action.push_1=@%[1]s aizgādāja %[3]d iesūtījumu uz %[2]s +issue.action.push_n=@%[1]s aizgādāja %[3]d iesūtījumus uz %[2]s issue.action.close=@%[1]s aizvēra #%[2]d. issue.action.reopen=@%[1]s atkārtoti atvēra #%[2]d. issue.action.merge=@%[1]s iekļāva #%[2]d zarā %[3]s. issue.action.approve=@%[1]s apstiprināja izmaiņu pieprasījumu. issue.action.reject=@%[1]s pieprasīja izmaiņas šajā izmaiņu pieprasījumā. -issue.action.review=@%[1]s komentēja šo izmaiņu pieprasījumu. +issue.action.review=@%[1]s pievienoja piebildi šim izmaiņu pieprasījumam. issue.action.review_dismissed=@%[1]s atmeta pēdējo %[2]s recenziju šim izmaiņu pieprasījumam. issue.action.ready_for_review=@%[1]s atzīmēja šo izmaiņu pieprasījumu, ka tas ir gatavs recenzēšanai. issue.action.new=@%[1]s izveidoja #%[2]d. issue.in_tree_path=Ceļā %s: -release.new.subject=Jauns laidiens %s repozitorijā %s -release.new.text=@%[1]s izveidoja jaunu laidienu %[2]s repozitorijā %[3]s +release.new.subject=Jauns laidiens %s glabātavā %s +release.new.text=@%[1]s izveidoja jaunu laidienu %[2]s glabātavā %[3]s release.title=Nosaukums: %s release.note=Piezīmes: release.downloads=Lejupielādes: release.download.zip=Izejas kods (ZIP) release.download.targz=Izejas kods (TAR.GZ) -repo.transfer.subject_to=%s vēlas pārsūtīt repozitoriju "%s" organizācijai %s -repo.transfer.subject_to_you=`%s vēlas Jums pārsūtīt repozitoriju "%s"` +repo.transfer.subject_to=%s vēlas nodot glabātavu "%s" %s +repo.transfer.subject_to_you=%s vēlas nodot glabātavu "%s" repo.transfer.to_you=Jums repo.transfer.body=Ja vēlaties to noraidīt vai apstiprināt, tad apmeklējiet saiti %s. repo.collaborator.added.subject=%s pievienoja Jūs repozitorijam %s -repo.collaborator.added.text=Jūs tikāt pievienots kā līdzstrādnieks repozitorijam: +repo.collaborator.added.text=Tevi pievienoja kā līdzdalībnieku glabātavā: team_invite.subject=%[1]s uzaicināja Jūs pievienoties organizācijai %[2]s team_invite.text_1=%[1]s uzaicināja Jūs pievienoties komandai %[2]s organizācijā %[3]s. @@ -550,7 +550,7 @@ modify=Atjaunināt [form] UserName=Lietotājvārds -RepoName=Repozitorija nosaukums +RepoName=Glabātavas nosaukums Email=E-pasta adrese Password=Parole Retype=Apstipriniet paroli @@ -994,6 +994,13 @@ visibility.limited_tooltip=Redzams tikai autentificētiem lietotājiem visibility.private=Privāts visibility.private_tooltip=Redzams tikai organizāciju, kurām esi pievienojies, dalībniekiem change_password = Mainīt paroli +keep_activity_private.description = Tavas publiskās darbības būs redzamas tikai Tev un servera pārvaldītājiem. +update_hints = Atjaunināt norādes +update_hints_success = Norādes tika atjauninātas. +user_block_success = Lietotājs tika sekmīgi liegts. +user_unblock_success = Lietotāja liegums tika sekmīgi atcelts. +blocked_since = Liegts kopš %s +blocked_users_none = Nav liegto lietotāju. [repo] new_repo_helper=Glabātava satur visas projekta datnes, tajā skaitā izmaiņu vēsturi. Jau tiek izmantota kaut kur citur? Pārnest glabātavu. @@ -1010,16 +1017,16 @@ visibility=Redzamība visibility_description=Tikai organizācijas īpašnieks vai tās biedri, kam ir tiesības, varēs piekļūt šim repozitorijam. visibility_helper=Padarīt repozitoriju privātu visibility_helper_forced=Vietnes pārvaldītājs ir noteicis, ka jaunām glabātavām ir jābūt privātām. -visibility_fork_helper=(Šīs vērtības maiņa ietekmēs arī visus atdalītos repozitorijus.) +visibility_fork_helper=(Šīs vērtības maiņa ietekmēs visus atzarojumus.) clone_helper=Nepieciešama palīdzība klonēšanā? Apmeklē palīdzības sadaļu. -fork_repo=Atdalīt repozitoriju -fork_from=Atdalīt no -already_forked=Repozitorijs %s jau ir atdalīts -fork_to_different_account=Atdalīt uz citu kontu -fork_visibility_helper=Atdalītam repozitorijam nav iespējams mainīt tā redzamību. -fork_branch=Atzars, ko klonēt atdalītajā repozitorijā +fork_repo=Izveidot glabātavas atzarojumu +fork_from=Izveidot atzarojumu no +already_forked=Jau ir atzarojums no %s +fork_to_different_account=Izveidot atzarojumu citā kontā +fork_visibility_helper=Atzarotas glabātavas redzamību nevar mainīt. +fork_branch=Zars, kas ir klonējams atzarojumā all_branches=Visi atzari -fork_no_valid_owners=Šim repozitorijam nevar izveidot atdalītu repozitoriju, jo tam nav spēkā esošu īpašnieku. +fork_no_valid_owners=Šai glabātavai nevar izveidot atzarojumus, jo tai nav derīgu īpašnieku. use_template=Izmantot šo sagatavi clone_in_vsc=Atvērt VS Code download_zip=Lejupielādēt ZIP @@ -1036,7 +1043,7 @@ issue_labels=Iezīmes issue_labels_helper=Atlasīt iezīmju kopu license=Licence license_helper=Atlasīt licences datni -license_helper_desc=Licence nosaka, ko citi var un ko nevar darīt ar kodu. Nav skaidrs, kura projektam ir atbilstošākā? Licences izvēle var palīdzēt. +license_helper_desc=Licence nosaka, ko citi var un ko nevar darīt ar kodu. Nav skaidrs, kura ir vispiemērotākā projektam? Skatīt Licences izvēle. readme=LASIMANI readme_helper=Atlasīt README datnes sagatavi readme_helper_desc=Šajā vietā ir iespējams detalizēti aprakstīt šo projektu. @@ -1053,8 +1060,8 @@ default_branch_helper=Noklusētais atzars nosaka pamata atzaru uz kuru tiks veid mirror_prune=Izmest mirror_prune_desc=Noņemt novecojušas attālās izsekošanas atsauces mirror_interval=Starplaiks starp spoguļošanu (derīgas laika vienības ir 'h', 'm', 's'). 0, lai atslēgtu atkārtojošos sinhronizēšanu. (Mazākais pieļaujamais laika posms: %s) -mirror_interval_invalid=Nekorekts spoguļošanas intervāls. -mirror_sync_on_commit=Sinhronizēt, kad revīzijas tiek iesūtītas +mirror_interval_invalid=Starplaiks starp spoguļošanu nav derīgs. +mirror_sync_on_commit=Sinhronizēt, kad tiek aizgādāti iesūtījumi mirror_address=Klonēt no URL mirror_address_desc=Pieslēgšanās rekvizītus norādiet autorizācijas sadaļā. mirror_address_url_invalid=Norādītais URL ir nederīgs. Visas URL daļas ir jānorāda pareizi. @@ -1070,7 +1077,7 @@ mirror_password_help=Nomainiet lietotāju, lai izdzēstu saglabāto paroli. watchers=Novērotāji stargazers=Zvaigžņdevēji stars_remove_warning=Šis repozitorijs tiks noņemts no visām izlasēm. -forks=Atdalītie repozitoriji +forks=Atzarojumi reactions_more=un vēl %d unit_disabled=Vietnes pārvaldītājs ir atspējojis šo glabātavas sadaļu. language_other=Citas @@ -1120,7 +1127,7 @@ template.invalid=Norādiet sagataves repozitoriju archive.title=Šī glabātava ir arhivēta. Tajā var apskatīt datnes, un to var klonēt, bet nevar aizgādāt izmaiņas vai izveidot pieteikumus vai izmaiņu pieprasījumus. archive.title_date=Šī glabātava tika arhivēta %s. Tajā var apskatīt datnes, un to var klonēt, bet nevar aizgādāt izmaiņas vai izveidot pieteikumus vai izmaiņu pieprasījumus. archive.issue.nocomment=Šī glabātava ir arhivēta. Pieteikumiem nevar pievienot piebildes. -archive.pull.nocomment=Repozitorijs ir arhivēts. Izmaiņu pieprasījumiem nevar pievienot jaunus komentārus. +archive.pull.nocomment=Šī glabātava ir arhivēta. Izmaiņu pieprasījumiem nevar pievienot piebildes. form.reach_limit_of_creation_1=Sasniegts Jums noteiktais %d repozitorija ierobežojums. form.reach_limit_of_creation_n=Sasniegts Jums noteiktais %d repozitoriju ierobežojums. @@ -1130,7 +1137,7 @@ form.name_pattern_not_allowed=Repozitorija nosaukums "%s" nav atļauts. need_auth=Autorizācija migrate_options=Migrācijas opcijas migrate_service=Migrācijas serviss -migrate_options_mirror_helper=Šis repozitorijs būs spogulis +migrate_options_mirror_helper=Šī glabātava būs spoguļglabātava migrate_options_lfs=Pārcelt LFS datnes migrate_options_lfs_endpoint.label=LFS galapunkts migrate_options_lfs_endpoint.description=Migrācija mēģinās izmantot attālināto URL, lai noteiktu LFS serveri. Var norādīt arī citu galapunktu, ja repozitorija LFS dati ir izvietoti citā vietā. @@ -1154,7 +1161,7 @@ migrate.permission_denied_blocked=Nav iespējams ievietot no neatļautiem saimni migrate.invalid_local_path=Nederīgs vietējais ceļš. Tas nepastāv vai nenorāda uz mapi. migrate.invalid_lfs_endpoint=LFS galapunkts nav korekts. migrate.failed=Migrācija neizdevās: %v -migrate.migrate_items_options=Piekļuves pilnvara ir nepieciešams, lai migrētu papildus datus +migrate.migrate_items_options=Ir nepieciešama piekļuves pilnvara, lai pārceltu papildu vienumus migrated_from=Migrēts no %[2]s migrated_from_fake=Migrēts no %[1]s migrate.migrate=Migrēt no %s @@ -1180,18 +1187,18 @@ migrate.migrating_pulls=Migrē izmaiņu pieprasījumus migrate.cancel_migrating_title=Atcelt migrāciju migrate.cancel_migrating_confirm=Vai patiešam vēlaties atcelt šo migrāciju? -mirror_from=spogulis no -forked_from=atdalīts no +mirror_from=spoguļota no +forked_from=atzarots no generated_from=ģenerēts no -fork_from_self=Nav iespējams atdalīt repozitoriju, kuram esat īpašnieks. -fork_guest_user=Piesakieties, lai atdalītu repozitoriju. +fork_from_self=Nevar izveidot sev piederošas glabātavas atzarojumu. +fork_guest_user=Jāpiesakās, lai izveidotu šīs glabātavas atzarojumu. watch_guest_user=Piesakieties, lai sekotu šim repozitorijam. star_guest_user=Piesakieties, lai pievienotu šo repozitoriju izlasei. unwatch=Nevērot watch=Vērot unstar=Noņemt zvaigznīti star=Pievienot izlasei -fork=Atdalīts +fork=Atzarojums download_archive=Lejupielādēt repozitoriju more_operations=Vairāk darbību @@ -1262,13 +1269,13 @@ commit_graph.monochrome=Melnbalts commit_graph.color=Krāsa commit.contained_in=Šī revīzija ir iekļauta: commit.contained_in_default_branch=Šī revīzija ir daļa no noklusētā atzara -commit.load_referencing_branches_and_tags=Ielādēt atzarus un tagus, kas atsaucas uz šo revīziju +commit.load_referencing_branches_and_tags=Ielādēt zarus un birkas, kas atsaucas uz šo iesūtījumu blame=Vainot download_file=Lejupielādēt datni normal_view=Parastais skats line=rinda lines=rindas -from_comment=(komentārs) +from_comment=(piebilde) editor.add_file=Pievienot datni editor.new_file=Jauna datne @@ -1290,7 +1297,8 @@ editor.or=vai editor.cancel_lower=Atcelt editor.commit_signed_changes=Iesūtīt parakstītas izmaiņas editor.commit_changes=Iesūtīt izmaiņas -editor.add_tmpl=Pievienot '' +editor.add_tmpl=Pievienot '<%s>' +editor.add_tmpl.filename = datnes nosaukums editor.add=Pievienot %s editor.update=Atjaunot %s editor.delete=Dzēst %s @@ -1332,7 +1340,7 @@ editor.upload_file_is_locked=Datni "%s" ir aizslēdza %s. editor.upload_files_to_dir=Augšupielādēt datnes "%s" editor.cannot_commit_to_protected_branch=Nav atļauts veikt izmaiņas aizsargātam atzaram "%s". editor.no_commit_to_branch=Nevar apstiprināt revīzijas atzarā: -editor.user_no_push_to_branch=Lietotājs nevar iesūtīt izmaiņas šajā atzarā +editor.user_no_push_to_branch=Lietotājs nevar aizgādāt izmaiņas uz zaru editor.require_signed_commit=Atzarā var iesūtīt tikai parakstītas revīzijas editor.cherry_pick=Izlasīt %s uz: editor.revert=Atgriezt %s uz: @@ -1509,14 +1517,14 @@ issues.filter_sort.latest=Jaunākie issues.filter_sort.oldest=Vecakie issues.filter_sort.recentupdate=Nesen atjaunotās issues.filter_sort.leastupdate=Vissenāk atjaunotās -issues.filter_sort.mostcomment=Visvairāk komentētās -issues.filter_sort.leastcomment=Vismazāk komentētās +issues.filter_sort.mostcomment=Visvairāk piebilžu +issues.filter_sort.leastcomment=Vismazāk piebilžu issues.filter_sort.nearduedate=Tuvākais termiņš issues.filter_sort.farduedate=Tālākais termiņš issues.filter_sort.moststars=Visvairāk atzīmētie issues.filter_sort.feweststars=Vismazāk atzīmētie -issues.filter_sort.mostforks=Visvairāk atdalītie -issues.filter_sort.fewestforks=Vismazāk atdalītie +issues.filter_sort.mostforks=Visvairāk atzarojumu +issues.filter_sort.fewestforks=Vismazāk atzarojumu issues.keyword_search_unavailable=Meklēšana pēc atslēgvārda pašreiz nav pieejama. Lūgums sazināties ar vietnes administratoru. issues.action_open=Atvērt issues.action_close=Aizvērt @@ -1538,10 +1546,10 @@ issues.next=Nākamā issues.open_title=Atvērta issues.closed_title=Slēgta issues.draft_title=Melnraksts -issues.num_comments_1=%d komentārs -issues.num_comments=%d komentāri -issues.commented_at=`komentēja %s` -issues.delete_comment_confirm=Vai patiešām vēlaties dzēst šo komentāru? +issues.num_comments_1=%d piebilde +issues.num_comments=%d piebildes +issues.commented_at=`pievienoja piebildi %s` +issues.delete_comment_confirm=Vai tiešām izdzēst šo piebildi? issues.context.copy_link=Kopēt saiti issues.context.quote_reply=Atbildēt citējot issues.context.reference_issue=Atsaukties jaunā pieteikumā @@ -1551,10 +1559,10 @@ issues.no_content=Nav sniegts apraksts. issues.close=Aizvērt pieteikumu issues.comment_pull_merged_at=saplidināta revīzija %[1]s atzarā %[2]s %[3]s issues.comment_manually_pull_merged_at=pašrocīgi iekļāva iesūtījumu %[1]s zarā %[2]s %[3]s -issues.close_comment_issue=Komentēt un aizvērt +issues.close_comment_issue=Aizvērt ar piebildi issues.reopen_issue=Atvērt atkārtoti -issues.reopen_comment_issue=Komentēt un atvērt atkārtoti -issues.create_comment=Komentēt +issues.reopen_comment_issue=Atkārtoti atvērt ar piebildi +issues.create_comment=Pievienot piebildi issues.closed_at=`aizvēra šo pieteikumu %[2]s` issues.reopened_at=`atkārtoti atvēra šo pieteikumu %[2]s` issues.commit_ref_at=`atsaucās uz šo pieteikumu iesūtījumā %[2]s` @@ -1617,21 +1625,21 @@ issues.unpin_issue=Atspraust pieteikumu issues.max_pinned=Nevar piespraust vairāk pieteikumu issues.pin_comment=piesprauda šo %s issues.unpin_comment=atsprauda šo %s -issues.lock=Slēgt komentēšanu +issues.lock=Slēgt apspriešanu issues.unlock=Atslēgt apspriešanu issues.lock.unknown_reason=Nevar aizslēgt pieteikumu ar nezināmu iemeslu. issues.lock_duplicate=Pieteikumu nevar aizslēgt divreiz. issues.unlock_error=Nevar atslēgt pieteikumu, kas nav aizslēgts. -issues.lock_with_reason=slēdza ar iemeslu %s un ierobežoja komentāru pievienošanu tikai līdzstrādniekiem %s -issues.lock_no_reason=slēdza un ierobežoja komentāru pievienošanu tikai līdzstrādniekiem %s +issues.lock_with_reason=aizslēdza kā %s un padarīja sarunu pieejamu tikai līdzdalībniekiem %s +issues.lock_no_reason=aizslēdza apspriešanu un padarīja to pieejamu tikai līdzdalībniekiem %s issues.unlock_comment=atslēdza šo apspriešanu %s issues.lock_confirm=Slēgt issues.unlock_confirm=Atslēgt issues.lock.notice_1=- Citi lietotāji šim pieteikumam nevar pievienot jaunas piebildes. -issues.lock.notice_2=- Jums un citiem līdzstrādniekiem ar piekļuvi šim repozitorijam tiks saglabāta iespēja pievienot komentārus. +issues.lock.notice_2=- Tu un citi līdzdalībnieki ar piekļuvi šai glabātavai joprojām var pievienot citiem redzamas piebildes. issues.lock.notice_3=- Šo pieteikumu vienmēr būs iespēja atkal atslēgt. -issues.unlock.notice_1=- Ikviens varēs atkal pievienot jaunus komentārus. -issues.unlock.notice_2=- Jūs vienmēr varat atkal slēgt komentēšanu. +issues.unlock.notice_1=- Ikviens atkal varēs pievienot jaunas piebildes. +issues.unlock.notice_2=- Šo pieteikumu vienmēr būs iespējams atkal aizslēgt. issues.lock.reason=Slēgšanas iemesls issues.lock.title=Slēgt šī pieteikuma sarunu. issues.unlock.title=Atslēgt šī pieteikuma apspriešanu. @@ -1666,7 +1674,7 @@ issues.error_modifying_due_date=Neizdevās izmainīt izpildes termiņu. issues.error_removing_due_date=Neizdevās noņemt izpildes termiņu. issues.push_commit_1=iesūtīja %d revīziju %s issues.push_commits_n=iesūtīja %d revīzijas %s -issues.force_push_codes=`veica piespiedu izmaiņu iesūtīšanu atzarā %[1]s no revīzijas %[2]s uz %[4]s %[6]s` +issues.force_push_codes=`veica piespiedu aizgādāšanu zarā %[1]s no %[2]s to %[4]s %[6]s` issues.force_push_compare=Salīdzināt issues.due_date_form=dd.mm.yyyy issues.due_date_form_add=Pievienot izpildes termiņu @@ -1716,21 +1724,21 @@ issues.review.approve=apstiprināja izmaiņas %s issues.review.comment=izskatīja %s issues.review.dismissed=atmeta %s recenziju %s issues.review.dismissed_label=Atmesta -issues.review.left_comment=atstāja komentāru -issues.review.content.empty=Nepieciešams norādīt komentāru par prasītajām izmaiņām. +issues.review.left_comment=pievienoja piebildi +issues.review.content.empty=Ir nepieciešams pievienot piebildi par pieprasīto(ajām) izmaiņu(ām). issues.review.reject=pieprasīja izmaiņas %s issues.review.wait=tika pieprasīta recenzija %s issues.review.add_review_request=pieprasīja recenziju no %s %s issues.review.remove_review_request=noņema recenzijas pieprasījumu no %s %s issues.review.remove_review_request_self=atteicās recenzēt %s issues.review.pending=Nav iesūtīts -issues.review.pending.tooltip=Šis komentārs nav redzams citiem lietotājiem. Lai padarītu neiesūtītos komentārus pieejamus citiem, nospiediet "%s" -> "%s/%s/%s" lapas augšpusē. +issues.review.pending.tooltip=Šī piebilde pagaidām nav redzama citiem lietotājiem. Lai iesniegtu savas ierindotās piebildes, jāatlasa "%s" -> "%s/%s/%s" lapas augšdaļā. issues.review.review=Recenzija issues.review.reviewers=Recenzenti issues.review.outdated=Novecojis -issues.review.outdated_description=Saturs ir mainījies kopš šī komentāra pievienošanas -issues.review.option.show_outdated_comments=Rādīt novecojušus komentārus -issues.review.option.hide_outdated_comments=Paslēpt novecojušus komentārus +issues.review.outdated_description=Pēc šīs piebildes pievienošanas ir mainījies saturs +issues.review.option.show_outdated_comments=Rādīt novecojušas piebildes +issues.review.option.hide_outdated_comments=Paslēpt novecojušas piebildes issues.review.show_outdated=Rādīt novecojušu issues.review.hide_outdated=Paslēpt novecojušu issues.review.show_resolved=Rādīt atrisināto @@ -1746,7 +1754,7 @@ issues.content_history.created=izveidots issues.content_history.delete_from_history=Dzēst no vēstures issues.content_history.delete_from_history_confirm=Vai dzēst no vēstures? issues.content_history.options=Iespējas -issues.reference_link=Atsaucas uz: %s +issues.reference_link=Atsauce: %s compare.compare_base=pamata compare.compare_head=salīdzināt @@ -1756,7 +1764,7 @@ pulls.new=Jauns izmaiņu pieprasījums pulls.view=Skatīties izmaiņu pieprasījumu pulls.compare_changes=Jauns izmaiņu pieprasījums pulls.allow_edits_from_maintainers=Atļaut labojumus no uzturētājiem -pulls.allow_edits_from_maintainers_desc=Lietotāji ar rakstīšanas tiesībām bāzes atzarā, drīkst iesūtīt izmaiņas šajā atzarā +pulls.allow_edits_from_maintainers_desc=Lietotāji ar rakstīšanas piekļuvi pamata zaram var aizgādāt izmaiņas arī šajā zarā pulls.allow_edits_from_maintainers_err=Atjaunošana neizdevās pulls.compare_changes_desc=Jāatlasa zars, kurā iekļaut izmaiņas, un zars, no kura tās atgādāt. pulls.has_viewed_file=Apskatīta @@ -1800,7 +1808,7 @@ pulls.cannot_merge_work_in_progress=Šis izmaiņu pieprasījums ir atzīmēts, k pulls.still_in_progress=Joprojām notiek izstrāde? pulls.add_prefix=Pievienot %s prefiksu pulls.remove_prefix=Noņemt %s prefiksu -pulls.data_broken=Izmaiņu pieprasījums ir bojāts, jo dzēsta informācija no atdalītā repozitorija. +pulls.data_broken=Šis izmaiņu pieprasījums ir bojāts trūkstošas atzarojuma informācijas dēļ. pulls.files_conflicted=Šī izmaiņu pieprasījuma izmaiņas nav saderīgas ar mērķa zaru. pulls.is_checking=Notiek apvienošanas nesaderību pārbaude. Pēc brīža jāmēģina vēlreiz. pulls.is_ancestor=Zars jau ir pilnībā iekļauts mērķa zarā. Nav izmaiņu, ko apvienot. @@ -1851,7 +1859,7 @@ pulls.head_out_of_date=Apvienošana neizdevās: apvienošanas laikā galotne tik pulls.has_merged=Neizdevās: izmaiņu pieprasījums tika iekļauts, nevar to darīt atkārtoti vai mainīt mērķa zaru. pulls.push_rejected=Aizgādāšana neizdevās: aizgādāšana tika noraidīta. Jāpārskata šīs glabātavas Git aizķeres. pulls.push_rejected_summary=Pilns noraidīšanas ziņojums -pulls.push_rejected_no_message=Apvienošana neizdevās: aizgādāšana tika noraidīta, bet serveris neatgrieza ziņojumu. Jāpārskata šīs glabātavas Git aizķeres +pulls.push_rejected_no_message=Aizgādāšana neizdevās: aizgādāšana tika noraidīta, bet serveris neatgrieza ziņojumu. Jāpārskata šīs glabātavas Git aizķeres pulls.open_unmerged_pull_exists=`Nevar veikt atkārtotas atvēršanas darbību, jo jau pastāv neapstiprināts izmaiņu pieprasījums (#%d) ar tieši tādām pašām pazīmēm.` pulls.status_checking=Dažas pārbaudes vēl tiek veiktas pulls.status_checks_success=Visas pārbaudes ir veiksmīgas @@ -2019,8 +2027,8 @@ activity.no_git_activity=Šajā laika periodā nav notikušas nekādas izmaiņas activity.git_stats_exclude_merges=Neskaitot apvienošanas iesūtījumus, activity.git_stats_author_1=%d autors activity.git_stats_author_n=%d autori -activity.git_stats_pushed_1=iesūtīja -activity.git_stats_pushed_n=iesūtīja +activity.git_stats_pushed_1=aizgādāja +activity.git_stats_pushed_n=aizgādāja activity.git_stats_commit_1=%d revīziju activity.git_stats_commit_n=%d revīzijas activity.git_stats_push_to_branch=atzarā %s un @@ -2062,35 +2070,35 @@ settings.collaboration.undefined=Nedefinētas settings.hooks=Tīmekļa aizķeres settings.githooks=Git aizķeres settings.basic_settings=Pamatiestatījumi -settings.mirror_settings=Spoguļservera iestatījumi +settings.mirror_settings=Spoguļglabātavas iestatījumi settings.mirror_settings.docs=Iestatiet, ka tiks viekta automātiska revīziju, tagu un atzaru sinhronizācija ar citu repozitoriju. -settings.mirror_settings.docs.disabled_pull_mirror.instructions=Iestatīt projektu, lai uz citu glabātavu automātiski aizgādātu iesūtījumus, birkas un zarus. Vietnes pārvaldītājs ir atspējojis izgūšanas spoguļserverus. +settings.mirror_settings.docs.disabled_pull_mirror.instructions=Iestatīt projektu, lai uz citu glabātavu automātiski aizgādātu iesūtījumus, birkas un zarus. Vietnes pārvaldītājs ir atspējojis izgūšanas spoguļglabātavas. settings.mirror_settings.docs.disabled_push_mirror.instructions=Iestatiet, ka visas revīzijas, tagi un atzari tiks automātiski pārņemti no cita repozitorija. settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=Pašlaik to var izdarīt tikai, izmantojot, sadaļu "Jauna migrācija". Sīkākai informācijai, skatieties: -settings.mirror_settings.docs.disabled_push_mirror.info=Vietnes pārvaldītājs ir atspējojis iesūtīšanas spoguļserverus. -settings.mirror_settings.docs.no_new_mirrors=Šis repozitorijs spoguļo izmaiņas uz vai no cita repozitorija. Pašlaik vairāk nav iespējams izveidot jaunus spoguļa repozitorijus. -settings.mirror_settings.docs.can_still_use=Lai arī nav iespējams mainīt esošos vai izveidot jaunus spoguļa repozitorijus, esošie turpinās strādāt. -settings.mirror_settings.docs.pull_mirror_instructions=Lai ietatītu atvilkšanas spoguli, sekojiet instrukcijām: -settings.mirror_settings.docs.more_information_if_disabled=Vairāk par piegādāšanas un saņemšanas spoguļiem var uzzināt šeit: -settings.mirror_settings.docs.doc_link_title=Kā spoguļot repozitorijus? +settings.mirror_settings.docs.disabled_push_mirror.info=Vietnes pārvaldītājs ir atspējojis iesūtīšanas spoguļglabātavas. +settings.mirror_settings.docs.no_new_mirrors=Šī glabātava spoguļo izmaiņas uz vai no citas glabātavas. Lūgums paturēt prātā, ka pašlaik nevar izveidot jaunas spoguļglabātavas. +settings.mirror_settings.docs.can_still_use=Lai arī nevar labot esošās spoguļglabātavas vai izveidot jaunas, joprojām var izmantot esošās spoguļglabātavas. +settings.mirror_settings.docs.pull_mirror_instructions=Lai iestatītu atgādāšanas spoguļglabātavu, lūgums pārskatīt: +settings.mirror_settings.docs.more_information_if_disabled=Vairāk par aizgādāšanas un izgūšanas spoguļglabātavām var uzzināt šeit: +settings.mirror_settings.docs.doc_link_title=Kā spoguļot glabātavas? settings.mirror_settings.docs.doc_link_pull_section=dokumentācijas nodaļā "Pulling from a remote repository". settings.mirror_settings.docs.pulling_remote_title=Atvilkt no attāla repozitorija -settings.mirror_settings.mirrored_repository=Spoguļotais repozitorijs +settings.mirror_settings.mirrored_repository=Spoguļotā glabātava settings.mirror_settings.direction=Virziens settings.mirror_settings.direction.pull=Izmaiņu saņemšana -settings.mirror_settings.direction.push=Izmaiņu nosūtīšana +settings.mirror_settings.direction.push=Aizgādāšana settings.mirror_settings.last_update=Pēdējās izmaiņas -settings.mirror_settings.push_mirror.none=Nav konfigurēts iesūtīšanas spogulis +settings.mirror_settings.push_mirror.none=Nav pievienotu aizgādāšanas spoguļglabātavu settings.mirror_settings.push_mirror.remote_url=Git attālās glabātavas URL -settings.mirror_settings.push_mirror.add=Pievienot aizgādāšanas spoguļserveri -settings.mirror_settings.push_mirror.edit_sync_time=Labot spoguļa sinhronizācijas intervālu +settings.mirror_settings.push_mirror.add=Pievienot aizgādāšanas spoguļglabātavu +settings.mirror_settings.push_mirror.edit_sync_time=Labot spoguļglabātavas sinhronizēšanas starplaiku settings.sync_mirror=Sinhronizēt tagad settings.pull_mirror_sync_in_progress=Pašlaik tiek saņemtas izmaiņas no attālā %s. -settings.push_mirror_sync_in_progress=Pašlaik tiek piegādātas izmaiņas uz attālo %s. +settings.push_mirror_sync_in_progress=Pašlaik tiek aizgādātas izmaiņas uz attālo %s. settings.site=Mājas lapa settings.update_settings=Saglabāt iestatījumus -settings.update_mirror_settings=Atjaunināt spoguļservera iestatījumus +settings.update_mirror_settings=Atjaunināt spoguļglabātavas iestatījumus settings.branches.switch_default_branch=Mainīt noklusējuma zaru settings.branches.update_default_branch=Atjaunināt noklusējuma zaru settings.branches.add_new_rule=Pievienot jaunu kārtulu @@ -2140,15 +2148,15 @@ settings.admin_enable_close_issues_via_commit_in_any_branch=Aizvērt pieteikumu settings.danger_zone=Bīstamais apgabals settings.new_owner_has_same_repo=Jaunajam īpašniekam jau ir repozitorijs ar šādu nosaukumu. settings.convert=Pārveidot par parastu glabātavu -settings.convert_desc=Jūs varat nomainīt šo spoguli uz parastu repozitoriju. Šī darbība ir neatgriezeniska. -settings.convert_notices_1=Šī darbība mainīs spoguli uz parastu repozitoriju un ir neatgriezeniska. +settings.convert_desc=Šo spoguļglabātavu var pārveidot par parastu glabātavu. To nevar atsaukt. +settings.convert_notices_1=Šī darbība pārveidos spoguļglabātavu par parastu glabātavu un nav atsaucama. settings.convert_confirm=Pārveidot glabātavu -settings.convert_succeed=Spogulis tika izmainīts par parastu repozitoriju. +settings.convert_succeed=Spoguļglabātava tika pārveidota par parastu glabātavu. settings.convert_fork=Pārveidot par parastu glabātavu -settings.convert_fork_desc=Jūs varat nomainīt šo atdalīto repozitoriju kā neatkarīgu repozitoriju. Šī darbība ir neatgriezeniska. -settings.convert_fork_notices_1=Šī darbība mainīs atdalīto repozitoriju uz neatkarīgu repozitoriju un ir neatgriezeniska. +settings.convert_fork_desc=Šo atzarojumu var pārveidot par parastu glabātavu. To nevar atdarīt. +settings.convert_fork_notices_1=Šī darbība pārveidos atzarojumu par parastu glabātavu, un tā nav atsaucama. settings.convert_fork_confirm=Pārveidot glabātavu -settings.convert_fork_succeed=Atdalītais repozitorijs tika izmainīts par neatkarīgu repozitoriju. +settings.convert_fork_succeed=Atzarojums tika pārveidots par parastu glabātavu. settings.transfer.title=Mainīt īpašnieku settings.transfer.rejected=Repozitorija īpašnieka maiņas pieprasījums tika noraidīts. settings.transfer.success=Repozitorija īpašnieka maiņa veiksmīga. @@ -2174,10 +2182,10 @@ settings.trust_model.collaborator.long=Līdzstrādnieka: Uzticēties līdzstrād settings.trust_model.collaborator.desc=Derīgi līdzstrādnieku paraksti tiks atzīmēti kā "uzticami" (neatkarīgi no tā vai tie atbilst revīzijas iesūtītājam vai nē). Citos gadījumos derīgi paraksti tiks atzīmēti kā "neuzticami", ja paraksts atbilst revīzijas iesūtītājam vai "nesakrītošs", ja neatbilst. settings.trust_model.committer=Revīzijas iesūtītāja settings.trust_model.committer.long=Revīzijas iesūtītāja: Uzticēties parakstiem, kas atbilst revīzijas iesūtītājiem (Šis atbilst GitHub uzvedībai un piespiedīs Forgejo parakstītām revīzijām norādīt Forgejo kā revīzijas iesūtītāju) -settings.trust_model.committer.desc=Derīgi paraksti tiks atzīmēti kā "uzticami", ja tie atbilst revīzijas iesūtītājam, citos gadījumos tie tiks atzīmēti kā "nesakrītoši". Šis nozīmē, ka Forgejo būs kā revīzijas iesūtītājs parakstītām revīzijām, kur īstais revīzijas iesūtītājs tiks atīzmēts revīzijas komentāra beigās ar tekstu Co-authored-by: un Co-committed-by:. Noklusētajai Forgejo atslēgai ir jāatbilst lietotājam datubāzē. +settings.trust_model.committer.desc=Derīgi paraksti tiks atzīmēti ar "uzticams" tikai tad, ja tie atbildīs iesūtītājam, pretējā gadījumā tie tiks atzīmēti ar "neatbilstošs". Tas nozīmē, ka Forgejo būs iesūtītājs parakstītiem iesūtījumiem, patieso iesūtītāju iesūtījumā atzīmējot ar Co-authored-by: un Co-committed-by: noslēgumu. Noklusējuma Forgejo atslēgai ir jāatbilst lietotājam datu bāzē. settings.trust_model.collaboratorcommitter=Līdzstrādnieka un revīzijas iesūtītāja settings.trust_model.collaboratorcommitter.long=Līdzstrādnieka un revīzijas iesūtītāja: Uzticēties līdzstrādnieku parakstiem, kas atbilst revīzijas iesūtītājam -settings.trust_model.collaboratorcommitter.desc=Derīgi līdzstrādnieku paraksti tiks atzīmēti kā "uzticami", ja tie atbilst revīzijas iesūtītājam, citos gadījumos tie tiks atzīmēti kā "neuzticami", ja paraksts atbilst revīzijas iesūtītajam, vai "nesakrītoši", ja neatbilst. Šis nozīmē, ka Forgejo būs kā revīzijas iesūtītājs parakstītām revīzijām, kur īstais revīzijas iesūtītājs tiks atīzmēts revīzijas komentāra beigās ar tekstu Co-Authored-By: un Co-Committed-By:. Noklusētajai Forgejo atslēgai ir jāatbilst lietotājam datubāzē. +settings.trust_model.collaboratorcommitter.desc=Derīgi šīs glabātavas līdzdalībnieku paraksti tiks atzīmēti ar "uzticams", ja tie atbildīs iesūtītājam. Pretējā gadījumā derīgi paraksti tiks atzīmēti ar "neuzticams" un ar "neatbilstošs", ja neatbilst. Tas nozīmē, ka Forgejo tiks atzīmēts kā iesūtītājs parakstītiem iesūtījumiem, patieso iesūtītāju iesūtījumā atzīmējot ar Co-authored-by: un Co-committed-by: noslēgumu. Noklusējuma Forgejo atslēgai ir jāatbilst lietotājam datubāzē. settings.wiki_delete=Izdzēst vikivietnes datus settings.wiki_delete_desc=Vikivietnes repozitorija dzēšana ir neatgriezeniska un nav atsaucama. settings.wiki_delete_notices_1=- Šī darbība dzēsīs un atspējos repozitorija %s vikivietni. @@ -2187,7 +2195,7 @@ settings.delete=Izdzēst šo glabātavu settings.delete_desc=Repozitorija dzēšana ir neatgriezeniska un nav atsaucama. settings.delete_notices_1=- Šī darbība ir NEATGRIEZENISKA. settings.delete_notices_2=- Šī darbība neatgriezeniski izdzēsīs glabātavu %s, tostarp kodu, pieteikumus, piebildes, vikivietnes datus un līdzdalībnieku iestatījumus. -settings.delete_notices_fork_1=- Visi atdalītie repozitoriju pēc dzēšanas kļūs neatkarīgi. +settings.delete_notices_fork_1=- Pēc izdzēšanas šīs glabātavas atzarojumi kļūs neatkarīgi. settings.deletion_success=Repozitorijs tika izdzēsts. settings.update_settings_success=Repozitorija iestatījumi tika saglabāti. settings.update_settings_no_unit=Repozitorijam ir jābūt piešķirtām vismaz kādām tiesībām. @@ -2246,7 +2254,7 @@ settings.slack_color=Krāsa settings.discord_username=Lietotājvārds settings.discord_icon_url=Ikonas URL settings.event_desc=Izsaukt notikumiem: -settings.event_push_only=Izmaiņu nosūtīšanas notikumi +settings.event_push_only=Aizgādāšanas notikumi settings.event_send_everything=Visus notikumus settings.event_choose=Izvēlēties notikumus… settings.event_header_repository=Repozitorija notikumi @@ -2254,14 +2262,14 @@ settings.event_create=Izveidot settings.event_create_desc=Atzara vai taga izveidošana. settings.event_delete=Dzēst settings.event_delete_desc=Atzars vai tags izdzēsts. -settings.event_fork=Atdalīts -settings.event_fork_desc=Repozitorijs atdalīts. +settings.event_fork=Izveidot atzarojumu +settings.event_fork_desc=Izveidots glabātavas atzarojums. settings.event_wiki=Vikivietni settings.event_wiki_desc=Vikivietnes lapa izveidota, pārsaukta, labota vai dzēsta. settings.event_release=Laidiens settings.event_release_desc=Publicēts, atjaunots vai dzēsts laidiens repozitorijā. -settings.event_push=Izmaiņu nosūtīšana -settings.event_push_desc=Git izmaiņu nosūtīšana uz repozitoriju. +settings.event_push=Aizgādāšana +settings.event_push_desc=Git aizgādāšana uz glabātavu. settings.event_repository=Repozitorijs settings.event_repository_desc=Repozitorijs izveidots vai dzēsts. settings.event_header_issue=Pieteikumu notikumi @@ -2284,10 +2292,10 @@ settings.event_pull_request_label=Izmaiņu pieprasījuma etiķetes settings.event_pull_request_label_desc=Izmaiņu pieprasījumam pievienotas vai noņemtas etiķetes. settings.event_pull_request_milestone=Izmaiņu pieprasījuma atskaites punkts settings.event_pull_request_milestone_desc=Izmaiņu pieprasījumam pievienots vai noņemts atskaites punkts. -settings.event_pull_request_comment=Izmaiņu pieprasījuma komentārs -settings.event_pull_request_comment_desc=Izmaiņu pieprasījuma komentārs pievienots, labots vai dzēsts. +settings.event_pull_request_comment=Piebildes +settings.event_pull_request_comment_desc=Izmaiņu pieprasījuma piebilde izveidota, labota vai izdzēsta. settings.event_pull_request_review=Izmaiņu pieprasījums recenzēts -settings.event_pull_request_review_desc=Izmaiņu pieprasījums apstiprināts, noraidīts vai atstāts komentārs. +settings.event_pull_request_review_desc=Izmaiņu pieprasījums apstiprināts, noraidīts vai pievienota izskatīšanas piebilde. settings.event_pull_request_sync=Izmaiņu pieprasījums sinhronizēts settings.event_pull_request_sync_desc=Izmaiņu pieprasījums sinhronizēts. settings.event_pull_request_review_request=Izmaiņu pieprasījuma recenzīju pieprasīšana @@ -2297,7 +2305,7 @@ settings.event_pull_request_merge=Izmaiņu pieprasījuma iekļaušana settings.event_package=Pakotne settings.event_package_desc=Repozitorijā izveidota vai dzēsta pakotne. settings.branch_filter=Atzaru filtrs -settings.branch_filter_desc=Atzaru ierobežojumi izmaiņu iesūtīšanas, zaru izveidošanas vai dzēšanas notikumiem, izmantojot, glob šablonu. Ja norādīts tukšs vai *, tiks nosūtīti notikumi no visiem zariem. Skatieties %[2]s pieraksta dokumentāciju. Piemērs: master, {master,release*}. +settings.branch_filter_desc=Zaru baltais saraksts aizgādāšanas, zaru izveidošanas un izdzēšanas notikumiem, kas ir norādīts kā glob paraugs. Ja tukšs vai *, tiks nosūtīti visu zaru notikumi. Par pierakstu skatīt%[2]s dokumentācijā. Piemēri: main, {main,release*}. settings.authorization_header=Autorizācijas galvene settings.authorization_header_desc=Tiks iekļauta kā autorizācijas galvenei pieprasījumiem, ja ir norādīta. Piemēram: %s. settings.active=Aktīvs @@ -2333,7 +2341,7 @@ settings.deploy_keys=Izvietot atslēgas settings.add_deploy_key=Pievienot izvietošanas atslēgu settings.deploy_key_desc=Izvietošanas atslēgām ir lasīšanas piekļuve repozitorijam. settings.is_writable=Iespējot rakstīšanas piekļuvi -settings.is_writable_info=Atļaut šai izvietošanas atslēgai nosūtīt izmaiņas uz repozitoriju. +settings.is_writable_info=Atļaut šai izvietošanas atslēgai aizgādāt uz glabātavu. settings.no_deploy_keys=Pagaidām nav nevienas izvietošanas atslēgas. settings.title=Virsraksts settings.deploy_key_content=Saturs @@ -2353,9 +2361,9 @@ settings.protected_branch_can_push_no=Jūs nevarat nosūtīt izmaiņas settings.branch_protection=Atzara aizsardzība atzaram '%s' settings.protect_this_branch=Iespējot atzara aizsardzību settings.protect_this_branch_desc=Neļauj atzara dzēšanu, kā arī ierobežo izmaiņu iesūtīšanu un sapludināšanu šajā atzarā. -settings.protect_disable_push=Neļaut iesūtīt izmaiņas -settings.protect_disable_push_desc=Izmaiņu iesūtīšana šajā atzarā netiks atļauta. -settings.protect_enable_push=Atļaut iesūtīt izmaiņas +settings.protect_disable_push=Atspējot aizgādāšanu +settings.protect_disable_push_desc=Aizgādāšana šajā zarā netiks ļauta. +settings.protect_enable_push=Iespējot aizgādāšanu settings.protect_enable_push_desc=Ikviens, kam ir rakstīšanas tiesības uz šo repozitoriju, varēs iesūtīt izmaiņas šajā atzarā (piespiedu izmaiņu iesūtīšanas netiks atļauta). settings.protect_enable_merge=Iespējot apvienošanu settings.protect_enable_merge_desc=Ikvienam ar rakstīšanas tiesībām būs ļauts apvienot izmaiņu pieprasījumus ar šo zaru. @@ -2381,7 +2389,7 @@ settings.protect_no_valid_status_check_patterns=Nav korekta statusa pārbaudes settings.protect_required_approvals=Nepieciešamie apstiprinājumi settings.protect_required_approvals_desc=Atļaut iekļaut izmaiņu pieprasījumu tikai ar pietiekamu daudzumu apstiprinošu izskatījumu. settings.protect_approvals_whitelist_enabled=Ierobežot apstiprinājumus norādītajiem lietotājiem vai komandām -settings.protect_approvals_whitelist_enabled_desc=Tikai recenzijas no šiem lietotājiem vai komandām tiks skaitītas, lai pārbaudītu nepieciešamo apstiprinājumu skaitu. Bez šīs pazīmes, recenzijas no ikviena lietotāja, kam ir rakstīšanas piekļuve, tiks skaitītas, lai pārbaudītu nepieciešamo apstiprinājumu skaitu. +settings.protect_approvals_whitelist_enabled_desc=Tikai iepriekšnorādītiem lietotāju vai komandu izskatīšanas tiks ieskaitītas nepieciešamo apstiprinājumu skaitā. Bez iepriekšnorādīta apstiprinājumu izskatītāju saraksta izskatīšanas no ikviena, kam ir rakstīšanas piekļuve, tiks ieskaitītas nepieciešamo apstiprinājumu skaitā. settings.protect_approvals_whitelist_users=Lietotāji, kas var veikt izskatīšanu settings.protect_approvals_whitelist_teams=Komandas, kas var veikt izskatīšanu settings.dismiss_stale_approvals=Pieprasīt apstiprinājumus jaunākajām izmaiņām @@ -2435,10 +2443,10 @@ settings.matrix.room_id=Istabas ID settings.matrix.message_type=Ziņojuma veids settings.archive.button=Arhivēt glabātavu settings.archive.header=Arhivēt šo glabātavu -settings.archive.text=Glabātavas arhivēšana padarīs to tikai lasāmu. Tas nebūs redzams infopanelī. Neviens (pat ne Tu) nevarēs izveidot jaunus iesūtījumus vai atvērt pieteikumus vai izmaiņu pieprasījumus. +settings.archive.text=Glabātavas arhivēšana padarīs to tikai lasāmu. Tas nebūs redzams pārskata panelī. Neviens (pat ne Tu) nevarēs izveidot jaunus iesūtījumus vai atvērt pieteikumus vai izmaiņu pieprasījumus. settings.archive.success=Repozitorijs veiksmīgi arhivēts. settings.archive.error=Arhivējot repozitoriju radās neparedzēta kļūda. Pārbaudiet kļūdu žurnālu, lai uzzinātu sīkāk. -settings.archive.error_ismirror=Nav iespējams arhivēt spoguļotus repozitorijus. +settings.archive.error_ismirror=Nevar arhivēt spoguļotu glabātavu. settings.archive.branchsettings_unavailable=Atzaru iestatījumi nav pieejami, ja repozitorijs ir arhivēts. settings.archive.tagsettings_unavailable=Tagu iestatījumi nav pieejami, ja repozitorijs ir arhivēts. settings.unarchive.button=Atcelt repozitorija arhivēšanu @@ -2474,10 +2482,10 @@ settings.lfs_pointers.accessible=Pieejams lietotājam settings.lfs_pointers.associateAccessible=Saistīt pieejamos %d OID'us settings.rename_branch_failed_exist=Nevar pārdēvēt zaru, jo mērķa zars %s jau pastāv. settings.rename_branch_failed_not_exist=Nevar pārdēvēt zaru %s, jo tas nepastāv. -settings.rename_branch_success=Atzars %s tika veiksmīgi pārsaukts par %s. +settings.rename_branch_success=Zars %s tika veiksmīgi pārdēvēts par %s. settings.rename_branch_from=no vecā atzara nosaukuma settings.rename_branch_to=jaunais atzara nosaukums -settings.rename_branch=Pārsaukt atzaru +settings.rename_branch=Pārdēvēt zaru diff.browse_source=Pārlūkot avotu diff.parent=vecāks @@ -2512,17 +2520,17 @@ diff.show_more=Parādīt vairāk diff.load=Ielādēt atšķirības diff.generated=ģenerēts diff.vendored=ārējs -diff.comment.add_line_comment=Pievienot rindas komentāru -diff.comment.placeholder=Ievadiet komentāru +diff.comment.add_line_comment=Pievienot piebildi par rindu +diff.comment.placeholder=Ierakstīt piebildi diff.comment.markdown_info=Tiek nodrošināta formatēšana ar Markdown. -diff.comment.add_single_comment=Pievienot vienu komentāru -diff.comment.add_review_comment=Pievienot komentāru +diff.comment.add_single_comment=Pievienot vienu piebildi +diff.comment.add_review_comment=Pievienot piebildi diff.comment.start_review=Sākt recenziju diff.comment.reply=Atbildēt diff.review=Pabeigt izskatīšanu diff.review.header=Iesūtīt recenziju -diff.review.placeholder=Recenzijas komentārs -diff.review.comment=Komentēt +diff.review.placeholder=Izskatīšanas piezīmes +diff.review.comment=Pievienot piebildi diff.review.approve=Apstiprināt diff.review.self_reject=Izmaiņu pieprasījuma autors nevar pieprasīt izmaiņas savam izmaiņu pieprasījumam diff.review.reject=Pieprasīt izmaiņas @@ -2538,7 +2546,7 @@ diff.hide_file_tree=Paslēpt datņu koku releases.desc=Pārvaldiet projekta versijas un lejupielādes. release.releases=Laidieni -release.detail=Laidiena papildus informācija +release.detail=Informācija par laidienu release.tags=Tagi release.new_release=Jauns laidiens release.draft=Melnraksts @@ -2606,19 +2614,19 @@ branch.protected_deletion_failed=Atzars "%s" ir aizsargāts. To nevar dzēst. branch.default_deletion_failed=Atzars "%s" ir noklusētais atzars un to nevar dzēst. branch.restore=Atjaunot zaru "%s" branch.download=Lejupielādēt zaru "%s" -branch.rename=Pārsaukt zaru "%s" +branch.rename=Pārdēvēt zaru "%s" branch.search=Meklēt atzarā branch.included_desc=Šis atzars ir daļa no noklusēta atzara branch.included=Iekļauts branch.create_new_branch=Izveidot jaunu atzaru no atzara: branch.confirm_create_branch=Izveidot atzaru branch.warning_rename_default_branch=Tiks pārsaukts noklusētais atzars. -branch.rename_branch_to=Pārsaukt "%s" uz: +branch.rename_branch_to=Pārdēvēt "%s" par: branch.confirm_rename_branch=Pārdēvēt atzaru branch.create_branch_operation=Izveidot atzaru branch.new_branch=Izveidot jaunu atzaru branch.new_branch_from=`Izveidot jaunu atzaru no "%s"` -branch.renamed=Atzars %s tika pārsaukts par %s. +branch.renamed=Zars %s tika pārdēvēts par %s. tag.create_tag=Izveidot tagu %s tag.create_tag_operation=Izveidot tagu @@ -2640,12 +2648,94 @@ error.csv.unexpected=Nevar atveidot šo datni, jo tā satur neparedzētu rakstz error.csv.invalid_field_count=Nevar atveidot šo datni, jo tā satur nepareizu lauku skaitu %d. rindā. n_release_one = %s laidiens n_release_few = %s laidieni +issues.new.assign_to_me = Piešķirt man +admin.flags_replaced = Glabātavas iezīmes aizvietotas +admin.failed_to_replace_flags = Neizdevās aizvietot glabātavas iezīmes +admin.manage_flags = Pārvaldīt iezīmes +admin.enabled_flags = Glabātavā iespējotās iezīmes: +n_commit_one = %s iesūtījums +editor.push_out_of_date = Aizgādājums izskatās novecojis. +file_follow = Sekot simboliskajai saitei +stars = Zvaigznes +vendored = Piegādāta +subscribe.pull.guest.tooltip = Jāpiesakās, lai abonētu šo izmaiņu pieprasījumu. +mirror_sync = sinhronizēta +editor.invalid_commit_mail = Nederīga e-pasta adrese iesūtījuma izveidošanai. +form.string_too_long = Šī virkne ir garāka par %d rakstzīmēm. +issues.filter_sort.relevance = Atbilstība +generated = Izveidota +commits.search_branch = Šis zars +editor.commit_id_not_matching = Datne labošanas laikā tika izmainīta. Jāiesūta jaunā zarā, tad jāapvieno. +object_format = Objektu veidols +n_tag_one = %s birka +n_tag_few = %s birkas +n_branch_few = %s zari +n_branch_one = %s zars +object_format_helper = Glabātavas objektu veidols. Vēlak to nevarēs mainīt. SHA1 ir vissaderīgākais. +commits.renamed_from = Pārdēvēts no %s +rss.must_be_on_branch = Jāatrodas zarā, lai iegūtu RSS barotni. +admin.update_flags = Atjaunināt iezīmes +open_with_editor = Atvērt ar %s +n_commit_few = %s iesūtījumi +no_eol.text = Nav EOL +size_format = %[1]s: %[2]s; %[3]s: %[4]s +mirror_public_key = Publiskā SSH atslēga +mirror_use_ssh.text = Izmantot SSH autentificēšanos +mirror_use_ssh.helper = Forgejo spoguļos glabātavu ar Git un SSH un izveidos atslēgu pāri, kad tiks atlasīta šī iespēja. Jānodrošina, ka izveidotais atslēgu pāris ir pilnvarots aizgādāt mērķa glabātavā. Nevarēs izmantot pilnvarošanu ar paroli, kad šis tiek atlasīts. +mirror_use_ssh.not_available = SSH autentificēšanās nav pieejama. +mirror_denied_combination = Nevar izmantot autentificēšanos ar publiskās atslēgas un paroles apvienojumu. +migrate.forgejo.description = Pārcelt datus no codeberg.org vai citiem Fogejo serveriem. +subscribe.issue.guest.tooltip = Jāpiesakās, lai abonētu šo pieteikumu. +project = Projekti +no_eol.tooltip = Šī datne nesatur noslēdzošo rindas beigu rakstzīmi. +commits.browse_further = Pārlūkot tālāk +issues.edit.already_changed = Neizdevās saglabāt pieteikuma izmaiņas. Izskatās, ka saturu jau ir mainījis kāds cits lietotājs. Lūgums atsvaidzināt lapu un mēģināt labot vēlreiz, lai izvairītos no izmaiņu pārrakstīšanas +settings.wiki_rename_branch_main_desc = Pārdēvēt vikivietnes iekšēji izmantoto zaru par "%s". Šī izmaiņa ir neatgriezeniska, un to nevar atsaukt. +settings.wiki_rename_branch_main_notices_2 = Tas neatgriezeniski pārdēvēs %s glabātavas vikivietnes iekšējo zaru. Esošos atvērumus būs nepieciešams atjaunināt. +settings.units.units = Vienības +settings.pull_mirror_sync_quota_exceeded = Pārsniegts ierobežojums, izmaiņas netiks atgādātas. +settings.new_owner_blocked_doer = Jaunais īpašnieks ir liedzis Tevi. +settings.enter_repo_name = Jāievada īpašnieka vārds un glabātavas nosaukums tieši tā, kā parādīts: +settings.transfer_quota_exceeded = Jaunais īpašnieks (%s) ir pārsniedzis ierobežojumu. Glabātava netika nodota. +settings.wiki_globally_editable = Ļaut jebkuram veikt labojumus vikivietnē +settings.wiki_rename_branch_main = Mainīt vikivietnes zara nosaukumu +settings.units.add_more = Iespējot vēl +settings.units.overview = Pārskats +settings.confirmation_string = Apstiprinājuma virkne +settings.transfer.button = Nodot īpašumtiesības +settings.transfer.modal.title = Nodot īpašumtiesības +settings.mirror_settings.push_mirror.copy_public_key = Ievietot publisko atslēgu starpliktuvē +pulls.agit_explanation = Izveidots ar AGit darbplūsmu. AGit ļauj līdzalībniekiem ieteikt izmaiņas ar "git push" bez atzarojuma vai jauna zara izveidošanas. +settings.wiki_rename_branch_main_notices_1 = Šo darbību NEVAR atsaukt. +release.download_count_few = %s lejupielādes +settings.rename_branch_failed_protected = Nevar pārdēvēt zaru %s, jo tas ir aizsargāts zars. +release.type_external_asset = Ārējs līdzeklis +release.hide_archive_links = Paslēpt automātiski izveidotos arhīvus +settings.archive.mirrors_unavailable = Spoguļglabātavas nav pieejamas, ja glabātava ir arhivēta. +release.type_attachment = Pielikums +settings.enforce_on_admins_desc = Glabātavas pārvaldītāji šo kārtulu nevar apiet. +settings.matrix.access_token_helper = Šim nolūkam ir ieteicams izveidot atsevišķu Matrix kontu. Piekļuves pilnvaru var iegūt Element tīmekļa klientā (privātā/inkognito cilnē) > Lietotāja izvēlne (augšējais kreisais stūris) > Visi iestatījumi > Palīdzība un par > Papildu > Piekļuves pilnvara (tieši zem mājasservera URL). Jāaizver privātā/inkognito cilne (atteikšanās padarītu pilnvaru nederīgu). +settings.ignore_stale_approvals = Neņemt vērā novecojušus apstiprinājumus +release.system_generated = Šis pielikums ir izveidots automātiski. +settings.ignore_stale_approvals_desc = Neskaitīt apstiprinājumus, kas tika veikti vecākiem iesūtījumiem (novecojušas apskates), kopējā izmaiņu pieprasījuma apstiprinājumu skaitā. Neattiecas, ja novecojušas apskates jau ir atmestas. +settings.enforce_on_admins = Uzspiest šo kārtulu glabātavas pārvaldītājiem +release.download_count_one = %s lejupielāde +release.hide_archive_links_helper = Šajā laidienā paslēpt automātiski izveidotos pirmkoda arhīvus. Piemēram, ja tiek augšupielādēts savs. +diff.git-notes.add = Pievienot piezīmi +diff.git-notes.remove-header = Noņemt piezīmi +diff.git-notes.remove-body = Šī piezīme tiks noņemta. +settings.confirm_wiki_branch_rename = Pārdēvēt vikivietnes zaru +settings.matrix.room_id_helper = Istabas Id var iegūt Element tīmekļa klientā > Istabas iestatījumi > Papildu > Iekšējais istabas Id. Piemērs: %s. +settings.mirror_settings.pushed_repository = Aizgādāšanas glabātava [graphs] component_loading=Ielādē %s... component_loading_failed=Nevarēja ielādēt %s component_loading_info=Šis var aizņemt kādu brīdi… component_failed_to_load=Atgadījās neparedzēta kļūda. +code_frequency.what = koda biežums +recent_commits.what = neseni iesūtījumi +contributors.what = līdzdalības [org] org_name_holder=Organizācijas nosaukums @@ -2691,8 +2781,8 @@ settings.visibility.private_shortname=Privāta settings.update_settings=Atjaunināt iestatījumus settings.update_setting_success=Organizācijas iestatījumi tika saglabāti. -settings.change_orgname_prompt=Piezīme: organizācijas nosaukuma maiņa izmainīs arī organizācijas URL un atbrīvos veco nosaukumu. -settings.change_orgname_redirect_prompt=Vecais vārds pārsūtīs uz jauno, kamēr vien tas nebūs izmantots. +settings.change_orgname_prompt=Piezīme: apvienības nosaukuma maiņa izmainīs arī apvienības URL un atbrīvos veco nosaukumu. +settings.change_orgname_redirect_prompt=Vecais nosaukums pārvirzīs, līdz tas būs izmantots. settings.update_avatar_success=Organizācijas attēls tika saglabāts. settings.delete=Dzēst organizāciju settings.delete_account=Dzēst šo organizāciju @@ -2749,7 +2839,7 @@ teams.delete_team_success=Komanda tika izdzēsta. teams.read_permission_desc=Šai komandai ir lasīšanas tiesības: dalībnieki var skatīties un klonēt komandas repozitorijus. teams.write_permission_desc=Šai komandai ir rakstīšanas tiesības: dalībnieki var lasīt un nosūtīt izmaiņas repozitorijiem. teams.admin_permission_desc=Šī komanda nodrošina pārvaldītāja piekļuvi: dalībnieki var lasīt no, aizgādāt izmaiņas uz un pievienot līdzdalībniekus komandas glabātavām. -teams.create_repo_permission_desc=Papildus šī komanda piešķirt Veidot repozitorijus tiesības: komandas biedri var veidot jaunus repozitorijus šajā organizācijā. +teams.create_repo_permission_desc=Papildus šī komanda nodrošina atļauju Izveidot glabātavu: dalībnieki apvienībā var izveidot jaunas glabātavas. teams.repositories=Komandas repozitoriji teams.search_repo_placeholder=Meklēt repozitorijā… teams.remove_all_repos_title=Noņemt visus komandas repozitorijus @@ -2770,9 +2860,11 @@ teams.all_repositories_admin_permission_desc=Šī komanda piešķirt adm teams.invite.title=Tu esi uzaicināts pievienoties organizācijas %[2]s komandai %[1]s. teams.invite.by=Uzaicināja %s teams.invite.description=Nospiediet pogu zemāk, lai pievienotos komandai. +open_dashboard = Atvērt pārskata paneli +follow_blocked_user = Tu nevari sekot šai apvienībai, jo tā ir liegusi Tevi. [admin] -dashboard=Infopanelis +dashboard=Pārskata panelis self_check=Pašpārbaude identity_access=Identitāte un piekļuve users=Lietotāju konti @@ -2791,7 +2883,7 @@ last_page=Pēdējā total=Kopā: %d settings=Pārvaldīšanas iestatījumi -dashboard.new_version_hint=Ir pieejama Forgejo versija %s, pašreizējā versija %s. Papildus informācija par jauno versiju ir pieejama mājas lapā. +dashboard.new_version_hint=Ir pieejama Forgejo %s, pašlaik darbojas %s. Vairāk informācijas ir atrodama emuārā. dashboard.statistic=Kopsavilkums dashboard.operations=Uzturēšanas darbības dashboard.system_status=Sistēmas statuss @@ -2819,7 +2911,7 @@ dashboard.delete_missing_repos=Izdzēst visas glabātavas, kurām trūkst Git da dashboard.delete_missing_repos.started=Uzsākts uzdevums visu glabātavu, kurām trūkst Git datņu, izdzēšanai. dashboard.delete_generated_repository_avatars=Dzēst ģenerētos repozitoriju attēlus dashboard.sync_repo_branches=Sinhronizācija ar dabubāzi izlaida atzarus no git datiem -dashboard.update_mirrors=Atjaunot spoguļus +dashboard.update_mirrors=Atjaunināt spoguļglabātavas dashboard.repo_health_check=Pārbaudīt visu repozitoriju veselību dashboard.check_repo_stats=Pārbaudīt visu repozitoriju statistiku dashboard.archive_cleanup=Dzēst repozitoriju vecos arhīvus @@ -2915,7 +3007,7 @@ users.cannot_delete_self=Nevar izdzēst sevi users.still_own_repo=Lietotājam pieder repozitoriji, tos sākumā ir nepieciešams izdzēst vai mainīt to īpašnieku. users.still_has_org=Šis lietotājs ir vienas vai vairāku organizāciju biedrs, lietotāju sākumā ir nepieciešams pamest šīs organizācijas vai viņu no tām ir jāizdzēš. users.purge=Attīrīt lietotu -users.purge_help=Piespiedu dzēst lietotāju un visus tā repozitorijus, organizācijas un pakotnes. Arī visi lietotāja komentāri tiks dzēsti. +users.purge_help=Veikt lietotāja un visu tam piederošo glabātavu, apvienību un pakotņu piespiedu izdzēšanu. Tiks izdzēstas visas piebildes un lietotāja izveidotie pieteikumi. users.still_own_packages=Šim lietotājam pieder viena vai vairākas pakotnes, tās nepieciešams izdzēst. users.deletion_success=Lietotāja konts veiksmīgi izdzēsts. users.reset_2fa=Noņemt 2FA @@ -3055,7 +3147,7 @@ auths.oauth2_emailURL=E-pasta adreses URL auths.skip_local_two_fa=Izlaist vietējo divu faktoru autorizāciju auths.skip_local_two_fa_helper=Atstājot neatzīmētu, nozīmē, ka lokālajiem lietotājiem, kam ir uzstādīta divu faktoru autorizācija, būs nepieciešams iziet tās pārbaudi, lai autorizētos auths.oauth2_tenant=Nomnieks -auths.oauth2_scopes=Papildus tvērumi +auths.oauth2_scopes=Papildu tvērumi auths.oauth2_required_claim_name=Nepieciešamās prasības nosaukums auths.oauth2_required_claim_name_helper=Uzstādiet šo nosaukumu, lai ierobežotu, kas var autorizēties, izmantojot, šo avotu, ar norādīto prasības nosaukumu un vertību auths.oauth2_required_claim_value=Nepieciešamās prasības vērtība @@ -3190,7 +3282,7 @@ config.mailer_smtp_port=SMTP ports config.mailer_user=Lietotājs config.mailer_use_sendmail=Izmantot Sendmail config.mailer_sendmail_path=Ceļš līdz sendmail programmai -config.mailer_sendmail_args=Papildus Sendmail komandrindas argumenti +config.mailer_sendmail_args=Papildu Sendmail argumenti config.mailer_sendmail_timeout=Sendmail noildze config.mailer_use_dummy=Tukšs config.test_email_placeholder=E-pasts (piemēram, test@example.com) @@ -3229,7 +3321,7 @@ config.git_max_diff_line_characters=Maksimālais salīdzināmo simbolu skaits vi config.git_max_diff_files=Lielākais parādāmo salīdzināmo datņu skaits config.git_gc_args=GC argumenti config.git_migrate_timeout=Migrācijas noilgums -config.git_mirror_timeout=Spoguļa atjaunošanas noilgums +config.git_mirror_timeout=Spoguļglabātavas atjaunināšanas noildze config.git_clone_timeout=Klonēšanas darbības noilgums config.git_pull_timeout=Izmaiņu saņemšanas darbības noilgums config.git_gc_timeout=GC darbības noilgums @@ -3300,10 +3392,12 @@ notices.op=Op. notices.delete_success=Sistēmas paziņojumi ir dzēsti. self_check.no_problem_found=Vēl nav atrasts neviens sarežģījums. +config_summary = Kopsavilkums +config_settings = Iestatījumi [action] create_repo=izveidoja repozitoriju %s -rename_repo=pārsauca repozitoriju no %[1]s uz %[3]s +rename_repo=pārdēvēja glabātavu %[1]s par %[3]s commit_repo=iesūtīja izmaiņas %[3]s repozitorijā %[4]s create_issue=`atvēra pieteikumu %[3]s#%[2]s` close_issue=`aizvēra pieteikumu %[3]s#%[2]s` @@ -3312,7 +3406,7 @@ create_pull_request=`izveidoja izmaiņu pieprasījumu %[3]s#%[2] close_pull_request=`aizvēra izmaiņu pieprasījumu %[3]s#%[2]s` reopen_pull_request=`atkārtoti atvēra izmaiņu pieprasījumu %[3]s#%[2]s` comment_issue=`pievienoja piebildi pieteikumam %[3]s#%[2]s` -comment_pull=`pievienoja komentāru izmaiņu pieprasījumam %[3]s#%[2]s` +comment_pull=`pievienoja piebildi izmaiņu pieprasījumam %[3]s#%[2]s` merge_pull_request=`iekļāva izmaiņu pieprasījumu %[3]s#%[2]s` auto_merge_pull_request=`automātiski iekļāva izmaiņu pieprasījumu %[3]s#%[2]s` transfer_repo=mainīja repozitorija %s īpašnieku uz %s @@ -3322,9 +3416,9 @@ delete_branch=izdzēsa atzaru %[2]s no %[3]s compare_branch=Salīdzināt compare_commits=Salīdzināt %d revīzijas compare_commits_general=Salīdzināt revīzijas -mirror_sync_push=ar spoguli sinhronizētas revīzijas %[3]s uz repozitoriju %[4]s -mirror_sync_create=ar spoguli sinhronizēta jauna atsauce %[3]s uz repozitoriju %[4]s -mirror_sync_delete=ar spoguli sinhronizēta un izdzēsta atsauce %[2]s repozitorijam %[3]s +mirror_sync_push=sinhronizēja iesūtījumus uz %[3]s %[4]s no spoguļglabātavas +mirror_sync_create=sinhronizēja jaunu atsauci %[3]s uz %[4]s no spoguļglabātavas +mirror_sync_delete=sinhronizēja un izdzēsa atsauci %[2]s %[3]s no spoguļglabātavas approve_pull_request=`apstiprināja izmaiņu pieprasījumu %[3]s#%[2]s` reject_pull_request=`ieteica izmaiņas izmaiņu pieprasījumam %[3]s#%[2]s` publish_release=`izveidoja versiju "%[4]s" repozitorijā %[3]s` @@ -3394,7 +3488,7 @@ error.unit_not_allowed=Jums nav tiesību piekļūt šai repozitorija sadaļai. title=Pakotnes desc=Pārvaldīt repozitorija pakotnes. empty=Pašlaik šeit nav nevienas pakotnes. -empty.documentation=Papildus informācija par pakotņu reģistru pieejama dokumentācijā. +empty.documentation=Papildu informācija par pakotņu reģistru ir pieejama dokumentācijā. empty.repo=Neparādās augšupielādēta pakotne? Apmeklējiet pakotņu iestatījumus, lai sasaistītu ar repozitoriju. registry.documentation=Vairāk informācija par %s reģistru ir pieejama dokumentācijā. filter.type=Veids @@ -3628,7 +3722,7 @@ workflow.enable=Iespējot darbplūsmu workflow.enable_success=Darbplūsma '%s' ir veiksmīgi iespējota. workflow.disabled=Darbplūsma ir atspējota. -need_approval_desc=Nepieciešams apstiprinājums, lai izpildītu izmaiņu pieprasījumu darbaplūsmas no atdalītiem repozitorijiem. +need_approval_desc=Nepieciešams apstiprinājums, lai izpildītu darbplūsmas izmaiņu pieprasījumos no atzarojumiem. variables=Mainīgie variables.management=Mainīgo pārvaldība @@ -3672,4 +3766,11 @@ union_tooltip = Iekļaut vienumus, kas atbilst jebkuram no ar atstarpi atdalīta exact = Tieši exact_tooltip = Iekļaut tikai vienumus, kas tieši atbilst vaicājumam regexp = Regulārā izteiksme -regexp_tooltip = Apstrādāt vaicājumu kā regulāro izteiksmi \ No newline at end of file +regexp_tooltip = Apstrādāt vaicājumu kā regulāro izteiksmi + +[repo.permissions] +actions.write = Rakstīt: pašrocīgi izsaukt, pārsāktnēt, atcelt vai apstiprināt gaidošos CI/CD cauruļvadus. +ext_wiki = Piekļūt ārējas vikivietnes saitei. Atļaujas tiek pārvaldītas ārēji. +ext_issues = Piekļūt ārēja pieteikumu izsekotāja saitei. Atļaujas tiek pārvaldītas ārēji. +packages.write = Rakstīt: pievienot un izdzēst glabātavai piesaistītās pakotnes. +actions.read = Lasīt: skatīt iekļautos CI/CD cauruļvadus un to žurnālus. diff --git a/options/locale/locale_ml-IN.ini b/options/locale/locale_ml-IN.ini index 559cacac94..fcc9888d8e 100644 --- a/options/locale/locale_ml-IN.ini +++ b/options/locale/locale_ml-IN.ini @@ -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] \ No newline at end of file +[packages] diff --git a/options/locale/locale_nds.ini b/options/locale/locale_nds.ini index 0abf8c2f33..5e8910788e 100644 --- a/options/locale/locale_nds.ini +++ b/options/locale/locale_nds.ini @@ -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 %s hentoföögt` -issues.add_project_at = `hett dat to de Projekt %s hentoföögt` -issues.change_milestone_at = `hett de Marksteen vun %s to %s ännert` -issues.remove_milestone_at = `hett dat vun de Marksteen %s wegdaan` -issues.remove_project_at = `hett dat vun de Projekt %s 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 %[1]s hentoföögt` +issues.add_project_at = `hett dat %[2]s to de Projekt %[1]s hentoföögt` +issues.change_milestone_at = `hett %[3]s de Marksteen vun %[1]s to %[2]s ännert` +issues.remove_milestone_at = `hett dat %[2]s vun de Marksteen %[1]s wegdaan` +issues.remove_project_at = `hett dat %[2]s vun de Projekt %[1]s 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 %s to %s %s ännert` -issues.change_ref_at = `hett de Nömen vun %s to %s %s ännert` -issues.delete_branch_at = `hett de Twieg %s %s lösket` +issues.change_title_at = `hett %[3]s de Titel vun %[1]s to %[2]s ännert` +issues.change_ref_at = `hett %[3]s de Nömen vun %[1]s to %[2]s ännert` +issues.delete_branch_at = `hett %[2]s de Twieg %[1]s lösket` issues.filter_label = Vermark issues.filter_label_exclude = `Bruuk Alt+Klick/Enter, 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 %s %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 %s to %s ännert` +issues.change_project_at = `hett %[3]s dat Projekt vun %[1]s to %[2]s ännert` issues.remove_assignee_at = `is sien Towiesen vun %s %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 %s %s hentoföögt` +issues.add_ref_at = `hett %[2]s de Nömen %[1]s 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 %s 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 %[3]s 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 %s %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 %[1]s 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 %s %s tosluten un Snack up Mitarbeiders begrenzt +issues.lock_with_reason = hett dat %[2]s um %[1]s 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 %[2]s na %[3]s tosamenföhren pulls.merged_title_desc_one = hett %[1]d Kommitteren vun %[2]s na %[3]s %[4]s tosamenföhrt -pulls.change_target_branch_at = `hett de Enn-Twieg vun %s to %s %s ännert` +pulls.change_target_branch_at = `hett %[3]s de Enn-Twieg vun %[1]s to %[2]s ä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! \ No newline at end of file +test = Moin! diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index b4470281ba..c3738a5347 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -554,7 +554,7 @@ team_invite.text_2 = Klik alstublieft op de volgende link om aan het team deel t admin.new_user.text = Klik hier 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="" 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 = Schrijven: Projecten en kolommen maken en bewerken. packages.read = Lezen: Bekijk en download pakketten die aan de repository is toegewezen. packages.write = Schrijven: Publiceer en verwijder pakketten die aan de repository is toegewezen. actions.read = Lezen: Bekijk geïntegreerde CI/CD-pijplijnen en hun logboeken. -issues.write = Schrijven: Sluit issues af en beheer metadata zoals labels, mijlpalen, verantwoordelijken, vervaldatums en afhankelijkheden. \ No newline at end of file +issues.write = Schrijven: Sluit issues af en beheer metadata zoals labels, mijlpalen, verantwoordelijken, vervaldatums en afhankelijkheden. diff --git a/options/locale/locale_pl-PL.ini b/options/locale/locale_pl-PL.ini index be16561d8d..ef20124ec9 100644 --- a/options/locale/locale_pl-PL.ini +++ b/options/locale/locale_pl-PL.ini @@ -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 '' +editor.add_tmpl=Dodanie '<%s>' editor.commit_message_desc=Dodaj dodatkowy rozszerzony opis… editor.commit_directly_to_this_branch=Zmieniaj bezpośrednio gałąź %[1]s. editor.create_new_branch=Stwórz nową gałąź 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 \ No newline at end of file +regexp_tooltip = Interpretuj wyszukiwane hasło jako wyrażenie regularne diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index 7d075da987..e336cda08c 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -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 "" +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 = Escrever: 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 \ No newline at end of file +test = To preserve its claws, the giant anteater walks on its front knuckles, like gorillas diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini index b7f5692542..aa1d844175 100644 --- a/options/locale/locale_pt-PT.ini +++ b/options/locale/locale_pt-PT.ini @@ -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 "" +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 = Ler: Ler o wiki integrado e o seu histórico. wiki.write = Escrever: Criar, modificar e eliminar páginas no wiki integrado. code.write = Escrever: Enviar para o repositório, criar ramos e etiquetas. issues.read = Ler: Ler e criar questões e comentários. -pulls.write = Escrever: Fechar pedidos de integração e gerir metadados, tais como rótulos, etapas, encarregados, datas de vencimento e dependências. \ No newline at end of file +pulls.write = Escrever: Fechar pedidos de integração e gerir metadados, tais como rótulos, etapas, encarregados, datas de vencimento e dependências. diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index ca02c8c27f..68572beb11 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -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=Добавить «» +editor.add_tmpl=Добавить «<%s>» editor.add=Добавить %s editor.update=Обновить %s editor.delete=Удалить %s @@ -4005,4 +4006,4 @@ issues.write = Запись: закрытие задач и измене actions.write = Запись: ручной запуск, перезапуск, отмена и одобрение работы конвейеров CI/CD. wiki.write = Запись: создание, изменение и удаление страниц во встроенной вики. packages.read = Чтение: просмотр и скачивание пакетов в репозитории. -ext_issues = Доступ к ссылке на внешний трекер задач. Настройка разрешений выполняется вне сайта. \ No newline at end of file +ext_issues = Доступ к ссылке на внешний трекер задач. Настройка разрешений выполняется вне сайта. diff --git a/options/locale/locale_si-LK.ini b/options/locale/locale_si-LK.ini index 4f18024e86..ac7627ca80 100644 --- a/options/locale/locale_si-LK.ini +++ b/options/locale/locale_si-LK.ini @@ -919,7 +919,7 @@ editor.or=හෝ editor.cancel_lower=අවලංගු කරන්න editor.commit_signed_changes=අත්සන් කළ වෙනස්කම් සිදු කරන්න editor.commit_changes=වෙනස්කම් සිදු කරන්න -editor.add_tmpl='' එකතු කරන්න +editor.add_tmpl='<%s>' එකතු කරන්න editor.commit_message_desc=විකල්ප දීර්ඝ විස්තරයක් එක් කරන්න… editor.signoff_desc=කැපවූ ලොග් පණිවිඩය අවසානයේ දී කැපකරු විසින් සිග්නෙඩ්-ඕෆ්-විසින් ට්රේලරයක් එක් කරන්න. editor.commit_directly_to_this_branch=%[1]s ශාඛාවට කෙලින්ම කැප කරන්න. @@ -2553,4 +2553,4 @@ runs.commit=කැප [projects] [git.filemode] -symbolic_link=සංකේතාත්මක සබැඳිය \ No newline at end of file +symbolic_link=සංකේතාත්මක සබැඳිය diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index 52630ce71d..4d460273cc 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -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 '' +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 %[1]s. editor.create_new_branch=Skapa en ny gren 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 \ No newline at end of file +exact_tooltip = Inkludera bara resultat som exakt matchar söktermen diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini index acbf59bf2d..e596b05878 100644 --- a/options/locale/locale_tr-TR.ini +++ b/options/locale/locale_tr-TR.ini @@ -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='' 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. \ No newline at end of file +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. diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index f67678e954..a36626c0e5 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -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=Додати «» +editor.add_tmpl=Додати «<%s>» editor.commit_message_desc=Додати необов'язковий розширений опис… editor.signoff_desc=Додати повідомленню в журналі комітів рядок Signed-off-by від свого імені. editor.commit_directly_to_this_branch=Зробіть коміт прямо в гілку %[1]s. @@ -2416,6 +2417,7 @@ issues.new.assign_to_me = Призначити собі contributors.contribution_type.additions = Додавання settings.add_web_hook_desc = Інтегрувати %s у цей репозиторій. settings.event_wiki_desc = Вікі-сторінку створено, перейменовано, відредаговано або видалено. +settings.mirror_settings.push_mirror.copy_public_key = Копіювати публічний ключ [graphs] contributors.what = внески @@ -3324,4 +3326,4 @@ kib = КіБ mib = МіБ gib = ГіБ tib = ТіБ -b = Б \ No newline at end of file +b = Б diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index f40f32de2f..49cec399f2 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -115,7 +115,7 @@ error=错误 error404=您正尝试访问的页面 不存在您尚未被授权 查看该页面。 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=如果此请求是您本人作出的,则请在 %s 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=@%s 提到了您: issue.action.force_push=%[1]s 强制从 %[3]s 推送 %[2]s 至 [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 钩子,它们将会在您拥有的所有仓库上触发 +hooks.desc=添加会在您拥有的所有仓库上触发的 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=添加 “” +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请求。在 指南 中阅读更多内容。 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 = 写入:手动触发、重启、取消或批准待处理 ext_issues = 访问外部工单系统的链接。权限由外部管理。 ext_wiki = 访问外部百科的链接。权限由外部管理。 projects.write = 写入:创建项目和列并进行编辑。 -pulls.write = 写入:关闭合并请求并管理元数据,如标签、里程碑、指派成员、截止日期和依赖。 \ No newline at end of file +pulls.write = 写入:关闭合并请求并管理元数据,如标签、里程碑、指派成员、截止日期和依赖。 diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index f43b6e2469..5caafacce1 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -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 = 好的 \ No newline at end of file +test = 好的 diff --git a/options/locale/readme.md b/options/locale/readme.md new file mode 100644 index 0000000000..f6f198a936 --- /dev/null +++ b/options/locale/readme.md @@ -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. diff --git a/package-lock.json b/package-lock.json index aede579429..2c95e97d3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,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", @@ -30,7 +30,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", @@ -43,7 +43,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", @@ -64,41 +64,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" }, "engines": { "node": ">= 18.0.0" @@ -200,22 +200,22 @@ } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -241,9 +241,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", - "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.9.tgz", + "integrity": "sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -717,15 +717,15 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", - "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-decorators": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -747,48 +747,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-decorators": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", @@ -805,32 +763,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-flow": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", @@ -879,32 +811,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", @@ -921,116 +827,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", @@ -1802,6 +1598,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", @@ -1967,94 +1780,80 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "engines": { @@ -2075,15 +1874,15 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", - "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.9.tgz", + "integrity": "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-flow-strip-types": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-flow-strip-types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2108,18 +1907,18 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2446,29 +2245,6 @@ "@csstools/css-tokenizer": "^3.0.1" } }, - "node_modules/@csstools/selector-specificity": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-4.0.0.tgz", - "integrity": "sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.1.0" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2920,13 +2696,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.5", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -2959,11 +2735,14 @@ } }, "node_modules/@eslint/core": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", - "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -3054,9 +2833,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", - "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", "dev": true, "license": "MIT", "engines": { @@ -3064,9 +2843,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3606,9 +3385,9 @@ } }, "node_modules/@primer/octicons": { - "version": "19.13.0", - "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-19.13.0.tgz", - "integrity": "sha512-U5g7Bv89At8qFXUy9MQlOUs4iPXR5XR4QPnSZWhmOn2oCgwf4LjdvfC+8OzhUFx2wC8k9TbRRAMVuCkqFLPlfQ==", + "version": "19.14.0", + "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-19.14.0.tgz", + "integrity": "sha512-9Ovw/xcUFHC/zbsNhr/Hkp1+m9XnNeQvnGHDHrI5vhlf6PRZVzSsdMnesV2xCzQh7jXP3EVRcaeXsUGlsZrfcA==", "license": "MIT", "dependencies": { "object-assign": "^4.1.1" @@ -3913,13 +3692,6 @@ "win32" ] }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, "node_modules/@stoplight/better-ajv-errors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.3.tgz", @@ -4439,9 +4211,9 @@ } }, "node_modules/@stylistic/eslint-plugin-js": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.10.1.tgz", - "integrity": "sha512-IikL/RKy9Sk2UMDUUpqrEcwDeYzUEt6SaL2/UVCFuVQxKACHSgStT0NxXkxZmBOUforaU52FPf2Su07FYH5s5g==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.12.1.tgz", + "integrity": "sha512-5ybogtEgWIGCR6dMnaabztbWyVdAPDsf/5XOk6jBonWug875Q9/a6gm9QxnU3rhdyDEnckWKX7dduwYJMOWrVA==", "dev": true, "license": "MIT", "dependencies": { @@ -4756,6 +4528,13 @@ "@types/d3-selection": "*" } }, + "node_modules/@types/doctrine": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", + "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/es-aggregate-error": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.6.tgz", @@ -4810,13 +4589,6 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/markdown-escape": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@types/markdown-escape/-/markdown-escape-1.1.3.tgz", @@ -4877,17 +4649,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", - "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz", + "integrity": "sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/type-utils": "8.14.0", - "@typescript-eslint/utils": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/type-utils": "8.18.1", + "@typescript-eslint/utils": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -4902,25 +4674,21 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", - "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.1.tgz", + "integrity": "sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/typescript-estree": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4" }, "engines": { @@ -4931,23 +4699,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", - "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz", + "integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0" + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4958,14 +4722,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", - "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz", + "integrity": "sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.14.0", - "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/typescript-estree": "8.18.1", + "@typescript-eslint/utils": "8.18.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -4976,16 +4740,15 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", - "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", + "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", "dev": true, "license": "MIT", "engines": { @@ -4997,14 +4760,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", - "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", + "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5019,10 +4782,8 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { @@ -5042,16 +4803,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", - "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz", + "integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/typescript-estree": "8.14.0" + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5061,18 +4822,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", - "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", + "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.18.1", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5082,19 +4844,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/@vitejs/plugin-vue": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.5.tgz", @@ -5110,9 +4859,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.4.tgz", - "integrity": "sha512-FPKQuJfR6VTfcNMcGpqInmtJuVXFSCd9HQltYncfR01AzXhLucMEtQ5SinPdZxsT5x/5BK7I5qFJ5/ApGCmyTQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", + "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", "dev": true, "license": "MIT", "dependencies": { @@ -5125,7 +4874,7 @@ "istanbul-reports": "^3.1.7", "magic-string": "^0.30.12", "magicast": "^0.3.5", - "std-env": "^3.7.0", + "std-env": "^3.8.0", "test-exclude": "^7.0.1", "tinyrainbow": "^1.2.0" }, @@ -5133,8 +4882,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.4", - "vitest": "2.1.4" + "@vitest/browser": "2.1.8", + "vitest": "2.1.8" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -5143,9 +4892,9 @@ } }, "node_modules/@vitest/coverage-v8/node_modules/magic-string": { - "version": "0.30.14", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", - "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", "dependencies": { @@ -5153,9 +4902,9 @@ } }, "node_modules/@vitest/eslint-plugin": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.13.tgz", - "integrity": "sha512-oabbCT4fCQfmFNtH2UuDfHx1d7dzi+VD3qwCpBfECfyzQq/Re9u7qTtE2WqV/hAuAOALw3ZVRiub2mXmpTyn/Q==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.16.tgz", + "integrity": "sha512-xecwJYuAp11AFsd2aoSnTWO3Wckgu7rjBz1VOhvsDtZzI4s7z/WerAR4gxnEFy37scdsE8wSlP95/2ry6sLhSg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5174,14 +4923,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz", - "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.4", - "@vitest/utils": "2.1.4", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, @@ -5190,13 +4939,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz", - "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.4", + "@vitest/spy": "2.1.8", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, @@ -5244,9 +4993,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz", - "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5257,13 +5006,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz", - "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.4", + "@vitest/utils": "2.1.8", "pathe": "^1.1.2" }, "funding": { @@ -5271,13 +5020,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz", - "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.4", + "@vitest/pretty-format": "2.1.8", "magic-string": "^0.30.12", "pathe": "^1.1.2" }, @@ -5296,9 +5045,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz", - "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", "dev": true, "license": "MIT", "dependencies": { @@ -5309,13 +5058,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz", - "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.4", + "@vitest/pretty-format": "2.1.8", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, @@ -5824,16 +5573,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", @@ -5892,48 +5631,6 @@ "node": ">=8" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -5953,42 +5650,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", @@ -6055,13 +5716,6 @@ "node": ">=4" } }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -6121,16 +5775,6 @@ "node": ">=4" } }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.12", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", @@ -7494,13 +7138,6 @@ "lodash-es": "^4.17.21" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/data-uri-to-buffer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", @@ -7605,39 +7242,6 @@ "node": ">=6" } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -8072,54 +7676,6 @@ "node": ">= 0.4" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -8273,27 +7829,27 @@ } }, "node_modules/eslint": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", - "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.7.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.14.0", - "@eslint/plugin-kit": "^0.2.0", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.0", + "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.2.0", @@ -8312,8 +7868,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -8334,9 +7889,9 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.4.tgz", + "integrity": "sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==", "dev": true, "license": "MIT", "dependencies": { @@ -8372,20 +7927,20 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", - "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", "dev": true, "license": "ISC", "dependencies": { "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.5", + "debug": "^4.3.7", "enhanced-resolve": "^5.15.0", - "eslint-module-utils": "^2.8.1", "fast-glob": "^3.3.2", "get-tsconfig": "^4.7.5", "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3" + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -8407,34 +7962,6 @@ } } }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/eslint-plugin-array-func": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-5.0.2.tgz", @@ -8449,12 +7976,14 @@ } }, "node_modules/eslint-plugin-import-x": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.4.2.tgz", - "integrity": "sha512-mDRXPSLQ0UQZQw91QdG4/qZT6hgeW2MJTczAbgPseUZuPEtIjjdPOolXroRkulnOn3fzj6gNgvk+wchMJiHElg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.5.1.tgz", + "integrity": "sha512-Wyut9jDeHdfZSebiWRmmOYDBov33M0ZZ3x9J/lD1v4M3nBgMNC02XH6Kq271pMxJWqctVRCjA+X5AQJZ2FezoQ==", "dev": true, "license": "MIT", "dependencies": { + "@types/doctrine": "^0.0.9", + "@typescript-eslint/scope-manager": "^8.1.0", "@typescript-eslint/utils": "^8.1.0", "debug": "^4.3.4", "doctrine": "^3.0.0", @@ -8489,65 +8018,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", - "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "~5.1.3", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.19", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-no-jquery": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", - "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.1.0.tgz", + "integrity": "sha512-Ze+eRlAbLAoceBqMXI2E9s6o3dC7zE75niP2Sy4D8I/u1TyLegrIpjc4emPN90dH0IA+uXNUmQbzBuCaihxwIQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -8574,9 +8048,9 @@ } }, "node_modules/eslint-plugin-playwright": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.0.1.tgz", - "integrity": "sha512-f4a73xgCOK5Ug/5dtC82BVvND62lLqlMqgGkZn42teyvk6ccSyybHZXRHkpE7vKZSCjV57bnbR+3ucwItOhXlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.1.0.tgz", + "integrity": "sha512-wMbHOehofSB1cBdzz2CLaCYaKNLeTQ0YnOW+7AHa281TJqlpEJUBgTHbRUYOUxiXphfWwOyTPvgr6vvEmArbSA==", "dev": true, "license": "MIT", "workspaces": [ @@ -8621,113 +8095,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react": { - "version": "7.36.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", - "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-regexp": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.6.0.tgz", - "integrity": "sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.7.0.tgz", + "integrity": "sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.9.1", + "@eslint-community/regexpp": "^4.11.0", "comment-parser": "^1.4.0", "jsdoc-type-pratt-parser": "^4.0.0", "refa": "^0.12.1", @@ -8742,156 +8118,33 @@ } }, "node_modules/eslint-plugin-sonarjs": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-2.0.4.tgz", - "integrity": "sha512-XVVAB/t0WSgHitHNajIcIDmviCO8kB9VSsrjy+4WUEVM3eieY9SDHEtCDaOMTjj6XMtcAr8BFDXCFaP005s+tg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.1.tgz", + "integrity": "sha512-RT6VgdPqizbMLmTryIc3fB169hRjvDFlqieSZEEswGtApPb4Dn9BndmN9qyfBV/By0hbseIX8zQWKBz5E7lyiQ==", "dev": true, "license": "LGPL-3.0-only", "dependencies": { - "@babel/core": "7.25.2", - "@babel/eslint-parser": "7.25.1", - "@babel/plugin-proposal-decorators": "7.24.7", - "@babel/preset-env": "7.25.4", - "@babel/preset-flow": "7.24.7", - "@babel/preset-react": "7.24.7", - "@eslint-community/regexpp": "4.11.1", - "@typescript-eslint/eslint-plugin": "7.16.1", - "@typescript-eslint/utils": "7.16.1", + "@babel/core": "7.26.0", + "@babel/eslint-parser": "7.25.9", + "@babel/plugin-proposal-decorators": "7.25.9", + "@babel/preset-env": "7.26.0", + "@babel/preset-flow": "7.25.9", + "@babel/preset-react": "7.26.3", + "@eslint-community/regexpp": "4.12.1", "builtin-modules": "3.3.0", "bytes": "3.1.2", - "eslint-plugin-import": "2.30.0", - "eslint-plugin-jsx-a11y": "6.10.0", - "eslint-plugin-react": "7.36.1", - "eslint-plugin-react-hooks": "4.6.2", - "eslint-scope": "8.1.0", "functional-red-black-tree": "1.0.1", "jsx-ast-utils": "3.3.5", - "minimatch": "10.0.1", + "minimatch": "9.0.5", "scslre": "0.3.0", "semver": "7.6.3", - "typescript": "5.6.2", - "vue-eslint-parser": "9.4.3" + "typescript": "^5" }, "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0" } }, - "node_modules/eslint-plugin-sonarjs/node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", - "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/type-utils": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", - "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { + "node_modules/eslint-plugin-sonarjs/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", @@ -8907,452 +8160,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", - "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", - "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.16.1", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-plugin-import": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.9.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-scope": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", - "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-sonarjs/node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/eslint-plugin-unicorn": { - "version": "56.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.0.tgz", - "integrity": "sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==", + "version": "56.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz", + "integrity": "sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==", "dev": true, "license": "MIT", "dependencies": { @@ -9391,9 +8202,9 @@ "license": "MIT" }, "node_modules/eslint-plugin-vue": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.31.0.tgz", - "integrity": "sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz", + "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==", "dev": true, "license": "MIT", "dependencies": { @@ -9414,14 +8225,14 @@ } }, "node_modules/eslint-plugin-vue-scoped-css": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue-scoped-css/-/eslint-plugin-vue-scoped-css-2.8.1.tgz", - "integrity": "sha512-V6B+zZE60ykYvHTDzdhJ3xa4C83ntmGXqFsylc8l1jdVR9PSgod2+bGFNL7OwRKgZj82ij/o904xa04z1bfCRA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue-scoped-css/-/eslint-plugin-vue-scoped-css-2.9.0.tgz", + "integrity": "sha512-zXeKtEUpfk3PlsgKnr9/2U8K2xcsCV1M9hXWRhKbl3wipVowGXfHrhqUzHFVWNAHzEQv0DCDXGFWrmsGFqhGGA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "eslint-compat-utils": "^0.5.0", + "eslint-compat-utils": "^0.6.0", "lodash": "^4.17.21", "postcss": "^8.4.31", "postcss-safe-parser": "^6.0.0", @@ -10011,19 +8822,6 @@ "source-map": "^0.6.1" } }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -10160,9 +8958,9 @@ } }, "node_modules/globals": { - "version": "15.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz", - "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "dev": true, "license": "MIT", "engines": { @@ -10632,23 +9430,6 @@ "node": ">=10.13.0" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -11243,23 +10024,6 @@ "node": ">=8" } }, - "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -11569,9 +10333,9 @@ "license": "MIT" }, "node_modules/katex": { - "version": "0.16.14", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.14.tgz", - "integrity": "sha512-tnUUAL/S+f/w8KrRpCFcCW/msuIlBkOmVnTmvdEK6WCkx6uDPRj3d9SBAP+qB5x0MCeOyUbdbIMtT5cUJD8aRw==", + "version": "0.16.18", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.18.tgz", + "integrity": "sha512-LRuk0rPdXrecAFwQucYjMiIs0JFefk6N1q/04mlw14aVIVgxq1FO0MA9RiIIGVaKOB5GIP5GH4aBBNraZERmaQ==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -11618,9 +10382,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.34.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", - "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", "dev": true, "license": "MIT" }, @@ -11646,26 +10410,6 @@ "node": ">=16.0.0" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/layout-base": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", @@ -11861,19 +10605,6 @@ "dev": true, "license": "MIT" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/loupe": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", @@ -11968,14 +10699,14 @@ } }, "node_modules/markdownlint": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.35.0.tgz", - "integrity": "sha512-wgp8yesWjFBL7bycA3hxwHRdsZGJhjhyP1dSxKVKrza0EPFYtn+mHtkVy6dvP1kGSjovyG5B8yNP6Frj0UFUJg==", + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.36.1.tgz", + "integrity": "sha512-s73fU2CQN7WCgjhaQUQ8wYESQNzGRNOKDd+3xgVqu8kuTEhmwepd/mxOv1LR2oV046ONrTLBFsM7IoKWNvmy5g==", "dev": true, "license": "MIT", "dependencies": { "markdown-it": "14.1.0", - "markdownlint-micromark": "0.1.10" + "markdownlint-micromark": "0.1.12" }, "engines": { "node": ">=18" @@ -11985,23 +10716,22 @@ } }, "node_modules/markdownlint-cli": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.42.0.tgz", - "integrity": "sha512-AjkzhhZa3TmEGi/CE2Wpmny69x1IrzqK2gPB0k8SmNMRgnSAJfyEO5FgZdWTHtJ6Nrdv5FWt5c4C5pkG6Dk30A==", + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.43.0.tgz", + "integrity": "sha512-6vwurKK4B21eyYzwgX6ph13cZS7hE6LZfcS8QyD722CyxVD2RtAvbZK2p7k+FZbbKORulEuwl+hJaEq1l6/hoQ==", "dev": true, "license": "MIT", "dependencies": { "commander": "~12.1.0", - "get-stdin": "~9.0.0", "glob": "~11.0.0", "ignore": "~6.0.2", "js-yaml": "^4.1.0", "jsonc-parser": "~3.3.1", "jsonpointer": "5.0.1", - "markdownlint": "~0.35.0", + "markdownlint": "~0.36.1", "minimatch": "~10.0.1", "run-con": "~1.3.2", - "smol-toml": "~1.3.0" + "smol-toml": "~1.3.1" }, "bin": { "markdownlint": "markdownlint.js" @@ -12105,9 +10835,9 @@ } }, "node_modules/markdownlint-micromark": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.10.tgz", - "integrity": "sha512-no5ZfdqAdWGxftCLlySHSgddEjyW4kui4z7amQcGsSKfYC5v/ou+8mIQVyg9KQMeEZLNtz9OPDTj7nnTnoR4FQ==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.12.tgz", + "integrity": "sha512-RlB6EwMGgc0sxcIhOQ2+aq7Zw1V2fBnzbXKGgYK/mVWdT7cz34fteKSwfYeo4rL6+L/q2tyC9QtD/PgZbkdyJQ==", "dev": true, "license": "MIT", "engines": { @@ -12583,23 +11313,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -12629,55 +11342,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -13571,18 +12235,6 @@ "dev": true, "license": "Unlicense" }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -13651,13 +12303,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -14754,19 +13399,6 @@ "dev": true, "license": "MIT" }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -14808,59 +13440,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -14938,16 +13517,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -14982,9 +13551,9 @@ "license": "ISC" }, "node_modules/stylelint": { - "version": "16.10.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz", - "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==", + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz", + "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==", "dev": true, "funding": [ { @@ -14998,16 +13567,16 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.1", - "@csstools/css-tokenizer": "^3.0.1", - "@csstools/media-query-list-parser": "^3.0.1", - "@csstools/selector-specificity": "^4.0.0", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/selector-specificity": "^5.0.0", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", - "css-tree": "^3.0.0", + "css-tree": "^3.0.1", "debug": "^4.3.7", "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", @@ -15019,22 +13588,22 @@ "ignore": "^6.0.2", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.34.0", + "known-css-properties": "^0.35.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", - "picocolors": "^1.0.1", - "postcss": "^8.4.47", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^6.1.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "supports-hyperlinks": "^3.1.0", "svg-tags": "^1.0.0", - "table": "^6.8.2", + "table": "^6.9.0", "write-file-atomic": "^5.0.1" }, "bin": { @@ -15087,6 +13656,53 @@ "stylelint": ">=16" } }, + "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", @@ -15158,6 +13774,20 @@ "postcss": "^8.4.31" } }, + "node_modules/stylelint/node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -15412,9 +14042,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.16", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz", - "integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -15779,32 +14409,6 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "license": "Apache-2.0" }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -15928,15 +14532,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.14.0.tgz", - "integrity": "sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.18.1.tgz", + "integrity": "sha512-Mlaw6yxuaDEPQvb/2Qwu3/TfgeBHy9iTJ3mTwe7OvpPmF6KPQjVOfGyEJpPv6Ez2C34OODChhXrzYw/9phI0MQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.14.0", - "@typescript-eslint/parser": "8.14.0", - "@typescript-eslint/utils": "8.14.0" + "@typescript-eslint/eslint-plugin": "8.18.1", + "@typescript-eslint/parser": "8.18.1", + "@typescript-eslint/utils": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -15945,10 +14549,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/typo-js": { @@ -16215,14 +14818,15 @@ } }, "node_modules/vite-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz", - "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, @@ -16304,31 +14908,31 @@ } }, "node_modules/vitest": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz", - "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.4", - "@vitest/mocker": "2.1.4", - "@vitest/pretty-format": "^2.1.4", - "@vitest/runner": "2.1.4", - "@vitest/snapshot": "2.1.4", - "@vitest/spy": "2.1.4", - "@vitest/utils": "2.1.4", + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", - "std-env": "^3.7.0", + "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.4", + "vite-node": "2.1.8", "why-is-node-running": "^2.3.0" }, "bin": { @@ -16343,8 +14947,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.4", - "@vitest/ui": "2.1.4", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", "happy-dom": "*", "jsdom": "*" }, @@ -16370,9 +14974,9 @@ } }, "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.14", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", - "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 0b080fc4a3..6d9b1c0f65 100644 --- a/package.json +++ b/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" diff --git a/playwright.config.ts b/playwright.config.ts index 0994c55045..3906232abc 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -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; diff --git a/release-notes-published/7.0.10.md b/release-notes-published/7.0.10.md new file mode 100644 index 0000000000..bbdc413a44 --- /dev/null +++ b/release-notes-published/7.0.10.md @@ -0,0 +1,13 @@ + + +## Release notes + +- Security bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5719) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5723)): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5718) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5720)): 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. +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5182) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5401)): Translation backports to v7 +- Included for completeness but not worth a release note + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5725): Update dependency mermaid to v10.9.3 [SECURITY] (v7.0/forgejo) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5241): Update dependency go to v1.22.7 (v7.0/forgejo) + diff --git a/release-notes-published/7.0.11.md b/release-notes-published/7.0.11.md new file mode 100644 index 0000000000..16a2b1ecc9 --- /dev/null +++ b/release-notes-published/7.0.11.md @@ -0,0 +1,14 @@ + + +## Release notes + +- Security bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5976)): [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. + diff --git a/release-notes-published/7.0.12.md b/release-notes-published/7.0.12.md new file mode 100644 index 0000000000..b382d82bbe --- /dev/null +++ b/release-notes-published/7.0.12.md @@ -0,0 +1,18 @@ + + + + +## Release notes + +- Security bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6248) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6252)): 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. +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6124) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6132)): fix: doctor fails with pq: syntax error at or near "." whilst counting Authorization token without existing User + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6054) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6056)): fix: Do not delete global Oauth2 applications +- Included for completeness but not worth a release note + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6246): Update module golang.org/x/crypto to v0.31.0 (v7.0/forgejo) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6223) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6230)): chore(ci): set the milestone when a pull request is closed (take 4) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6219) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6224)): chore(ci): set the milestone when a pull request is open (take 3) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6211) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6216)): chore(ci): set the milestone when a pull request is open + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6034) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6036)): chore(ci): remove unused experimental DNS updates + diff --git a/release-notes-published/7.0.7.md b/release-notes-published/7.0.7.md new file mode 100644 index 0000000000..310d430304 --- /dev/null +++ b/release-notes-published/7.0.7.md @@ -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. + + + + +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4896) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4900)): disallow javascript: URI in the repository description +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4568) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4882)): i18n: backport of #4568 #4668 and #4783 to v7 + diff --git a/release-notes-published/7.0.8.md b/release-notes-published/7.0.8.md new file mode 100644 index 0000000000..a679b0131c --- /dev/null +++ b/release-notes-published/7.0.8.md @@ -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. + + + + + +- User Interface bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5029) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5033)): Overflow for images on project cards. +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5149) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5150)): The scope of application tokens is not verified when writing containers or Conan packages. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4885) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4950)): Run full PR checks on AGit push. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/3264) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4999)): - [commit](https://codeberg.org/forgejo/forgejo/commit/364922c6e4f28264add9e2501a352c25ad6a0993) When a repository is adopted, its object format is not set in the database. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/3264) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4999)): - [commit](https://codeberg.org/forgejo/forgejo/commit/e7f332a55d6a48a3f3b4f2bfa43d18455ac00acc) During a migration from bitbucket, LFS downloads fail. +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4889) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5138)): Backports of #4889 and #4984 to v7 diff --git a/release-notes-published/7.0.9.md b/release-notes-published/7.0.9.md new file mode 100644 index 0000000000..2cfa328162 --- /dev/null +++ b/release-notes-published/7.0.9.md @@ -0,0 +1,9 @@ + + + +- Security + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5244) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5246)): replace v-html with v-text in branch search inputbox for XSS protection + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5201): 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. +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5070) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5181)): i18n: update of translations from Codeberg Translate + diff --git a/release-notes-published/8.0.1.md b/release-notes-published/8.0.1.md new file mode 100644 index 0000000000..d3f536ea09 --- /dev/null +++ b/release-notes-published/8.0.1.md @@ -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. + + + + +- User Interface bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4835) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4848)): Do not include trailing EOL character when counting lines + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4836) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4847)): Add background to reactions on hover + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4806) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4807)): Prevent uppercase in header of dashboard context selector + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4754) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4756)): Fix page layout in admin settings +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4896) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4901)): disallow javascript: URI in the repository description + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4852) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4865)): Ensure all filters are persistent in issue filters + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4828) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4840)): Allow 4 charachter SHA in `/src/commit` +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4668) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4881)): i18n: backport of #4668 and #4783 to v8 + diff --git a/release-notes-published/8.0.2.md b/release-notes-published/8.0.2.md new file mode 100644 index 0000000000..52f0783ad1 --- /dev/null +++ b/release-notes-published/8.0.2.md @@ -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. + + + + +- User Interface bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5029) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5032)): Overflow for images on project cards. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4798) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4919)): Allow unreacting from comment popover. +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5149) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5151)): The scope of application tokens is not verified when writing containers or Conan packages. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5065) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5080)): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5053): Automerge on AGit pull requests is ignored. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): [commit](https://codeberg.org/forgejo/forgejo/commit/7f1db1df3ee8d620f997b8e70a40c2f48ae96c0f) Show lock owner instead of repo owner on LFS setting page. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): [commit](https://codeberg.org/forgejo/forgejo/commit/ebfdc659d814561f8783094e2eb26738a5500e55) Render plain text file if the LFS object doesn't exist. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): [commit](https://codeberg.org/forgejo/forgejo/commit/9e066c3cad7bb1b30e2def34bd0608aac825cf58) Panic of ssh public key page after deletion of an auth source. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4998) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5050)): [commit](https://codeberg.org/forgejo/forgejo/commit/a8e25e907c66140961f28ba92403176c816dfb60) Add missing repository type filter parameters to pager. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4907) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4965)): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4885) ([backported](https://codeberg.org/forgejo/forgejo/pulls/4951)): Run full PR checks on AGit push. +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4984) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5116)): i18n: update of translations from Codeberg Translate + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4889) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5114)): i18n: update of translations from Codeberg Translate diff --git a/release-notes-published/8.0.3.md b/release-notes-published/8.0.3.md new file mode 100644 index 0000000000..5dea61f08a --- /dev/null +++ b/release-notes-published/8.0.3.md @@ -0,0 +1,10 @@ + + + +- Security + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5244) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5247)): replace v-html with v-text in branch search inputbox for XSS protection + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5202): 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. +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5182) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5230)): i18n: update of translations from Codeberg Translate + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5070) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5161)): i18n: update of translations from Codeberg Translate + diff --git a/release-notes-published/9.0.0.md b/release-notes-published/9.0.0.md new file mode 100644 index 0000000000..9fca889b79 --- /dev/null +++ b/release-notes-published/9.0.0.md @@ -0,0 +1,114 @@ +A [companion blog post](https://forgejo.org/2024-10-release-v9-0/) provides additional context on this major release. + + + + +- Breaking changes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4724): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5515) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5526)): **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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4941): 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. +- User Interface features + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5286): Set created_by as the default filter for /issues and /pulls. + 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): Set fuzzy as default for issue search. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5214): Improve commit graph layout. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5205): mermaid: [Add support for iconify icons](https://github.com/mermaid-js/mermaid/pull/5793). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5205): mermaid: [Allow multi-line relationship labels](https://github.com/mermaid-js/mermaid/pull/5711). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5205): mermaid: [Adds architecture diagrams which allows users to show relations between services](https://github.com/mermaid-js/mermaid/pull/5452). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5110): Improve diffs generated by Forgejo. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5002): Add `rel="nofollow"` to in-list labels. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4782): Distinguish between new tags, releases and pre-releases on activity page. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4749): Highlighted code search results. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4710): Refactor repo migration items. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4697): Add package counter to repo/user/org overview pages. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4571): Replace `vue-bar-graph` with `chart.js`. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4541): Add more emoji and code block rendering in issues. +- User Interface bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5261): Bad spacing on new release page. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5180): Milestone assignment in new issue. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4928): git-grep: ensure bounded default for MatchesPerFile. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4597): Incorrect go to citation button. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4538): Incorrect HTMX support for profile card. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4490): Accessibility keyboard support for test actions. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4455): Update pull request icons. +- Features + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5482) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5524)): "Assign to me" button on PR and Issues. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5351) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5407)): Add architecture-specific removal support for arch package. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): [commit](https://codeberg.org/forgejo/forgejo/commit/9d3473119893ffde0ab36d98e7a0e41c5d0ba9a3) Add bin to Composer Metadata. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5383): Internationalization user experience improvements on team permissions and issue closing. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5325): [commit](https://codeberg.org/forgejo/forgejo/commit/2da0ebbd2314f12b287694c378a888311dd337bc) Support allowed hosts for migrations to work with proxy. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5125): Trivial default quota configuration. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5120): 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). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5120): 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). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5090): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4967): git-grep: allow searching for words with initial dashes. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4927): git-grep: skip binary files. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4924): [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`. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4903): Support grouping by any path for arch package. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4891): Remove expensive nearest branch calculatations (`$.BranchName`) from commit diff view (`/:owner/:repo/commit/:commit`). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4819): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [commit](https://codeberg.org/forgejo/forgejo/commit/11b6253e7532ba11dee8bc31d4c262b102674a4d) Use UTC as a timezone when running scheduled actions tasks. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [commit](https://codeberg.org/forgejo/forgejo/commit/feb43b2584b7f64ec7f9952af2b50b2210e6e6cf) The actions logs older than `[actions].LOG_RETENTION_DAYS` days are removed (the default is 365). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4780): Add signature support for the RPM module. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4766): Allow color and background-color style properties for table cells. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): [commit](https://codeberg.org/forgejo/forgejo/commit/8d23433dab08fcbb8043e5d239171fba59c53108): support pull_request_target event for commit status. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): [commit](https://codeberg.org/forgejo/forgejo/commit/cb9071bbf433715f0e16e39cb60126b65f8236a0): support delete user email in admin panel. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4704): Notify owner about TOTP enrollment. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4635): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4633): Enable `INVALIDATE_REFRESH_TOKENS`. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4625): Sort milestones by name by default instead of the due date. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4607): [commit](https://codeberg.org/forgejo/forgejo/commit/21fdd28f084e7f1aef309c9ebd7599ffa6986453) allow synchronizing user status from OAuth2 login providers. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4607): [commit](https://codeberg.org/forgejo/forgejo/commit/004cc6dc0ab7cc9c324ccb4ecd420c6aeeb20500) add option to change mail from user display name. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4607): [commit](https://codeberg.org/forgejo/forgejo/commit/d0227c236aa195bd03990210f968b8e52eb20b79) issue Templates: add option to have dropdown printed list. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4605): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4542): Convert milestone to HTMX. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4516): Use the full user name in emails to address the recipient, when available. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4449): Enhancing OAuth2 Provider with Granular Scopes for Resource Access. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4429): [Display URLs in .sh-session files](https://github.com/buildkite/terminal-to-html/pull/163). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4367): The caching of contributor stats was improved (the data used by `///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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4266): Add support for LFS server implementations which have batch API responses in an older/deprecated schema. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4218): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4212): Added the foundations of a flexible, configurable quota system. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/2869): Logs journald integration. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/1445): A release asset can be a URL instead of a file. +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5529) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5565)): Don't allow owner team with incorrect unit access (includes doctor fix). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5470) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5547)): Schedule workflows are canceled when pushing to the default branch. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5492) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5507)): Incorrect Discord webhook JSON for issue events. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): [commit](https://codeberg.org/forgejo/forgejo/commit/f709de24039ab7e605d3e09e3b61240836381603) wrong last modify time. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): [commit](https://codeberg.org/forgejo/forgejo/commit/2675a24649af2fff34f5c7e416d6ff78591d8d9c) Repo Activity: count new issues that were closed. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): [commit](https://codeberg.org/forgejo/forgejo/commit/526054332acb221e061d3900bba2dc6e012da52d) incorrect /tokens API. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5372) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5406)): [commit](https://codeberg.org/forgejo/forgejo/commit/0cafec4c7a2faf810953e9d522faf5dc019e1522) Do not escape relative path in RPM primary index. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5325): [commit](https://codeberg.org/forgejo/forgejo/commit/eb765dabfd43e353bd2208e8375b102935d0f103) Handle invalid target when creating releases using API. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5325): [commit](https://codeberg.org/forgejo/forgejo/commit/5af168fb92e5dd3b0c81d97ba27a6f19739bef18) /repos/{owner}/{repo}/pulls/{index}/files endpoint not populating previous_filename. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5269): Improve textarea paste. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5195): [commit](https://codeberg.org/forgejo/forgejo/commit/196907e359420f63003f884d1cf827b4a4d7a4e5) Handle "close" actionable references for manual merges. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5195): [commit](https://codeberg.org/forgejo/forgejo/commit/46b1f2e7e4e795331f28f74666094c9416499e03) Team admins are allowed to search team members via the API. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5109): [commit](https://codeberg.org/forgejo/forgejo/commit/3ade4d9b2bfa6ae84a1ded932907a53060565575) Don't return 500 if mirror url contains special chars. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5109): [commit](https://codeberg.org/forgejo/forgejo/commit/dda53569b1b70507469fc296881eec89606ab9c3) Agit automerge is not working properly. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5075): Improve the display of PR & issue short links. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4978): Migrate scoped GitLab labels as scoped Forgejo labels. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4924): [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). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4809): Validate title length when updating an issue. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [commit](https://codeberg.org/forgejo/forgejo/commit/0dbc6230286e113accbc6d5e829ce8dae1d1f5d4) Hide the "Details" link of commit status when the user cannot access actions. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [commit](https://codeberg.org/forgejo/forgejo/commit/6e63afe31f43eaf5ff7c8595ddeaf8515c2dc0c0) Runner registration token via API is broken for repo level runners. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [commit](https://codeberg.org/forgejo/forgejo/commit/c784a5874066ca1a1fd518408d5767b4eb57bd69) Deleted projects causes bad popover text on issues. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [commit](https://codeberg.org/forgejo/forgejo/commit/42bb51af9b8283071e15ac6470ada9824d87cd40) Distinguish LFS object errors to ignore missing objects during migration. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4801): [commit](https://codeberg.org/forgejo/forgejo/commit/2310556158d70bf1dbfca96dc928e1be3d3f41be) Also rename the head branch of open pull requests when renaming a branch. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): [commit](https://codeberg.org/forgejo/forgejo/commit/ee11a263f8c9de33d42fc117443f4054a311c875): add return type to GetRawFileOrLFS and GetRawFile. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4716): [commit](https://codeberg.org/forgejo/forgejo/commit/f61873c7e42b613405d367421ad19db80f831053): properly filter issue list given no assignees filter. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4698): Cron task to cleanup dangling container images with version sha256:*. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4619): Allow updates to runners' secrets. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4487): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4427): Fixed social media previews for links to wiki pages. +- Localization + - Updates of translations from [Codeberg Translate](https://translate.codeberg.org/projects/forgejo/forgejo/). + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4980): Improve the clarity of confirmation in email messages. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5523) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5534)): Fine tune language for units. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5537) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5538)): Improve translation strings for webhook events. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4829): Allow different translations of creation links and titles. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4599): English strings improvements for internationalization. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/4596): Encourage participation in the localization of Forgejo in language settings. + diff --git a/release-notes-published/9.0.1.md b/release-notes-published/9.0.1.md new file mode 100644 index 0000000000..1cd9a56170 --- /dev/null +++ b/release-notes-published/9.0.1.md @@ -0,0 +1,33 @@ + + +## Release notes + +- Security bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5719) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5724)): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5718) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5721)): 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. +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5439) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5708)): Fix boolean inputs in workflow_dispatch + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5634) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5636)): package arch database not updating when uploading "any" architecture + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5627) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5631)): correct SQL query for active issues + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5626) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5629)): specify default value for `EXPLORE_DEFAULT_SORT`. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5613) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5624)): fix: Add `recentupdated` as recognized sort option + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5616): Update dependency mermaid to v11.3.0 (v9.0/forgejo) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5587) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5588)): Dockerfile: use alpine:3.20 instead of golang:1.23-alpine3.20 + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5585) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5586)): Dockerfile: unnecessary container image layer duplication + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5647): [commit](https://codeberg.org/forgejo/forgejo/commit/1913399d8176944f170d4f1c032dc37003aaafc0) Always update expiration time when creating an artifact + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5647): [commit](https://codeberg.org/forgejo/forgejo/commit/4fe311e7c0292e3ac79f8bc063f1bcacef4494f0) Update scheduled tasks even if changes are pushed by "ActionsUser" + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5715): [commit](https://codeberg.org/forgejo/forgejo/commit/768402c8841db5e8acc97919149ba329d5124e17) Fix disable 2fa bug +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5583) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5680)): i18n: update of translations from Codeberg Translate +- 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)): fix: use buffered iterate for debian searchpackages + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5688) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5691)): fix: make branch protection work for new branches + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5651) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5656)): link to security policy in security.txt + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5653) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5655)): fix: don't show truncated comments in RSS/Atom feeds + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5652) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5654)): fix: typo on releases for source code downloads + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5640) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5645)): Revert "add gap between branch dropdown and PR button" + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5615) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5618)): fix: Don't double escape delete branch text + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5595) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5596)): fix: Add server logging for OAuth server errors + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5592) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5594)): forgejo-cli is now a symlink and cannot be used for sanity checks + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5491) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5575)): fix: correct documentation for non 200 responses in swagger + diff --git a/release-notes-published/9.0.2.md b/release-notes-published/9.0.2.md new file mode 100644 index 0000000000..4a10e4981c --- /dev/null +++ b/release-notes-published/9.0.2.md @@ -0,0 +1,26 @@ + + +## Release notes + +- Security bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5974) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5975)): [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. +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5941) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5945)): fix: handle renamed dependency for cargo registry. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5795) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5800)): support `www.github.com` for migrations. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5887): move forgot_password-link to fix login tab order. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5850) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5879)): code owners will not be mentioned when a pull request comes from a forked repository. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5831) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5834)): labels are missing in the pull request payload removing a label. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5778) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5810)): in a Forgejo Actions workflow, the `unlabeled` event type for pull requests was incorrectly mapped to the labeled event type. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5778) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5810)): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5778) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5810)): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5746) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5759)): fix git-grep for code search when git version is below 2.38. +- Localization + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5681) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5748)): i18n: update of translations from Codeberg Translate. + diff --git a/release-notes-published/9.0.3.md b/release-notes-published/9.0.3.md new file mode 100644 index 0000000000..06ab9f152a --- /dev/null +++ b/release-notes-published/9.0.3.md @@ -0,0 +1,39 @@ + + + + +## Release notes + +- Security bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6248) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6253)): 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. + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6249) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6251)): Revert "allow synchronizing user status from OAuth2 login providers" +- User Interface bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6104): Fix wiki search overflowing on wide screens (#6047) +- Bug fixes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6097) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6168)): Do not rewrite ssh keys files when deleting a user without one + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6124) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6129)): fix: doctor fails with pq: syntax error at or near "." whilst counting Authorization token without existing User + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6054) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6057)): fix: Do not delete global Oauth2 applications +- Other changes without a feature or bug label + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6064): [gitea] week 2024-48-v9.0 cherry pick (gitea/main -> v9.0/forgejo) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5998): [commit](https://codeberg.org/forgejo/forgejo/commit/53c546951115d9e269a2778f90e43b0cb413eab6) Strict matching of allowed content for sanitizer for asciicast and csv rendering +- Included for completeness but not worth a release note + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6247): Update module golang.org/x/crypto to v0.31.0 (v9.0/forgejo) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6223) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6231)): chore(ci): set the milestone when a pull request is closed (take 4) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6219) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6225)): chore(ci): set the milestone when a pull request is open (take 3) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6211) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6217)): chore(ci): set the milestone when a pull request is open + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6176): Update dependency @github/relative-time-element to v4.4.4 (v9.0/forgejo) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6152) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6155)): fix: remove softbreak from github legacy callout + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6144) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6149)): fix: correct permission loading for limited organisation + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6128) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6131)): fix: clean up log files that no longer exist + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6114) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6127)): fix: return correct type in `GetSubModule` + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6050) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6092)): Improve Swagger documentation for user endpoints + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6084) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6085)): fix: normalize guessed languages from enry + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6052) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6070)): Show page titles in wiki search results (#6048) + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6060): i18n: backport of translation updates 5754, 5845, 5960 + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6034) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6035)): chore(ci): remove unused experimental DNS updates + - [PR](https://codeberg.org/forgejo/forgejo/pulls/6013) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6016)): fix(test): TestGitAttributeCheckerError must allow broken pipe + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5996) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6005)): fix: check read permissions for code owner review requests + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5989) ([backported](https://codeberg.org/forgejo/forgejo/pulls/6004)): fix: use better code to group UID and stopwatches + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5991) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5993)): fix: api repo compare with commit hashes + - [PR](https://codeberg.org/forgejo/forgejo/pulls/5986) ([backported](https://codeberg.org/forgejo/forgejo/pulls/5992)): bug: correctly generate oauth2 jwt signing key + diff --git a/release-notes-published/up-to-and-including-8.0.0.md b/release-notes-published/up-to-and-including-8.0.0.md new file mode 120000 index 0000000000..a2fdedd0e1 --- /dev/null +++ b/release-notes-published/up-to-and-including-8.0.0.md @@ -0,0 +1 @@ +../RELEASE-NOTES.md \ No newline at end of file diff --git a/release-notes/6271.md b/release-notes/6271.md new file mode 100644 index 0000000000..4a4821682f --- /dev/null +++ b/release-notes/6271.md @@ -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 diff --git a/services/auth/source/oauth2/main_test.go b/routers/api/actions/runner/main_test.go similarity index 70% rename from services/auth/source/oauth2/main_test.go rename to routers/api/actions/runner/main_test.go index 57c74fd3e7..bed63c166e 100644 --- a/services/auth/source/oauth2/main_test.go +++ b/routers/api/actions/runner/main_test.go @@ -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) } diff --git a/routers/api/actions/runner/utils.go b/routers/api/actions/runner/utils.go index ff6ec5bd54..539be8d889 100644 --- a/routers/api/actions/runner/utils.go +++ b/routers/api/actions/runner/utils.go @@ -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 +} diff --git a/routers/api/actions/runner/utils_test.go b/routers/api/actions/runner/utils_test.go new file mode 100644 index 0000000000..c8a0a28d65 --- /dev/null +++ b/routers/api/actions/runner/utils_test.go @@ -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"]) +} diff --git a/routers/api/packages/api.go b/routers/api/packages/api.go index 781bfc7f90..e216a0c02b 100644 --- a/routers/api/packages/api.go +++ b/routers/api/packages/api.go @@ -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) }) diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go index b17200381a..acab883107 100644 --- a/routers/api/v1/admin/user.go +++ b/routers/api/v1/admin/user.go @@ -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 { diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index c028a5a32d..4928c9ff58 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -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) diff --git a/routers/api/v1/repo/branch.go b/routers/api/v1/repo/branch.go index e3e6efa781..3ca97f7770 100644 --- a/routers/api/v1/repo/branch.go +++ b/routers/api/v1/repo/branch.go @@ -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 diff --git a/routers/api/v1/swagger/options.go b/routers/api/v1/swagger/options.go index 1dccf92d82..432e42d4e7 100644 --- a/routers/api/v1/swagger/options.go +++ b/routers/api/v1/swagger/options.go @@ -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 diff --git a/routers/web/auth/auth.go b/routers/web/auth/auth.go index 71d7b8ca11..ccab47a9a2 100644 --- a/routers/web/auth/auth.go +++ b/routers/web/auth/auth.go @@ -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) + } } } diff --git a/routers/web/auth/oauth.go b/routers/web/auth/oauth.go index e329729dcd..fbdd47479a 100644 --- a/routers/web/auth/oauth.go +++ b/routers/web/auth/oauth.go @@ -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, diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index ff3b16159b..283d476df1 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -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 +} diff --git a/routers/web/repo/actions/view.go b/routers/web/repo/actions/view.go index cab37acdd1..dea31bb1c4 100644 --- a/routers/web/repo/actions/view.go +++ b/routers/web/repo/actions/view.go @@ -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"), diff --git a/services/auth/source/oauth2/providers_test.go b/services/auth/source/oauth2/providers_test.go deleted file mode 100644 index 353816c71e..0000000000 --- a/services/auth/source/oauth2/providers_test.go +++ /dev/null @@ -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{} - })) -} diff --git a/services/auth/source/oauth2/source.go b/services/auth/source/oauth2/source.go index fe4823e778..3f8616c6ff 100644 --- a/services/auth/source/oauth2/source.go +++ b/services/auth/source/oauth2/source.go @@ -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) } diff --git a/services/auth/source/oauth2/source_sync.go b/services/auth/source/oauth2/source_sync.go deleted file mode 100644 index 59590a8bb3..0000000000 --- a/services/auth/source/oauth2/source_sync.go +++ /dev/null @@ -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 -} diff --git a/services/auth/source/oauth2/source_sync_test.go b/services/auth/source/oauth2/source_sync_test.go deleted file mode 100644 index 746df82055..0000000000 --- a/services/auth/source/oauth2/source_sync_test.go +++ /dev/null @@ -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) - }) - }) -} diff --git a/services/externalaccount/user.go b/services/externalaccount/user.go index b53e33654a..3cfd8c81f9 100644 --- a/services/externalaccount/user.go +++ b/services/externalaccount/user.go @@ -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 diff --git a/services/repository/branch.go b/services/repository/branch.go index 87fe03c12d..8e1a6cd27f 100644 --- a/services/repository/branch.go +++ b/services/repository/branch.go @@ -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) } diff --git a/templates/admin/auth/edit.tmpl b/templates/admin/auth/edit.tmpl index 84fefc0484..34d52ed224 100644 --- a/templates/admin/auth/edit.tmpl +++ b/templates/admin/auth/edit.tmpl @@ -425,7 +425,7 @@

{{ctx.Locale.Tr "admin.auths.sspi_default_language_helper"}}

{{end}} - {{if (or .Source.IsLDAP .Source.IsOAuth2)}} + {{if .Source.IsLDAP}}
diff --git a/templates/admin/auth/new.tmpl b/templates/admin/auth/new.tmpl index 47fa82825c..c70bd3ba43 100644 --- a/templates/admin/auth/new.tmpl +++ b/templates/admin/auth/new.tmpl @@ -59,7 +59,7 @@
-
+
diff --git a/templates/explore/repo_list.tmpl b/templates/explore/repo_list.tmpl index f11f2e94ef..ab5999832d 100644 --- a/templates/explore/repo_list.tmpl +++ b/templates/explore/repo_list.tmpl @@ -13,20 +13,20 @@ {{.Name}} {{if .IsArchived}} - {{ctx.Locale.Tr "repo.desc.archived"}} + {{ctx.Locale.Tr "repo.desc.archived"}} {{end}} {{if .IsPrivate}} - {{ctx.Locale.Tr "repo.desc.private"}} + {{ctx.Locale.Tr "repo.desc.private"}} {{else}} {{if .Owner.Visibility.IsPrivate}} - {{ctx.Locale.Tr "repo.desc.internal"}} + {{ctx.Locale.Tr "repo.desc.internal"}} {{end}} {{end}} {{if .IsTemplate}} - {{ctx.Locale.Tr "repo.desc.template"}} + {{ctx.Locale.Tr "repo.desc.template"}} {{end}} {{if eq .ObjectFormatName "sha256"}} - {{ctx.Locale.Tr "repo.desc.sha256"}} + {{ctx.Locale.Tr "repo.desc.sha256"}} {{end}}
diff --git a/templates/explore/user_list.tmpl b/templates/explore/user_list.tmpl index 4128a489aa..4cfb6c9bf5 100644 --- a/templates/explore/user_list.tmpl +++ b/templates/explore/user_list.tmpl @@ -8,7 +8,7 @@
{{template "shared/user/name" .}} {{if .Visibility.IsPrivate}} - {{ctx.Locale.Tr "repo.desc.private"}} + {{ctx.Locale.Tr "repo.desc.private"}} {{end}}
diff --git a/templates/org/header.tmpl b/templates/org/header.tmpl index 494dedf67a..4359b819a1 100644 --- a/templates/org/header.tmpl +++ b/templates/org/header.tmpl @@ -5,8 +5,8 @@
{{.Org.DisplayName}} - {{if .Org.Visibility.IsLimited}}{{ctx.Locale.Tr "org.settings.visibility.limited_shortname"}}{{end}} - {{if .Org.Visibility.IsPrivate}}{{ctx.Locale.Tr "org.settings.visibility.private_shortname"}}{{end}} + {{if .Org.Visibility.IsLimited}}{{ctx.Locale.Tr "org.settings.visibility.limited_shortname"}}{{end}} + {{if .Org.Visibility.IsPrivate}}{{ctx.Locale.Tr "org.settings.visibility.private_shortname"}}{{end}}
diff --git a/templates/org/member/members.tmpl b/templates/org/member/members.tmpl index 4388dc9520..dccf588f6a 100644 --- a/templates/org/member/members.tmpl +++ b/templates/org/member/members.tmpl @@ -15,7 +15,7 @@
{{template "shared/user/name" .}} {{if not $isPublic}} - {{ctx.Locale.Tr "org.members.private"}} + {{ctx.Locale.Tr "org.members.private"}} {{end}}
{{if not $.PublicOnly}} diff --git a/templates/package/content/container.tmpl b/templates/package/content/container.tmpl index 95ac6f8b8e..78fdac3bad 100644 --- a/templates/package/content/container.tmpl +++ b/templates/package/content/container.tmpl @@ -24,7 +24,7 @@
{{if .PackageDescriptor.Metadata.Manifests}} -

{{ctx.Locale.Tr "packages.container.multi_arch"}}

+

{{ctx.Locale.Tr "packages.container.images.title"}}

diff --git a/templates/repo/actions/runs_list.tmpl b/templates/repo/actions/runs_list.tmpl index ef764fa357..060fc1b66a 100644 --- a/templates/repo/actions/runs_list.tmpl +++ b/templates/repo/actions/runs_list.tmpl @@ -27,10 +27,10 @@
- {{if .RefLink}} - {{.PrettyRef}} + {{if .IsRefDeleted}} + {{.PrettyRef}} {{else}} - {{.PrettyRef}} + {{.PrettyRef}} {{end}}
{{svg "octicon-calendar" 16}}{{DateUtils.TimeSince .Updated}}
diff --git a/templates/repo/contributors.tmpl b/templates/repo/contributors.tmpl index f7f5d796f4..c71312fc6c 100644 --- a/templates/repo/contributors.tmpl +++ b/templates/repo/contributors.tmpl @@ -1,6 +1,7 @@ {{if .Permission.CanRead $.UnitTypeCode}}
- +
diff --git a/templates/repo/header.tmpl b/templates/repo/header.tmpl index 2215c27886..5162fd429b 100644 --- a/templates/repo/header.tmpl +++ b/templates/repo/header.tmpl @@ -13,24 +13,24 @@
{{if .IsArchived}} - {{ctx.Locale.Tr "repo.desc.archived"}} + {{ctx.Locale.Tr "repo.desc.archived"}}
{{svg "octicon-archive" 18}}
{{end}} {{if .IsPrivate}} - {{ctx.Locale.Tr "repo.desc.private"}} + {{ctx.Locale.Tr "repo.desc.private"}}
{{svg "octicon-lock" 18}}
{{else}} {{if .Owner.Visibility.IsPrivate}} - {{ctx.Locale.Tr "repo.desc.internal"}} + {{ctx.Locale.Tr "repo.desc.internal"}}
{{svg "octicon-shield-lock" 18}}
{{end}} {{end}} {{if .IsTemplate}} - {{ctx.Locale.Tr "repo.desc.template"}} + {{ctx.Locale.Tr "repo.desc.template"}}
{{svg "octicon-repo-template" 18}}
{{end}} {{if eq .ObjectFormatName "sha256"}} - {{ctx.Locale.Tr "repo.desc.sha256"}} + {{ctx.Locale.Tr "repo.desc.sha256"}} {{end}}
diff --git a/templates/repo/issue/view_content.tmpl b/templates/repo/issue/view_content.tmpl index bd52198264..f074a854b5 100644 --- a/templates/repo/issue/view_content.tmpl +++ b/templates/repo/issue/view_content.tmpl @@ -90,7 +90,7 @@ {{template "repo/issue/comment_tab" .}} {{.CsrfTokenHtml}}