From 9d1c72ae7c388f7f588c25d249b44cf2a3d633e4 Mon Sep 17 00:00:00 2001 From: kiatt210 <40639725+kiatt210@users.noreply.github.com> Date: Sun, 23 Jun 2024 09:50:10 +0200 Subject: [PATCH 0001/1984] Fix web notification icon not updated once you read all notifications (#31447) Fix #29065 Remove status filtering from GetUIDsAndNotificationCounts sql. --------- Co-authored-by: kiatt210 Co-authored-by: wxiaoguang (cherry picked from commit 6a96deb5898745d957ffd7860b2b6821c673e907) --- models/activities/notification.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/models/activities/notification.go b/models/activities/notification.go index 8e2b6d6937..09cc640224 100644 --- a/models/activities/notification.go +++ b/models/activities/notification.go @@ -287,13 +287,14 @@ type UserIDCount struct { Count int64 } -// GetUIDsAndNotificationCounts between the two provided times +// GetUIDsAndNotificationCounts returns the unread counts for every user between the two provided times. +// It must return all user IDs which appear during the period, including count=0 for users who have read all. func GetUIDsAndNotificationCounts(ctx context.Context, since, until timeutil.TimeStamp) ([]UserIDCount, error) { - sql := `SELECT user_id, count(*) AS count FROM notification ` + + sql := `SELECT user_id, sum(case when status= ? then 1 else 0 end) AS count FROM notification ` + `WHERE user_id IN (SELECT user_id FROM notification WHERE updated_unix >= ? AND ` + - `updated_unix < ?) AND status = ? GROUP BY user_id` + `updated_unix < ?) GROUP BY user_id` var res []UserIDCount - return res, db.GetEngine(ctx).SQL(sql, since, until, NotificationStatusUnread).Find(&res) + return res, db.GetEngine(ctx).SQL(sql, NotificationStatusUnread, since, until).Find(&res) } // SetIssueReadBy sets issue to be read by given user. From 45181ee9453467b2e9a213888c9018a78894820f Mon Sep 17 00:00:00 2001 From: Royce Remer Date: Fri, 28 Jun 2024 01:42:57 -0700 Subject: [PATCH 0002/1984] Support legacy _links LFS batch responses (#31513) Support legacy _links LFS batch response. Fixes #31512. This is backwards-compatible change to the LFS client so that, upon mirroring from an upstream which has a batch api, it can download objects whether the responses contain the `_links` field or its successor the `actions` field. When Gitea must fallback to the legacy `_links` field a logline is emitted at INFO level which looks like this: ``` ...s/lfs/http_client.go:188:performOperation() [I] is using a deprecated batch schema response! ``` I've only run `test-backend` with this code, but added a new test to cover this case. Additionally I have a fork with this change deployed which I've confirmed syncs LFS from Gitea<-Artifactory (which has legacy `_links`) as well as from Gitea<-Gitea (which has the modern `actions`). Signed-off-by: Royce Remer (cherry picked from commit df805d6ed0458dbec258d115238fde794ed4d0ce) --- modules/lfs/http_client.go | 4 ++++ modules/lfs/http_client_test.go | 16 ++++++++++++++++ modules/lfs/shared.go | 1 + 3 files changed, 21 insertions(+) diff --git a/modules/lfs/http_client.go b/modules/lfs/http_client.go index f5ddd38b09..7ee2449b0e 100644 --- a/modules/lfs/http_client.go +++ b/modules/lfs/http_client.go @@ -180,6 +180,10 @@ func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc } } else { link, ok := object.Actions["download"] + if !ok { + // no actions block in response, try legacy response schema + link, ok = object.Links["download"] + } if !ok { log.Debug("%+v", object) return errors.New("missing action 'download'") diff --git a/modules/lfs/http_client_test.go b/modules/lfs/http_client_test.go index 7431132f76..ec90f5375d 100644 --- a/modules/lfs/http_client_test.go +++ b/modules/lfs/http_client_test.go @@ -59,6 +59,17 @@ func lfsTestRoundtripHandler(req *http.Request) *http.Response { }, }, } + } else if strings.Contains(url, "legacy-batch-request-download") { + batchResponse = &BatchResponse{ + Transfer: "dummy", + Objects: []*ObjectResponse{ + { + Links: map[string]*Link{ + "download": {}, + }, + }, + }, + } } else if strings.Contains(url, "valid-batch-request-upload") { batchResponse = &BatchResponse{ Transfer: "dummy", @@ -229,6 +240,11 @@ func TestHTTPClientDownload(t *testing.T) { endpoint: "https://unknown-actions-map.io", expectederror: "missing action 'download'", }, + // case 11 + { + endpoint: "https://legacy-batch-request-download.io", + expectederror: "", + }, } for n, c := range cases { diff --git a/modules/lfs/shared.go b/modules/lfs/shared.go index 80f4fed00d..675d2328b7 100644 --- a/modules/lfs/shared.go +++ b/modules/lfs/shared.go @@ -47,6 +47,7 @@ type BatchResponse struct { type ObjectResponse struct { Pointer Actions map[string]*Link `json:"actions,omitempty"` + Links map[string]*Link `json:"_links,omitempty"` Error *ObjectError `json:"error,omitempty"` } From a2426e2f901ad6bc5b98566ffc6407c5f18d0546 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Sat, 29 Jun 2024 08:03:51 +0200 Subject: [PATCH 0003/1984] docs(release-notes): week 2024-27 cherry pick --- release-notes/8.0.0/feat/31513.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 release-notes/8.0.0/feat/31513.md diff --git a/release-notes/8.0.0/feat/31513.md b/release-notes/8.0.0/feat/31513.md new file mode 100644 index 0000000000..3c9baf5d70 --- /dev/null +++ b/release-notes/8.0.0/feat/31513.md @@ -0,0 +1 @@ +- add support for LFS server implementations which have batch API responses in an older/deprecated schema From 1576ea38f88bfc459bb3c739b8a02d89288221cb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 1 Jul 2024 14:02:08 +0000 Subject: [PATCH 0004/1984] Update dependency esbuild-loader to v4.2.0 --- package-lock.json | 630 ++++++++-------------------------------------- package.json | 2 +- 2 files changed, 101 insertions(+), 531 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c628bd836..b6c4ba6ee5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "dayjs": "1.11.11", "dropzone": "6.0.0-beta.2", "easymde": "2.18.0", - "esbuild-loader": "4.1.0", + "esbuild-loader": "4.2.0", "escape-goat": "4.0.0", "fast-glob": "3.3.2", "htmx.org": "1.9.12", @@ -592,9 +592,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -608,9 +608,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -624,9 +624,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -640,9 +640,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -656,9 +656,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -672,9 +672,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -688,9 +688,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -704,9 +704,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -720,9 +720,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -736,9 +736,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -752,9 +752,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -768,9 +768,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -784,9 +784,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -800,9 +800,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -816,9 +816,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -832,9 +832,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -848,9 +848,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -864,9 +864,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -880,9 +880,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -896,9 +896,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -912,9 +912,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -928,9 +928,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -944,9 +944,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -5740,9 +5740,9 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -5752,38 +5752,38 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/esbuild-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.1.0.tgz", - "integrity": "sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.2.0.tgz", + "integrity": "sha512-BhwHchuDknxIa69AqOPeZh2fIFqj2AzZKC1E3RBRvXSuyk5drsqMrwsgYZJufX41yrauLYjDM3KBmruoGl1NWQ==", "license": "MIT", "dependencies": { - "esbuild": "^0.20.0", + "esbuild": "^0.21.0", "get-tsconfig": "^4.7.0", "loader-utils": "^2.0.4", "webpack-sources": "^1.4.3" @@ -13475,397 +13475,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -13873,45 +13482,6 @@ "dev": true, "license": "MIT" }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, "node_modules/vite/node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", diff --git a/package.json b/package.json index 3c4d79f6a1..56d8dcfaa5 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "dayjs": "1.11.11", "dropzone": "6.0.0-beta.2", "easymde": "2.18.0", - "esbuild-loader": "4.1.0", + "esbuild-loader": "4.2.0", "escape-goat": "4.0.0", "fast-glob": "3.3.2", "htmx.org": "1.9.12", From 9524361bb43f94ff48ba32ba5bb14f1002bb24cf Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Mon, 1 Jul 2024 18:17:11 +0200 Subject: [PATCH 0005/1984] docs(release-notes): development continues to Forgejo 9.0.0 --- RELEASE-NOTES.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 82b7c6107e..3629afa3fb 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -6,7 +6,11 @@ A [patch or minor release](https://semver.org/spec/v2.0.0.html) (e.g. upgrading ## Upcoming releases (not available yet) -- [8.0.0](release-notes/8.0.0/) +- [9.0.0](release-notes/9.0.0/) + +## 8.0.0 + +TBD ## 7.0.4 @@ -143,7 +147,7 @@ $ git -C forgejo log --oneline --no-merges origin/v1.21/forgejo..origin/v7.0/for * `process-description` to `processDescription` This allows for those endpoints to be scraped by services requiring prometheus style labels such as [grafana-agent](https://grafana.com/docs/agent/latest/). * The repository description [imposes additional restrictions on what it contains](https://codeberg.org/forgejo/forgejo/commit/1075ff74b5050f671c5f9824ae39390230b3c85d) to prevent abuse. You may use [the v7.0 test instance](https://v7.next.forgejo.org/) to check how it will be modified. - * The [Gitea themes were renamed](https://codeberg.org/forgejo/forgejo/commit/023e937141dd891bce3370c869d4db2c60f971ed) and the `[ui].THEMES` setting must be changed as follows: + * The [Gitea themes were renamed](https://codeberg.org/forgejo/forgejo/commit/023e937141dd891bce3370c869d4db2c60f971ed) and the `[ui].THEMES` setting must be changed as follows: * `gitea` is replaced by `gitea-light` * `arc-green` is replaced by `gitea-dark` * `auto` is replaced by `gitea-auto` From a0d9d8d57662f9f166783b4bca64e3292d34cef4 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Tue, 2 Jul 2024 19:29:04 +0200 Subject: [PATCH 0006/1984] test(js): false negative in sleep test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It is entirely possible that the difference between the specified sleep time and the actual sleep time is greater than 15 seconds. https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#Notes > Note that in either case, the actual delay may be longer than > intended; see Reasons for delays longer than specified below. It is however an error for the delay to be shorter. ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ FAIL web_src/js/utils.test.js > sleep AssertionError: expected false to be truthy ❯ testSleep web_src/js/utils.test.js:192:48 190| const endTime = Date.now(); // Record the end time 191| const actualSleepTime = endTime - startTime; 192| expect(Math.abs(actualSleepTime - ms) <= 15).toBeTruthy(); | ^ 193| } 194| ❯ web_src/js/utils.test.js:184:3 --- web_src/js/utils.test.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/web_src/js/utils.test.js b/web_src/js/utils.test.js index b7691b8d31..c49bb2a110 100644 --- a/web_src/js/utils.test.js +++ b/web_src/js/utils.test.js @@ -177,10 +177,6 @@ test('serializeXml', () => { }); test('sleep', async () => { - // Test 500 ms sleep - await testSleep(500); - - // Test 2000 ms sleep await testSleep(2000); }); @@ -189,5 +185,5 @@ async function testSleep(ms) { await sleep(ms); const endTime = Date.now(); // Record the end time const actualSleepTime = endTime - startTime; - expect(Math.abs(actualSleepTime - ms) <= 15).toBeTruthy(); + expect(actualSleepTime >= ms).toBeTruthy(); } From 5561e80b04c27fb0685f6164a74b1dcefe13890d Mon Sep 17 00:00:00 2001 From: Twenty Panda Date: Fri, 28 Jun 2024 00:37:39 +0200 Subject: [PATCH 0007/1984] fix(hook): ignore unknown push options instead of failing If a repository has git config --add push.pushOption submit=".sourcehut/*.yml" it failed when pushed because of the unknown submit push option. It will be ignored instead. Filtering out the push options is done in an earlier stage, when the hook command runs, before it submits the options map to the private endpoint. * move all the push options logic to modules/git/pushoptions * add 100% test coverage for modules/git/pushoptions Test coverage for the code paths from which code was moved to the modules/git/pushoptions package: * cmd/hook.go:runHookPreReceive * routers/private/hook_pre_receive.go:validatePushOptions tests/integration/git_push_test.go:TestOptionsGitPush runs through both. The test verifying the option is rejected was removed and, if added again, will fail because the option is now ignored instead of being rejected. * cmd/hook.go:runHookProcReceive * services/agit/agit.go:ProcReceive tests/integration/git_test.go: doCreateAgitFlowPull runs through both. It uses variations of AGit related push options. * cmd/hook.go:runHookPostReceive * routers/private/hook_post_receive.go:HookPostReceive tests/integration/git_test.go:doPushCreate called by TestGit/HTTP/sha1/PushCreate runs through both. Note that although it provides coverage for this code path it does not use push options. Fixes: https://codeberg.org/forgejo/forgejo/issues/3651 --- cmd/hook.go | 28 +---- cmd/hook_test.go | 15 --- modules/git/pushoptions/pushoptions.go | 113 ++++++++++++++++++ modules/git/pushoptions/pushoptions_test.go | 125 ++++++++++++++++++++ modules/private/hook.go | 28 +---- release-notes/8.0.0/fix/4253.md | 1 + routers/private/hook_post_receive.go | 7 +- routers/private/hook_pre_receive.go | 18 +-- services/agit/agit.go | 9 +- tests/integration/git_push_test.go | 14 +-- 10 files changed, 266 insertions(+), 92 deletions(-) create mode 100644 modules/git/pushoptions/pushoptions.go create mode 100644 modules/git/pushoptions/pushoptions_test.go create mode 100644 release-notes/8.0.0/fix/4253.md diff --git a/cmd/hook.go b/cmd/hook.go index f8184f9697..eec93aece7 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -15,6 +15,7 @@ import ( "time" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/git/pushoptions" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" repo_module "code.gitea.io/gitea/modules/repository" @@ -192,7 +193,7 @@ Forgejo or set your environment appropriately.`, "") GitAlternativeObjectDirectories: os.Getenv(private.GitAlternativeObjectDirectories), GitObjectDirectory: os.Getenv(private.GitObjectDirectory), GitQuarantinePath: os.Getenv(private.GitQuarantinePath), - GitPushOptions: pushOptions(), + GitPushOptions: pushoptions.New().ReadEnv().Map(), PullRequestID: prID, DeployKeyID: deployKeyID, ActionPerm: int(actionPerm), @@ -375,7 +376,7 @@ Forgejo or set your environment appropriately.`, "") GitAlternativeObjectDirectories: os.Getenv(private.GitAlternativeObjectDirectories), GitObjectDirectory: os.Getenv(private.GitObjectDirectory), GitQuarantinePath: os.Getenv(private.GitQuarantinePath), - GitPushOptions: pushOptions(), + GitPushOptions: pushoptions.New().ReadEnv().Map(), PullRequestID: prID, PushTrigger: repo_module.PushTrigger(os.Getenv(repo_module.EnvPushTrigger)), } @@ -488,21 +489,6 @@ func hookPrintResults(results []private.HookPostReceiveBranchResult) { } } -func pushOptions() map[string]string { - opts := make(map[string]string) - if pushCount, err := strconv.Atoi(os.Getenv(private.GitPushOptionCount)); err == nil { - for idx := 0; idx < pushCount; idx++ { - opt := os.Getenv(fmt.Sprintf("GIT_PUSH_OPTION_%d", idx)) - key, value, found := strings.Cut(opt, "=") - if !found { - value = "true" - } - opts[key] = value - } - } - return opts -} - func runHookProcReceive(c *cli.Context) error { ctx, cancel := installSignals() defer cancel() @@ -627,6 +613,7 @@ Forgejo or set your environment appropriately.`, "") hookOptions.GitPushOptions = make(map[string]string) if hasPushOptions { + pushOptions := pushoptions.NewFromMap(&hookOptions.GitPushOptions) for { rs, err = readPktLine(ctx, reader, pktLineTypeUnknown) if err != nil { @@ -636,12 +623,7 @@ Forgejo or set your environment appropriately.`, "") if rs.Type == pktLineTypeFlush { break } - - key, value, found := strings.Cut(string(rs.Data), "=") - if !found { - value = "true" - } - hookOptions.GitPushOptions[key] = value + pushOptions.Parse(string(rs.Data)) } } diff --git a/cmd/hook_test.go b/cmd/hook_test.go index 91731f77c0..36149eb91f 100644 --- a/cmd/hook_test.go +++ b/cmd/hook_test.go @@ -15,7 +15,6 @@ import ( "testing" "time" - "code.gitea.io/gitea/modules/private" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/test" @@ -164,20 +163,6 @@ func TestDelayWriter(t *testing.T) { }) } -func TestPushOptions(t *testing.T) { - require.NoError(t, os.Setenv(private.GitPushOptionCount, "3")) - require.NoError(t, os.Setenv("GIT_PUSH_OPTION_0", "force-push")) - require.NoError(t, os.Setenv("GIT_PUSH_OPTION_1", "option=value")) - require.NoError(t, os.Setenv("GIT_PUSH_OPTION_2", "option-double=another=value")) - require.NoError(t, os.Setenv("GIT_PUSH_OPTION_3", "not=valid")) - - assert.Equal(t, map[string]string{ - "force-push": "true", - "option": "value", - "option-double": "another=value", - }, pushOptions()) -} - func TestRunHookUpdate(t *testing.T) { app := cli.NewApp() app.Commands = []*cli.Command{subcmdHookUpdate} diff --git a/modules/git/pushoptions/pushoptions.go b/modules/git/pushoptions/pushoptions.go new file mode 100644 index 0000000000..9709a8be79 --- /dev/null +++ b/modules/git/pushoptions/pushoptions.go @@ -0,0 +1,113 @@ +// Copyright twenty-panda +// SPDX-License-Identifier: MIT + +package pushoptions + +import ( + "fmt" + "os" + "strconv" + "strings" +) + +type Key string + +const ( + RepoPrivate = Key("repo.private") + RepoTemplate = Key("repo.template") + AgitTopic = Key("topic") + AgitForcePush = Key("force-push") + AgitTitle = Key("title") + AgitDescription = Key("description") + + envPrefix = "GIT_PUSH_OPTION" + EnvCount = envPrefix + "_COUNT" + EnvFormat = envPrefix + "_%d" +) + +type Interface interface { + ReadEnv() Interface + Parse(string) bool + Map() map[string]string + + ChangeRepoSettings() bool + + Empty() bool + + GetBool(key Key, def bool) bool + GetString(key Key) (val string, ok bool) +} + +type gitPushOptions map[string]string + +func New() Interface { + pushOptions := gitPushOptions(make(map[string]string)) + return &pushOptions +} + +func NewFromMap(o *map[string]string) Interface { + return (*gitPushOptions)(o) +} + +func (o *gitPushOptions) ReadEnv() Interface { + if pushCount, err := strconv.Atoi(os.Getenv(EnvCount)); err == nil { + for idx := 0; idx < pushCount; idx++ { + _ = o.Parse(os.Getenv(fmt.Sprintf(EnvFormat, idx))) + } + } + return o +} + +func (o *gitPushOptions) Parse(data string) bool { + key, value, found := strings.Cut(data, "=") + if !found { + value = "true" + } + switch Key(key) { + case RepoPrivate: + case RepoTemplate: + case AgitTopic: + case AgitForcePush: + case AgitTitle: + case AgitDescription: + default: + return false + } + (*o)[key] = value + return true +} + +func (o gitPushOptions) Map() map[string]string { + return o +} + +func (o gitPushOptions) ChangeRepoSettings() bool { + if o.Empty() { + return false + } + for _, key := range []Key{RepoPrivate, RepoTemplate} { + _, ok := o[string(key)] + if ok { + return true + } + } + return false +} + +func (o gitPushOptions) Empty() bool { + return len(o) == 0 +} + +func (o gitPushOptions) GetBool(key Key, def bool) bool { + if val, ok := o[string(key)]; ok { + if b, err := strconv.ParseBool(val); err == nil { + return b + } + } + return def +} + +func (o gitPushOptions) GetString(key Key) (string, bool) { + val, ok := o[string(key)] + return val, ok +} diff --git a/modules/git/pushoptions/pushoptions_test.go b/modules/git/pushoptions/pushoptions_test.go new file mode 100644 index 0000000000..49bf2d275b --- /dev/null +++ b/modules/git/pushoptions/pushoptions_test.go @@ -0,0 +1,125 @@ +// Copyright twenty-panda +// SPDX-License-Identifier: MIT + +package pushoptions + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestEmpty(t *testing.T) { + options := New() + assert.True(t, options.Empty()) + options.Parse(fmt.Sprintf("%v", RepoPrivate)) + assert.False(t, options.Empty()) +} + +func TestToAndFromMap(t *testing.T) { + options := New() + options.Parse(fmt.Sprintf("%v", RepoPrivate)) + actual := options.Map() + expected := map[string]string{string(RepoPrivate): "true"} + assert.EqualValues(t, expected, actual) + assert.EqualValues(t, expected, NewFromMap(&actual).Map()) +} + +func TestChangeRepositorySettings(t *testing.T) { + options := New() + assert.False(t, options.ChangeRepoSettings()) + assert.True(t, options.Parse(fmt.Sprintf("%v=description", AgitDescription))) + assert.False(t, options.ChangeRepoSettings()) + + options.Parse(fmt.Sprintf("%v", RepoPrivate)) + assert.True(t, options.ChangeRepoSettings()) + + options = New() + options.Parse(fmt.Sprintf("%v", RepoTemplate)) + assert.True(t, options.ChangeRepoSettings()) +} + +func TestParse(t *testing.T) { + t.Run("no key", func(t *testing.T) { + options := New() + + val, ok := options.GetString(RepoPrivate) + assert.False(t, ok) + assert.Equal(t, "", val) + + assert.True(t, options.GetBool(RepoPrivate, true)) + assert.False(t, options.GetBool(RepoPrivate, false)) + }) + + t.Run("key=value", func(t *testing.T) { + options := New() + + topic := "TOPIC" + assert.True(t, options.Parse(fmt.Sprintf("%v=%s", AgitTopic, topic))) + val, ok := options.GetString(AgitTopic) + assert.True(t, ok) + assert.Equal(t, topic, val) + }) + + t.Run("key=true", func(t *testing.T) { + options := New() + + assert.True(t, options.Parse(fmt.Sprintf("%v=true", RepoPrivate))) + assert.True(t, options.GetBool(RepoPrivate, false)) + assert.True(t, options.Parse(fmt.Sprintf("%v=TRUE", RepoTemplate))) + assert.True(t, options.GetBool(RepoTemplate, false)) + }) + + t.Run("key=false", func(t *testing.T) { + options := New() + + assert.True(t, options.Parse(fmt.Sprintf("%v=false", RepoPrivate))) + assert.False(t, options.GetBool(RepoPrivate, true)) + }) + + t.Run("key", func(t *testing.T) { + options := New() + + assert.True(t, options.Parse(fmt.Sprintf("%v", RepoPrivate))) + assert.True(t, options.GetBool(RepoPrivate, false)) + }) + + t.Run("unknown keys are ignored", func(t *testing.T) { + options := New() + + assert.True(t, options.Empty()) + assert.False(t, options.Parse("unknown=value")) + assert.True(t, options.Empty()) + }) +} + +func TestReadEnv(t *testing.T) { + t.Setenv(envPrefix+"_0", fmt.Sprintf("%v=true", AgitForcePush)) + t.Setenv(envPrefix+"_1", fmt.Sprintf("%v", RepoPrivate)) + t.Setenv(envPrefix+"_2", fmt.Sprintf("%v=equal=in string", AgitTitle)) + t.Setenv(envPrefix+"_3", "not=valid") + t.Setenv(envPrefix+"_4", fmt.Sprintf("%v=description", AgitDescription)) + t.Setenv(EnvCount, "5") + + options := New().ReadEnv() + + assert.True(t, options.GetBool(AgitForcePush, false)) + assert.True(t, options.GetBool(RepoPrivate, false)) + assert.False(t, options.GetBool(RepoTemplate, false)) + + { + val, ok := options.GetString(AgitTitle) + assert.True(t, ok) + assert.Equal(t, "equal=in string", val) + } + { + val, ok := options.GetString(AgitDescription) + assert.True(t, ok) + assert.Equal(t, "description", val) + } + { + _, ok := options.GetString(AgitTopic) + assert.False(t, ok) + } +} diff --git a/modules/private/hook.go b/modules/private/hook.go index 1d0ef4e3a9..93cbcd469d 100644 --- a/modules/private/hook.go +++ b/modules/private/hook.go @@ -7,10 +7,10 @@ import ( "context" "fmt" "net/url" - "strconv" "time" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/git/pushoptions" "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" ) @@ -20,28 +20,8 @@ const ( GitAlternativeObjectDirectories = "GIT_ALTERNATE_OBJECT_DIRECTORIES" GitObjectDirectory = "GIT_OBJECT_DIRECTORY" GitQuarantinePath = "GIT_QUARANTINE_PATH" - GitPushOptionCount = "GIT_PUSH_OPTION_COUNT" ) -// GitPushOptions is a wrapper around a map[string]string -type GitPushOptions map[string]string - -// GitPushOptions keys -const ( - GitPushOptionRepoPrivate = "repo.private" - GitPushOptionRepoTemplate = "repo.template" -) - -// Bool checks for a key in the map and parses as a boolean -func (g GitPushOptions) Bool(key string, def bool) bool { - if val, ok := g[key]; ok { - if b, err := strconv.ParseBool(val); err == nil { - return b - } - } - return def -} - // HookOptions represents the options for the Hook calls type HookOptions struct { OldCommitIDs []string @@ -52,7 +32,7 @@ type HookOptions struct { GitObjectDirectory string GitAlternativeObjectDirectories string GitQuarantinePath string - GitPushOptions GitPushOptions + GitPushOptions map[string]string PullRequestID int64 PushTrigger repository.PushTrigger DeployKeyID int64 // if the pusher is a DeployKey, then UserID is the repo's org user. @@ -60,6 +40,10 @@ type HookOptions struct { ActionPerm int } +func (o *HookOptions) GetGitPushOptions() pushoptions.Interface { + return pushoptions.NewFromMap(&o.GitPushOptions) +} + // SSHLogOption ssh log options type SSHLogOption struct { IsError bool diff --git a/release-notes/8.0.0/fix/4253.md b/release-notes/8.0.0/fix/4253.md new file mode 100644 index 0000000000..1533c2a734 --- /dev/null +++ b/release-notes/8.0.0/fix/4253.md @@ -0,0 +1 @@ +- unknown git push options are rejected instead of being ignored diff --git a/routers/private/hook_post_receive.go b/routers/private/hook_post_receive.go index b78f19d51e..11d1161e85 100644 --- a/routers/private/hook_post_receive.go +++ b/routers/private/hook_post_receive.go @@ -18,6 +18,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/git/pushoptions" "code.gitea.io/gitea/modules/gitrepo" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" @@ -170,7 +171,7 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) { } // Handle Push Options - if len(opts.GitPushOptions) > 0 { + if !opts.GetGitPushOptions().Empty() { // load the repository if repo == nil { repo = loadRepository(ctx, ownerName, repoName) @@ -181,8 +182,8 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) { wasEmpty = repo.IsEmpty } - repo.IsPrivate = opts.GitPushOptions.Bool(private.GitPushOptionRepoPrivate, repo.IsPrivate) - repo.IsTemplate = opts.GitPushOptions.Bool(private.GitPushOptionRepoTemplate, repo.IsTemplate) + repo.IsPrivate = opts.GetGitPushOptions().GetBool(pushoptions.RepoPrivate, repo.IsPrivate) + repo.IsTemplate = opts.GetGitPushOptions().GetBool(pushoptions.RepoTemplate, repo.IsTemplate) if err := repo_model.UpdateRepositoryCols(ctx, repo, "is_private", "is_template"); err != nil { log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err) ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{ diff --git a/routers/private/hook_pre_receive.go b/routers/private/hook_pre_receive.go index 456a288b00..8f7575c1db 100644 --- a/routers/private/hook_pre_receive.go +++ b/routers/private/hook_pre_receive.go @@ -123,23 +123,7 @@ func (ctx *preReceiveContext) canChangeSettings() error { func (ctx *preReceiveContext) validatePushOptions() error { opts := web.GetForm(ctx).(*private.HookOptions) - if len(opts.GitPushOptions) == 0 { - return nil - } - - changesRepoSettings := false - for key := range opts.GitPushOptions { - switch key { - case private.GitPushOptionRepoPrivate, private.GitPushOptionRepoTemplate: - changesRepoSettings = true - case "topic", "force-push", "title", "description": - // Agit options - default: - return fmt.Errorf("unknown option %s", key) - } - } - - if changesRepoSettings { + if opts.GetGitPushOptions().ChangeRepoSettings() { return ctx.canChangeSettings() } diff --git a/services/agit/agit.go b/services/agit/agit.go index e46a5771e1..bd8cc82e55 100644 --- a/services/agit/agit.go +++ b/services/agit/agit.go @@ -13,6 +13,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/git/pushoptions" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" notify_service "code.gitea.io/gitea/services/notify" @@ -23,10 +24,10 @@ import ( func ProcReceive(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, opts *private.HookOptions) ([]private.HookProcReceiveRefResult, error) { results := make([]private.HookProcReceiveRefResult, 0, len(opts.OldCommitIDs)) - topicBranch := opts.GitPushOptions["topic"] - _, forcePush := opts.GitPushOptions["force-push"] - title, hasTitle := opts.GitPushOptions["title"] - description, hasDesc := opts.GitPushOptions["description"] + topicBranch, _ := opts.GetGitPushOptions().GetString(pushoptions.AgitTopic) + _, forcePush := opts.GetGitPushOptions().GetString(pushoptions.AgitForcePush) + title, hasTitle := opts.GetGitPushOptions().GetString(pushoptions.AgitTitle) + description, hasDesc := opts.GetGitPushOptions().GetString(pushoptions.AgitDescription) objectFormat := git.ObjectFormatFromName(repo.ObjectFormatName) diff --git a/tests/integration/git_push_test.go b/tests/integration/git_push_test.go index 8a9fe81e24..06d985cff7 100644 --- a/tests/integration/git_push_test.go +++ b/tests/integration/git_push_test.go @@ -225,16 +225,14 @@ func testOptionsGitPush(t *testing.T, u *url.URL) { u.User = url.UserPassword(user.LowerName, userPassword) doGitAddRemote(gitPath, "origin", u)(t) - t.Run("Unknown push options are rejected", func(t *testing.T) { - logChecker, cleanup := test.NewLogChecker(log.DEFAULT, log.TRACE) - logChecker.Filter("unknown option").StopMark("Git push options validation") - defer cleanup() + t.Run("Unknown push options are silently ignored", func(t *testing.T) { branchName := "branch0" doGitCreateBranch(gitPath, branchName)(t) - doGitPushTestRepositoryFail(gitPath, "origin", branchName, "-o", "repo.template=false", "-o", "uknownoption=randomvalue")(t) - logFiltered, logStopped := logChecker.Check(5 * time.Second) - assert.True(t, logStopped) - assert.True(t, logFiltered[0]) + doGitPushTestRepository(gitPath, "origin", branchName, "-o", "uknownoption=randomvalue", "-o", "repo.private=true")(t) + repo, err := repo_model.GetRepositoryByOwnerAndName(db.DefaultContext, user.Name, "repo-to-push") + require.NoError(t, err) + require.True(t, repo.IsPrivate) + require.False(t, repo.IsTemplate) }) t.Run("Owner sets private & template to true via push options", func(t *testing.T) { From f752ab5eddb74f3218d182b1b12807746cbf0dae Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Jul 2024 00:02:23 +0000 Subject: [PATCH 0008/1984] Update dependency katex to v0.16.11 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c628bd836..494c5784c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "htmx.org": "1.9.12", "idiomorph": "0.3.0", "jquery": "3.7.1", - "katex": "0.16.10", + "katex": "0.16.11", "license-checker-webpack-plugin": "0.2.1", "mermaid": "10.9.1", "mini-css-extract-plugin": "2.9.0", @@ -8578,9 +8578,9 @@ "license": "MIT" }, "node_modules/katex": { - "version": "0.16.10", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz", - "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==", + "version": "0.16.11", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.11.tgz", + "integrity": "sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" diff --git a/package.json b/package.json index 3c4d79f6a1..11227ca47c 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "htmx.org": "1.9.12", "idiomorph": "0.3.0", "jquery": "3.7.1", - "katex": "0.16.10", + "katex": "0.16.11", "license-checker-webpack-plugin": "0.2.1", "mermaid": "10.9.1", "mini-css-extract-plugin": "2.9.0", From fa1a853db08a4c5707414bb9f66783771da080ee Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Jul 2024 08:23:00 +0000 Subject: [PATCH 0009/1984] Update dependency go to v1.22.5 --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 2791a7f5a4..32d8b9b4d7 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module code.gitea.io/gitea go 1.22.0 -toolchain go1.22.4 +toolchain go1.22.5 require ( code.forgejo.org/f3/gof3/v3 v3.4.0 From ee7f568aed56ee4c4d7e15b9d4c7db22fa768650 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Wed, 3 Jul 2024 11:25:45 +0200 Subject: [PATCH 0010/1984] fix(ci): do not block pull request CI when go-versions lags behind When a new go version is published, it takes about 24h for https://github.com/actions/go-versions to be updated (see https://github.com/actions/go-versions/pull/102 for example). In the meantime the setup-go action that depends on it will install a version of go that fails golang.org/x/vuln/cmd/govulncheck. Move the security check to be the last step of the test job instead of the first. It will still block the PRs from being merged but it will allow the PR authors to keep working and look at the test results in the meantime. Fixes: https://codeberg.org/forgejo/forgejo/issues/4294 --- .forgejo/workflows/testing.yml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/testing.yml b/.forgejo/workflows/testing.yml index 7eb40fec8c..154b5806d7 100644 --- a/.forgejo/workflows/testing.yml +++ b/.forgejo/workflows/testing.yml @@ -25,7 +25,7 @@ jobs: go-version: "1.22" check-latest: true - run: make deps-backend deps-tools - - run: make --always-make -j$(nproc) lint-backend checks-backend # ensure the "go-licenses" make target runs + - run: make --always-make -j$(nproc) lint-backend tidy-check swagger-check fmt-check swagger-validate # ensure the "go-licenses" make target runs frontend-checks: if: ${{ !startsWith(vars.ROLE, 'forgejo-') }} runs-on: docker @@ -274,3 +274,22 @@ jobs: RACE_ENABLED: true TEST_TAGS: sqlite sqlite_unlock_notify USE_REPO_TEST_DIR: 1 + security-check: + if: ${{ !startsWith(vars.ROLE, 'forgejo-') }} + runs-on: docker + needs: + - test-sqlite + - test-pgsql + - test-mysql + - test-remote-cacher + - test-unit + container: + image: 'docker.io/node:20-bookworm' + steps: + - uses: https://code.forgejo.org/actions/checkout@v3 + - uses: https://code.forgejo.org/actions/setup-go@v4 + with: + go-version: "1.22" + check-latest: true + - run: make deps-backend deps-tools + - run: make security-check From e510f2e84d36fb4af3b7cb28a5bc5cedc9392b29 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Jul 2024 16:03:51 +0000 Subject: [PATCH 0011/1984] Update dependency @playwright/test to v1.45.1 --- package-lock.json | 24 ++++++++++++------------ package.json | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c628bd836..2ad477b0f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,7 @@ }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "4.3.0", - "@playwright/test": "1.45.0", + "@playwright/test": "1.45.1", "@stoplight/spectral-cli": "6.11.1", "@stylistic/eslint-plugin-js": "1.8.1", "@stylistic/stylelint-plugin": "2.1.2", @@ -1501,13 +1501,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.0.tgz", - "integrity": "sha512-TVYsfMlGAaxeUllNkywbwek67Ncf8FRGn8ZlRdO291OL3NjG9oMbfVhyP82HQF0CZLMrYsvesqoUekxdWuF9Qw==", + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.1.tgz", + "integrity": "sha512-Wo1bWTzQvGA7LyKGIZc8nFSTFf2TkthGIFBR+QVNilvwouGzFd4PYukZe3rvf5PSqjHi1+1NyKSDZKcQWETzaA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.45.0" + "playwright": "1.45.1" }, "bin": { "playwright": "cli.js" @@ -10525,13 +10525,13 @@ } }, "node_modules/playwright": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.0.tgz", - "integrity": "sha512-4z3ac3plDfYzGB6r0Q3LF8POPR20Z8D0aXcxbJvmfMgSSq1hkcgvFRXJk9rUq5H/MJ0Ktal869hhOdI/zUTeLA==", + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.1.tgz", + "integrity": "sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.45.0" + "playwright-core": "1.45.1" }, "bin": { "playwright": "cli.js" @@ -10544,9 +10544,9 @@ } }, "node_modules/playwright-core": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.0.tgz", - "integrity": "sha512-lZmHlFQ0VYSpAs43dRq1/nJ9G/6SiTI7VPqidld9TDefL9tX87bTKExWZZUF5PeRyqtXqd8fQi2qmfIedkwsNQ==", + "version": "1.45.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.1.tgz", + "integrity": "sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 3c4d79f6a1..7abe6be6c3 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "4.3.0", - "@playwright/test": "1.45.0", + "@playwright/test": "1.45.1", "@stoplight/spectral-cli": "6.11.1", "@stylistic/eslint-plugin-js": "1.8.1", "@stylistic/stylelint-plugin": "2.1.2", From 75966ddef6f58eba7e2fb7b0336bcdda212c6099 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Jul 2024 16:03:58 +0000 Subject: [PATCH 0012/1984] Update module golang.org/x/tools/gopls to v0.16.1 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 464c86e3b9..2c7c976f4a 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ 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.22.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.0 # renovate: datasource=go +GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.16.1 # renovate: datasource=go RENOVATE_NPM_PACKAGE ?= renovate@37.421.2 # renovate: datasource=docker packageName=ghcr.io/visualon/renovate DOCKER_IMAGE ?= gitea/gitea From 4101260d6eb5ca8d28ad9d3c8e9885c6aa7d678a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 3 Jul 2024 18:07:19 +0000 Subject: [PATCH 0013/1984] Update module github.com/minio/minio-go/v7 to v7.0.73 --- go.mod | 7 ++++--- go.sum | 14 ++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 32d8b9b4d7..eb48cf8e99 100644 --- a/go.mod +++ b/go.mod @@ -70,7 +70,7 @@ require ( github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 github.com/keybase/go-crypto v0.0.0-20200123153347-de78d2cb44f4 github.com/klauspost/compress v1.17.9 - github.com/klauspost/cpuid/v2 v2.2.7 + github.com/klauspost/cpuid/v2 v2.2.8 github.com/lib/pq v1.10.9 github.com/markbates/goth v1.80.0 github.com/mattn/go-isatty v0.0.20 @@ -78,7 +78,7 @@ require ( github.com/meilisearch/meilisearch-go v0.26.1 github.com/mholt/archiver/v3 v3.5.1 github.com/microcosm-cc/bluemonday v1.0.26 - github.com/minio/minio-go/v7 v7.0.70 + github.com/minio/minio-go/v7 v7.0.73 github.com/msteinert/pam v1.2.0 github.com/nektos/act v0.2.52 github.com/niklasfasching/go-org v1.7.0 @@ -185,6 +185,7 @@ require ( github.com/go-faster/city v1.0.1 // indirect github.com/go-faster/errors v0.7.1 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-ini/ini v1.67.0 // indirect github.com/go-openapi/analysis v0.22.2 // indirect github.com/go-openapi/errors v0.21.0 // indirect github.com/go-openapi/inflect v0.19.0 // indirect @@ -197,7 +198,7 @@ require ( github.com/go-openapi/swag v0.22.7 // indirect github.com/go-openapi/validate v0.22.6 // indirect github.com/go-webauthn/x v0.1.6 // indirect - github.com/goccy/go-json v0.10.2 // indirect + github.com/goccy/go-json v0.10.3 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/geo v0.0.0-20230421003525-6adc56603217 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect diff --git a/go.sum b/go.sum index df7c7ccf02..0e046699a8 100644 --- a/go.sum +++ b/go.sum @@ -268,6 +268,8 @@ github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMj github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ldap/ldap/v3 v3.4.6 h1:ert95MdbiG7aWo/oPYp9btL3KJlMPKnP58r09rI8T+A= github.com/go-ldap/ldap/v3 v3.4.6/go.mod h1:IGMQANNtxpsOzj7uUAMjpGBaOVTC4DYyIy8VsTdxmtc= github.com/go-openapi/analysis v0.22.2 h1:ZBmNoP2h5omLKr/srIC9bfqrUGzT6g6gNv03HE9Vpj0= @@ -314,8 +316,8 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f h1:3BSP1Tbs2djlpprl7wCLuiqMaUh5SJkkzI2gDs+FgLs= github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14= @@ -471,8 +473,8 @@ github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ib github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= -github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= -github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= +github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= @@ -524,8 +526,8 @@ github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.70 h1:1u9NtMgfK1U42kUxcsl5v0yj6TEOPR497OAQxpJnn2g= -github.com/minio/minio-go/v7 v7.0.70/go.mod h1:4yBA8v80xGA30cfM3fz0DKYMXunWl/AV/6tWEs9ryzo= +github.com/minio/minio-go/v7 v7.0.73 h1:qr2vi96Qm7kZ4v7LLebjte+MQh621fFWnv93p12htEo= +github.com/minio/minio-go/v7 v7.0.73/go.mod h1:qydcVzV8Hqtj1VtEocfxbmVFa2siu6HGa+LDEPogjD8= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= From 11433a537865d48186895506ea337b3a908836f1 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Wed, 3 Jul 2024 20:33:56 +0200 Subject: [PATCH 0014/1984] docs(licenses): add github.com/go-ini/ini --- assets/go-licenses.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/go-licenses.json b/assets/go-licenses.json index 8dc0d008f6..967da874c3 100644 --- a/assets/go-licenses.json +++ b/assets/go-licenses.json @@ -459,6 +459,11 @@ "path": "github.com/go-git/go-git/v5/LICENSE", "licenseText": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"{}\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright 2018 Sourced Technologies, S.L.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n" }, + { + "name": "github.com/go-ini/ini", + "path": "github.com/go-ini/ini/LICENSE", + "licenseText": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, \"control\" means (i) the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising\npermissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that\nis based on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work\nby the copyright owner or by an individual or Legal Entity authorized to submit\non behalf of the copyright owner. For the purposes of this definition,\n\"submitted\" means any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems, and\nissue tracking systems that are managed by, or on behalf of, the Licensor for\nthe purpose of discussing and improving the Work, but excluding communication\nthat is conspicuously marked or otherwise designated in writing by the copyright\nowner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf\nof whom a Contribution has been received by Licensor and subsequently\nincorporated within the Work.\n\n2. Grant of Copyright License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable copyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the Work and such\nDerivative Works in Source or Object form.\n\n3. Grant of Patent License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable (except as stated in this section) patent license to make, have\nmade, use, offer to sell, sell, import, and otherwise transfer the Work, where\nsuch license applies only to those patent claims licensable by such Contributor\nthat are necessarily infringed by their Contribution(s) alone or by combination\nof their Contribution(s) with the Work to which such Contribution(s) was\nsubmitted. If You institute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work or a\nContribution incorporated within the Work constitutes direct or contributory\npatent infringement, then any patent licenses granted to You under this License\nfor that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution.\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof\nin any medium, with or without modifications, and in Source or Object form,\nprovided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of\nthis License; and\nYou must cause any modified files to carry prominent notices stating that You\nchanged the files; and\nYou must retain, in the Source form of any Derivative Works that You distribute,\nall copyright, patent, trademark, and attribution notices from the Source form\nof the Work, excluding those notices that do not pertain to any part of the\nDerivative Works; and\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any\nDerivative Works that You distribute must include a readable copy of the\nattribution notices contained within such NOTICE file, excluding those notices\nthat do not pertain to any part of the Derivative Works, in at least one of the\nfollowing places: within a NOTICE text file distributed as part of the\nDerivative Works; within the Source form or documentation, if provided along\nwith the Derivative Works; or, within a display generated by the Derivative\nWorks, if and wherever such third-party notices normally appear. The contents of\nthe NOTICE file are for informational purposes only and do not modify the\nLicense. You may add Your own attribution notices within Derivative Works that\nYou distribute, alongside or as an addendum to the NOTICE text from the Work,\nprovided that such additional attribution notices cannot be construed as\nmodifying the License.\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n5. Submission of Contributions.\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted\nfor inclusion in the Work by You to the Licensor shall be under the terms and\nconditions of this License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify the terms of\nany separate license agreement you may have executed with Licensor regarding\nsuch Contributions.\n\n6. Trademarks.\n\nThis License does not grant permission to use the trade names, trademarks,\nservice marks, or product names of the Licensor, except as required for\nreasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty.\n\nUnless required by applicable law or agreed to in writing, Licensor provides the\nWork (and each Contributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,\nincluding, without limitation, any warranties or conditions of TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are\nsolely responsible for determining the appropriateness of using or\nredistributing the Work and assume any risks associated with Your exercise of\npermissions under this License.\n\n8. Limitation of Liability.\n\nIn no event and under no legal theory, whether in tort (including negligence),\ncontract, or otherwise, unless required by applicable law (such as deliberate\nand grossly negligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special, incidental,\nor consequential damages of any character arising as a result of this License or\nout of the use or inability to use the Work (including but not limited to\ndamages for loss of goodwill, work stoppage, computer failure or malfunction, or\nany and all other commercial damages or losses), even if such Contributor has\nbeen advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability.\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to\noffer, and charge a fee for, acceptance of support, warranty, indemnity, or\nother liability obligations and/or rights consistent with this License. However,\nin accepting such obligations, You may act only on Your own behalf and on Your\nsole responsibility, not on behalf of any other Contributor, and only if You\nagree to indemnify, defend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason of your\naccepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets \"[]\" replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also\nrecommend that a file or class name and description of purpose be included on\nthe same \"printed page\" as the copyright notice for easier identification within\nthird-party archives.\n\n Copyright 2014 Unknwon\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n" + }, { "name": "github.com/go-ldap/ldap/v3", "path": "github.com/go-ldap/ldap/v3/LICENSE", From 4b485825c9b4002d0a124f01ce9026cad1d12519 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Wed, 3 Jul 2024 18:13:20 +0200 Subject: [PATCH 0015/1984] docs(release-notes): KaTeX add support for \emph --- release-notes/9.0.0/feat/4291.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 release-notes/9.0.0/feat/4291.md diff --git a/release-notes/9.0.0/feat/4291.md b/release-notes/9.0.0/feat/4291.md new file mode 100644 index 0000000000..58c17c41b5 --- /dev/null +++ b/release-notes/9.0.0/feat/4291.md @@ -0,0 +1 @@ +add support for \emph when rendering KaTeX From dc0fa915d46d3ec303a74ddeda92604cbb543f17 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Wed, 3 Jul 2024 10:03:45 +0200 Subject: [PATCH 0016/1984] docs(release-notes): 7.0.5 [skip ci] --- RELEASE-NOTES.md | 30 ++++++++++++++++++++++++++++++ release-notes/7.0.5/fix/4059.md | 1 - release-notes/8.0.0/fix/4124.md | 1 - release-notes/8.0.0/fix/4149.md | 1 - release-notes/8.0.0/fix/4258.md | 1 - 5 files changed, 30 insertions(+), 4 deletions(-) delete mode 100644 release-notes/7.0.5/fix/4059.md delete mode 100644 release-notes/8.0.0/fix/4124.md delete mode 100644 release-notes/8.0.0/fix/4149.md delete mode 100644 release-notes/8.0.0/fix/4258.md diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 3629afa3fb..b2192956e3 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -12,6 +12,36 @@ A [patch or minor release](https://semver.org/spec/v2.0.0.html) (e.g. upgrading TBD +## 7.0.5 + +This is a security release. See the documentation for more information on the [upgrade procedure](https://forgejo.org/docs/v7.0/admin/upgrade/). + +In addition to the following notable bug fixes, you can browse the [full list of pull requests](https://codeberg.org/forgejo/forgejo/pulls?milestone=6654) included in this release. + +* **regreSSHion** + + Recommended action when running Forgejo from a: + * binary - upgrade the OpenSSH server that was installed independently. + * root OCI image - upgrade to [Forgejo 7.0.5](https://codeberg.org/forgejo/-/packages/container/forgejo/7.0.5). + * rootless OCI image - no upgrade is necessary. + + [CVE-2024-6387](https://nvd.nist.gov/vuln/detail/CVE-2024-6387) also known as [regreSSHion](https://www.qualys.com/regresshion-cve-2024-6387/) is an Unauthenticated Remote Code Execution (RCE) vulnerability in OpenSSH’s server (sshd) on glibc-based Linux systems. It is **strongly recommended** that an OpenSSH server installed independently of Forgejo is upgraded as soon as possible. + + All Forgejo OCI root images, including [7.0.5](https://codeberg.org/forgejo/-/packages/container/forgejo/7.0.5) contain an OpenSSH server. They are based on https://alpinelinux.org/ which relies on https://musl.libc.org/ and not https://en.wikipedia.org/wiki/Glibc. As a precaution the [Forgejo v7.0.5 root OCI image](https://codeberg.org/forgejo/-/packages/container/forgejo/7.0.5) contains an [updated OpenSSH server](https://pkgs.alpinelinux.org/packages?name=openssh&branch=v3.19) patched for [CVE-2024-6387](https://nvd.nist.gov/vuln/detail/CVE-2024-6387). + + The Forgejo OCI rootless images, including [7.0.5](https://codeberg.org/forgejo/-/packages/container/forgejo/7.0.5-rootless), do not contain an OpenSSH server, they rely on the internal Forgejo implementation of the SSH protocol. + +* **Security:** + * Compiled with Go v1.22.5. Fixed: [CVE-2024-24791](https://nvd.nist.gov/vuln/detail/CVE-2024-24791) - [GO-2024-2963](https://pkg.go.dev/vuln/GO-2024-2963): Denial of service due to improper 100-continue handling in net/http. The net/http HTTP/1.1 client mishandled the case where a server responds to a request with an "Expect: 100-continue" header with a non-informational (200 or higher) status. This mishandling could leave a client connection in an invalid state, where the next request sent on the connection will fail. An attacker sending a request to a net/http/httputil.ReverseProxy proxy can exploit this mishandling to cause a denial of service by sending "Expect: 100-continue" requests which elicit a non-informational response from the backend. Each such request leaves the proxy with an invalid connection, and causes one subsequent request using that connection to fail. + +* **Bug fixes:** + * [backport](https://codeberg.org/forgejo/forgejo/pulls/4059) - [PR](https://codeberg.org/forgejo/forgejo/pulls/4194): Fixed: authentication Source Administration page wrongfully handles the "Custom URLs Instead of Default URLs" checkbox (missing checkbox, irrelevant fields). + * [backport](https://codeberg.org/forgejo/forgejo/pulls/4151) - [PR](https://codeberg.org/forgejo/forgejo/pulls/4149): Fixed: git push to an adopted repository fails. + * [backport](https://codeberg.org/forgejo/forgejo/pulls/4215) - [PR](https://codeberg.org/forgejo/forgejo/pulls/4213) - [commit](https://codeberg.org/forgejo/forgejo/commit/4ed5044dea94872e025f585debf7a16e6bd6bbdb): Fixed: markdown doesn't render math within brackets + * [backport](https://codeberg.org/forgejo/forgejo/pulls/4219) - [PR](https://codeberg.org/forgejo/forgejo/pulls/4145) - [commit](https://codeberg.org/forgejo/forgejo/commit/9aa3ae955ff506d883737e576dd62f674a3ee372): Fixed: selecting the "No Project" filter in the issue/pull request list has no effect + * [backport](https://codeberg.org/forgejo/forgejo/pulls/4248) - [PR](https://codeberg.org/forgejo/forgejo/pulls/4241): Fixed: error 500 when processing crafted TIFF files. + * [backport](https://codeberg.org/forgejo/forgejo/pulls/4261) - [PR](https://codeberg.org/forgejo/forgejo/pulls/4258): Fixed: wrong placeholder text in the form for adding repository collaborator. + ## 7.0.4 This is a security release. See the documentation for more information on the [upgrade procedure](https://forgejo.org/docs/v7.0/admin/upgrade/). diff --git a/release-notes/7.0.5/fix/4059.md b/release-notes/7.0.5/fix/4059.md deleted file mode 100644 index 359e517506..0000000000 --- a/release-notes/7.0.5/fix/4059.md +++ /dev/null @@ -1 +0,0 @@ -Authentication Source Administration page wrongfully handled the "Custom URLs Instead of Default URLs" checkbox (missing checkbox, irrelevant fields) [#4059](https://codeberg.org/forgejo/forgejo/pulls/4059) [#4194](https://codeberg.org/forgejo/forgejo/pulls/4194) \ No newline at end of file diff --git a/release-notes/8.0.0/fix/4124.md b/release-notes/8.0.0/fix/4124.md deleted file mode 100644 index 47c65e2ce9..0000000000 --- a/release-notes/8.0.0/fix/4124.md +++ /dev/null @@ -1 +0,0 @@ -Fixed bug in `GetIssueStats` diff --git a/release-notes/8.0.0/fix/4149.md b/release-notes/8.0.0/fix/4149.md deleted file mode 100644 index 0947df11a0..0000000000 --- a/release-notes/8.0.0/fix/4149.md +++ /dev/null @@ -1 +0,0 @@ -git push to an adopted repository fails diff --git a/release-notes/8.0.0/fix/4258.md b/release-notes/8.0.0/fix/4258.md deleted file mode 100644 index c8f7646d91..0000000000 --- a/release-notes/8.0.0/fix/4258.md +++ /dev/null @@ -1 +0,0 @@ -Fix wrong placeholder text in the form for adding repository collaborator From 319c4efbe7acaeeb6a093a0a1d063307d7c87929 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Jul 2024 00:02:31 +0000 Subject: [PATCH 0017/1984] Update module github.com/blevesearch/bleve/v2 to v2.4.1 --- go.mod | 12 ++++++------ go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index eb48cf8e99..6d4d30ab0e 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/PuerkitoBio/goquery v1.9.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.0 + github.com/blevesearch/bleve/v2 v2.4.1 github.com/buildkite/terminal-to-html/v3 v3.10.1 github.com/caddyserver/certmagic v0.21.0 github.com/chi-middleware/proxy v1.1.1 @@ -135,7 +135,7 @@ require ( github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Masterminds/sprig/v3 v3.2.3 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/RoaringBitmap/roaring v1.7.0 // indirect + github.com/RoaringBitmap/roaring v1.9.3 // indirect github.com/andybalholm/brotli v1.1.0 // indirect github.com/andybalholm/cascadia v1.3.2 // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect @@ -143,13 +143,13 @@ require ( github.com/aymerick/douceur v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.13.0 // indirect - github.com/blevesearch/bleve_index_api v1.1.6 // indirect + github.com/blevesearch/bleve_index_api v1.1.9 // indirect github.com/blevesearch/geo v0.1.20 // indirect - github.com/blevesearch/go-faiss v1.0.13 // indirect + github.com/blevesearch/go-faiss v1.0.19 // 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 - github.com/blevesearch/scorch_segment_api/v2 v2.2.9 // indirect + github.com/blevesearch/scorch_segment_api/v2 v2.2.14 // indirect github.com/blevesearch/segment v0.9.1 // indirect github.com/blevesearch/snowballstem v0.9.0 // indirect github.com/blevesearch/upsidedown_store_api v1.0.2 // indirect @@ -159,7 +159,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.13 // indirect - github.com/blevesearch/zapx/v16 v16.0.12 // indirect + github.com/blevesearch/zapx/v16 v16.1.4 // 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.2 // indirect diff --git a/go.sum b/go.sum index 0e046699a8..a422e44d61 100644 --- a/go.sum +++ b/go.sum @@ -64,8 +64,8 @@ github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0k github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE= github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk= -github.com/RoaringBitmap/roaring v1.7.0 h1:OZF303tJCER1Tj3x+aArx/S5X7hrT186ri6JjrGvG68= -github.com/RoaringBitmap/roaring v1.7.0/go.mod h1:6AXUsoIEzDTFFQCe1RbGA6uFONMhvejWj5rqITANK90= +github.com/RoaringBitmap/roaring v1.9.3 h1:t4EbC5qQwnisr5PrP9nt0IRhRTb9gMUgQF4t4S2OByM= +github.com/RoaringBitmap/roaring v1.9.3/go.mod h1:6AXUsoIEzDTFFQCe1RbGA6uFONMhvejWj5rqITANK90= github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/chroma/v2 v2.2.0/go.mod h1:vf4zrexSH54oEjJ7EdB65tGNHmH3pGZmVkgTP5RHvAs= @@ -97,22 +97,22 @@ 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.0 h1:2xyg+Wv60CFHYccXc+moGxbL+8QKT/dZK09AewHgKsg= -github.com/blevesearch/bleve/v2 v2.4.0/go.mod h1:IhQHoFAbHgWKYavb9rQgQEJJVMuY99cKdQ0wPpst2aY= -github.com/blevesearch/bleve_index_api v1.1.6 h1:orkqDFCBuNU2oHW9hN2YEJmet+TE9orml3FCGbl1cKk= -github.com/blevesearch/bleve_index_api v1.1.6/go.mod h1:PbcwjIcRmjhGbkS/lJCpfgVSMROV6TRubGGAODaK1W8= +github.com/blevesearch/bleve/v2 v2.4.1 h1:8QWqsifq693mN3h6cSigKqkKUsUfv5hu0FDgz/4bFuA= +github.com/blevesearch/bleve/v2 v2.4.1/go.mod h1:Ezmvsouspi+uVwnDzjIsCeUIT0WuBKlicP5JZnExWzo= +github.com/blevesearch/bleve_index_api v1.1.9 h1:Cpq0Lp3As0Gfk3+PmcoNDRKeI50C5yuFNpj0YlN/bOE= +github.com/blevesearch/bleve_index_api v1.1.9/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.13 h1:zfFs7ZYD0NqXVSY37j0JZjZT1BhE9AE4peJfcx/NB4A= -github.com/blevesearch/go-faiss v1.0.13/go.mod h1:jrxHrbl42X/RnDPI+wBoZU8joxxuRwedrxqswQ3xfU8= +github.com/blevesearch/go-faiss v1.0.19 h1:UKoP8hS7DVsVSRRloNJb4qPfe2UQ99pP4D3oXd23g2A= +github.com/blevesearch/go-faiss v1.0.19/go.mod h1:jrxHrbl42X/RnDPI+wBoZU8joxxuRwedrxqswQ3xfU8= 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= github.com/blevesearch/gtreap v0.1.1/go.mod h1:QaQyDRAT51sotthUWAH4Sj08awFSSWzgYICSZ3w0tYk= github.com/blevesearch/mmap-go v1.0.4 h1:OVhDhT5B/M1HNPpYPBKIEJaD0F3Si+CrEKULGCDPWmc= github.com/blevesearch/mmap-go v1.0.4/go.mod h1:EWmEAOmdAS9z/pi/+Toxu99DnsbhG1TIxUoRmJw/pSs= -github.com/blevesearch/scorch_segment_api/v2 v2.2.9 h1:3nBaSBRFokjE4FtPW3eUDgcAu3KphBg1GP07zy/6Uyk= -github.com/blevesearch/scorch_segment_api/v2 v2.2.9/go.mod h1:ckbeb7knyOOvAdZinn/ASbB7EA3HoagnJkmEV3J7+sg= +github.com/blevesearch/scorch_segment_api/v2 v2.2.14 h1:fgMLMpGWR7u2TdRm7XSZVWhPvMAcdYHh25Lq1fQ6Fjo= +github.com/blevesearch/scorch_segment_api/v2 v2.2.14/go.mod h1:B7+a7vfpY4NsjuTkpv/eY7RZ91Xr90VaJzT2t7upZN8= github.com/blevesearch/segment v0.9.1 h1:+dThDy+Lvgj5JMxhmOVlgFfkUtZV2kw49xax4+jTfSU= github.com/blevesearch/segment v0.9.1/go.mod h1:zN21iLm7+GnBHWTao9I+Au/7MBiL8pPFtJBJTsk6kQw= github.com/blevesearch/snowballstem v0.9.0 h1:lMQ189YspGP6sXvZQ4WZ+MLawfV8wOmPoD/iWeNXm8s= @@ -131,8 +131,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.13 h1:6EkfaZiPlAxqXz0neniq35my6S48QI94W/wyhnpDHHQ= github.com/blevesearch/zapx/v15 v15.3.13/go.mod h1:Turk/TNRKj9es7ZpKK95PS7f6D44Y7fAFy8F4LXQtGg= -github.com/blevesearch/zapx/v16 v16.0.12 h1:Uccxvjmn+hQ6ywQP+wIiTpdq9LnAviGoryJOmGwAo/I= -github.com/blevesearch/zapx/v16 v16.0.12/go.mod h1:MYnOshRfSm4C4drxx1LGRI+MVFByykJ2anDY1fxdk9Q= +github.com/blevesearch/zapx/v16 v16.1.4 h1:TBQfG77g2UUXwfjOVcEtB9pXkg6JBmGXkeZKI67+TiA= +github.com/blevesearch/zapx/v16 v16.1.4/go.mod h1:+Q+Z89Iv7ewhdX2jyE6Qs/RUnN4tZuokaQ0xvTaFmx8= 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= From 11596374ba1fb302a94022adf83efa693c59125b Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 4 Jul 2024 06:57:26 +0200 Subject: [PATCH 0018/1984] test: remove performance sensitive test A test must not fail depending on the performance of the machine it runs on. It creates false negative and serves no purpose. These are not benchmark tests for the hardware running them. --- modules/cache/cache_test.go | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modules/cache/cache_test.go b/modules/cache/cache_test.go index 0e7e7a647c..3f65040924 100644 --- a/modules/cache/cache_test.go +++ b/modules/cache/cache_test.go @@ -9,7 +9,6 @@ import ( "time" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/test" "github.com/stretchr/testify/assert" ) @@ -35,18 +34,6 @@ func TestNewContext(t *testing.T) { assert.Nil(t, con) } -func TestTest(t *testing.T) { - defer test.MockVariableValue(&conn, nil)() - _, err := Test() - assert.Error(t, err) - - createTestCache() - elapsed, err := Test() - assert.NoError(t, err) - // mem cache should take from 300ns up to 1ms on modern hardware ... - assert.Less(t, elapsed, SlowCacheThreshold) -} - func TestGetCache(t *testing.T) { createTestCache() From 15d25db3f8c71733c310c9a51de53c1c479bff8f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Jul 2024 06:07:24 +0000 Subject: [PATCH 0019/1984] Update dependency eslint-plugin-vue to v9.27.0 --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ad477b0f7..4a22c3ec8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,7 +84,7 @@ "eslint-plugin-unicorn": "52.0.0", "eslint-plugin-vitest": "0.5.4", "eslint-plugin-vitest-globals": "1.5.0", - "eslint-plugin-vue": "9.26.0", + "eslint-plugin-vue": "9.27.0", "eslint-plugin-vue-scoped-css": "2.8.1", "eslint-plugin-wc": "2.1.0", "happy-dom": "14.12.3", @@ -6461,9 +6461,9 @@ "license": "MIT" }, "node_modules/eslint-plugin-vue": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz", - "integrity": "sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", "dev": true, "license": "MIT", "dependencies": { @@ -6473,7 +6473,7 @@ "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", "semver": "^7.6.0", - "vue-eslint-parser": "^9.4.2", + "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" }, "engines": { diff --git a/package.json b/package.json index 7abe6be6c3..eca959cc17 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "eslint-plugin-unicorn": "52.0.0", "eslint-plugin-vitest": "0.5.4", "eslint-plugin-vitest-globals": "1.5.0", - "eslint-plugin-vue": "9.26.0", + "eslint-plugin-vue": "9.27.0", "eslint-plugin-vue-scoped-css": "2.8.1", "eslint-plugin-wc": "2.1.0", "happy-dom": "14.12.3", From 2a643d2136619ad2da3387f01117ad51e4b78625 Mon Sep 17 00:00:00 2001 From: Codeberg Translate Date: Thu, 4 Jul 2024 06:41:53 +0000 Subject: [PATCH 0020/1984] [I18N] Translations update from Weblate (#4251) Translations update from [Weblate](https://translate.codeberg.org) for [Forgejo/forgejo](https://translate.codeberg.org/projects/forgejo/forgejo/). Current translation status: ![Weblate translation status](https://translate.codeberg.org/widget/forgejo/forgejo/horizontal-auto.svg) Co-authored-by: 0ko <0ko@users.noreply.translate.codeberg.org> Co-authored-by: Panagiotis \"Ivory\" Vasilopoulos Co-authored-by: ZDev Co-authored-by: Fjuro Co-authored-by: Wuzzy Co-authored-by: fnetX Co-authored-by: hankskyjames777 Co-authored-by: Kita Ikuyo Co-authored-by: Marco Ciampa Co-authored-by: kdh8219 Co-authored-by: emansije Co-authored-by: b1nar10 Co-authored-by: Eryk Michalak Co-authored-by: revi Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4251 Co-authored-by: Codeberg Translate Co-committed-by: Codeberg Translate --- options/locale/locale_cs-CZ.ini | 16 ++ options/locale/locale_de-DE.ini | 28 +++- options/locale/locale_el-GR.ini | 276 +++++++++++++++++++------------- options/locale/locale_eo.ini | 4 + options/locale/locale_fil.ini | 30 +++- options/locale/locale_gl.ini | 4 +- options/locale/locale_it-IT.ini | 87 ++++++---- options/locale/locale_ja-JP.ini | 2 +- options/locale/locale_ko-KR.ini | 32 +++- options/locale/locale_pl-PL.ini | 82 ++++++++++ options/locale/locale_pt-PT.ini | 36 ++++- options/locale/locale_ru-RU.ini | 72 +++++---- 12 files changed, 474 insertions(+), 195 deletions(-) diff --git a/options/locale/locale_cs-CZ.ini b/options/locale/locale_cs-CZ.ini index fbfde28fcd..4e85309397 100644 --- a/options/locale/locale_cs-CZ.ini +++ b/options/locale/locale_cs-CZ.ini @@ -160,6 +160,7 @@ filter.clear = Vymazat filtry more_items = Další položky invalid_data = Neplatná data: %v copy_generic = Kopírovat do schránky +test = Test [aria] navbar=Navigační lišta @@ -191,6 +192,8 @@ buttons.ref.tooltip=Odkázat na problém nebo žádost o sloučení buttons.switch_to_legacy.tooltip=Použít starší editor buttons.enable_monospace_font=Zapnout neproporcionální písmo buttons.disable_monospace_font=Vypnout neproporcionální písmo +buttons.unindent.tooltip = Zrušit vnoření položek pod jednu úroveň +buttons.indent.tooltip = Vnořit položky pod jednu úroveň [filter] string.asc=A – Z @@ -2783,6 +2786,8 @@ pulls.edit.already_changed = Nepodařilo se uložit změny v žádosti o slouče comments.edit.already_changed = Nepodařilo se uložit změny v komentáři. Obsah byl nejspíše již změněn jiným uživatelem. Obnovte prosím stránku a zkuste jej znovu upravit, abyste zabránili přepsání změn uživatele subscribe.issue.guest.tooltip = Přihlaste se pro odebírání tohoto problému. subscribe.pull.guest.tooltip = Přihlaste se pro odebírání této žádosti o sloučení. +issues.author.tooltip.pr = Tento uživatel je autorem této žádosti o sloučení. +issues.author.tooltip.issue = Tento uživatel je autorem tohoto problému. [graphs] component_loading_info = Tohle může chvíli trvat… @@ -3471,6 +3476,10 @@ config_settings = Nastavení auths.tip.gitlab_new = Zaregistrujte si novou aplikaci na https://gitlab.com/-/profile/applications auths.default_domain_name = Výchozí doménové jméno použité pro e-mailovou adresu config.app_slogan = Slogan instance +config.cache_test_succeeded = Test mezipaměti byl úspěšný, odpověď byla obdržena za %s. +config.cache_test = Otestovat mezipaměť +config.cache_test_failed = Nepodařilo se prověřit mezipaměť: %v. +config.cache_test_slow = Test mezipaměti byl úspěšný, ale odpověď byla pomalá: %s. [action] create_repo=vytvořil/a repozitář %s @@ -3828,6 +3837,13 @@ need_approval_desc = Potřebovat schválení pro spouštění workflowů pro ž runners.runner_manage_panel = Správa runnerů runs.no_job_without_needs = Workflow musí obsahovat alespoň jednu práci bez závislostí. runs.no_job = Workflow musí obsahovat alespoň jednu úlohu +workflow.dispatch.use_from = Použít workflow z +workflow.dispatch.run = Spustit workflow +workflow.dispatch.input_required = Vyžadovaná hodnota pro vstup „%s“. +workflow.dispatch.invalid_input_type = Neplatný typ vstupu „%s“. +workflow.dispatch.warn_input_limit = Zobrazování prvních %d vstupů. +workflow.dispatch.trigger_found = Tento workflow má spouštěč událostí workflow_dispatch. +workflow.dispatch.success = Žádost o spuštění workflow byla úspěšně odeslána. [projects] type-1.display_name=Samostatný projekt diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index 2fdca4f1f1..cfe5dec8bb 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -158,6 +158,7 @@ filter.private = Privat more_items = Mehr Einträge invalid_data = Ungültige Daten: %v copy_generic = In die Zwischenablage kopieren +test = Test [aria] navbar=Navigationsleiste @@ -668,12 +669,12 @@ form.name_reserved=Der Benutzername „%s“ ist reserviert. form.name_pattern_not_allowed=Das Muster „%s“ ist nicht in einem Benutzernamen erlaubt. form.name_chars_not_allowed=Benutzername „%s“ enthält ungültige Zeichen. block_user = Benutzer blockieren -block_user.detail = Bitte beachte, dass andere Maßnahmen ergriffen werden, wenn du diesen Benutzer blockierst, wie: -block_user.detail_2 = Dieser Benutzer kann nicht mit deinem Repository, erstellten Issues und Kommentaren interagieren. -block_user.detail_1 = Dieser Benutzer folgt dir nicht mehr. +block_user.detail = Bitte beachte, dass die Blockierung eines Benutzers auch andere Auswirkungen hat, so wie: +block_user.detail_2 = Dieser Benutzer wird nicht mehr nicht mit deinen Repositorys oder von dir erstellten Issues und Kommentaren interagieren können. +block_user.detail_1 = Ihr werdet euch nicht mehr gegenseitig folgen und könnt euch auch nicht mehr gegenseitig folgen. block = Blockieren follow_blocked_user = Du kannst diesen Benutzer nicht folgen, weil du ihn blockiert hast, oder er dich blockiert hat. -block_user.detail_3 = Dieser Benutzer kann dich nicht als einen Mitarbeiter hinzufügen, und du kannst ihn nicht als Mitarbeiter hinzufügen. +block_user.detail_3 = Ihr werdet nicht mehr in der Lage sein, euch gegenseitig als Repository-Mitarbeiter hinzuzufügen. unblock = Nicht mehr blockieren followers_one = %d Follower following_one = %d Folge ich @@ -681,6 +682,10 @@ followers.title.few = Follower following.title.one = Folgt following.title.few = Folgt followers.title.one = Follower +public_activity.visibility_hint.self_public = Deine Aktivität ist sichtbar für alle, außer für Interaktionen in privaten Räumen. Konfigurieren. +public_activity.visibility_hint.admin_public = Diese Aktivität ist sichtbar für alle, aber als Administrator kannst du außerdem Interaktionen in privaten Räumen sehen. +public_activity.visibility_hint.self_private = Deine Aktivität ist nur sichtbar für dich und den Instanzadministratoren. Konfigurieren. +public_activity.visibility_hint.admin_private = Diese Aktivität ist sichtbar für dich, weil du ein Administrator bist, aber der Benutzer will sie privat halten. [settings] profile=Profil @@ -2750,7 +2755,7 @@ settings.transfer.button = Besitz übertragen settings.transfer.modal.title = Besitz übertragen wiki.no_search_results = Keine Ergebnisse wiki.search = Wiki durchsuchen -n_release_one = %s freigegebn +n_release_one = %s freigegeben n_release_few = %s Veröffentlichungen form.string_too_long = Die Zeichenkette ist länger als %d Zeichen. settings.federation_settings = Föderationseinstellungen @@ -2763,6 +2768,8 @@ issues.edit.already_changed = Die Änderungen an diesem Issue können nicht gesp pulls.edit.already_changed = Die Änderungen an diesem Pull-Request können nicht gespeichert werden. Es scheint, als seien die Inhalte bereits durch einen anderen Benutzer verändert worden. Bitte die Seite neu laden und das Bearbeiten erneut versuchen, um deren Änderungen nicht zu überschreiben subscribe.pull.guest.tooltip = Einloggen, um diesen Pull-Request zu abbonieren. subscribe.issue.guest.tooltip = Einloggen, um dieses Issue zu abbonieren. +issues.author.tooltip.pr = Dieser Benutzer ist der Autor dieses Pull-Requests. +issues.author.tooltip.issue = Dieser Benutzer ist der Autor dieses Issues. [graphs] @@ -3434,6 +3441,10 @@ config_summary = Zusammenfassung auths.tip.gitlab_new = Registriere eine neue Anwendung auf https://gitlab.com/-/profile/applications auths.default_domain_name = Standarddomainname, der für die E-Mail-Adresse benutzt wird config.app_slogan = Instanz-Slogan +config.cache_test_failed = Konnte den Cache nicht untersuchen: %v. +config.cache_test_succeeded = Cache-Test erfolgreich, eine Antwort erhalten in %s. +config.cache_test = Cache testen +config.cache_test_slow = Cache-Test erfolgreich, aber die Antwort ist langsam: %s. [action] @@ -3790,6 +3801,13 @@ variables.id_not_exist = Variable mit ID %d existiert nicht. runs.workflow = Workflow runs.no_job_without_needs = Der Workflow muss mindestens einen Job ohne Abhängigkeiten enthalten. runs.no_job = Der Workflow muss mindestens einen Job enthalten +workflow.dispatch.use_from = Workflow benutzen von +workflow.dispatch.run = Workflow ausführen +workflow.dispatch.input_required = Wert für Eingabe „%s“ erfordern. +workflow.dispatch.invalid_input_type = Ungültiger Eingabetyp „%s“. +workflow.dispatch.warn_input_limit = Es werden nur die ersten %d Eingaben angezeigt. +workflow.dispatch.trigger_found = Dieser Workflow hat einen workflow_dispatch-Event-Trigger. +workflow.dispatch.success = Ausführung des Workflows wurde erfolgreich angefragt. [projects] type-1.display_name=Individuelles Projekt diff --git a/options/locale/locale_el-GR.ini b/options/locale/locale_el-GR.ini index fb15b5b453..842e297aa8 100644 --- a/options/locale/locale_el-GR.ini +++ b/options/locale/locale_el-GR.ini @@ -87,7 +87,7 @@ rerun=Επανεκτέλεση rerun_all=Επανεκτέλεση όλων save=Αποθήκευση add=Προσθήκη -add_all=Προσθήκη Όλων +add_all=Προσθήκη όλων remove=Αφαίρεση remove_all=Αφαίρεση όλων remove_label_str=Αφαίρεση αντικειμένου «%s» @@ -154,12 +154,14 @@ filter.not_fork = Εξαίρεση fork filter.is_mirror = Είδωλα filter.not_mirror = Εξαίρεση ειδώλων filter.not_template = Εξαίρεση προτύπων -filter.is_fork = Forked +filter.is_fork = Forks more_items = Περισσότερα αντικείμενα invalid_data = Τα δεδομένα δεν είναι έγκυρα: %v +test = Τεστ +copy_generic = Αντιγραφή στο πρόχειρο [aria] -navbar=Γραμμή Πλοήγησης +navbar=Μπάρα πλοήγησης footer=Υποσέλιδο footer.software=Σχετικά με το Λογισμικό footer.links=Συνδέσεις @@ -244,7 +246,7 @@ err_admin_name_is_invalid=Το Όνομα Χρήστη του Διαχειρισ general_title=Γενικές ρυθμίσεις app_name=Τίτλος διακομιστή -app_name_helper=Μπορείτε να εισάγετε το όνομα της εταιρείας σας εδώ. +app_name_helper=Γράψτε το όνομα του διακομιστή σας εδώ. Θα εμφανίζεται σε κάθε σελίδα. repo_path=Τοποθεσία αρχείων αποθετηρίων repo_path_helper=Τα απομακρυσμένα αποθετήρια Git θα αποθηκεύονται σε αυτόν τον κατάλογο. lfs_path=Τοποθεσία αρχείων Git LFS @@ -274,22 +276,22 @@ register_confirm=Να απαιτείται η επιβεβαίωση της δι mail_notify=Ενεργοποίηση ειδοποιήσεων email server_service_title=Ρυθμίσεις διακομιστή και υπηρεσιών τρίτων offline_mode=Ενεργοποίηση τοπικής λειτουργίας -offline_mode.description=Απενεργοποιήση των δικτύων διανομής περιεχομένου τρίτων και σερβίρετε όλων των πόρων τοπικά. +offline_mode.description=Τα CDN τρίτων θα απενεργοποιηθούν, και όλα τα αρχεία θα παρέχονται αποκλειστικά από τον διακομιστή. disable_gravatar=Απενεργοποίηση Gravatar disable_gravatar.description=Το Gravatar και άλλες εξωτερικές πηγές εικόνων προφίλ θα απενεργοποιηθούν. Θα χρησιμοποιηθεί μία προεπιλεγμένη εικόνα προφίλ, εκτός αν ο χρήστης ανεβάσει από μόνος του ένα avatar. federated_avatar_lookup=Ενεργοποίηση αποκεντρωμένων εικόνων προφίλ federated_avatar_lookup.description=Ενεργοποίηση αποκεντρωμένης αναζήτησης εικόνων προφίλ μέσω Libravatar. disable_registration=Απενεργοποίηση αυτοεγγραφής -disable_registration.description=Απενεργοποίηση αυτοεγγραφής χρήστη. Μόνο οι διαχειριστές θα μπορούν να δημιουργήσουν νέους λογαριασμούς χρηστών. -allow_only_external_registration.description=Να επιτρέπεται η εγγραφή μόνο μέσω εξωτερικών υπηρεσιών +disable_registration.description=Μόνο οι διαχειριστές θα μπορούν να δημιουργήσουν νέους λογαριασμούς χρηστών. Σας συνιστούμε να απενεργοποιήσετε τις εγγραφές, εκτός αν θέλετε να προσφέρετε τον διακομιστή σας σε ένα ευρύ κοινό και είστε έτοιμος να αφαιρέσετε λογαριασμούς που θα χρησιμοποιηθούν για spam. +allow_only_external_registration.description=Οι χρήστες θα μπορούν να δημιουργήσουν λογαριασμούς μόνο μέσω εξωτερικών υπηρεσιών. openid_signin=Ενεργοποίηση σύνδεσης μέσω OpenID openid_signin.description=Ενεργοποίηση σύνδεσης χρήστη μέσω OpenID. openid_signup=Ενεργοποίηση εγγραφών μέσω OpenID openid_signup.description=Ενεργοποίηση ιδιοεγγραφής χρηστών με βάση το OpenID. enable_captcha=Ενεργοποίηση CAPTCHA στην εγγραφή -enable_captcha.description=Να απαιτείται CAPTCHA για την δημιουργία λογαριασμού. +enable_captcha.description=Να απαιτείται CAPTCHA για την δημιουργία λογαριασμών. require_sign_in_view=Να απαιτείται είσοδος για την προβολή περιεχομένων -require_sign_in_view.description=Περιορισμός της πρόσβασης σε συνδεδεμένους χρήστες. Οι επισκέπτες θα μπορούν μόνο να δουν τις σελίδες εισόδου και εγγραφής. +require_sign_in_view.description=Το περιεχόμενο του διακομιστή σας θα μπορούν να το βλέπουν μόνο συνδεδεμένοι χρήστες. Οι επισκέπτες θα μπορούν μόνο να δουν τις σελίδες εισόδου και εγγραφής. admin_setting.description=Η δημιουργία ενός λογαριασμού διαχειριστή είναι προαιρετική. Ο πρώτος εγγεγραμμένος χρήστης θα γίνει αυτόματα διαχειριστής. admin_title=Ρυθμίσεις λογαριασμού διαχειριστή admin_name=Όνομα χρήστη διαχειριστή @@ -312,9 +314,9 @@ invalid_log_root_path=Η τοποθεσία αρχείων καταγραφής default_keep_email_private=Απόκρυψη διευθύνσεων email από προεπιλογή default_keep_email_private.description=Απόκρυψη διευθύνσεων email των νέων λογαριασμών χρήστη σαν προεπιλογή. default_allow_create_organization=Να επιτρέπεται η δημιουργία οργανισμών από προεπιλογή -default_allow_create_organization.description=Επιτρέψτε σε νέους λογαριασμούς χρηστών να δημιουργούν οργανισμούς σαν προεπιλογή. +default_allow_create_organization.description=Να επιτρέπεται στους χρήστες να δημιουργούν οργανισμούς από προεπιλογή. Αν απενεργοποιήσετε αυτήν την ρύθμιση, τότε ο χρήστης θα μπορεί να δημιουργήσει οργανισμούς μόνο με την έγκριση ενός διαχειριστή. default_enable_timetracking=Ενεργοποίηση καταγραφής χρόνου από προεπιλογή -default_enable_timetracking.description=Ενεργοποίηση καταγραφής χρόνου για νέα αποθετήρια σαν προεπιλογή. +default_enable_timetracking.description=Να ενεργοποιείται η λειτουργία καταγραφής χρόνου σε νέα αποθετήρια από προεπιλογή. no_reply_address=Domain κρυφών email no_reply_address_helper=Όνομα τομέα (domain) για χρήστες με μια κρυφή διεύθυνση email. Για παράδειγμα, το όνομα χρήστη 'nikos' θα συνδεθεί στο Git ως 'nikos@noreply.example.org' αν ο κρυφός τομέας email έχει οριστεί ως 'noreply.example.org'. password_algorithm=Αλγόριθμος hash για κωδικούς @@ -327,19 +329,22 @@ allow_dots_in_usernames = Επιτρέπει την χρήση τελείων σ enable_update_checker_helper_forgejo = Θα γίνεται τακτικά έλεγχος για νέες εκδόσεις του Forgejo ελέγχοντας μία εγγραφή DNS TXT στο release.forgejo.org. smtp_from_invalid = Η διεύθυνση του πεδίου «Αποστολή email ως» δεν είναι έγκυρη config_location_hint = Αυτές οι ρυθμίσεις θα αποθηκευτούν στην ακόλουθη τοποθεσία: +allow_only_external_registration = Να επιτρέπονται οι εγγραφές μόνο μέσω εξωτερικών υπηρεσιών +app_slogan = Slogan διακομιστή +app_slogan_helper = Γράψτε το slogan του διακομιστή σας εδώ. Αφήστε κενό για να το απενεργοποιήσετε. [home] uname_holder=Όνομα χρήστη ή διεύθυνση email password_holder=Κωδικός Πρόσβασης -switch_dashboard_context=Εναλλαγή Περιεχομένων Αρχικού Πίνακα +switch_dashboard_context=Εναλλαγή περιεχομένων αρχικού πίνακα my_repos=Αποθετήρια show_more_repos=Περισσότερα αποθετήρια… -collaborative_repos=Συνεργατικά Αποθετήρια +collaborative_repos=Συνεργατικά αποθετήρια my_orgs=Οργανισμοί my_mirrors=Τα Αντίγραφα Μου view_home=Προβολή %s search_repos=Βρείτε ένα αποθετήριο… -filter=Άλλα Φίλτρα +filter=Άλλα φίλτρα filter_by_team_repositories=Φιλτράρισμα ανά αποθετήρια ομάδας feed_of=Ροή (feed) του «%s» @@ -382,7 +387,7 @@ forks_one = %d fork forks_few = %d forks [auth] -create_new_account=Δημιουργία Λογαριασμού +create_new_account=Δημιουργία λογαριασμού register_helper_msg=Έχετε ήδη λογαριασμό; Συνδεθείτε τώρα! social_register_helper_msg=Έχετε ήδη λογαριασμό; Συνδέστε το τώρα! disable_register_prompt=Οι εγγραφές είναι απενεργοποιημένες. Παρακαλούμε να επικοινωνήσετε με το διαχειριστή του ιστοτόπου. @@ -398,7 +403,7 @@ confirmation_mail_sent_prompt=Ένα νέο email επιβεβαίωσης έχ must_change_password=Ενημερώστε τον κωδικό πρόσβασης σας allow_password_change=Απαιτείται από το χρήστη να αλλάξει τον κωδικό πρόσβασης (συνιστόμενο) reset_password_mail_sent_prompt=Ένα email επιβεβαίωσης έχει σταλεί στο %s. Για την ολοκλήρωση της διαδικασίας ανάκτησης του λογαριασμού σας, παρακαλώ ελέγξτε τα εισερχόμενα σας στις επόμενες %s. -active_your_account=Ενεργοποιήστε Το Λογαριασμό Σας +active_your_account=Ενεργοποίηση λογαριασμού account_activated=Ο λογαριασμός έχει ενεργοποιηθεί prohibit_login=Δεν επιτρέπεται η σύνδεση prohibit_login_desc=Δεν επιτρέπεται η σύνδεση στον λογαριασμό σας, παρακαλούμε επικοινωνήστε με το διαχειριστή σας. @@ -406,8 +411,8 @@ resent_limit_prompt=Έχετε ήδη ζητήσει ένα email ενεργοπ has_unconfirmed_mail=Γειά %s, η διεύθυνση ηλεκτρονικού ταχυδρομείου σας (%s) δεν έχει επιβεβαιωθεί ακόμα. Εάν δεν έχετε λάβει κάποιο email επιβεβαίωσης ή αν χρειάζεστε ένα νέο email επιβεβαίωσης, παρακαλώ πατήστε το παρακάτω κουμπί. resend_mail=Κάντε κλικ εδώ για να στείλετε ξανά το email ενεργοποίησης email_not_associate=Η διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι συσχετισμένη με κάποιο λογαριασμό. -send_reset_mail=Αποστολή Email Ανάκτησης Λογαριασμού -reset_password=Ανάκτηση Λογαριασμού +send_reset_mail=Αποστολή email ανάκτησης λογαριασμού +reset_password=Ανάκτηση λογαριασμού invalid_code=Ο κωδικός επιβεβαίωσης δεν είναι έγκυρος ή έχει λήξει. invalid_code_forgot_password=Ο κωδικός επιβεβαίωσης έχει λήξει ή δεν είναι έγκυρος. Πατήστε εδώ για να ξαναξεκινήσετε την διαδικασία. invalid_password=Ο κωδικός πρόσβασης σας δεν ταιριάζει με τον κωδικό που χρησιμοποιήθηκε για τη δημιουργία του λογαριασμού. @@ -424,11 +429,11 @@ twofa_scratch_token_incorrect=Ο κωδικός μιας χρήσης είναι login_userpass=Είσοδος tab_openid=OpenID oauth_signup_tab=Δημιουργία νέου λογαριασμού -oauth_signup_title=Ολοκλήρωση Νέου Λογαριασμού -oauth_signup_submit=Ολοκληρωμένος Λογαριασμός +oauth_signup_title=Ολοκλήρωση νέου λογαριασμού +oauth_signup_submit=Ολοκλήρωση λογαριασμού oauth_signin_tab=Σύνδεση με υπάρχων λογαριασμό -oauth_signin_title=Συνδεθείτε για να εγκρίνετε τον Συνδεδεμένο Λογαριασμό -oauth_signin_submit=Σύνδεση Λογαριασμού +oauth_signin_title=Συνδεθείτε για να εγκρίνετε τον συνδεδεμένο λογαριασμό +oauth_signin_submit=Σύνδεση λογαριασμού oauth.signin.error=Παρουσιάστηκε σφάλμα κατά την επεξεργασία του αιτήματος εξουσιοδότησης. Εάν αυτό το σφάλμα επιμένει, παρακαλούμε επικοινωνήστε με το διαχειριστή του ιστοτόπου. oauth.signin.error.access_denied=Η αίτηση εξουσιοδότησης απορρίφθηκε. oauth.signin.error.temporarily_unavailable=Η εξουσιοδότηση απέτυχε επειδή ο διακομιστής ταυτοποίησης δεν είναι διαθέσιμος προσωρινά. Παρακαλώ προσπαθήστε ξανά αργότερα. @@ -444,7 +449,7 @@ email_domain_blacklisted=Δεν μπορείτε να εγγραφείτε με authorize_application=Εξουσιοδότηση Εφαρμογής authorize_redirect_notice=Θα μεταφερθείτε στο %s εάν εξουσιοδοτήσετε αυτήν την εφαρμογή. authorize_application_created_by=Αυτή η εφαρμογή δημιουργήθηκε από %s. -authorize_application_description=Εάν παραχωρήσετε την πρόσβαση, θα μπορεί να έχει πρόσβαση και να γράφει σε όλες τις πληροφορίες του λογαριασμού σας, συμπεριλαμβανομένων των ιδιωτικών αποθετηρίων και οργανισμών. +authorize_application_description=Αν παραχωρήσετε την πρόσβαση, θα μπορεί να διαβάσει και να επεξεργαστεί όλες τις πληροφορίες του λογαριασμού σας, συμπεριλαμβανομένων των ιδιωτικών αποθετηρίων και οργανισμών. authorize_title=Είστε βέβαιοι πως θέλετε να δώσετε πρόσβαση στον λογαριασμό σας στην εφαρμογή «%s»; authorization_failed=Αποτυχία εξουσιοδότησης authorization_failed_desc=Η εξουσιοδότηση απέτυχε επειδή εντοπίστηκε μια μη έγκυρη αίτηση. Παρακαλούμε επικοινωνήστε με το συντηρητή της εφαρμογής που προσπαθήσατε να εξουσιοδοτήσετε. @@ -555,7 +560,7 @@ TreeName=Διαδρομή αρχείου Content=Περιεχόμενο SSPISeparatorReplacement=Διαχωριστικό -SSPIDefaultLanguage=Προεπιλεγμένη Γλώσσα +SSPIDefaultLanguage=Προεπιλεγμένη γλώσσα require_error=` δεν μπορεί να είναι κενό.` alpha_dash_error=`: Πρέπει να περιέχει μόνο αλφαριθμητικά, παύλες ('-') και κάτω παύλες ('_').` @@ -629,6 +634,14 @@ admin_cannot_delete_self = Δεν μπορείτε να διαγράψετε τ unset_password = Ο χρήστης δεν έχει ορίσει κάποιον κωδικό. unsupported_login_type = Η μέθοδος με την οποίο γίνεται η σύνδεση δεν υποστηρίζει την διαγραφή λογαριασμών. required_prefix = Το εισαγώμενο κείμενο πρέπει να ξεκινά με «%s» +To = Όνομα κλάδου +AccessToken = Διακριτικό πρόσβασης (token) +FullName = Πλήρες όνομα +Description = Περιγραφή +Pronouns = Αντωνυμίες +Biography = Βιογραφία +Website = Ιστοσελίδα +Location = Τοποθεσία [user] @@ -659,12 +672,20 @@ follow_blocked_user = Δεν μπορείτε να ακολουθήσετε το unblock = Άρση αποκλεισμού block = Αποκλεισμός block_user = Αποκλεισμός χρήστη -block_user.detail_1 = Ο χρήστης δεν θα ακολουθεί πια τον λογαριασμό σας. -block_user.detail_2 = Ο χρήστης δεν θα μπορεί να αλληλεπιδράσει με τα αποθετήριά σας, να δημιουργήσει ζητήματα ή να αφήσει σχόλια. -block_user.detail_3 = Ο χρήστης δεν θα μπορέσει να σας προσθέσει στα αποθετήριά του ως συνεργάτη και αντίστοιχα δεν θα μπορείτε να τον προσθέσετε στα δικά σας αποθετήρια. -block_user.detail = Επισημαίνεται πως αν αποκλείσετε αυτόν τον χρήστη, θα προκύψουν ταυτόχρονα και άλλες ενέργειες. Μερικές από αυτές: +block_user.detail_1 = Ο χρήστης θα πάψει να ακολουθεί τον λογαριασμό σας. +block_user.detail_2 = Ο χρήστης δεν θα μπορεί να αλληλεπιδράσει με τα αποθετήριά, τα ζητήματα και τα σχόλια σας. +block_user.detail_3 = Δεν θα μπορείτε να προσθέσετε ο ένας τον άλλον στα αποθετήριά σας ως συνεργάτη. +block_user.detail = Επισημαίνεται πως αν αποκλείσετε αυτόν τον χρήστη, θα προκύψουν ταυτόχρονα και άλλες ενέργειες, όπως: followers_one = %d ακόλουθος following_one = ακολουθεί %d +public_activity.visibility_hint.admin_private = Αν και ο χρήστης προτιμά να κρατά την δραστηριότητά του ιδιωτική, είναι ορατή σε εσάς επειδή είστε ένας διαχειριστής. +followers.title.one = ακόλουθος +followers.title.few = ακόλουθοι +following.title.few = ακολουθεί +following.title.one = ακολουθεί +public_activity.visibility_hint.admin_public = Η δραστηριότητα είναι ορατή σε όλους, αλλά ως διαχειριστής μπορείτε να δείτε και τις αλληλεπιδράσεις σε ιδιωτικούς χώρους. +public_activity.visibility_hint.self_public = Η δραστηριότητά σου είναι ορατή σε όλους, πλην τις αλληλεπιδράσεις σας σε ιδιωτικούς χώρους. Αλλαγή ορατότητας. +public_activity.visibility_hint.self_private = Η δραστηριότητά σας είναι ορατή μόνο σε εσάς και στους διαχειριστές. Αλλαγή ορατότητας. [settings] profile=Προφίλ @@ -680,7 +701,7 @@ orgs=Διαχείριση οργανισμών repos=Αποθετήρια delete=Διαγραφή λογαριασμού twofa=Πιστοποίηση δύο παραγόντων (TOTP) -account_link=Συνδεδεμένοι Λογαριασμοί +account_link=Συνδεδεμένοι λογαριασμοί organization=Οργανισμοί uid=UID webauthn=Πιστοποίηση δύο παραγόντων (Κλειδιά Ασφαλείας) @@ -750,19 +771,19 @@ password_change_disabled=Οι μη τοπικοί χρήστες δεν μπορ emails=Διευθύνσεις Email manage_emails=Διαχείριση διευθύνσεων email -manage_themes=Επιλέξτε προεπιλεγμένο θέμα διεπαφής -manage_openid=Διαχείριση διευθύνσεων OpenID +manage_themes=Προεπιλεγμένο θέμα +manage_openid=Διευθύνσεις OpenID email_desc=Η κύρια διεύθυνση ηλεκτρονικού ταχυδρομείου σας θα χρησιμοποιηθεί για ειδοποιήσεις, ανάκτηση του κωδικού πρόσβασης και, εφόσον δεν είναι κρυμμένη, λειτουργίες Git στον ιστότοπο. theme_desc=Αυτό θα είναι το προεπιλεγμένο θέμα διεπαφής σας σε όλη την ιστοσελίδα. primary=Κύριο activated=Ενεργό requires_activation=Απαιτείται ενεργοποίηση -primary_email=Αλλαγή κυριότητας -activate_email=Αποστολή Ενεργοποίησης -activations_pending=Εκκρεμούν Ενεργοποιήσεις +primary_email=Προεπιλογή +activate_email=Αποστολή ενεργοποίησης +activations_pending=Εκκρεμεί ενεργοποίηση can_not_add_email_activations_pending=Εκκρεμεί μια ενεργοποίηση, δοκιμάστε ξανά σε λίγα λεπτά αν θέλετε να προσθέσετε ένα νέο email. delete_email=Αφαίρεση -email_deletion=Αφαίρεση Διεύθυνσης Email +email_deletion=Αφαίρεση διεύθυνσης email email_deletion_desc=Η διεύθυνση ηλεκτρονικού ταχυδρομείου και οι σχετικές πληροφορίες θα αφαιρεθούν από τον λογαριασμό σας. Οι υποβολές Git από αυτή τη διεύθυνση email θα παραμείνουν αμετάβλητες. Συνέχεια; email_deletion_success=Η διεύθυνση email σας έχει καταργηθεί. theme_update_success=Το θέμα διεπαφής σας ενημερώθηκε. @@ -771,7 +792,7 @@ openid_deletion=Αφαίρεση Διεύθυνσης OpenID openid_deletion_desc=Η κατάργηση αυτής της διεύθυνσης OpenID από τον λογαριασμό σας θα σας εμποδίσει να συνδέεστε με αυτό. Συνέχεια; openid_deletion_success=Η διεύθυνση OpenID αφαιρέθηκε. add_new_email=Προσθήκη νέας διεύθυνσης email -add_new_openid=Προσθήκη Νέου OpenID URI +add_new_openid=Προσθήκη νέου OpenID URI add_email=Προσθήκη διεύθυνσης email add_openid=Προσθήκη OpenID URI add_email_confirmation_sent=Ένα email επιβεβαίωσης έχει σταλεί στην διεύθυνση «%s». Για να επιβεβαιώσετε τη διεύθυνση email σας, παρακαλώ ελέγξτε τα εισερχόμενα σας μέσα σε %s. @@ -795,7 +816,7 @@ add_new_key=Προσθήκη κλειδιού SSH add_new_gpg_key=Προσθήκη κλειδιού GPG key_content_ssh_placeholder=Αρχίζει με «ssh-ed25519», «ssh-rsa», «ecdsa-sha2-nistp256», «ecdsa-sha2-nistp384», «ecdsa-sha2-nistp521», «sk-ecdsa-sha2-nistp256@openssh.com», ή «sk-ssh-ed25519@openssh.com» key_content_gpg_placeholder=Αρχίζει με «-----BEGIN PGP PUBLIC KEY BLOCK-----» -add_new_principal=Προσθήκη Αρχής (Principal) +add_new_principal=Προσθήκη αρχής (Principal) ssh_key_been_used=Αυτό το κλειδί SSH έχει ήδη προστεθεί στο διακομιστή. ssh_key_name_used=Υπάρχει ήδη ένα SSH κλειδί με το ίδιο όνομα στο λογαριασμό σας. ssh_principal_been_used=Αυτή η αρχή πιστοποίησης (principal) έχει ήδη προστεθεί στο διακομιστή. @@ -854,7 +875,7 @@ token_state_desc=Αυτό το διακριτικό έχει χρησιμοπο principal_state_desc=Αυτή η αρχή πιστοποιητικού έχει χρησιμοποιηθεί τις τελευταίες 7 ημέρες show_openid=Εμφάνιση στο προφίλ hide_openid=Απόκρυψη από το προφίλ -ssh_disabled=SSH Απενεργοποιημένο +ssh_disabled=Το SSH είναι απενεργοποιημένο ssh_signonly=Το SSH είναι απενεργοποιημένο αυτή τη στιγμή, έτσι αυτά τα κλειδιά είναι μόνο για την επαλήθευση υπογραφής των υποβολών. ssh_externally_managed=Αυτό το κλειδί SSH διαχειρίζεται εξωτερικά για αυτόν το χρήστη manage_social=Διαχείριση Συσχετιζόμενων Λογαριασμών Κοινωνικών Δικτύων @@ -897,7 +918,7 @@ create_oauth2_application_button=Δημιουργία εφαρμογής create_oauth2_application_success=Δημιουργήσατε επιτυχώς μια νέα εφαρμογή OAuth2. update_oauth2_application_success=Ενημερώσατε την εφαρμογή OAuth2 επιτυχώς. oauth2_application_name=Όνομα εφαρμογής -oauth2_confidential_client=Εμπιστευτικός Πελάτης. Επιλέξτε το για εφαρμογές που διατηρούν το μυστικό κωδικό κρυφό, όπως πχ οι εφαρμογές ιστού. Μην επιλέγετε για εγγενείς εφαρμογές, συμπεριλαμβανομένων εφαρμογών επιφάνειας εργασίας και εφαρμογών για κινητά. +oauth2_confidential_client=Εμπιστευτικός πελάτης (client). Επιλέξτε το για εφαρμογές που διατηρούν το μυστικό κωδικό κρυφό, όπως π.χ. εφαρμογές ιστού. Μην επιλέγετε για εγγενείς εφαρμογές, συμπεριλαμβανομένων εφαρμογών επιφάνειας εργασίας και εφαρμογών για κινητά. oauth2_redirect_uris=URI Ανακατεύθυνσης. Χρησιμοποιήστε μια νέα γραμμή για κάθε URI. save_application=Αποθήκευση oauth2_client_id=Ταυτότητα Πελάτη @@ -944,10 +965,10 @@ webauthn_delete_key_desc=Αν αφαιρέσετε ένα κλειδί ασφα webauthn_key_loss_warning=Αν χάσετε τα κλειδιά ασφαλείας σας, θα χάσετε την πρόσβαση στο λογαριασμό σας. webauthn_alternative_tip=Μπορεί να θέλετε να ρυθμίσετε μια πρόσθετη μέθοδο ταυτοποίησης. -manage_account_links=Διαχείριση Συνδεδεμένων Λογαριασμών +manage_account_links=Διαχείριση συνδεδεμένων λογαριασμών manage_account_links_desc=Αυτοί οι εξωτερικοί λογαριασμοί είναι συνδεδεμένοι στον λογαριασμό Forgejo σας. account_links_not_available=Προς το παρόν δεν υπάρχουν εξωτερικοί λογαριασμοί συνδεδεμένοι με τον λογαριασμό σας στο Forgejo. -link_account=Σύνδεση Λογαριασμού +link_account=Σύνδεση λογαριασμού remove_account_link=Αφαίρεση συνδεδεμένου λογαριασμού remove_account_link_desc=Η κατάργηση ενός συνδεδεμένου λογαριασμού θα ανακαλέσει την πρόσβασή του στο λογαριασμό σας στο Forgejo. Συνέχεια; remove_account_link_success=Ο συνδεδεμένος λογαριασμός έχει αφαιρεθεί. @@ -983,7 +1004,7 @@ user_unblock_success = Η άρση αποκλεισμού του χρήστη ή change_password = Αλλαγή κωδικού blocked_users = Αποκλεισμένοι χρήστες user_block_success = Ο αποκλεισμός του χρήστη ήταν επιτυχής. -additional_repo_units_hint = Να γίνεται ενθάρρυνση προσθήκης μονάδων σε αποθετήρια +additional_repo_units_hint = Να συνιστάται η προσθήκη μονάδων αποθετηρίων pronouns = Αντωνυμίες pronouns_custom = κάτι άλλο pronouns_unspecified = Απροσδιόριστες @@ -991,6 +1012,7 @@ hints = Συμβουλές additional_repo_units_hint_description = Εμφάνιση κουμπιού «Προσθήκη μονάδων...» σε αποθετήρια που δεν έχουν ενεργοποιημένες όλες τις διαθέσιμες μονάδες. update_hints = Ενημέρωση συμβουλών update_hints_success = Οι συμβουλές ενημερώθηκαν. +language.title = Προεπιλεγμένη γλώσσα [repo] new_repo_helper=Ένα αποθετήριο περιέχει όλα τα αρχεία έργου, συμπεριλαμβανομένου του ιστορικού εκδόσεων. Ήδη φιλοξενείται αλλού; Μετεγκατάσταση αποθετηρίου. @@ -1153,7 +1175,7 @@ migrate.failed=Η μεταφορά απέτυχε: %v migrate.migrate_items_options=Το διακριτικό πρόσβασης (token) είναι απαραίτητο για τη μεταφορά πρόσθετων στοιχείων migrated_from=Μεταφέρθηκε από %[2]s migrated_from_fake=Μεταφέρθηκε από %[1]s -migrate.migrate=Μεταφορά από το %s +migrate.migrate=Μεταφορά από %s migrate.migrating=Γίνεται μεταφορά από το %s... migrate.migrating_failed=Η μεταφορά από το %s απέτυχε. migrate.migrating_failed.error=Αποτυχία μεταφοράς: %s @@ -1238,8 +1260,8 @@ invisible_runes_header=`Αυτό το αρχείο περιέχει αόρατο invisible_runes_description=`Αυτό το αρχείο περιέχει αόρατους χαρακτήρες Unicode που δεν διακρίνονται από ανθρώπους, αλλά μπορεί να επεξεργάζονται διαφορετικά από έναν υπολογιστή. Αν νομίζετε ότι αυτό είναι σκόπιμο, μπορείτε να αγνοήσετε με ασφάλεια αυτή την προειδοποίηση. Χρησιμοποιήστε το κουμπί Escape για να τους αποκαλύψετε.` ambiguous_runes_header=`Αυτό το αρχείο περιέχει ασαφείς χαρακτήρες Unicode ` ambiguous_runes_description=`Αυτό το αρχείο περιέχει χαρακτήρες Unicode που μπορεί να συγχέονται με άλλους χαρακτήρες. Αν νομίζετε ότι αυτό είναι σκόπιμο, μπορείτε να αγνοήσετε με ασφάλεια αυτή την προειδοποίηση. Χρησιμοποιήστε το κουμπί Escape για να τους αποκαλύψετε.` -invisible_runes_line=`Αυτή η γραμμή έχει αόρατους χαρακτήρες unicode ` -ambiguous_runes_line=`Αυτή η γραμμή έχει ασαφείς χαρακτήρες unicode ` +invisible_runes_line=`Αυτή η γραμμή έχει αόρατους χαρακτήρες Unicode` +ambiguous_runes_line=`Αυτή η γραμμή έχει ασαφείς χαρακτήρες Unicode` ambiguous_character=`ο %[1]c [U+%04[1]X] μπορεί να μπερδευτεί με τον %[2]c [U+%04[2]X]` escape_control_characters=Escape @@ -1290,10 +1312,10 @@ editor.add_tmpl=Προσθήκη «» editor.add=Προσθήκη %s editor.update=Ενημέρωση %s editor.delete=Διαγραφή %s -editor.patch=Εφαρμογή Διόρθωσης +editor.patch=Εφαρμογή patch editor.patching=Επιδιόρθωση: editor.fail_to_apply_patch=`Αδυναμία εφαρμογής της επιδιόρθωσης "%s"` -editor.new_patch=Νέα Διόρθωση +editor.new_patch=Νέο patch editor.commit_message_desc=Προσθήκη προαιρετικής εκτενούς περιγραφής… editor.signoff_desc=Προσθέστε ένα πρόσθετο Signed-off-by στο τέλος του μηνύματος καταγραφής της υποβολής. editor.commit_directly_to_this_branch=Υποβολή απευθείας στο κλάδο %s. @@ -1318,10 +1340,10 @@ editor.commit_empty_file_header=Υποβολή ενός κενού αρχείο editor.commit_empty_file_text=Το αρχείο που πρόκειται να υποβληθεί είναι κενό. Συνέχεια; editor.no_changes_to_show=Δεν υπάρχουν αλλαγές για εμφάνιση. editor.fail_to_update_file=Αποτυχία ενημέρωσης/δημιουργίας του αρχείου «%s». -editor.fail_to_update_file_summary=Μήνυμα Σφάλματος: +editor.fail_to_update_file_summary=Μήνυμα σφάλματος: editor.push_rejected_no_message=Η αλλαγή απορρίφθηκε από τον διακομιστή και δεν γνωρίζουμε τον λόγο. Παρακαλώ ελέγξτε τα Git hooks σας. editor.push_rejected=Η αλλαγή απορρίφθηκε από τον διακομιστή. Παρακαλώ ελέγξτε τα Git hook σας. -editor.push_rejected_summary=Μήνυμα Πλήρους Απόρριψης: +editor.push_rejected_summary=Μήνυμα πλήρους απόρριψης: editor.add_subdir=Προσθήκη φακέλου… editor.unable_to_upload_files=Αποτυχία αποστολής αρχείων στο «%s» με το σφάλμα: %v editor.upload_file_is_locked=Το αρχείο «%s» είναι κλειδωμένο από %s. @@ -1419,7 +1441,7 @@ issues.filter_reviewers=Φιλτράρισμα Εξεταστή issues.new=Νέο ζήτημα issues.new.title_empty=Ο τίτλος δεν μπορεί να είναι κενός issues.new.labels=Σήματα -issues.new.no_label=Χωρίς Σήμα +issues.new.no_label=Χωρίς σήμανση issues.new.clear_labels=Καθαρισμός σημάτων issues.new.projects=Έργα issues.new.clear_projects=Εκκαθάριση έργων @@ -1449,8 +1471,8 @@ issues.new_label=Νέο σήμα issues.new_label_placeholder=Όνομα σήματος issues.new_label_desc_placeholder=Περιγραφή issues.create_label=Δημιουργία σήματος -issues.label_templates.title=Χρήση ενός προκαθορισμένου συνόλου σημάτων -issues.label_templates.info=Δεν υπάρχουν σήματα ακόμα. Δημιουργήστε ένα σήμα με το κουμπί «Νέο Σήμα» ή χρησιμοποιήστε ένα σετ προκαθορισμένων σημάτων: +issues.label_templates.title=Χρήση προκαθορισμένου συνόλου σημάνσεων +issues.label_templates.info=Δεν υπάρχουν σημάνσεις ακόμα. Δημιουργήστε ένα σήμα με το κουμπί «Νέα σήμανση» ή χρησιμοποιήστε ένα σετ προκαθορισμένων σημάνσεων: issues.label_templates.helper=Επιλέξτε ένα σύνολο προεπιλεγμένων σημάτων issues.label_templates.use=Χρήση συνόλου προεπιλεγμένων σημάτων issues.label_templates.fail_to_load_file=Αποτυχία φόρτωσης των προτύπων σημάτων από το αρχείο «%s»: %v @@ -1572,7 +1594,7 @@ issues.role.collaborator_helper=Ο χρήστης έλαβε πρόσκληση issues.role.first_time_contributor=Συντελεστής για πρώτη φορά issues.role.first_time_contributor_helper=Αυτή είναι η πρώτη συνεισφορά αυτού του χρήστη στο αποθετήριο. issues.role.contributor=Συντελεστής -issues.role.contributor_helper=Αυτός ο χρήστης έχει προηγούμενές υποβολές στο αποθετήριο. +issues.role.contributor_helper=Αυτός ο χρήστης έχει προηγούμενές υποβολές (commits) στο αποθετήριο. issues.re_request_review=Επαναίτηση ανασκόπησης issues.is_stale=Έχουν υπάρξει αλλαγές σε αυτό το PR από αυτή την αναθεώρηση issues.remove_request_review=Αφαίρεση αιτήματος αναθεώρησης @@ -1837,17 +1859,17 @@ pulls.merge_commit_id=Το ID της υποβολής συγχώνευσης pulls.require_signed_wont_sign=Ο κλάδος απαιτεί υπογεγραμμένες υποβολές αλλά αυτή η συγχώνευση δεν θα υπογραφεί pulls.invalid_merge_option=Δεν μπορείτε να χρησιμοποιήσετε αυτήν την επιλογή συγχώνευσης για αυτό το pull request. -pulls.merge_conflict=Η Συγχώνευση Απέτυχε: Υπήρξε μια διένεξη κατά τη συγχώνευση. Υπόδειξη: Δοκιμάστε μια διαφορετική στρατηγική -pulls.merge_conflict_summary=Μήνυμα Σφάλματος -pulls.rebase_conflict=Η Συγχώνευση Απέτυχε: Υπήρξε μια σύγκρουση κατά την αλλαγή βάσης της υποβολής: %[1]s. Υπόδειξη: Δοκιμάστε μια διαφορετική στρατηγική -pulls.rebase_conflict_summary=Μήνυμα Σφάλματος -pulls.unrelated_histories=H Συγχώνευση Απέτυχε: Η κεφαλή και η βάση της συγχώνευσης δεν μοιράζονται μια κοινή ιστορία. Συμβουλή: Δοκιμάστε μια διαφορετική στρατηγική +pulls.merge_conflict=Η συγχώνευση απέτυχε: Υπήρξε μια σύγκρουση κατά τη συγχώνευση. Συμβουλή: Δοκιμάστε μια διαφορετική στρατηγική +pulls.merge_conflict_summary=Μήνυμα σφάλματος +pulls.rebase_conflict=Η συγχώνευση απέτυχε: Υπήρξε μια σύγκρουση κατά την αλλαγή βάσης της υποβολής: %[1]s. Συμβουλή: Δοκιμάστε μια διαφορετική στρατηγική +pulls.rebase_conflict_summary=Μήνυμα σφάλματος +pulls.unrelated_histories=H συγχώνευση απέτυχε: Η κεφαλή και η βάση της συγχώνευσης δεν έχουν κοινή ιστορία. Συμβουλή: Δοκιμάστε μια διαφορετική στρατηγική pulls.merge_out_of_date=Η συγχώνευση απέτυχε: Κατά τη δημιουργία της συγχώνευσης, η βάση ενημερώθηκε. Συμβουλή: Δοκιμάστε ξανά. pulls.head_out_of_date=Η συγχώνευση απέτυχε: Κατά τη δημιουργία της συγχώνευσης, το HEAD ενημερώθηκε. Συμβουλή: Δοκιμάστε ξανά. pulls.has_merged=Αποτυχία: Το pull request έχει συγχωνευθεί, δεν είναι δυνατή η συγχώνευση ξανά ή να αλλάξει ο κλάδος προορισμού. -pulls.push_rejected=Αποτυχία ώθησης: Η ώθηση απορρίφθηκε. Ελέγξτε τα Git hooks του αποθετήριο. -pulls.push_rejected_summary=Μήνυμα Πλήρους Απόρριψης -pulls.push_rejected_no_message=Αποτυχία ώθησης: Η ώθηση απορρίφθηκε, αλλά δεν λάβαμε κάποιο μήνυμα. Ελέγξτε τα Git hooks του αποθετηρίου +pulls.push_rejected=Η ώθηση απέτυχε: Η ώθηση απορρίφθηκε. Ελέγξτε τα Git hooks του αποθετηρίου. +pulls.push_rejected_summary=Μήνυμα πλήρους απόρριψης +pulls.push_rejected_no_message=Η ώθηση απέτυχε: Η ώθηση απορρίφθηκε, αλλά δεν λάβαμε κάποιο μήνυμα. Ελέγξτε τα Git hooks του αποθετηρίου pulls.open_unmerged_pull_exists=`Δεν μπορείτε να ανοίξετε εκ νέου, επειδή υπάρχει ένα εκκρεμές pull request (#%d) με πανομοιότυπες ιδιότητες.` pulls.status_checking=Μερικοί έλεγχοι εκκρεμούν pulls.status_checks_success=Όλοι οι έλεγχοι ήταν επιτυχείς @@ -1925,7 +1947,7 @@ milestones.filter_sort.least_issues=Λιγότερα ζητήματα signing.will_sign=Αυτή η υποβολή θα υπογραφεί με το κλειδί «%s». signing.wont_sign.error=Παρουσιάστηκε σφάλμα κατά τον έλεγχο για το αν η υποβολή μπορεί να υπογραφεί. -signing.wont_sign.nokey=Δεν υπάρχει διαθέσιμο κλειδί για να υπογραφεί αυτή η υποβολή. +signing.wont_sign.nokey=Ο διακομιστής δεν παρέχει κάποιο κλειδί για την υπογραφή αυτής της υποβολής (commit). signing.wont_sign.never=Οι υποβολές δεν υπογράφονται ποτέ. signing.wont_sign.always=Οι υποβολές υπογράφονται πάντα. signing.wont_sign.pubkey=Η υποβολή δε θα υπογραφεί επειδή δεν υπάρχει δημόσιο κλειδί που να συνδέεται με το λογαριασμό σας. @@ -1944,21 +1966,21 @@ wiki=Wiki wiki.welcome=Καλώς ήρθατε στο Wiki. wiki.welcome_desc=Το wiki σας επιτρέπει να γράψετε και να μοιραστείτε τεκμηριώσεις (documentation) με άλλους συνεργάτες. wiki.desc=Γράψτε και μοιραστείτε τεκμηριώσεις με συνεργάτες. -wiki.create_first_page=Δημιουργία πρώτης σελίδας +wiki.create_first_page=Δημιουργία αρχικής σελίδας wiki.page=Σελίδα wiki.filter_page=Φιλτράρισμα σελίδας wiki.new_page=Σελίδα wiki.page_title=Τίτλος σελίδας wiki.page_content=Περιεχόμενο σελίδας wiki.default_commit_message=Γράψτε μια σημείωση σχετικά με αυτή την ενημέρωση σελίδας (προαιρετικό). -wiki.save_page=Αποθήκευση Σελίδας +wiki.save_page=Αποθήκευση σελίδας wiki.last_commit_info=%s επεξεργάστηκε αυτή τη σελίδα %s wiki.edit_page_button=Επεξεργασία -wiki.new_page_button=Νέα Σελίδα -wiki.file_revision=Αναθεώρηση Σελίδας -wiki.wiki_page_revisions=Αναθεωρήσεις Σελίδας Wiki +wiki.new_page_button=Νέα σελίδα +wiki.file_revision=Έκδοση σελίδας +wiki.wiki_page_revisions=Αναθεωρήσεις σελίδας wiki wiki.back_to_wiki=Πίσω στη σελίδα wiki -wiki.delete_page_button=Διαγραφή Σελίδας +wiki.delete_page_button=Διαγραφή σελίδας wiki.delete_page_notice_1=Η διαγραφή της σελίδας wiki «%s» δεν μπορεί να αναιρεθεί. Συνέχεια; wiki.page_already_exists=Υπάρχει ήδη μια σελίδα wiki με το ίδιο όνομα. wiki.reserved_page=Το όνομα σελίδας wiki «%s» είναι δεσμευμένο. @@ -2081,11 +2103,11 @@ settings.mirror_settings.push_mirror.remote_url=URL απομακρυσμένου settings.mirror_settings.push_mirror.add=Προσθήκη είδωλου ώθησης settings.mirror_settings.push_mirror.edit_sync_time=Επεξεργασία διαστήματος συγχρονισμού ειδώλου -settings.sync_mirror=Συγχρονισμός Τώρα +settings.sync_mirror=Να γίνει συγχρονισμός τώρα settings.pull_mirror_sync_in_progress=Έλκονται αλλαγές από την απομακρυσμένη τοποθεσία %s αυτή τη στιγμή. settings.push_mirror_sync_in_progress=Ώθηση αλλαγών στο απομακρυσμένο %s αυτή τη στιγμή. settings.site=Ιστοσελίδα -settings.update_settings=Ενημέρωση ρυθμίσεων +settings.update_settings=Αποθήκευση ρυθμίσεων settings.update_mirror_settings=Ενημέρωση ρυθμίσεων ειδώλου settings.branches.switch_default_branch=Αλλαγή προεπιλεγμένου κλάδου settings.branches.update_default_branch=Ενημέρωση προεπιλεγμένου κλάδου @@ -2126,9 +2148,9 @@ settings.projects_desc=Ενεργοποίηση έργων αποθετηρίο settings.actions_desc=Ενεργοποίηση actions αποθετηρίου settings.admin_settings=Ρυθμίσεις διαχειριστή settings.admin_enable_health_check=Ενεργοποίηση ελέγχων υγείας αποθετηρίων (git fsck) -settings.admin_code_indexer=Indexer Κώδικα -settings.admin_stats_indexer=Indexer Στατιστικών Κώδικα -settings.admin_indexer_commit_sha=Τελευταίο Indexed SHA +settings.admin_code_indexer=Indexer κώδικα +settings.admin_stats_indexer=Indexer στατιστικών κώδικα +settings.admin_indexer_commit_sha=Τελευταίο indexed SHA settings.admin_indexer_unindexed=Unindexed settings.reindex_button=Προσθήκη στην ουρά Reindex settings.reindex_requested=Αιτήθηκε reindex @@ -2346,7 +2368,7 @@ settings.protected_branch.delete_rule=Διαγραφή κανόνα settings.protected_branch_can_push=Επιτρέψτε ώθηση; settings.protected_branch_can_push_yes=Μπορείτε να ωθήσετε settings.protected_branch_can_push_no=Δεν μπορείτε να ωθήσετε -settings.branch_protection=Κανόνες προστασίας για τον κλάδο «%s» +settings.branch_protection=Κανόνες προστασίας του κλάδου «%s» settings.protect_this_branch=Ενεργοποίηση προστασίας κλάδου settings.protect_this_branch_desc=Αποτρέπει τη διαγραφή και περιορίζει το Git push και συγχώνευση στον κλάδο. settings.protect_disable_push=Απενεργοποίηση ωθήσεων @@ -2388,7 +2410,7 @@ settings.protect_branch_name_pattern=Μοτίβο προστατευμένου settings.protect_branch_name_pattern_desc=Μοτίβα ονόματος προστατευμένων κλάδων. Συμβολευτείτε την τεκμηρίωση για την σύνταξη ενός μοτίβου. Παραδείγματα: main, release/** settings.protect_patterns=Μοτίβα settings.protect_protected_file_patterns=Μοτίβα προστατευμένων αρχείων (διαχωρισμός με semicolon «;» και ΟΧΙ το ελληνικό ερωτηματικό): -settings.protect_protected_file_patterns_desc=Τα προστατευόμενα αρχεία δεν επιτρέπεται να αλλάξουν άμεσα, ακόμη και αν ο χρήστης έχει δικαιώματα να προσθέσει, να επεξεργαστεί ή να διαγράψει αρχεία σε αυτόν τον κλάδο. Επιπλέων μοτίβα μπορούν να διαχωριστούν με ερωτηματικό (';'). Δείτε την τεκμηρίωση github.com/gobwas/glob για τη σύνταξη του μοτίβου. Πχ: .drone.yml, /docs/**/*.txt. +settings.protect_protected_file_patterns_desc=Τα προστατευόμενα αρχεία δεν επιτρέπεται να αλλάξουν άμεσα, ακόμη και αν ο χρήστης έχει δικαιώματα να προσθέσει, να επεξεργαστεί ή να διαγράψει αρχεία σε αυτόν τον κλάδο. Επιπλέων μοτίβα μπορούν να διαχωριστούν με semicolon («;») (ΟΧΙ ερωτηματικό). Για να συντάξετε μοτίβα, συμβουλευτείται την τεκμηρίωση github.com/gobwas/glob. Παράδειγμα: .drone.yml, /docs/**/*.txt. settings.protect_unprotected_file_patterns=Μοτίβα μη προστατευμένων αρχείων (διαχωρισμένα με semicolon «;» και ΟΧΙ το ελληνικό ερωτηματικό): settings.protect_unprotected_file_patterns_desc=Μη προστατευμένα αρχεία που επιτρέπεται να αλλάξουν απευθείας εάν ο χρήστης έχει πρόσβαση εγγραφής, παρακάμπτοντας τον περιορισμό ώθησης. Επιπλέων μοτίβα μπορούν να διαχωριστούν με ερωτηματικό (';'). Δείτε την τεκμηρίωση github.com/gobwas/glob για τη σύνταξη του μοτίβου. Πχ: .drone.yml, /docs/**/*.txt. settings.add_protected_branch=Ενεργοποίηση προστασίας @@ -2458,15 +2480,15 @@ settings.lfs_invalid_lock_directory=Αδυναμία κλειδώματος φα settings.lfs_lock_already_exists=Το κλείδωμα υπάρχει ήδη: %s settings.lfs_lock=Κλείδωμα settings.lfs_lock_path=Διαδρομή αρχείου για να κλειδωθεί... -settings.lfs_locks_no_locks=Χωρίς Κλειδώματα +settings.lfs_locks_no_locks=Χωρίς κλειδώματα settings.lfs_lock_file_no_exist=Το κλειδωμένο αρχείο δεν υπάρχει στον προεπιλεγμένο κλάδο -settings.lfs_force_unlock=Εξαναγκασμός Ξεκλειδώματος +settings.lfs_force_unlock=Εξαγκαναστικό ξεκλείδωμα settings.lfs_pointers.found=Βρέθηκαν %d δείκτης(ες) blob - %d συσχετίστηκαν, %d δεν συσχετίστηκαν (%d λείπουν από το χώρο αποθήκευσης) -settings.lfs_pointers.sha=Blob SHA +settings.lfs_pointers.sha=Blob hash settings.lfs_pointers.oid=OID -settings.lfs_pointers.inRepo=Στο Αποθετήριο +settings.lfs_pointers.inRepo=Στο αποθετήριο settings.lfs_pointers.exists=Υπάρχει στο χώρο αποθήκευσης -settings.lfs_pointers.accessible=Προσβάσιμο στο Χρήστη +settings.lfs_pointers.accessible=Προσβάσιμο στον χρήστη settings.lfs_pointers.associateAccessible=Συσχετισμός προσιτών %d OID settings.rename_branch_failed_exist=Αδυναμία μετονομασίας του κλάδου, επειδή ο κλάδος προορισμού %s υπάρχει ήδη. settings.rename_branch_failed_not_exist=Αδυναμία μετονομασίας του κλάδου %s επειδή δεν υπάρχει. @@ -2515,7 +2537,7 @@ diff.comment.add_single_comment=Προσθέστε ένα σχόλιο diff.comment.add_review_comment=Προσθήκη σχολίου diff.comment.start_review=Έναρξη αξιολόγησης diff.comment.reply=Απάντηση -diff.review=Αξιολόγηση +diff.review=Ολοκλήρωση αξιολόγησης diff.review.header=Υποβολή αξιολόγησης diff.review.placeholder=Σχόλιο αξιολόγησης diff.review.comment=Σχόλιο @@ -2536,16 +2558,16 @@ releases.desc=Παρακολούθηση εκδόσεων έργου και λή release.releases=Κυκλοφορίες release.detail=Λεπτομέρειες κυκλοφορίας release.tags=Ετικέτες -release.new_release=Νέα Κυκλοφορία +release.new_release=Νέα κυκλοφορία release.draft=Προσχέδιο -release.prerelease=Προ-Κυκλοφορία +release.prerelease=Προδημοσίευση release.stable=Σταθερή release.compare=Σύγκριση release.edit=επεξεργασία release.ahead.commits=%d υποβολές release.ahead.target=σε %s από αυτή την έκδοση tag.ahead.target=μέχρι το %s από αυτή την ετικέτα -release.source_code=Πηγαίος Κώδικας +release.source_code=Πηγαίος κώδικας release.new_subheader=Οι Κυκλοφορίες οργανώνουν εκδόσεις έργων. release.edit_subheader=Οι Κυκλοφορίες οργανώνουν εκδόσεις έργων. release.tag_name=Όνομα ετικέτας @@ -2556,15 +2578,15 @@ release.tag_helper_existing=Υπάρχουσα ετικέτα. release.title=Τίτλος κυκλοφορίας release.title_empty=Ο τίτλος δεν μπορεί να είναι κενός. release.message=Περιγράψτε αυτήν την κυκλοφορία -release.prerelease_desc=Σήμανση ως Προ-Κυκλοφορία +release.prerelease_desc=Σήμανση ως προδημοσίευση release.prerelease_helper=Σημείωση αυτής της κυκλοφορίας ως ακατάλληλη για χρήση στη παραγωγή. release.cancel=Ακύρωση -release.publish=Δημοσίευση Κυκλοφορίας -release.save_draft=Αποθήκευση Προχείρου -release.edit_release=Ενημέρωση Κυκλοφορίας -release.delete_release=Διαγραφή Κυκλοφορίας -release.delete_tag=Διαγραφή Ετικέτας -release.deletion=Διαγραφή Κυκλοφορίας +release.publish=Δημοσίευση κυκλοφορίας +release.save_draft=Αποθήκευση προχείρου +release.edit_release=Ενημέρωση κυκλοφορίας +release.delete_release=Διαγραφή κυκλοφορίας +release.delete_tag=Διαγραφή ετικέτας +release.deletion=Διαγραφή κυκλοφορίας release.deletion_desc=Διαγράφοντας μια κυκλοφορία, αυτή αφαιρείται μόνο από το Gitea. Δε θα επηρεάσει την ετικέτα Git, τα περιεχόμενα του αποθετηρίου σας ή το ιστορικό της. Συνέχεια; release.deletion_success=Η κυκλοφορία έχει διαγραφεί. release.deletion_tag_desc=Θα διαγράψει αυτή την ετικέτα από το αποθετήριο. Τα περιεχόμενα του αποθετηρίου και το ιστορικό παραμένουν αμετάβλητα. Συνέχεια; @@ -2576,7 +2598,7 @@ release.tag_already_exist=Αυτό το όνομα ετικέτας υπάρχε release.downloads=Λήψεις release.download_count=Λήψεις: %s release.add_tag_msg=Χρησιμοποιήστε τον τίτλο και το περιεχόμενο της έκδοσης ως μήνυμα ετικέτας. -release.add_tag=Δημιουργία Ετικέτας Μόνο +release.add_tag=Δημιουργία ετικέτας release.releases_for=Κυκλοφορίες για %s release.tags_for=Ετικέτες για %s @@ -2709,7 +2731,7 @@ release.system_generated = Αυτό το αρχείο παράγεται αυτ pulls.ready_for_review = Έτοιμο για αξιολόγηση; settings.rename_branch_failed_protected = Δεν είναι δυνατή η μετονομασία του κλάδου %s, επειδή είναι προστατευόμενος. settings.event_pull_request_enforcement = Εξαναγκασμός -editor.commit_id_not_matching = Το αναγνωριστικό της υποβολής δεν ταιριάζει με την υποβολή που επεξεργαστήκατε. Θα πρέπει να υποβάλετε τις αλλαγές σας σε έναν νέο κλάδο και μετά να τις συγχωνεύσετε. +editor.commit_id_not_matching = Το αρχείο άλλαξε όσο το επεξεργαζόσασταν. Θα πρέπει να υποβάλετε τις αλλαγές σας σε έναν νέο κλάδο και μετά να τις συγχωνεύσετε. settings.sourcehut_builds.visibility = Ορατότητα εργασιών object_format = Μορφή αντικειμένων («object format») settings.ignore_stale_approvals_desc = Οι εγκρίσεις, οι οποίες αναφέρονται σε παλαιότερες υποβολές, δεν θα προσμετρούνται στο σύνολο των απαιτούμενων εγκρίσεων του pull request. Εφόσον αυτές οι εγκρίσεις έχουν ήδη ανακληθεί, τότε αυτή η ρύθμιση δεν θα παίξει κάποιον ρόλο. @@ -2722,6 +2744,30 @@ file_follow = Ακολούθηση συνδέσμου (symlink) settings.sourcehut_builds.secrets_helper = Παραχώρηση πρόσβασης του job στα μυστικά ενός build (απαιτείται η άδεια SECRETS:RO) generated = Παραγμένο editor.push_out_of_date = Η αλλαγή φαίνεται να είναι παρωχημένη. +issues.author.tooltip.issue = Αυτό το ζήτημα δημιουργήθηκε από αυτόν τον χρήστη. +issues.author.tooltip.pr = Αυτό το pull request δημιουργήθηκε από αυτόν τον χρήστη. +settings.federation_settings = Ρυθμίσεις διαλειτουργικότητας +settings.federation_apapiurl = Το Federation URL (URL διαλειτουργικότητας) του αποθετηρίου. Κάντε το copy-paste στις ρυθμίσεις διαλειτουργικότητας ενός άλλου αποθετηρίου ως το URL ενός ακολουθούμενου αποθετηρίου. +form.string_too_long = Το κείμενο είναι μεγαλύτερο από %d χαρακτήρες. +release.hide_archive_links = Απόκρυψη αυτόματα δημιουργημένων archive +settings.graphql_url = URL του GraphQL +issues.edit.already_changed = Δεν ήταν δυνατή η αποθήκευση των αλλαγών στο ζήτημα αυτό, επειδή το περιεχόμενο έχει ήδη αλλαχθεί από κάποιον άλλο χρήστη. Για να μην χαθούν οι αλλαγές του, παρακαλείσθε να ανανεώσετε την σελίδα και προσπαθήστε να το επεξεργαστείτε ξανά. +project = Έργα +settings.sourcehut_builds.access_token_helper = Διακριτικό πρόσβασης (token) που έχει άδεια JOBS:RW. Δημιουργήστε ένα διακριτκό πρόσβασης για το build.sr.ht ή ένα διακριτικό πρόσβασης build.sr.ht με πρόσβαση ιδιωτικών περιεχομένων στο meta.sr.ht. +settings.federation_not_enabled = Οι λειτουργίες διαλειτουργικότητας δεν είναι ενεργοποιημένες στον διακομιστή σας. +settings.federation_following_repos = URL ακουλουθούμενων αποθετηρίων. Διαχωρίζονται με «;», χωρίς κενά. +subscribe.issue.guest.tooltip = Συνδεθείτε για να λάβετε ενημερώσεις για το ζήτημα αυτό. +subscribe.pull.guest.tooltip = Συνδεθείτε για να λάβετε ενημερώσεις για το pull request αυτό. +pulls.edit.already_changed = Δεν ήταν δυνατή η αποθήκευση των αλλαγών στο pull request αυτό, επειδή το περιεχόμενο έχει ήδη αλλαχθεί από κάποιον άλλο χρήστη. Για να μην χαθούν οι αλλαγές του, παρακαλείσθε να ανανεώσετε την σελίδα και προσπαθήστε να το επεξεργαστείτε ξανά. +comments.edit.already_changed = Δεν ήταν δυνατή η αποθήκευση των αλλαγών σε αυτό το σχόλιο, επειδή το περιεχόμενο έχει ήδη αλλαχθεί από κάποιον άλλο χρήστη. Για να μην χαθούν οι αλλαγές του, παρακαλείσθε να ανανεώσετε την σελίδα και προσπαθήστε να το επεξεργαστείτε ξανά. +settings.matrix.access_token_helper = Για τον σκοπό αυτό, σας συνιστούμε να δημιουργήσετε έναν ξεχωριστό λογαριασμό Matrix. Μπορείτε να αποκτήσετε το διακριτικό πρόσβασης μέσα στο Element. +settings.transfer.modal.title = Παραχώρηση ιδιοκτησίας +settings.transfer.button = Παραχώρηση ιδιοκτησίας +settings.matrix.room_id_helper = Το ID δωματίου μπορείτε να το βρείτε στο πρόγραμμα Element > Room Settings > Advanced > Internal room ID. Παράδειγμα: %s. +wiki.search = Αναζήτηση wiki +wiki.no_search_results = Κανένα αποτέλεσμα +n_release_one = %s κυκλοφορία +n_release_few = %s κυκλοφορίες [graphs] component_loading_failed = Δεν ήταν δυνατή η φόρτωση του %s @@ -2791,7 +2837,7 @@ settings.labels_desc=Προσθήκη σημάτων που μπορούν να members.membership_visibility=Ορατότητα μέλους: members.public=Ορατό -members.public_helper=κάνε το κρυφό +members.public_helper=κάνε κρυφό members.private=Κρυφό members.private_helper=κάνε ορατό members.member_role=Ρόλος μέλους: @@ -2855,7 +2901,8 @@ teams.all_repositories_admin_permission_desc=Αυτή η ομάδα παρέχε teams.invite.title=Έχετε προσκληθεί να συμμετάσχετε στην ομάδα %s του οργανισμού %s. teams.invite.by=Προσκλήθηκε από %s teams.invite.description=Παρακαλώ κάντε κλικ στον παρακάτω σύνδεσμο για συμμετοχή στην ομάδα. -follow_blocked_user = Δεν μπορείτε να ακολουθήσετε αυτόν τον οργανισμό, επειδή ο οργανισμός σας έχει αποκλείσει. +follow_blocked_user = Δεν μπορείτε να ακολουθήσετε τον οργανισμό, επειδή σας έχει αποκλείσει. +open_dashboard = Δημιουργία πίνακα δραστηριότητας [admin] dashboard=Πίνακας Ελέγχου @@ -2999,7 +3046,7 @@ users.delete_account=Διαγραφή λογαριασμού χρήστη users.cannot_delete_self=Δεν μπορείτε να διαγράψετε τον εαυτό σας users.still_own_repo=Αυτός ο χρήστης εξακολουθεί να κατέχει ένα ή περισσότερα αποθετήρια. Διαγράψτε ή μεταφέρετε αυτά τα αποθετήρια πρώτα. users.still_has_org=Αυτός ο χρήστης είναι μέλος ενός οργανισμού. Αφαιρέστε πρώτα τον χρήστη από οποιονδήποτε οργανισμό. -users.purge=Εκκαθάριση Χρήστη +users.purge=Διαγραφή χρήστη users.purge_help=Εξαναγκαστική διαγραφή χρήστη καθώς και των αποθετηρίων, οργανισμών και πακέτων που του ανήκουν. Όλα τα σχόλια και τα ζητήματα του χρήστη θα διαγραφούν επίσης. users.still_own_packages=Αυτός ο χρήστης εξακολουθεί να κατέχει ένα ή περισσότερα πακέτα, διαγράψτε αυτά τα πακέτα πρώτα. users.deletion_success=Ο λογαριασμός χρήστη έχει διαγραφεί. @@ -3009,14 +3056,14 @@ users.list_status_filter.reset=Επαναφορά users.list_status_filter.is_active=Ενεργό users.list_status_filter.not_active=Ανενεργό users.list_status_filter.is_admin=Διαχειριστής -users.list_status_filter.not_admin=Μη Διαχειριστής +users.list_status_filter.not_admin=Χωρίς δικαιώματα διαχειριστή users.list_status_filter.is_restricted=Περιορισμένος -users.list_status_filter.not_restricted=Μη Περιορισμένος -users.list_status_filter.is_prohibit_login=Απαγόρευση Σύνδεσης -users.list_status_filter.not_prohibit_login=Επιτρέπεται η Σύνδεση -users.list_status_filter.is_2fa_enabled=2FA Ενεργοποιημένο -users.list_status_filter.not_2fa_enabled=2FA Απενεργοποιημένο -users.details=Λεπτομέρειες Χρήστη +users.list_status_filter.not_restricted=Χωρίς περιορισμούς +users.list_status_filter.is_prohibit_login=Απαγορευμένη σύνδεση +users.list_status_filter.not_prohibit_login=Επιτρέπεται η σύνδεση +users.list_status_filter.is_2fa_enabled=Με ενεργοποιημένο 2FA +users.list_status_filter.not_2fa_enabled=Χωρίς 2FA +users.details=Λεπτομέρειες χρήστη emails.email_manage_panel=Διαχείριση email χρηστών emails.primary=Κύριο @@ -3051,8 +3098,8 @@ repos.size=Μέγεθος repos.lfs_size=Μέγεθος LFS packages.package_manage_panel=Διαχείριση πακέτων -packages.total_size=Συνολικό Μέγεθος: %s -packages.unreferenced_size=Μέγεθος Χωρίς Αναφορά: %s +packages.total_size=Συνολικό μέγεθος: %s +packages.unreferenced_size=Μέγεθος χωρίς αναφορά: %s packages.cleanup=Εκκαθάριση ληγμένων δεδομένων packages.cleanup.success=Επιτυχής εκκαθάριση δεδομένων που έχουν λήξει packages.owner=Ιδιοκτήτης @@ -3122,7 +3169,7 @@ auths.allowed_domains_helper=Αφήστε κενό για να επιτρέψε auths.skip_tls_verify=Παράλειψη επαλήθευσης TLS auths.force_smtps=Αναγκαστικό SMTPS auths.force_smtps_helper=Το SMTPS χρησιμοποιείται συνήθως στη θύρα 465. Ορίστε αυτό το πεδίο για χρήση του SMTPS σε άλλες θύρες. (Αλλιώς το STARTTLS θα χρησιμοποιηθεί σε άλλες θύρες αν υποστηρίζεται από τον διακομιστή.) -auths.helo_hostname=Όνομα διακομιστή στο HELO +auths.helo_hostname=Όνομα διακομιστή HELO auths.helo_hostname_helper=Όνομα διακομιστή που αποστέλλεται με το HELO. Αφήστε κενό για να στείλετε το τρέχον όνομα του διακομιστή. auths.disable_helo=Απενεργοποίηση HELO auths.pam_service_name=Όνομα υπηρεσίας PAM @@ -3162,7 +3209,7 @@ auths.sspi_separator_replacement_helper=Ο χαρακτήρας που θα χρ auths.sspi_default_language=Προεπιλεγμένη γλώσσα χρήστη auths.sspi_default_language_helper=Προεπιλεγμένη γλώσσα για τους χρήστες που δημιουργούνται αυτόματα με τη μέθοδο ταυτοποίησης SSPI. Αφήστε κενό αν προτιμάτε η γλώσσα να εντοπιστεί αυτόματα. auths.tips=Συμβουλές -auths.tips.oauth2.general=Ταυτοποίηση OAuth2 +auths.tips.oauth2.general=Ταυτοποίηση μέσω OAuth2 auths.tips.oauth2.general.tip=Κατά την εγγραφή μιας νέας ταυτοποίησης OAuth2, το URL κλήσης/ανακατεύθυνσης πρέπει να είναι: auths.tip.oauth2_provider=Πάροχος OAuth2 auths.tip.bitbucket=Καταχωρήστε έναν νέο καταναλωτή OAuth στο https://bitbucket.org/account/user//oauth-consumers/new και προσθέστε το δικαίωμα 'Account' - 'Read' @@ -3218,7 +3265,7 @@ config.ssh_start_builtin_server=Χρήση ενσωματωμένου διακο config.ssh_domain=Domain διακομιστή SSH config.ssh_port=Θύρα config.ssh_listen_port=Θύρα ακρόασης (Listen port) -config.ssh_root_path=Ριζική Διαδρομή +config.ssh_root_path=Τοποθεσία root config.ssh_key_test_path=Διαδρομή δοκιμής κλειδιού config.ssh_keygen_path=Διαδρομή keygen («ssh-keygen») config.ssh_minimum_key_size_check=Έλεγχος ελάχιστου μεγέθους κλειδιού @@ -3242,7 +3289,7 @@ config.service_config=Ρυθμίσεις υπηρεσίας config.register_email_confirm=Να απαιτείται η επιβεβαίωση της διεύθυνσης email για την δημιουργία ενός λογαριασμού config.disable_register=Απενεργοποίηση αυτο-εγγραφής config.allow_only_internal_registration=Να επιτρέπονται εγγραφές μόνο μέσω του Forgejo -config.allow_only_external_registration=Να επιτρέπονται εγγραφές μόνο με την χρήση εξωτερικών υπηρεσιών +config.allow_only_external_registration=Να επιτρέπονται οι εγγραφές μόνο μέσω εξωτερικών υπηρεσιών config.enable_openid_signup=Ενεργοποίηση αυτο-εγγραφής OpenID config.enable_openid_signin=Ενεργοποίηση σύνδεσης μέσω OpenID config.show_registration_button=Εμφάνιση κουμπιού εγγραφής @@ -3397,6 +3444,12 @@ config.open_with_editor_app_help = Οι επεξεργαστές κειμένο auths.tip.gitlab_new = Μπορείτε να δημιουργήσετε μία νέα εφαρμογή στο https://gitlab.com/-/profile/applications self_check.database_collation_mismatch = Η βάση δεδομένων αναμένεται να χρησιμοποιεί το collation: %s self_check.database_collation_case_insensitive = Η βάση δεδομένων χρησιμοποιεί το collation %s, το οποίο δεν ξεχωρίζει κεφαλαία και πεζά γράμματα. Αν και το Forgejo μπορεί να δουλέψει με αυτό, ίσως να προκύψουν κάποιες σπάνιες περιπτώσεις όπου κάτι δεν θα δουλέψει όπως αναμένεται. +config.cache_test_failed = Η δοκιμή cache απέτυχε: %v. +config.cache_test_succeeded = Η δοκιμή cache πέτυχε, λάβαμε απάντηση σε %s. +config.cache_test = Δοκιμή cache +config.cache_test_slow = Η δοκιμή cache πέτυχε, αλλά καθυστέρησε: %s. +config.app_slogan = Slogan διακομιστή +auths.default_domain_name = Προεπιλεγμένο domain name που χρησιμοποιείται για την διεύθυνση email [action] @@ -3749,6 +3802,7 @@ runs.no_workflows.documentation = Για περισσότερες πληροφο runs.no_workflows.quick_start = Δεν ξέρετε από που να πρωτοξεκινήσετε με το Forgejo Actions; Για μια γρήγορη αρχή, συμβουλευτείτε τον οδηγό μας. runs.workflow = Ροή εργασίας runs.no_job_without_needs = Η ροή εργασίας πρέπει να περιέχει τουλάχιστον ένα έργο που δεν εξαρτάται από κάποιο άλλο έργο. +runs.no_job = Η ροή εργασιών πρέπει να περιέχει τουλάχιστον μία εργασία (job) [projects] type-1.display_name=Ατομικό έργο @@ -3787,6 +3841,10 @@ user_kind = Αναζήτηση χρηστών... org_kind = Αναζήτηση οργανισμών... team_kind = Αναζήτηση ομαδών... code_kind = Αναζήτηση κώδικα... +exact_tooltip = Να συμπεριληφθούν μόνο αποτελέσματα που ταιριάζουν με τον όρο αναζήτησης +issue_kind = Αναζήτηση ζητημάτων... +pull_kind = Αναζήτηση pull... +exact = Ακριβής [munits.data] mib = MiB diff --git a/options/locale/locale_eo.ini b/options/locale/locale_eo.ini index 275fc069f5..f8d3f7f2d0 100644 --- a/options/locale/locale_eo.ini +++ b/options/locale/locale_eo.ini @@ -135,6 +135,10 @@ toggle_menu = Baskuli menuon access_token = Alira ĵetono remove_all = Forigi ĉion remove_label_str = Forigi «%s» +test = Provo +invalid_data = Nevalidaj datumoj: %v +more_items = Pli da eroj +copy_generic = Kopii al tondujo [editor] buttons.list.ordered.tooltip = Aldoni nombran liston diff --git a/options/locale/locale_fil.ini b/options/locale/locale_fil.ini index b9e6dd8f34..0f29bcf7f8 100644 --- a/options/locale/locale_fil.ini +++ b/options/locale/locale_fil.ini @@ -141,6 +141,7 @@ dashboard = Dashboard more_items = Higit pang mga item invalid_data = Hindi wastong datos: %v copy_generic = Kopyahin sa clipboard +test = Subukan [home] search_repos = Maghanap ng Repository… @@ -640,6 +641,10 @@ following.title.few = Sinusundan followers.title.few = Mga tagasunod following.title.one = Sinusundan followers.title.one = Tagasunod +public_activity.visibility_hint.self_public = Nakikita ng lahat ang iyong aktibidad, maliban sa mga interaksyon sa pribadong espasyo. I-configure. +public_activity.visibility_hint.admin_public = Nakikita ng lahat ang aktibidad na ito, ngunit bilang tagapangasiwa maari mo ring makita ang mga interaksyon sa mga pribadong espasyo. +public_activity.visibility_hint.self_private = Nakikita mo lang at mga tagapangasiwa ng instansya ang iyong aktibidad. I-configure. +public_activity.visibility_hint.admin_private = Nakikita mo ang aktibidad na ito dahil isa kang tagapangasiwa, ngunit gusto ng user na panatilihin itong pribado. [settings] profile = Profile @@ -1080,7 +1085,7 @@ 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 tree_path_not_found_branch = Hindi umiiral ang daanang %[1]s sa branch %[2]s -migrate_items_pullrequests = Mga hiling sa pagtulak +migrate_items_pullrequests = Mga hiling sa paghila archive.pull.nocomment = Naka-archive ang repo na ito. Hindi ka makakakomento sa mga pull request. archive.title = Naka-archive ang repo na ito. Maari mong itignan ang mga file at i-clone ito, pero hindi makaka-push o magbukas ng mga isyu o mga pull request. archive.title_date = Naka-archive ang repositoryo na ito noong %s. Maari mong itignan ang mga file at i-clone ito, pero hindi makaka-push o magbukas ng mga isyu o mga pull request. @@ -1287,7 +1292,7 @@ issues.cancel = Kanselahin issues.save = IImbak issues.label_title = Pangalan issues.delete.title = Burahin ang isyung ito? -settings.pulls_desc = Paganahin ang mga hiling sa paghatak para sa repositoryo +settings.pulls_desc = Paganahin ang mga hiling sa paghila para sa repositoryo editor.branch_does_not_exist = Walang natagpuang [branch] na "%s" sa [repository] na ito. commits.nothing_to_compare = Magkapareho ang mga branch na ito. commits.search_all = Lahat na mga branch @@ -1331,7 +1336,7 @@ issues.filter_type.assigned_to_you = Itinalaga sa iyo issues.filter_type.all_issues = Lahat ng mga isyu issues.author_helper = May-akda ang tagagamit na ito. issues.role.owner = May-ari -activity.title.prs_n = %d mga kahilingan sa paghatak +activity.title.prs_n = %d mga kahilingan sa paghila issues.label_color = Kulay pulls.nothing_to_compare = Magkapareho ang mga branch na ito. Hindi na kailangang gumawa ng hiling sa paghila. projects.column.assigned_to = Itinalaga sa/kay @@ -1395,7 +1400,7 @@ pulls.reopen_failed.base_branch = Hindi mabuksang muli ang hiling sa paghatak na issues.reopened_at = `binuksang muli ang isyung ito %[2]s` pulls.reopen_failed.head_branch = Hindi mabuksang muli ang [pull request] na ito dahil nabura ang punong [branch]. settings.event_pull_request_desc = Binuksan, sinara, muling binuksan, o binago ang hiling sa paghatak. -activity.opened_prs_count_n = Mga inimungkahing hiling sa paghatak +activity.opened_prs_count_n = Mga inimungkahing hiling sa paghila editor.filename_is_invalid = Hindi wasto ang pangalan ng file: "%s". activity.title.prs_opened_by = %s inimungkahi ni/ng %s pulls.cant_reopen_deleted_branch = Hindi mabuksang muli ang hiling sa paghatak na ito dahil nabura ang branch. @@ -1803,7 +1808,7 @@ issues.edit.already_changed = Hindi maimbak ang mga pagbabago sa isyu. Mukhang n 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_1 = nabago +activity.git_stats_files_changed_1 = ang nabago issues.dependency.remove = Tanggalin pulls.edit.already_changed = Hindi maimbak ang mga pagbabago sa [pull request]. Mukhang nabago na ng ibang tagagamit ang nilalaman. Mangyaring i-refresh ang pahina at subukang baguhin muli upang maiwasang ma-overwrite ang kanilang pagbago milestones.filter_sort.most_complete = Pinakakumpleto @@ -1826,9 +1831,9 @@ 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_pushed_n = mga itinulak +activity.git_stats_pushed_n = itinulak ang issues.reference_link = Pagsangguni: %s -activity.git_stats_pushed_1 = itinulak +activity.git_stats_pushed_1 = ang itinulak activity.git_stats_commit_n = %d mga [commit] issues.dependency.add = Magdagdag ng dependency… issues.dependency.cancel = Kanselahin @@ -1860,6 +1865,15 @@ pulls.showing_specified_commit_range = Ipinapakita lamang ang mga pagbabago sa p wiki.pages = Mga pahina activity.unresolved_conv_label = Nakabukas settings.pull_mirror_sync_in_progress = Inihatak ang mga pagbabago mula sa [malayuang] %s sa ngayon. +issues.dependency.setting = Paganahin ang mga [dependency] para sa mga isyu at mga hiling sa paghila +activity.navbar.pulse = Pulso +settings.protect_enable_merge_desc = Pinapayagan ang sinumang may [access] sa pagsulat upang isama ang mga hiling sa paghila sa [branch] na ito. +activity.git_stats_commit_1 = %d commit +activity.git_stats_file_n = %d mga file +activity.git_stats_file_1 = %d file +pulls.desc = Paganahin ang mga hiling sa paghila at mga pagsuri sa [code]. +activity.git_stats_exclude_merges = Maliban sa mga pagsali, +activity.active_prs_count_n = %d aktibong mga hiling sa paghila [search] commit_kind = Maghanap ng mga commit... @@ -2151,7 +2165,7 @@ config.ssh_listen_port = Listen port config.ssh_keygen_path = Path ng keygen ("ssh-keygen") config.ssh_key_test_path = Path ng key test auths.verify_group_membership = Patunayan ang membership ng grupo sa LDAP (iwanang walang laman ang filter para i-skip) -config.allow_only_external_registration = Payagan lamang ang pagrehistro sa pamamagitan ng mga panlabas na Serbisyo +config.allow_only_external_registration = Payagan lamang ang pagrehistro sa pamamagitan ng mga panlabas na serbisyo config.allow_only_internal_registration = Payagan lamang ang pagrehistro sa pamamagitan ng Forgejo auths.search_page_size = Laki ng pahina auths.filter = Filter ng user diff --git a/options/locale/locale_gl.ini b/options/locale/locale_gl.ini index 673486f6c0..a3fbc2988d 100644 --- a/options/locale/locale_gl.ini +++ b/options/locale/locale_gl.ini @@ -221,4 +221,6 @@ log_root_path = Ruta de rexistro log_root_path_helper = Os ficheiros de rexistro escribiranse neste directorio. sqlite_helper = Ruta do ficheiro para a base de datos SQLite3.
Introduza unha ruta absoluta se executa Forgejo como servizo. reinstall_confirm_message = A reinstalación cunha base de datos Forgejo existente pode causar varios problemas. Na maioría dos casos, deberías usar o teu "app.ini" existente para executar Forgejo. Se sabes o que estás facendo, confirma o seguinte: -reinstall_confirm_check_1 = É posible que se perdan os datos cifrados pola SECRET_KEY en app.ini: é posible que os usuarios non poidan iniciar sesión con 2FA/OTP e que os espellos non funcionen correctamente. Ao marcar esta caixa, confirmas que o ficheiro app.ini actual contén a SECRET_KEY correcta. \ No newline at end of file +reinstall_confirm_check_1 = É posible que se perdan os datos cifrados pola SECRET_KEY en app.ini: é posible que os usuarios non poidan iniciar sesión con 2FA/OTP e que os espellos non funcionen correctamente. Ao marcar esta caixa, confirmas que o ficheiro app.ini actual contén a SECRET_KEY correcta. +disable_gravatar.description = Desactiva o uso de Gravatar ou outras fontes de avatares de terceiros. As imaxes predeterminadas utilizaranse para os avatares dos usuarios a menos que carguen o seu propio avatar na instancia. +federated_avatar_lookup = Activar avatares federados \ No newline at end of file diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index fe93ea51da..3f3d7e8ffc 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -16,9 +16,9 @@ page=Pagina template=Template language=Lingua notifications=Notifiche -active_stopwatch=Tracker Tempo Attivo +active_stopwatch=Attiva cronometro create_new=Crea… -user_profile_and_more=Profilo ed Impostazioni… +user_profile_and_more=Profilo ed impostazioni… signed_in_as=Accesso effettuato come toc=Indice dei contenuti licenses=Licenze @@ -82,7 +82,7 @@ save=Salva add=Aggiungi add_all=Aggiungi tutti remove=Rimuovi -remove_all=Rimuovi Tutti +remove_all=Rimuovi tutti edit=Modifica enabled=Attivo @@ -142,13 +142,13 @@ download_logs = Scarica logs confirm_delete_selected = Confermare l'eliminazione di tutti gli elementi selezionati? sign_in_with_provider = Accedi con %s new_project_column = Nuova colonna -toggle_menu = Mostra/Nascondi Menu +toggle_menu = Mostra/Nascondi menu filter.not_fork = Non da fork filter = Filtro filter.clear = Rimuovi filtri filter.is_archived = Archiviato filter.not_archived = Non archiviato -filter.is_fork = Da Fork +filter.is_fork = Da fork filter.is_mirror = Mirror filter.not_mirror = Non mirror filter.is_template = Modello @@ -157,12 +157,14 @@ filter.public = Pubblico filter.private = Privato more_items = Più elementi invalid_data = Dati non validi: %v +copy_generic = Copia negli appunti +test = Prova [aria] footer.links = Collegamenti -navbar = Barra di Navigazione +navbar = Barra di navigazione footer = Piè di Pagina -footer.software = A proposito del Software +footer.software = A proposito di questo software [heatmap] more = Più @@ -184,7 +186,7 @@ buttons.list.unordered.tooltip = Aggiungi un elenco puntato buttons.list.ordered.tooltip = Aggiungi un elenco numerato buttons.list.task.tooltip = Aggiungi un elenco di attività buttons.mention.tooltip = Menziona un utente o team -buttons.ref.tooltip = Fai riferimento ad un problema o pull request +buttons.ref.tooltip = Fa riferimento a una segnalazione o pull request buttons.switch_to_legacy.tooltip = Passa all'editor classico buttons.enable_monospace_font = Attiva font monospace buttons.disable_monospace_font = Disattiva font monospace @@ -199,7 +201,7 @@ missing_csrf=Richiesta errata: nessun token CSRF presente invalid_csrf=Richiesta errata: token CSRF non valido not_found=Il bersaglio non è stato trovato. network_error=Errore di rete -report_message = Se credi che questo sia un errore di Forgejo, per favore controlla le segnalazioni su Codeberg o aprine una nuova se necessario. +report_message = Se si pensa che questo sia un errore di Forgejo, controllare le segnalazioni su Codeberg o aprine una nuova se necessario. server_internal = Errore interno del server [startpage] @@ -280,13 +282,13 @@ federated_avatar_lookup=Attiva le immagini profilo federate federated_avatar_lookup.description=Enable federated avatars lookup to use federated open source service based on libravatar. disable_registration=Disattiva auto-registrazione disable_registration.description=Disattiva la user self-registration. Solo gli amministratori saranno in grado di creare account. -allow_only_external_registration.description=Attiva la registrazione solo tramite servizi esterni +allow_only_external_registration.description=Gli utenti potranno creare nuovi account usando i servizi esterni configurati. openid_signin=Attiva l'accesso con OpenID -openid_signin.description=Attiva registrazione utente via OpenID. +openid_signin.description=Permetti agli utenti di registrarsi via OpenID. openid_signup=Attiva auto-registrazione con OpenID openid_signup.description=Attiva OpenID-based user self-registration. enable_captcha=Abilita CAPTCHA per registrazione -enable_captcha.description=Richiedi convalida captcha per i nuovi utenti. +enable_captcha.description=Richiedi convalida CAPTCHA per i nuovi utenti. require_sign_in_view=Richiedi l'accesso per visualizzare il contenuto dell'istanza admin_setting.description=Creare un account amministratore è opzionale. Il primo utente registrato sarà automaticamente un amministratore. admin_title=Impostazioni profilo amministratore @@ -307,11 +309,11 @@ save_config_failed=Salvataggio della configurazione non riuscito: %v invalid_admin_setting=Le impostazioni dell'account amministratore sono invalide: %v invalid_log_root_path=Il percorso del log non è valido: %v default_keep_email_private=Nascondi Indirizzo e-mail come impostazione predefinita -default_keep_email_private.description=Nasconi l'indirizzo email dei nuovi account utente di default. +default_keep_email_private.description=Nascondi l'indirizzo email dei nuovi utenti di default cosicché questa informazione non venga subito rivelata dopo la registrazione. default_allow_create_organization=Consenti la creazione di organizzazioni come impostazione predefinita default_allow_create_organization.description=Consenti ai nuovi account utente di creare organizzazioni di default. default_enable_timetracking=Attiva il cronografo come impostazione predefinita -default_enable_timetracking.description=Attiva il cronografo per le nuove repositories di default. +default_enable_timetracking.description=Attiva di default il cronografo per i nuovi repository. no_reply_address=Dominio e-mail nascosto no_reply_address_helper=Nome di dominio per utenti con un indirizzo email nascosto. Ad esempio, il nome utente "joe" accederà a Git come "joe@noreply.example.org" se il dominio email nascosto è impostato a "noreply.example.org". password_algorithm=Algoritmo per hash delle password @@ -327,19 +329,22 @@ password_algorithm_helper = Imposta l'algoritmo di hashing della password. Gli a require_sign_in_view.description = Limita l'accesso ad utenti autenticati. I visitatori vedranno solo le pagine di accesso e registrazione. allow_dots_in_usernames = Consenti l'uso del punto nel nome utente. Non impatta i profili già esistenti. config_location_hint = Queste opzioni di configurazione saranno salvate in: +allow_only_external_registration = Permetti la registrazione solo tramite servizi esterni +app_slogan = Slogan istanza +app_slogan_helper = Inserire qui lo slogan dell'istanza. Lasciare vuoto per disabilitare. [home] uname_holder=Nome utente o indirizzo e-mail password_holder=Password -switch_dashboard_context=Cambia Dashboard Context +switch_dashboard_context=Cambia dashboard context my_repos=Repositories show_more_repos=Mostra altre repositories… -collaborative_repos=Repository Condivisi +collaborative_repos=Repository condivisi my_orgs=Organizzazioni my_mirrors=I miei Mirror view_home=Vedi %s search_repos=Trova un repository… -filter=Altro filtri +filter=Altri filtri filter_by_team_repositories=Filtra per repository del team feed_of=`Feed di "%s"` @@ -389,21 +394,21 @@ disable_register_prompt=La registrazione è disabilitata. Si prega di contattare disable_register_mail=Email di conferma per la registrazione disabilitata. manual_activation_only=Contatta l'amministratore del sito per completare l'attivazione. remember_me=Ricorda questo dispositivo -forgot_password_title=Password Dimenticata +forgot_password_title=Password dimenticata forgot_password=Password dimenticata? sign_up_now=Hai bisogno di un account? Registrati adesso. confirmation_mail_sent_prompt=Una nuova email di conferma è stata inviata a %s. Per favore controlla la tua posta in arrivo nelle prossime %s per completare il processo di registrazione. must_change_password=Aggiorna la tua password allow_password_change=Richiede all'utente di cambiare la password (scelta consigliata) reset_password_mail_sent_prompt=Una email di conferma è stata inviata a %s. Per favore controlla la tua posta in arrivo nelle prossime %s per completare il processo di reset della password. -active_your_account=Attiva il tuo Account +active_your_account=Attiva il tuo account account_activated=L'account è stato attivato prohibit_login=L'accesso è proibito resent_limit_prompt=Hai già richiesto un'e-mail d'attivazione recentemente. Si prega di attenere 3 minuti e poi riprovare. has_unconfirmed_mail=Ciao %s, hai un indirizzo di posta elettronica non confermato (%s). Se non hai ricevuto una e-mail di conferma o vuoi riceverla nuovamente, fare clic sul pulsante qui sotto. resend_mail=Clicca qui per inviare nuovamente l'e-mail di attivazione email_not_associate=L'indirizzo email non è associato ad alcuna conta. -send_reset_mail=Inviare email di recupero account +send_reset_mail=Invia email di recupero reset_password=Recupero account invalid_code=Il tuo codice di conferma è invalido oppure è scaduto. reset_password_helper=Recuperare account @@ -417,12 +422,12 @@ twofa_passcode_incorrect=Il tuo passcode non è corretto. Se hai smarrito il tuo twofa_scratch_token_incorrect=I tuo codice scratch non è corretto. login_userpass=Accedi tab_openid=OpenID -oauth_signup_tab=Creare nuovo account -oauth_signup_title=Completa Nuovo Account -oauth_signup_submit=Completa l'Account -oauth_signin_tab=Collegamento ad un Account Esistente -oauth_signin_title=Accedi per autorizzare l' Account collegato -oauth_signin_submit=Collega Account +oauth_signup_tab=Crea nuovo account +oauth_signup_title=Completa il nuovo account +oauth_signup_submit=Completa l'account +oauth_signin_tab=Collega ad un account esistente +oauth_signin_title=Accedi per autorizzare l'account collegato +oauth_signin_submit=Collega account oauth.signin.error=Si è verificato un errore nell'elaborazione della richiesta di autorizzazione. Se questo errore persiste, si prega di contattare l'amministratore del sito. oauth.signin.error.access_denied=La richiesta di autorizzazione è stata negata. oauth.signin.error.temporarily_unavailable=Autorizzazione non riuscita perché il server di autenticazione non è temporaneamente disponibile. Riprova più tardi. @@ -672,6 +677,14 @@ form.name_pattern_not_allowed = La sequenza "%s" non è consentita in un nome ut follow_blocked_user = Non puoi seguire questo utente perchè hai bloccato questo utente o perchè questo utente ha bloccato te. followers_one = %d seguace following_one = %d seguito +public_activity.visibility_hint.self_public = L'attività è visibile a tutti, tranne che per le interazioni negli spazi privati. Configura. +public_activity.visibility_hint.admin_public = Questa attività è visibile a tutti, ma come amministratore, si possono vedere anche le interazioni negli spazi privati. +public_activity.visibility_hint.self_private = L'attività è visibile solo a te e agli amministratori dell'istanza. Configura. +public_activity.visibility_hint.admin_private = Questa attività è visibile a te perché sei un amministratore, ma l'utente desidera che rimanga privata. +followers.title.one = Seguace +followers.title.few = Seguaci +following.title.one = Seguito +following.title.few = Osservato [settings] @@ -999,6 +1012,7 @@ hints = Suggerimenti pronouns = Pronomi pronouns_custom = Personalizzato pronouns_unspecified = Non specificato +language.title = Lingua predefinita [repo] owner=Proprietario @@ -1358,13 +1372,13 @@ issues.new.no_items=Nessun elemento issues.new.milestone=Traguardo issues.new.no_milestone=Nessuna pietra miliare issues.new.clear_milestone=Milestone pulita -issues.new.open_milestone=Apri pietra miliare -issues.new.closed_milestone=Pietre miliari chiuse +issues.new.open_milestone=Apri traguardi +issues.new.closed_milestone=Traguardi chiusi issues.new.assignees=Assegnatari issues.new.clear_assignees=Cancella assegnatari issues.new.no_assignees=Nessun assegnatario issues.new.no_reviewers=Nessun revisore -issues.choose.get_started=Inizia +issues.choose.get_started=Cominciare issues.choose.open_external_link=Apri issues.choose.blank=Default issues.choose.blank_about=Crea un problema dal modello predefinito. @@ -2733,6 +2747,14 @@ settings.matrix.room_id_helper = L'ID della Stanza può essere ricavato dal web settings.graphql_url = URL GraphQL settings.sourcehut_builds.access_token_helper = Token di accesso con grant JOBS:RW. Genera un token builds.sr.ht o un token builds.sr.ht con accesso ai segreti su meta.sr.ht. settings.matrix.access_token_helper = È consigliata l'impostazione di un account Matrix dedicato per questa funzione. Il token di accesso può essere prelevato dal web client Element (in una pagina privata/incognito) > Menu utente (in alto a sinistra) > Tutte le impostazioni > Aiuto e informazioni > Avanzato > Token di accesso (sotto all'URL del Homeserver). Chiudi la pagina privata/incognito (La disconnessione invaliderebbe il token). +issues.author.tooltip.issue = Questo utente è l'autore di questa segnalazione. +form.string_too_long = La stringa data è più lunga di %d caratteri. +project = Progetti +issues.edit.already_changed = Impossibile salvare le modifiche al problema. Sembra che il contenuto sia già stato modificato da un altro utente. Aggiornare la pagina e provare a modificare nuovamente per evitare di sovrascrivere le modifiche +subscribe.pull.guest.tooltip = Accedere per sottoscrivere questa richiesta di pull. +subscribe.issue.guest.tooltip = Accedere per sottoscrivere questo problema. +n_release_one = rilascio %s +n_release_few = rilasci %s [graphs] contributors.what = contribuzioni @@ -3310,7 +3332,7 @@ monitor.start=Orario Avvio monitor.execute_time=Tempo di Esecuzione monitor.last_execution_result=Risultato monitor.process.cancel=Annulla processo -monitor.process.cancel_desc=L'annullamento di un processo potrebbe causare la perdita di dati +monitor.process.cancel_desc=Annullare un processo potrebbe causare una perdita di dati monitor.process.cancel_notices=Annulla: %s? monitor.process.children=Figli @@ -3434,7 +3456,7 @@ mirror_sync_create=ha sincronizzato un nuovo riferimento %[3]s%[2]s a %[3]s dal mirror approve_pull_request=`ha approvato %[3]s#%[2]s` reject_pull_request=`ha suggerito modifiche per %[3]s#%[2]s` -publish_release=`ha rilasciato "%[4]s" su %[3]s` +publish_release=`ha rilasciato %[4]s su %[3]s` review_dismissed=`respinta la recensione da %[4]s per %[3]s#%[2]s` review_dismissed_reason=Motivo: create_branch=ha creato il ramo %[3]s in %[4]s @@ -3798,6 +3820,9 @@ match_tooltip = Includi solo risultati che corrispondono precisamente al termine fuzzy_tooltip = Includi anche risultati che corrispondono approssimativamente al termine di ricerca user_kind = Cerca utenti... repo_kind = Cerca repository... +exact_tooltip = Includi solo i risultati che corrispondono esattamente al termine di ricerca +issue_kind = Cerca segnalazioni... +pull_kind = Ricerca pull... [munits.data] gib = GiB diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini index ac0e855e06..a91a481112 100644 --- a/options/locale/locale_ja-JP.ini +++ b/options/locale/locale_ja-JP.ini @@ -2668,7 +2668,7 @@ issues.blocked_by_user = あなたはこのリポジトリの所有者からブ pulls.nothing_to_compare_have_tag = 選択されたブランチまたはタグは同一です。 pulls.blocked_by_user = あなたはこのリポジトリの所有者からブロックされているため、プルリクエストを作成できません。 rss.must_be_on_branch = RSSフィードを見るためには、ブランチを閲覧する必要があります。 -migrate.forgejo.description = codeberge.orgまたは他のインスタンスからデータを移行する。 +migrate.forgejo.description = codeberg.orgまたは他のインスタンスからデータを移行する。 commits.browse_further = もっと見る issues.comment.blocked_by_user = あなたはこのリポジトリの所有者か、Issueの投稿者からブロックされているため、このIssueにコメントできません。 pulls.reopen_failed.head_branch = ブランチがもう存在しないため、このプルリクエストはreopenできません。 diff --git a/options/locale/locale_ko-KR.ini b/options/locale/locale_ko-KR.ini index 7c8cd2e960..074efa6a11 100644 --- a/options/locale/locale_ko-KR.ini +++ b/options/locale/locale_ko-KR.ini @@ -43,7 +43,7 @@ admin_panel=사이트 관리 account_settings=계정 설정 settings=설정 your_profile=프로필 -your_starred=즐겨찾기 +your_starred=좋아한 저장소 your_settings=설정 all=전체 @@ -158,6 +158,7 @@ filter.private = 비공개 filter.not_template = 템플릿이 아님 view = 보기 never = 안함 +test = 테스트 [aria] navbar = 내비게이션 바 @@ -180,10 +181,15 @@ buttons.heading.tooltip = 헤딩 추가 buttons.bold.tooltip = 두꺼운 텍스트 추가 buttons.code.tooltip = 코드 추가 buttons.link.tooltip = 링크 추가 +buttons.quote.tooltip = 인용구 추가 [filter] +string.desc = 하 - 가 +string.asc = 가 - 하 [error] +network_error = 네트워크 오류 +server_internal = 내부 서버 오류 [startpage] app_desc=편리한 설치형 Git 서비스 @@ -215,7 +221,7 @@ err_admin_name_is_invalid=관리자 사용자 이름이 올바르지 않습니 general_title=기본설정 app_name=인스턴스 제목 -app_name_helper=회사이름을 넣으세요. +app_name_helper=인스턴스 이름을 입력하세요. 입력한 내용은 모든 페이지에 표시됩니다. repo_path=저장소 최상위 경로 repo_path_helper=Git 원격 저장소는 이 디렉터리에 저장 됩니다. lfs_path=Git LFS 루트 경로 @@ -242,16 +248,16 @@ register_confirm=가입시 이메일 확인 필수 mail_notify=이메일 알림 켜기 server_service_title=서버 및 기타 서비스 설정 offline_mode=로컬 모드 켜기 -offline_mode.description=타사 콘텐츠 전송 네트워크를 사용하지 않도록 설정하고 모든 리소스를 로컬로 제공하십시오. +offline_mode.description=타사 콘텐츠 전송 네트워크를 사용하지 않도록 설정하고 모든 리소스를 로컬에서 제공합니다. disable_gravatar=Gravatar 사용안함 disable_gravatar.description=Gravatar 및 타사 아바타 소스를 사용하지 않도록 설정합니다. 사용자가 로컬로 아바타를 업로드하지 않는 한 기본 아바타가 사용됩니다. federated_avatar_lookup=탈중앙화 아바타 사용 federated_avatar_lookup.description=libravatar 기반 오픈소스 연합 아바타 조회를 허용합니다. disable_registration=사용자 등록 비활성화 -disable_registration.description=사용자가 직접 등록할 수 없게 합니다. 관리자만이 추가할 수 있습니다. -allow_only_external_registration.description=외부 서비스를 통한 등록을 허용 +disable_registration.description=인스턴스 관리자만이 새 사용자 계정을 추가할 수 있게 됩니다. 공개 인스턴스를 제공할 예정이고 많은 양의 스팸 계정을 감당할 준비가 되어 있지 않다면 사용자 등록을 비활성화 할 것을 강력히 권고합니다. +allow_only_external_registration.description=새 계정을 등록하려는 사용자는 설정된 외부 서비스를 이용해야만 새 계정을 등록할 수 있습니다. openid_signin=OpenID 로그인 사용 -openid_signin.description=OpenID 를 이용한 로그인을 허용합니다. +openid_signin.description=OpenID를 이용한 로그인을 허용합니다. openid_signup=OpenID 가입 허용 openid_signup.description=OpenID를 통한 가입을 허용합니다. enable_captcha.description=사용자 등록시 캡차를 요구합니다. @@ -279,6 +285,12 @@ default_enable_timetracking=시간 추적 사용을 기본값으로 설정 default_enable_timetracking.description=신규 레포지토리에 대한 시간 추적 사용을 기본값으로 설정합니다. no_reply_address=가려진 이메일 도메인 no_reply_address_helper=가려진 이메일을 가진 사용자에게 적용될 이메일 도메인입니다. 예를 들어, 사용자 'joe'의 가려잔 이메일 도메인이 'noreply.example.org'로 설정되어 있으면 'joe@noreply.example.org'로 처리 됩니다. +db_schema_helper = 데이터베이스 기본값 ("공개")를 사용하려면 빈 칸으로 두세요. +require_db_desc = Forgejo를 사용하려면 MySQL, PostgreSQL, SQLite3 또는 TiDB (MySQL 프로토콜) 이 설치되어 있어야 합니다. +domain = 서버 도메인 +smtp_from_invalid = "이메일 발신인" 주소가 유효하지 않습니다 +enable_captcha = 등록 시 CAPTCHA 활성화 +allow_only_external_registration = 외부 서비스를 통한 등록만 허용 [home] uname_holder=사용자 이름 또는 이메일 주소 @@ -307,6 +319,8 @@ repo_no_results=일치하는 레포지토리가 없습니다. user_no_results=일치하는 사용자가 없습니다. org_no_results=일치하는 조직이 없습니다. code_no_results=검색어와 일치하는 소스코드가 없습니다. +stars_one = %d 좋아요 +stars_few = %d 좋아요 [auth] create_new_account=계정 등록 @@ -452,7 +466,7 @@ change_avatar=아바타 변경… repositories=저장소 activity=공개 활동 followers_few=%d 팔로워 -starred=관심있는 저장소 +starred=좋아하는 저장소 overview=개요 following_few=%d 팔로우 중 follow=추적하기 @@ -1321,6 +1335,9 @@ issues.dependency.no_permission_1 = %d개의 전제조건을 읽을 권한이 issues.dependency.no_permission.can_remove = 이 전제조건을 읽을 권한이 없지만 지울 수 있음 issues.dependency.removed_dependency = `님이 %s 전제조건 삭제` issues.dependency.pr_close_blocked = 병합하기 전에 이 풀 리퀘스트을 제한하는 모든 이슈를 종료해야 합니다. +stars = 좋아요 +stars_remove_warning = 이 작업은 이 저장소에 대한 모든 좋아요를 제거할것입니다. +star_guest_user = 로그인하여 이 저장소에 좋아요 하세요. @@ -1695,6 +1712,7 @@ rename_repo=저장소 이름을 %[1]s에서에서 transfer_repo=저장소가 %s에서 %s로 이동됨 compare_commits=%d 커밋들 비교 watched_repo = %[2]s에대한 주시를 시작함 +starred_repo = %[2]s를 좋아함 [tool] now=현재 diff --git a/options/locale/locale_pl-PL.ini b/options/locale/locale_pl-PL.ini index f2bc34d711..a295a8cde1 100644 --- a/options/locale/locale_pl-PL.ini +++ b/options/locale/locale_pl-PL.ini @@ -157,6 +157,7 @@ filter.is_archived = Zarchiwizowane filter.is_mirror = Kopie lustrzane more_items = Więcej elementów filter.is_fork = Forki +test = Test [aria] navbar = Pasek nawigacji @@ -523,6 +524,7 @@ yes=Tak no=Nie cancel=Anuluj modify=Aktualizuj +confirm = Potwierdź [form] UserName=Nazwa użytkownika @@ -613,6 +615,7 @@ follow=Obserwuj unfollow=Przestań obserwować user_bio=Biografia disabled_public_activity=Ten użytkownik wyłączył publiczne wyświetlanie jego aktywności. +code = Kod [settings] @@ -845,6 +848,17 @@ visibility=Widoczność użytkownika visibility.public=Publiczny visibility.limited=Ograniczony visibility.private=Prywatny +uid = UID +comment_type_group_label = Etykieta +comment_type_group_milestone = Kamień milowy +comment_type_group_assignee = Przypisanie +comment_type_group_branch = Gałąź +comment_type_group_deadline = Termin +comment_type_group_project = Projekt +comment_type_group_reference = Odniesienie +webauthn_nickname = Pseudonim +comment_type_group_dependency = Zależność +permissions_list = Uprawnienia: [repo] owner=Właściciel @@ -2025,6 +2039,39 @@ topic.count_prompt=Nie możesz wybrać więcej, niż 25 tematów error.csv.too_large=Nie można wyświetlić tego pliku, ponieważ jest on zbyt duży. error.csv.unexpected=Nie można renderować tego pliku, ponieważ zawiera nieoczekiwany znak w wierszu %d i kolumnie %d. error.csv.invalid_field_count=Nie można renderować tego pliku, ponieważ ma nieprawidłową liczbę pól w wierszu %d. +settings.admin_indexer_unindexed = Nieindeksowane +settings.web_hook_name_forgejo = Forgejo +issues.filter_poster = Autor +issues.content_history.options = Opcje +issues.content_history.deleted = usunięto +issues.content_history.created = utworzono +editor.patching = Łatanie: +settings.web_hook_name_gogs = Gogs +desc.sha256 = SHA256 +commitstatus.failure = Awaria +settings.protect_status_check_matched = Dopasowano +settings.web_hook_name_slack = Slack +settings.web_hook_name_dingtalk = DingTalk +commitstatus.success = Sukces +wiki.cancel = Anuluj +settings.web_hook_name_packagist = Packagist +settings.web_hook_name_telegram = Telegram +settings.event_package = Pakiet +settings.web_hook_name_discord = Discord +settings.web_hook_name_matrix = Matrix +settings.protect_patterns = Szablony +default_branch_label = domyślnie +issues.author = Autor +commit.operations = Operacje +commit.revert = Odwróć +pull.deleted_branch = (usunięto):%s +diff.vendored = dostarczono +from_comment = (komentarz) +issues.filter_project = Projekt +mirror_sync = zsynchronizowano +settings.web_hook_name_gitea = Gitea +packages = Pakiety +actions = Akcje [graphs] @@ -2133,6 +2180,8 @@ teams.all_repositories_helper=Zespół ma dostęp do wszystkich repozytoriów. W teams.all_repositories_read_permission_desc=Ten zespół nadaje uprawnienie Odczytu do wszystkich repozytoriów: jego członkowie mogą wyświetlać i klonować repozytoria. teams.all_repositories_write_permission_desc=Ten zespół nadaje uprawnienie Zapisu do wszystkich repozytoriów: jego członkowie mogą odczytywać i przesyłać do repozytoriów. teams.all_repositories_admin_permission_desc=Ten zespół nadaje uprawnienia Administratora do wszystkich repozytoriów: jego członkowie mogą odczytywać, przesyłać oraz dodawać innych współtwórców do repozytoriów. +teams.write_access = Zapis +code = Kod [admin] dashboard=Pulpit @@ -2553,6 +2602,20 @@ notices.type_2=Zadanie notices.desc=Opis notices.op=Operacja notices.delete_success=Powiadomienia systemu zostały usunięte. +monitor.last_execution_result = Wynik +monitor.process.children = Dzieci +integrations = Integracje +users.bot = Bot +users.list_status_filter.menu_text = Filtr +packages.version = Wersja +packages.creator = Twórca +users.list_status_filter.not_active = Nieaktywne +notices.operations = Operacje +config.send_test_mail_submit = Wyślij +packages.published = Opublikowane +config.mailer_protocol = Protokół +monitor.stats = Statystyki +users.remote = Zdalnie [action] @@ -2603,6 +2666,7 @@ pin=Przypnij powiadomienie mark_as_read=Oznacz jako przeczytane mark_as_unread=Oznacz jak nieprzeczytane mark_all_as_read=Oznacz wszystkie jako przeczytane +subscriptions = Subskrybcje [gpg] default_key=Podpisano domyślnym kluczem @@ -2618,6 +2682,7 @@ error.probable_bad_default_signature=OSTRZEŻENIE! Pomimo, że domyślny klucz p [units] error.no_unit_allowed_repo=Nie masz uprawnień do żadnej sekcji tego repozytorium. error.unit_not_allowed=Nie masz uprawnień do tej sekcji repozytorium. +unit = Jednostka [packages] filter.type=Typ @@ -2625,6 +2690,23 @@ alpine.repository.branches=Gałęzie alpine.repository.repositories=Repozytoria conan.details.repository=Repozytorium owner.settings.cleanuprules.enabled=Włączone +alpine.repository.architectures = Architektury +container.details.platform = Platforma +requirements = Wymagania +keywords = Słowa kluczowe +versions = Wersje +dependency.id = ID +dependency.version = Wersja +details.author = Autor +filter.type.all = Wszystko +filter.container.tagged = Oznaczone +details.license = Licencja +installation = Instalacja +composer.dependencies = Zależności +filter.container.untagged = Nieoznaczone +title = Pakiety +dependencies = Zależności +details = Szczegóły [secrets] diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini index f4ab925dd0..6a89b64262 100644 --- a/options/locale/locale_pt-PT.ini +++ b/options/locale/locale_pt-PT.ini @@ -158,6 +158,7 @@ filter.not_template = Não modelos toggle_menu = Comutar menu filter = Filtro copy_generic = Copiar para a área de transferência +test = Testar [aria] navbar=Barra de navegação @@ -245,7 +246,7 @@ err_admin_name_is_invalid=O nome de utilizador do administrador é inválido general_title=Configurações gerais app_name=Título do sítio -app_name_helper=Pode escrever aqui o nome da sua companhia. +app_name_helper=Escreva aqui o nome da sua instância. Será mostrado em todas as páginas. repo_path=Localização dos repositórios repo_path_helper=Os repositórios Git remotos serão guardados nesta pasta. lfs_path=Localização do Git LFS @@ -671,12 +672,20 @@ block = Bloquear unblock = Desbloquear followers_one = %d seguidor following_one = %d seguindo -block_user.detail = Note que se bloquear este utilizador, serão executadas outras operações, tais como: -block_user.detail_1 = Está a deixar de ser seguido/a por este utilizador. -block_user.detail_2 = Este utilizador não pode interagir com os seus repositórios, questões criadas e comentários. -block_user.detail_3 = Este/a utilizador/a não o/a pode adicionar como colaborador/a nem você pode o/a adicionar como colaborador/a. +block_user.detail = Repare que bloquear um utilizador tem outros efeitos, tais como: +block_user.detail_1 = Irão deixar de seguir um ao outro e deixarão de poder seguir um ao outro. +block_user.detail_2 = Este/a utilizador/a deixará de poder interagir com os seus repositórios ou com as questões e comentários criados por si. +block_user.detail_3 = Não poderão adicionar um ao outro como colaboradores do repositório. follow_blocked_user = Não pode seguir este/a utilizador/a porque você o/a bloqueou ou este/a utilizador/a bloqueou-o/a a si. block_user = Bloquear utilizador +followers.title.one = Seguidor +followers.title.few = Seguidores +following.title.one = Seguindo +following.title.few = Seguindo +public_activity.visibility_hint.self_public = O seu trabalho está visível para todos, salvo o que é feito em espaços privados. Configurar. +public_activity.visibility_hint.admin_public = Este trabalho está visível para todos, mas como administrador/a pode também ver o que consta em espaços privados. +public_activity.visibility_hint.self_private = O seu trabalho apenas está visível para si e para os administradores da instância. Configurar. +public_activity.visibility_hint.admin_private = Este trabalho está visível para si porque é um/a administrador/a, mas o/a utilizador/a quer permanecer privado/a. [settings] profile=Perfil @@ -2756,6 +2765,8 @@ settings.federation_following_repos = URLs de repositórios que estão a ser seg settings.federation_not_enabled = A federação não está a habilitada na sua instância. n_release_one = %s lançamento n_release_few = %s lançamentos +issues.author.tooltip.issue = Este/a utilizador/a é o/a autor/a desta questão. +issues.author.tooltip.pr = Este/a utilizador/a é o/a autor/a deste pedido de integração. [graphs] component_loading=A carregar %s... @@ -3435,6 +3446,10 @@ config.open_with_editor_app_help = Os editores da opção "Abrir com" do menu da config.allow_dots_in_usernames = Permitir que os utilizadores usem pontos no seu nome de utilizador. Não altera as contas existentes. auths.default_domain_name = Nome de domínio predefinido usado para o endereço de email config.app_slogan = Lema da instância +config.cache_test = Testar a cache +config.cache_test_slow = O teste da cache foi bem sucedido, mas a resposta é lenta: %s. +config.cache_test_succeeded = O teste da cache foi bem sucedido, o tempo de resposta foi de %s. +config.cache_test_failed = Falhou a sondagem da cache: %v. [action] create_repo=criou o repositório %s @@ -3788,6 +3803,13 @@ runs.no_workflows.quick_start = Não sabe como começar com o Forgejo Action? Ve runs.no_job_without_needs = A sequência de trabalho tem de conter pelo menos um trabalho sem dependências. runs.workflow = Sequência de trabalho runs.no_job = A sequência de trabalho tem de conter pelo menos um trabalho +workflow.dispatch.use_from = Usar sequência de trabalho de +workflow.dispatch.run = Executar sequência de trabalho +workflow.dispatch.input_required = Exigir valor para a entrada "%s". +workflow.dispatch.warn_input_limit = Apresentando apenas as %d primeiras entradas. +workflow.dispatch.trigger_found = Esta sequência de trabalho é despoletada pelo evento workflow_dispatch. +workflow.dispatch.success = A execução da sequência de trabalho foi pedida com sucesso. +workflow.dispatch.invalid_input_type = Tipo de entrada "%s" inválido. [projects] type-1.display_name=Planeamento individual @@ -3826,6 +3848,10 @@ user_kind = Pesquisar utilizadores... team_kind = Pesquisar equipas... code_kind = Pesquisar código... code_search_unavailable = A pesquisa de código não está disponível, neste momento. Entre em contacto com o administrador. +exact = Fiel +exact_tooltip = Incluir somente os resultados que correspondam rigorosamente ao termo de pesquisa +issue_kind = Procurar questões... +pull_kind = Procurar puxadas... [munits.data] kib = KiB diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 30cb893fa0..0cce5b57ad 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -152,12 +152,13 @@ filter.is_mirror = Зеркала filter.is_template = Шаблоны filter.not_template = Не шаблоны filter.public = Публичные -filter.private = Приватные +filter.private = Частные filter.is_archived = Архивированные filter.not_mirror = Не зеркала more_items = Больше элементов invalid_data = Неверные данные: %v copy_generic = Копировать в буфер обмена +test = Проверить [aria] navbar=Панель навигации @@ -189,6 +190,8 @@ buttons.ref.tooltip=Сослаться на задачу или запрос с buttons.switch_to_legacy.tooltip=Использовать старый редактор buttons.enable_monospace_font=Включить моноширинный шрифт buttons.disable_monospace_font=Выключить моноширинный шрифт +buttons.unindent.tooltip = Уменьшить вложенность на 1 +buttons.indent.tooltip = Увеличить вложенность на 1 [filter] string.asc=A - Я @@ -352,7 +355,7 @@ show_both_archived_unarchived=Показаны архивированные и show_only_archived=Показаны только архивированные show_only_unarchived=Показаны только разархивированные -show_private=Приватный +show_private=Частные show_both_private_public=Показаны как публичные, так и частные show_only_private=Показаны только приватные show_only_public=Показаны только публичные @@ -707,7 +710,7 @@ webauthn=Двухфакторная аутентификация (ключами public_profile=Публичный профиль biography_placeholder=Расскажите немного о себе! (Можно использовать Markdown) -location_placeholder=Поделитесь своим приблизительным местоположением с другими +location_placeholder=Пусть все знают, откуда вы profile_desc=Как ваш профиль будет отображаться для других пользователей. Ваш основной адрес эл. почты будет использоваться для уведомлений, восстановления пароля и веб-операций с Git. password_username_disabled=Нелокальным пользователям запрещено изменение их имени пользователя. Для получения более подробной информации обратитесь к администратору сайта. full_name=Полное имя @@ -745,7 +748,7 @@ comment_type_group_pull_request_push=Добавленные коммиты comment_type_group_project=Проект comment_type_group_issue_ref=Ссылка на задачу saved_successfully=Ваши настройки успешно сохранены. -privacy=Приватность +privacy=Конфиденциальность keep_activity_private=Скрыть активность со страницы профиля keep_activity_private_popup=Ваша активность будет видна только вам и администраторам сервера @@ -916,7 +919,7 @@ create_oauth2_application_button=Создать приложение create_oauth2_application_success=Вы успешно создали новое приложение OAuth2. update_oauth2_application_success=Изменения настроек приложения OAuth2 успешно применены. oauth2_application_name=Имя приложения -oauth2_redirect_uris=URI для перенаправления. Используйте новую строку для каждого URI. +oauth2_redirect_uris=URI перенаправлений. Размещайте URI на отдельных строках. save_application=Сохранить oauth2_client_id=ИД клиента oauth2_client_secret=Клиентский ключ @@ -972,7 +975,7 @@ orgs_none=Вы не состоите ни в одной организации. repos_none=Вы не владеете ни одним репозиторием. delete_account=Удаление учётной записи -delete_prompt=Эта операция навсегда удалит вашу учётную запись. Это НЕВОЗМОЖНО будет отменить. +delete_prompt=Эта операция навсегда удалит вашу учётную запись. Её НЕВОЗМОЖНО отменить. delete_with_all_comments=Ваша учётная запись младше %s. Чтобы избежать комментариев к плану, все комментарии к ней будут удалены. confirm_delete_account=Подтвердить удаление delete_account_title=Удалить эту учётную запись @@ -984,13 +987,13 @@ email_notifications.disable=Отключить уведомления по по email_notifications.submit=Задать настройку уведомлений email_notifications.andyourown=И ваши собственные уведомления -visibility=Видимость пользователя +visibility=Видимость профиля visibility.public=Публичный -visibility.public_tooltip=Видимый для всех +visibility.public_tooltip=Виден всем, кто может открыть этот сайт visibility.limited=Ограниченный -visibility.limited_tooltip=Виден только выполнившим вход пользователям -visibility.private=Приватный -visibility.private_tooltip=Видно только участникам организаций, к которым вы присоединились +visibility.limited_tooltip=Виден только зарегистрированным пользователям сайта +visibility.private=Частный +visibility.private_tooltip=Виден только участникам организаций, в которых вы состоите blocked_users_none = Заблокированных пользователей нет. user_block_success = Пользователь заблокирован. oauth2_application_locked = Forgejo предварительно регистрирует некоторые приложения OAuth2 при запуске, если это включено в конфигурации. Для избежания неожиданного поведения их нельзя удалять или редактировать. Ознакомиться с подробностями можно в документации OAuth2. @@ -1109,7 +1112,7 @@ transfer.accept_desc=Переместить в «%s» transfer.reject=Отказаться от передачи transfer.reject_desc=Отменить перемещение в «%s» -desc.private=Приватный +desc.private=Частный desc.public=Публичный desc.template=Шаблон desc.internal=Внутренний @@ -1423,25 +1426,25 @@ issues.filter_milestones=Фильтр этапов issues.filter_projects=Фильтровать проекты issues.filter_labels=Фильтр меток issues.filter_reviewers=Фильтр рецензентов -issues.new=Добавить задачу +issues.new=Создать задачу issues.new.title_empty=Заголовок не может быть пустым issues.new.labels=Метки issues.new.no_label=Нет меток issues.new.clear_labels=Очистить метки issues.new.projects=Проекты -issues.new.clear_projects=Очистить проекты +issues.new.clear_projects=Удалить из проектов issues.new.no_projects=Нет проекта issues.new.open_projects=Открытые проекты issues.new.closed_projects=Закрытые проекты issues.new.no_items=Нет элементов issues.new.milestone=Этап issues.new.no_milestone=Нет этапа -issues.new.clear_milestone=Очистить этап +issues.new.clear_milestone=Удалить из этапа issues.new.open_milestone=Открытые этапы issues.new.closed_milestone=Завершённые этапы issues.new.assignees=Назначенные -issues.new.clear_assignees=Убрать ответственных -issues.new.no_assignees=Нет назначенных лиц +issues.new.clear_assignees=Снять назначения +issues.new.no_assignees=Нет назначенных issues.new.no_reviewers=Нет рецензентов issues.choose.get_started=Начать issues.choose.open_external_link=Открыть @@ -1449,7 +1452,7 @@ issues.choose.blank=По умолчанию issues.choose.blank_about=Создать запрос из шаблона по умолчанию. issues.choose.ignore_invalid_templates=Некорректные шаблоны были проигнорированы issues.choose.invalid_templates=Найден(ы) %v неверный(х) шаблон(ов) -issues.choose.invalid_config=Конфигурация задачи содержит ошибки: +issues.choose.invalid_config=Ошибки в конфигурации задачи: issues.no_ref=Нет связанной ветки или тега issues.create=Создать задачу issues.new_label=Новая метка @@ -1494,7 +1497,7 @@ issues.filter_milestone_open=Открытые этапы issues.filter_milestone_closed=Завершённые этапы issues.filter_project=Проект issues.filter_project_all=Все проекты -issues.filter_project_none=Нет проекта +issues.filter_project_none=Без проекта issues.filter_assignee=Назначено issues.filter_assginee_no_select=Все назначения issues.filter_assginee_no_assignee=Нет ответственного @@ -1525,9 +1528,9 @@ issues.action_open=Открыть issues.action_close=Закрыть issues.action_label=Метка issues.action_milestone=Этап -issues.action_milestone_no_select=Нет этапа -issues.action_assignee=Ответственный -issues.action_assignee_no_select=Нет ответственного +issues.action_milestone_no_select=Без этапа +issues.action_assignee=Назначенный +issues.action_assignee_no_select=Без назначенного issues.action_check=Выбрать/отменить выбор issues.action_check_all=Выбрать/отменить выбор всех элементов issues.opened_by=открыта %[1]s %[3]s @@ -1756,7 +1759,7 @@ pulls.desc=Включить запросы на слияние и проверк pulls.new=Создать запрос pulls.view=Просмотр запроса на слияние pulls.compare_changes=Новый запрос на слияние -pulls.allow_edits_from_maintainers=Разрешить редактирование сопровождающими +pulls.allow_edits_from_maintainers=Разрешить правки от сопровождающих pulls.allow_edits_from_maintainers_desc=Пользователи с доступом на запись в основную ветку могут отправлять изменения и в эту ветку pulls.allow_edits_from_maintainers_err=Не удалось обновить pulls.compare_changes_desc=Сравнить две ветки и создать запрос на слияние для изменений. @@ -2087,13 +2090,13 @@ settings.use_internal_wiki=Использовать встроенную вик settings.use_external_wiki=Использовать внешнюю вики settings.external_wiki_url=Ссылка на внешнюю вики settings.external_wiki_url_error=URL внешней вики не является корректным URL. -settings.external_wiki_url_desc=Посетители будут перенаправлены на URL, когда они кликнут по вкладке. +settings.external_wiki_url_desc=Посетители будут перенаправлены по указанному адресу вики при открытии вкладки. settings.issues_desc=Включить систему задач settings.use_internal_issue_tracker=Использовать встроенную систему задач settings.use_external_issue_tracker=Использовать внешнюю систему задач settings.external_tracker_url=Ссылка на внешнюю систему отслеживания задач settings.external_tracker_url_error=URL внешнего баг-трекера не является корректным URL. -settings.external_tracker_url_desc=Посетители будут перенаправлены на URL, когда они кликнут по вкладке. +settings.external_tracker_url_desc=Посетители будут перенаправлены по указанному адресу трекера задач при открытии вкладки. settings.tracker_url_format=Формат ссылки внешней системы отслеживания задач settings.tracker_url_format_error=Формат URL внешнего баг-трекера некорректен. settings.tracker_issue_style=Формат нумерации во внешней системе задач @@ -2447,7 +2450,7 @@ settings.lfs_locks_no_locks=Нет блокировки settings.lfs_lock_file_no_exist=Заблокированный файл не существует в ветке по умолчанию settings.lfs_force_unlock=Принудительная разблокировка settings.lfs_pointers.found=Найдено %d указатель(ей) блоков - присоединено %d, %d не привязано (%d отсутствует в хранилище) -settings.lfs_pointers.sha=Blob SHA +settings.lfs_pointers.sha=Хеш blob'а settings.lfs_pointers.oid=OID settings.lfs_pointers.inRepo=В репозитории settings.lfs_pointers.exists=Существуют в хранилище @@ -2767,6 +2770,8 @@ n_release_one = %s выпуск n_release_few = %s выпусков subscribe.issue.guest.tooltip = Войдите, чтобы подписаться на эту задачу. subscribe.pull.guest.tooltip = Войдите, чтобы подписаться на это слияние. +issues.author.tooltip.issue = Автор этой задачи. +issues.author.tooltip.pr = Автор этого запроса слияния. [graphs] @@ -3438,6 +3443,10 @@ auths.tip.gitlab_new = Создайте новое приложение в https monitor.queue.review_add = Подробности / добавить обработчики auths.default_domain_name = Домен по умолчанию для адресов эл. почты config.app_slogan = Лозунг сервера +config.cache_test = Проверить кэш +config.cache_test_slow = Кэш проверен успешно, но ответ был медленным: %s. +config.cache_test_failed = Не удалось проверить кэш: %v. +config.cache_test_succeeded = Кэш был проверен успешно, ответ получен за %v. [action] @@ -3503,7 +3512,7 @@ pib = ПиБ eib = ЭиБ [dropzone] -default_message=Перетащите файл или кликните сюда для загрузки. +default_message=Перетащите сюда файлы или нажмите для загрузки. invalid_input_type=Вы не можете загружать файлы этого типа. file_too_big=Размер файла ({{filesize}} МБ) больше чем максимальный размер ({{maxFilesize}} МБ). remove_file=Удалить файл @@ -3525,7 +3534,7 @@ no_subscriptions=Нет подписок [gpg] default_key=Подписано ключом по умолчанию error.extract_sign=Не удалось извлечь подпись -error.generate_hash=Не удалось создать хэш коммита +error.generate_hash=Не удалось создать хеш коммита error.no_committer_account=Учётная запись с эл. почтой этого коммитера не найдена error.no_gpg_keys_found=Не найден ключ, соответствующий данной подписи error.not_signed_commit=Неподписанный коммит @@ -3803,6 +3812,13 @@ runs.status_no_select = Любое состояние runs.no_matching_online_runner_helper = Нет работающего исполнителя с меткой: %s runs.no_job_without_needs = Рабочий поток должен содержать хотя бы одну задачу без зависимостей. runs.no_job = Рабочий поток должен включать хотя бы одну задачу +workflow.dispatch.trigger_found = Этот рабочий поток срабатывает на события workflow_dispatch. +workflow.dispatch.use_from = Использовать рабочий поток из +workflow.dispatch.run = Выполнить рабочий поток +workflow.dispatch.success = Выполнение рабочего потока запрошено успешно. +workflow.dispatch.input_required = Требовать значение для поля «%s». +workflow.dispatch.invalid_input_type = Неизвестный тип поля «%s». +workflow.dispatch.warn_input_limit = Отображаются только первые %d полей. [projects] type-1.display_name=Индивидуальный проект From c38acaff81bf37f2b8d8882769fe2d86d981fe70 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 4 Jul 2024 09:01:07 +0200 Subject: [PATCH 0021/1984] chore(renovate): add base branches --- renovate.json | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index 4f032edd3f..8f12afb9e9 100644 --- a/renovate.json +++ b/renovate.json @@ -15,6 +15,13 @@ "docker:pinDigests", "helpers:pinGitHubActionDigests" ], + "baseBranches": [ + "$default", + "/^v7\\.\\d+/forgejo$", + "/^v8\\.\\d+/forgejo$", + "/^v9\\.\\d+/forgejo$", + "/^v\\d\\d+\\.\\d+\\/forgejo$" + ], "semanticCommits": "disabled", "automergeStrategy": "merge-commit", "postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths", "npmDedupe"], @@ -56,9 +63,7 @@ }, { "description": "elasticsearch CI images are published about once a month and do not use semantic versioning or short tags", - "matchDepNames": [ - "elasticsearch" - ], + "matchDepNames": ["elasticsearch"], "extends": ["schedule:quarterly"] }, { @@ -176,6 +181,11 @@ "description": "disallow `eslint-plugin-no-use-extend-native` v0.6.0+, requires eslint v9", "matchDepNames": ["eslint-plugin-no-use-extend-native"], "allowedVersions": "<0.6.0" + }, + { + "description": "Require approval for stable branches (must be last rule to override all others)", + "matchBaseBranches": ["/^v\\d+\\.\\d+\\/forgejo$/"], + "dependencyDashboardApproval": true } ], "customManagers": [ From aa7657c544c19cc56b90b8484c7e22ea61d7a8ec Mon Sep 17 00:00:00 2001 From: 0ko <0ko@noreply.codeberg.org> Date: Thu, 4 Jul 2024 11:46:31 +0000 Subject: [PATCH 0022/1984] ui(blame): remove broken padding (#4318) This padding causes visual bug, because it only applies to the first line and not to the rest in case the line is broken into multiple. I don't think it's actually needed here for good look, so I decided to remove it. In case decreased padding looks worse, the padding can be grown back via other element so it wouldn't cause this bug. Preview: https://codeberg.org/attachments/56fd2ee8-4955-409d-998f-1feba987b9af Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4318 Reviewed-by: Gusted --- templates/repo/blame.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/blame.tmpl b/templates/repo/blame.tmpl index 691f75dcad..58be0b17e1 100644 --- a/templates/repo/blame.tmpl +++ b/templates/repo/blame.tmpl @@ -78,7 +78,7 @@ {{end}} - {{$row.Code}} + {{$row.Code}} {{end}} From b31e21d80eb0baf8d55ae3e2bf39fc8a2dc1e1a8 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 4 Jul 2024 13:56:38 +0200 Subject: [PATCH 0023/1984] build(go-licenses): support go toolchain mismatch --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 2c7c976f4a..926c4a4a30 100644 --- a/Makefile +++ b/Makefile @@ -581,7 +581,7 @@ tidy-check: tidy go-licenses: $(GO_LICENSE_FILE) $(GO_LICENSE_FILE): go.mod go.sum - -$(GO) run $(GO_LICENSES_PACKAGE) save . --force --save_path=$(GO_LICENSE_TMP_DIR) 2>/dev/null + -$(shell $(GO) env GOROOT)/bin/go run $(GO_LICENSES_PACKAGE) save . --force --save_path=$(GO_LICENSE_TMP_DIR) 2>/dev/null $(GO) run build/generate-go-licenses.go $(GO_LICENSE_TMP_DIR) $(GO_LICENSE_FILE) @rm -rf $(GO_LICENSE_TMP_DIR) From 3eb178db497d255509cdc442664f674afaf51939 Mon Sep 17 00:00:00 2001 From: Gusted Date: Thu, 4 Jul 2024 13:37:54 +0200 Subject: [PATCH 0024/1984] [CHORE] Update terminal-to-html dependency - Update the `github.com/buildkite/terminal-to-html/v3` dependency from version v3.10.1 to v3.13.0. - Version v3.12.0 introduced an incompatible change, the return type of `AsHTML` changed from `[]byte` to `string`. That same version also introduced streaming mode https://github.com/buildkite/terminal-to-html/pull/126, which allows us to avoid reading the whole input into memory. - Closes #4313 --- go.mod | 2 +- go.sum | 4 ++-- modules/markup/console/console.go | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 6d4d30ab0e..fce1aa5823 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/alecthomas/chroma/v2 v2.14.0 github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb github.com/blevesearch/bleve/v2 v2.4.1 - github.com/buildkite/terminal-to-html/v3 v3.10.1 + github.com/buildkite/terminal-to-html/v3 v3.13.0 github.com/caddyserver/certmagic v0.21.0 github.com/chi-middleware/proxy v1.1.1 github.com/djherbis/buffer v1.2.0 diff --git a/go.sum b/go.sum index a422e44d61..010eee4955 100644 --- a/go.sum +++ b/go.sum @@ -143,8 +143,8 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/buildkite/terminal-to-html/v3 v3.10.1 h1:znT9eD26LQ59dDJJEpMCwkP4wEptEAPi74hsTBuHdEo= -github.com/buildkite/terminal-to-html/v3 v3.10.1/go.mod h1:qtuRyYs6/Sw3FS9jUyVEaANHgHGqZsGqMknPLyau5cQ= +github.com/buildkite/terminal-to-html/v3 v3.13.0 h1:TBRfvqZWoIpxxiiM9rdIn2bbI7pwxBjlQf8/cbLJnss= +github.com/buildkite/terminal-to-html/v3 v3.13.0/go.mod h1:33sojHDaRBSMwwkKXPEkb5Uc7LKF79rWGurL3ei/GX0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/caddyserver/certmagic v0.21.0 h1:yDoifClc4hIxhHer3AxUj4buhF+NzRR6torw/AOnuUE= github.com/caddyserver/certmagic v0.21.0/go.mod h1:OgUZNXYV/ylYoFJNmoYVR5nntydLNMQISePPgqZTyhc= diff --git a/modules/markup/console/console.go b/modules/markup/console/console.go index cf42c9cceb..7c4050a721 100644 --- a/modules/markup/console/console.go +++ b/modules/markup/console/console.go @@ -58,13 +58,13 @@ func (Renderer) CanRender(filename string, input io.Reader) bool { // Render renders terminal colors to HTML with all specific handling stuff. func (Renderer) Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error { - buf, err := io.ReadAll(input) - if err != nil { + screen := &trend.Screen{} + if _, err := io.Copy(screen, input); err != nil { return err } - buf = trend.Render(buf) - buf = bytes.ReplaceAll(buf, []byte("\n"), []byte(`
`)) - _, err = output.Write(buf) + buf := screen.AsHTML() + buf = strings.ReplaceAll(buf, "\n", `
`) + _, err := output.Write([]byte(buf)) return err } From 1c49047390b176c48c45014ec087d379fbf0b552 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 4 Jul 2024 02:02:59 +0000 Subject: [PATCH 0025/1984] Update module google.golang.org/grpc to v1.65.0 --- go.mod | 10 +++++----- go.sum | 21 ++++++++++----------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 6d4d30ab0e..312b7ca061 100644 --- a/go.mod +++ b/go.mod @@ -112,8 +112,8 @@ require ( golang.org/x/sys v0.21.0 golang.org/x/text v0.16.0 golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d - google.golang.org/grpc v1.60.1 - google.golang.org/protobuf v1.33.0 + google.golang.org/grpc v1.65.0 + google.golang.org/protobuf v1.34.1 gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df gopkg.in/ini.v1 v1.67.0 gopkg.in/yaml.v3 v3.0.1 @@ -164,7 +164,7 @@ require ( github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect github.com/caddyserver/zerossl v0.1.2 // indirect github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/couchbase/go-couchbase v0.1.1 // indirect github.com/couchbase/gomemcached v0.3.0 // indirect @@ -202,7 +202,7 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/geo v0.0.0-20230421003525-6adc56603217 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/go-querystring v1.1.0 // indirect @@ -293,7 +293,7 @@ require ( golang.org/x/mod v0.17.0 // indirect golang.org/x/sync v0.7.0 // indirect golang.org/x/time v0.5.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index a422e44d61..f10eda4a74 100644 --- a/go.sum +++ b/go.sum @@ -152,8 +152,8 @@ github.com/caddyserver/zerossl v0.1.2 h1:tlEu1VzWGoqcCpivs9liKAKhfpJWYJkHEMmlxRb github.com/caddyserver/zerossl v0.1.2/go.mod h1:wtiJEHbdvunr40ZzhXlnIkOB8Xj4eKtBKizCcZitJiQ= github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a h1:MISbI8sU/PSK/ztvmWKFcI7UGb5/HQT7B+i3a2myKgI= github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a/go.mod h1:2GxOXOlEPAMFPfp014mK1SWq8G8BN8o7/dfYqJrVGn8= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chi-middleware/proxy v1.1.1 h1:4HaXUp8o2+bhHr1OhVy+VjN0+L7/07JDcn6v7YrTjrQ= github.com/chi-middleware/proxy v1.1.1/go.mod h1:jQwMEJct2tz9VmtCELxvnXoMfa+SOdikvbVJVHv/M+0= github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= @@ -344,8 +344,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -916,10 +916,10 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac h1:nUQEQmH/csSvFECKYRv6HWEyypysidKl2I6Qpsglq/0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -927,10 +927,9 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miE google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= 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.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 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= From 79b91930fa2356885a352220cd46bc3447a8a9d1 Mon Sep 17 00:00:00 2001 From: TheFox0x7 Date: Thu, 4 Jul 2024 19:22:59 +0200 Subject: [PATCH 0026/1984] chore(license): license path change for protobuf --- assets/go-licenses.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/go-licenses.json b/assets/go-licenses.json index 967da874c3..17ade17502 100644 --- a/assets/go-licenses.json +++ b/assets/go-licenses.json @@ -530,8 +530,8 @@ "licenseText": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, \"control\" means (i) the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising\npermissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that\nis based on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work\nby the copyright owner or by an individual or Legal Entity authorized to submit\non behalf of the copyright owner. For the purposes of this definition,\n\"submitted\" means any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems, and\nissue tracking systems that are managed by, or on behalf of, the Licensor for\nthe purpose of discussing and improving the Work, but excluding communication\nthat is conspicuously marked or otherwise designated in writing by the copyright\nowner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf\nof whom a Contribution has been received by Licensor and subsequently\nincorporated within the Work.\n\n2. Grant of Copyright License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable copyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the Work and such\nDerivative Works in Source or Object form.\n\n3. Grant of Patent License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable (except as stated in this section) patent license to make, have\nmade, use, offer to sell, sell, import, and otherwise transfer the Work, where\nsuch license applies only to those patent claims licensable by such Contributor\nthat are necessarily infringed by their Contribution(s) alone or by combination\nof their Contribution(s) with the Work to which such Contribution(s) was\nsubmitted. If You institute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work or a\nContribution incorporated within the Work constitutes direct or contributory\npatent infringement, then any patent licenses granted to You under this License\nfor that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution.\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof\nin any medium, with or without modifications, and in Source or Object form,\nprovided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of\nthis License; and\nYou must cause any modified files to carry prominent notices stating that You\nchanged the files; and\nYou must retain, in the Source form of any Derivative Works that You distribute,\nall copyright, patent, trademark, and attribution notices from the Source form\nof the Work, excluding those notices that do not pertain to any part of the\nDerivative Works; and\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any\nDerivative Works that You distribute must include a readable copy of the\nattribution notices contained within such NOTICE file, excluding those notices\nthat do not pertain to any part of the Derivative Works, in at least one of the\nfollowing places: within a NOTICE text file distributed as part of the\nDerivative Works; within the Source form or documentation, if provided along\nwith the Derivative Works; or, within a display generated by the Derivative\nWorks, if and wherever such third-party notices normally appear. The contents of\nthe NOTICE file are for informational purposes only and do not modify the\nLicense. You may add Your own attribution notices within Derivative Works that\nYou distribute, alongside or as an addendum to the NOTICE text from the Work,\nprovided that such additional attribution notices cannot be construed as\nmodifying the License.\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n5. Submission of Contributions.\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted\nfor inclusion in the Work by You to the Licensor shall be under the terms and\nconditions of this License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify the terms of\nany separate license agreement you may have executed with Licensor regarding\nsuch Contributions.\n\n6. Trademarks.\n\nThis License does not grant permission to use the trade names, trademarks,\nservice marks, or product names of the Licensor, except as required for\nreasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty.\n\nUnless required by applicable law or agreed to in writing, Licensor provides the\nWork (and each Contributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,\nincluding, without limitation, any warranties or conditions of TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are\nsolely responsible for determining the appropriateness of using or\nredistributing the Work and assume any risks associated with Your exercise of\npermissions under this License.\n\n8. Limitation of Liability.\n\nIn no event and under no legal theory, whether in tort (including negligence),\ncontract, or otherwise, unless required by applicable law (such as deliberate\nand grossly negligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special, incidental,\nor consequential damages of any character arising as a result of this License or\nout of the use or inability to use the Work (including but not limited to\ndamages for loss of goodwill, work stoppage, computer failure or malfunction, or\nany and all other commercial damages or losses), even if such Contributor has\nbeen advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability.\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to\noffer, and charge a fee for, acceptance of support, warranty, indemnity, or\nother liability obligations and/or rights consistent with this License. However,\nin accepting such obligations, You may act only on Your own behalf and on Your\nsole responsibility, not on behalf of any other Contributor, and only if You\nagree to indemnify, defend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason of your\naccepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets \"[]\" replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also\nrecommend that a file or class name and description of purpose be included on\nthe same \"printed page\" as the copyright notice for easier identification within\nthird-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n" }, { - "name": "github.com/golang/protobuf", - "path": "github.com/golang/protobuf/LICENSE", + "name": "github.com/golang/protobuf/proto", + "path": "github.com/golang/protobuf/proto/LICENSE", "licenseText": "Copyright 2010 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n" }, { From a8df27e5a1ffb5c58aa6f3d44aba49995827ce5c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Jul 2024 00:02:11 +0000 Subject: [PATCH 0027/1984] Update module github.com/microcosm-cc/bluemonday to v1.0.27 --- assets/go-licenses.json | 2 +- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/go-licenses.json b/assets/go-licenses.json index 17ade17502..3766257757 100644 --- a/assets/go-licenses.json +++ b/assets/go-licenses.json @@ -757,7 +757,7 @@ { "name": "github.com/microcosm-cc/bluemonday", "path": "github.com/microcosm-cc/bluemonday/LICENSE.md", - "licenseText": "SPDX short identifier: BSD-3-Clause\nhttps://opensource.org/licenses/BSD-3-Clause\n\nCopyright (c) 2014, David Kitchen \u003cdavid@buro9.com\u003e\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the organisation (Microcosm) nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" + "licenseText": "Copyright (c) 2014, David Kitchen \u003cdavid@buro9.com\u003e\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the organisation (Microcosm) nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" }, { "name": "github.com/miekg/dns", diff --git a/go.mod b/go.mod index 312b7ca061..096b1344ef 100644 --- a/go.mod +++ b/go.mod @@ -77,7 +77,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.22 github.com/meilisearch/meilisearch-go v0.26.1 github.com/mholt/archiver/v3 v3.5.1 - github.com/microcosm-cc/bluemonday v1.0.26 + github.com/microcosm-cc/bluemonday v1.0.27 github.com/minio/minio-go/v7 v7.0.73 github.com/msteinert/pam v1.2.0 github.com/nektos/act v0.2.52 diff --git a/go.sum b/go.sum index f10eda4a74..09f2ad9f1e 100644 --- a/go.sum +++ b/go.sum @@ -520,8 +520,8 @@ github.com/meilisearch/meilisearch-go v0.26.1 h1:3bmo2uLijX7kvBmiZ9LupVfC95TFcRJ github.com/meilisearch/meilisearch-go v0.26.1/go.mod h1:SxuSqDcPBIykjWz1PX+KzsYzArNLSCadQodWs8extS0= github.com/mholt/acmez/v2 v2.0.1 h1:3/3N0u1pLjMK4sNEAFSI+bcvzbPhRpY383sy1kLHJ6k= github.com/mholt/acmez/v2 v2.0.1/go.mod h1:fX4c9r5jYwMyMsC+7tkYRxHibkOTgta5DIFGoe67e1U= -github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= -github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= +github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= +github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= From fafc4f6ad9b13cf386e057835c38149e10a34800 Mon Sep 17 00:00:00 2001 From: Otto Richter Date: Fri, 5 Jul 2024 05:03:45 +0000 Subject: [PATCH 0028/1984] test: issue sidebar testing using playwright (#4319) Conclusion of https://codeberg.org/forgejo/forgejo/issues/3499 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4319 Co-authored-by: Otto Richter Co-committed-by: Otto Richter --- tests/e2e/README.md | 26 +++++++++ tests/e2e/issue-sidebar.test.e2e.js | 86 +++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 tests/e2e/issue-sidebar.test.e2e.js diff --git a/tests/e2e/README.md b/tests/e2e/README.md index a0a9fc9ec9..7d63c38777 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -19,6 +19,32 @@ make clean frontend npx playwright install-deps ``` +## Interactive testing + +You can make use of Playwright's integrated UI mode to run individual tests, +get feedback and visually trace what your browser is doing. + +To do so, launch the debugserver using: + +``` +make test-e2e-debugserver +``` + +Then launch the Playwright UI: + +``` +npx playwright test --ui +``` + +You can also run individual tests while the debugserver using: + +``` +npx playwright test actions.test.e2e.js:9 +``` + +First, specify the complete test filename, +and after the colon you can put the linenumber where the test is defined. + ## Run all tests via local act_runner ``` diff --git a/tests/e2e/issue-sidebar.test.e2e.js b/tests/e2e/issue-sidebar.test.e2e.js new file mode 100644 index 0000000000..41b1b2064a --- /dev/null +++ b/tests/e2e/issue-sidebar.test.e2e.js @@ -0,0 +1,86 @@ +// @ts-check +import {test, expect} from '@playwright/test'; +import {login_user, load_logged_in_context} from './utils_e2e.js'; + +test.beforeAll(async ({browser}, workerInfo) => { + await login_user(browser, workerInfo, 'user2'); +}); + +async function login({browser}, workerInfo) { + const context = await load_logged_in_context(browser, workerInfo, 'user2'); + return await context.newPage(); +} + +// belongs to test: Pull: Toggle WIP +const prTitle = 'pull5'; + +async function click_toggle_wip({page}) { + await page.locator('.toggle-wip>a').click(); + await page.waitForLoadState('networkidle'); +} + +async function check_wip({page}, is) { + const elemTitle = '#issue-title-display'; + const stateLabel = '.issue-state-label'; + await expect(page.locator(elemTitle)).toContainText(prTitle); + await expect(page.locator(elemTitle)).toContainText('#5'); + if (is) { + await expect(page.locator(elemTitle)).toContainText('WIP'); + await expect(page.locator(stateLabel)).toContainText('Draft'); + } else { + await expect(page.locator(elemTitle)).not.toContainText('WIP'); + await expect(page.locator(stateLabel)).toContainText('Open'); + } +} + +test('Pull: Toggle WIP', async ({browser}, workerInfo) => { + test.skip(workerInfo.project.name === 'Mobile Safari', 'Unable to get tests working on Safari Mobile, see https://codeberg.org/forgejo/forgejo/pulls/3445#issuecomment-1789636'); + const page = await login({browser}, workerInfo); + const response = await page.goto('/user2/repo1/pulls/5'); + await expect(response?.status()).toBe(200); // Status OK + // initial state + await check_wip({page}, false); + // toggle to WIP + await click_toggle_wip({page}); + await check_wip({page}, true); + // remove WIP + await click_toggle_wip({page}); + await check_wip({page}, false); + + // manually edit title to another prefix + await page.locator('#issue-title-edit-show').click(); + await page.locator('#issue-title-editor input').fill(`[WIP] ${prTitle}`); + await page.getByText('Save').click(); + await page.waitForLoadState('networkidle'); + await check_wip({page}, true); + // remove again + await click_toggle_wip({page}); + await check_wip({page}, false); +}); + +test('Issue: Labels', async ({browser}, workerInfo) => { + test.skip(workerInfo.project.name === 'Mobile Safari', 'Unable to get tests working on Safari Mobile, see https://codeberg.org/forgejo/forgejo/pulls/3445#issuecomment-1789636'); + const page = await login({browser}, workerInfo); + // select label list in sidebar only + const labelList = page.locator('.issue-content-right .labels-list a'); + const response = await page.goto('/user2/repo1/issues/1'); + await expect(response?.status()).toBe(200); + // preconditions + await expect(labelList.filter({hasText: 'label1'})).toBeVisible(); + await expect(labelList.filter({hasText: 'label2'})).not.toBeVisible(); + // add label2 + await page.locator('.select-label').click(); + // label search could be tested this way: + // await page.locator('.select-label input').fill('label2'); + await page.locator('.select-label .item').filter({hasText: 'label2'}).click(); + await page.locator('.select-label').click(); + await page.waitForLoadState('networkidle'); + await expect(labelList.filter({hasText: 'label2'})).toBeVisible(); + // test removing label again + await page.locator('.select-label').click(); + await page.locator('.select-label .item').filter({hasText: 'label2'}).click(); + await page.locator('.select-label').click(); + await page.waitForLoadState('networkidle'); + await expect(labelList.filter({hasText: 'label2'})).not.toBeVisible(); + await expect(labelList.filter({hasText: 'label1'})).toBeVisible(); +}); From 065102c263fddf433a0a23703cd6ded7fe4ac416 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Fri, 5 Jul 2024 12:10:51 +0200 Subject: [PATCH 0029/1984] chore(renovate): fix base branches regex --- renovate.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/renovate.json b/renovate.json index 8f12afb9e9..0de988f891 100644 --- a/renovate.json +++ b/renovate.json @@ -17,10 +17,8 @@ ], "baseBranches": [ "$default", - "/^v7\\.\\d+/forgejo$", - "/^v8\\.\\d+/forgejo$", - "/^v9\\.\\d+/forgejo$", - "/^v\\d\\d+\\.\\d+\\/forgejo$" + "/^v[7-9]\\.\\d+/forgejo$/", + "/^v\\d\\d+\\.\\d+\\/forgejo$/" ], "semanticCommits": "disabled", "automergeStrategy": "merge-commit", From e487dfbbc6d2a4b0ea068fd82cac3aecc982ee63 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 5 Jul 2024 10:42:17 +0000 Subject: [PATCH 0030/1984] Lock file maintenance --- package-lock.json | 177 +++++++++++++++++------------ web_src/fomantic/package-lock.json | 18 +-- 2 files changed, 112 insertions(+), 83 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1696b13e7..5f2fed0e86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -484,9 +484,9 @@ } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.2.tgz", - "integrity": "sha512-0xYOf4pQpAaE6Sm2Q0x3p25oRukzWQ/O8hWVvhIt9Iv98/uu053u2CGm/g3kJ+P0vOYTAYzoU8Evq2pg9ZPXtw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.3.tgz", + "integrity": "sha512-fTaF0vRcXVJ4cmwg8nHofydDjitKMDBzC8cCu+O/Lg13C4PdkC15GVjGpbmWauOOnhomVSTg5I5LpLJFJE2Hfw==", "dev": true, "funding": [ { @@ -2557,17 +2557,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz", - "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", + "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.14.1", - "@typescript-eslint/type-utils": "7.14.1", - "@typescript-eslint/utils": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1", + "@typescript-eslint/scope-manager": "7.15.0", + "@typescript-eslint/type-utils": "7.15.0", + "@typescript-eslint/utils": "7.15.0", + "@typescript-eslint/visitor-keys": "7.15.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2591,16 +2591,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", - "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.14.1", - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/typescript-estree": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1", + "@typescript-eslint/scope-manager": "7.15.0", + "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/typescript-estree": "7.15.0", + "@typescript-eslint/visitor-keys": "7.15.0", "debug": "^4.3.4" }, "engines": { @@ -2620,14 +2620,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz", - "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", + "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1" + "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/visitor-keys": "7.15.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2638,14 +2638,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz", - "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", + "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.14.1", - "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/typescript-estree": "7.15.0", + "@typescript-eslint/utils": "7.15.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2666,9 +2666,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz", - "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", + "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", "dev": true, "license": "MIT", "engines": { @@ -2680,14 +2680,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz", - "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", + "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/visitor-keys": "7.14.1", + "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/visitor-keys": "7.15.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2709,16 +2709,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz", - "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", + "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.14.1", - "@typescript-eslint/types": "7.14.1", - "@typescript-eslint/typescript-estree": "7.14.1" + "@typescript-eslint/scope-manager": "7.15.0", + "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/typescript-estree": "7.15.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2732,13 +2732,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz", - "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", + "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/types": "7.15.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3284,9 +3284,9 @@ } }, "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3950,9 +3950,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001639", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz", - "integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "funding": [ { "type": "opencollective", @@ -5442,9 +5442,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.815", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.815.tgz", - "integrity": "sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==", + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", "license": "ISC" }, "node_modules/elkjs": { @@ -8248,9 +8248,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.4.tgz", - "integrity": "sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -10513,14 +10513,14 @@ } }, "node_modules/pkg-types": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz", - "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", + "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", "dev": true, "license": "MIT", "dependencies": { "confbox": "^0.1.7", - "mlly": "^1.7.0", + "mlly": "^1.7.1", "pathe": "^1.1.2" } }, @@ -13184,9 +13184,9 @@ } }, "node_modules/typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "devOptional": true, "license": "Apache-2.0", "peer": true, @@ -13270,9 +13270,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "funding": [ { "type": "opencollective", @@ -13390,14 +13390,14 @@ "license": "MIT" }, "node_modules/vite": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz", - "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", + "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "rollup": "^4.13.0" }, "bin": { @@ -13497,6 +13497,35 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/vite/node_modules/postcss": { + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/vite/node_modules/rollup": { "version": "4.18.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", @@ -13651,9 +13680,9 @@ } }, "node_modules/vue-component-type-helpers": { - "version": "2.0.24", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.24.tgz", - "integrity": "sha512-Jr5N8QVYEcbQuMN1LRgvg61758G8HTnzUlQsAFOxx6Y6X8kmhJ7C+jOvWsQruYxi3uHhhS6BghyRlyiwO99DBg==", + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.26.tgz", + "integrity": "sha512-sO9qQ8oC520SW6kqlls0iqDak53gsTVSrYylajgjmkt1c0vcgjsGSy1KzlDrbEx8pm02IEYhlUkU5hCYf8rwtg==", "dev": true, "license": "MIT" }, diff --git a/web_src/fomantic/package-lock.json b/web_src/fomantic/package-lock.json index ad3d88988f..a79faa6121 100644 --- a/web_src/fomantic/package-lock.json +++ b/web_src/fomantic/package-lock.json @@ -1219,9 +1219,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001639", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz", - "integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "funding": [ { "type": "opencollective", @@ -1962,9 +1962,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.815", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.815.tgz", - "integrity": "sha512-OvpTT2ItpOXJL7IGcYakRjHCt8L5GrrN/wHCQsRB4PQa1X9fe+X9oen245mIId7s14xvArCGSTIq644yPUKKLg==", + "version": "1.4.816", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", + "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -8250,9 +8250,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "funding": [ { "type": "opencollective", From 98c8d45f0b60202ab35e5b0a3837f2ad6d7037f9 Mon Sep 17 00:00:00 2001 From: Mai-Lapyst Date: Sat, 6 Jul 2024 05:30:58 +0000 Subject: [PATCH 0031/1984] Fixes an visual bug where the info box to dispatch a workflow is shown even for users that lack permissions to actualy run the workflow. (#4305) Example: Visit https://v8.next.forgejo.org/Mai-Lapyst/test/actions?workflow=dispatch.yaml&actor=0&status=0 without being logged in. ![image](/attachments/98e74104-4d60-4f7f-b17c-7e76467cd397) Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4305 Reviewed-by: Earl Warren Reviewed-by: Gusted Co-authored-by: Mai-Lapyst Co-committed-by: Mai-Lapyst --- routers/web/repo/actions/actions.go | 4 +++- tests/e2e/actions.test.e2e.js | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/routers/web/repo/actions/actions.go b/routers/web/repo/actions/actions.go index 90d3226f2d..ff3b16159b 100644 --- a/routers/web/repo/actions/actions.go +++ b/routers/web/repo/actions/actions.go @@ -95,6 +95,8 @@ func List(ctx *context.Context) { allRunnerLabels.AddMultiple(r.AgentLabels...) } + canRun := ctx.Repo.CanWrite(unit.TypeActions) + workflows = make([]Workflow, 0, len(entries)) for _, entry := range entries { workflow := Workflow{Entry: *entry} @@ -146,7 +148,7 @@ func List(ctx *context.Context) { } workflows = append(workflows, workflow) - if workflow.Entry.Name() == curWorkflow { + if canRun && workflow.Entry.Name() == curWorkflow { config := wf.WorkflowDispatchConfig() if config != nil { keys := util.KeysOfMap(config.Inputs) diff --git a/tests/e2e/actions.test.e2e.js b/tests/e2e/actions.test.e2e.js index d7ca75bfc6..dcbd123e0b 100644 --- a/tests/e2e/actions.test.e2e.js +++ b/tests/e2e/actions.test.e2e.js @@ -6,6 +6,8 @@ test.beforeAll(async ({browser}, workerInfo) => { await login_user(browser, workerInfo, 'user2'); }); +const workflow_trigger_notification_text = 'This workflow has a workflow_dispatch event trigger.'; + test('Test workflow dispatch present', async ({browser}, workerInfo) => { const context = await load_logged_in_context(browser, workerInfo, 'user2'); /** @type {import('@playwright/test').Page} */ @@ -13,7 +15,7 @@ test('Test workflow dispatch present', async ({browser}, workerInfo) => { await page.goto('/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0'); - await expect(page.getByText('This workflow has a workflow_dispatch event trigger.')).toBeVisible(); + await expect(page.getByText(workflow_trigger_notification_text)).toBeVisible(); const run_workflow_btn = page.locator('#workflow_dispatch_dropdown>button'); await expect(run_workflow_btn).toBeVisible(); @@ -72,3 +74,10 @@ test('Test workflow dispatch success', async ({browser}, workerInfo) => { await expect(page.locator('.run-list>:first-child .run-list-meta', {hasText: 'now'})).toBeVisible(); }); + +test('Test workflow dispatch box not available for unauthenticated users', async ({page}) => { + await page.goto('/user2/test_workflows/actions?workflow=test-dispatch.yml&actor=0&status=0'); + await page.waitForLoadState('networkidle'); + + await expect(page.locator('body')).not.toContainText(workflow_trigger_notification_text); +}); From 70a7d6a0de05dee76c4d06716aec5ebe8894a245 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sat, 6 Jul 2024 13:08:26 +0200 Subject: [PATCH 0032/1984] [ENHANCEMENT] Improve caching of contributor stats - It was noticed [in the Forgejo matrix channel](https://matrix.to/#/!qjPHwFPdxhpLkXMkyP:matrix.org/$vk78UR0eFCwQMDMTZ7-DWjMVB_LIAwHW6SkjhEcGkQQ?via=matrix.org) that the generation of the Forgejo project contributor stats was taking quite a while on codeberg.org. This was continued with the fact that a few moments later it was once again generating them again; it seemed like they weren't being cached while they were. - The problem was that the cache TTL is hardcoded to ten minutes and not to the configured TTL. This patch changes that by using the configured TLL for the contributor cache, as this is a computationally heavy operation and should be cached for as long as possible for a good user experience. This doesn't impact the accuracy of this feature because the commit ID of the default branch is used as a cache key. - Also changed in this patch, is that errors aren't cached and are instead being logged, this is more helpful to the administrator. For the user essentially nothing changed on this side, the contributor stats just looks like it's loading indefinitely. - Realistically, testing this isn't possible, as the cache library Forgejo currently uses doesn't expose the TTL or expiration time of a key. Manually testing this behavior is quite lengthy, as one of the steps would need to be "wait for ten minutes" and describe how you can notice the data was cached or was just generated, and because you could use different types of cache, it will be quite hard to write down how you could check the TTL of a key for a particular cache (I'm not even sure it's even possible for some). --- release-notes/9.0.0/4367.md | 1 + services/repository/contributors_graph.go | 20 +++++++------------ .../repository/contributors_graph_test.go | 14 +++++++++---- 3 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 release-notes/9.0.0/4367.md diff --git a/release-notes/9.0.0/4367.md b/release-notes/9.0.0/4367.md new file mode 100644 index 0000000000..b5528617f0 --- /dev/null +++ b/release-notes/9.0.0/4367.md @@ -0,0 +1 @@ +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. diff --git a/services/repository/contributors_graph.go b/services/repository/contributors_graph.go index f26a87e6ac..6b35c82726 100644 --- a/services/repository/contributors_graph.go +++ b/services/repository/contributors_graph.go @@ -22,15 +22,13 @@ import ( "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "gitea.com/go-chi/cache" ) -const ( - contributorStatsCacheKey = "GetContributorStats/%s/%s" - contributorStatsCacheTimeout int64 = 60 * 10 -) +const contributorStatsCacheKey = "GetContributorStats/%s/%s" var ( ErrAwaitGeneration = errors.New("generation took longer than ") @@ -211,8 +209,7 @@ func generateContributorStats(genDone chan struct{}, cache cache.Cache, cacheKey gitRepo, closer, err := gitrepo.RepositoryFromContextOrOpen(ctx, repo) if err != nil { - err := fmt.Errorf("OpenRepository: %w", err) - _ = cache.Put(cacheKey, err, contributorStatsCacheTimeout) + log.Error("OpenRepository[repo=%q]: %v", repo.FullName(), err) return } defer closer.Close() @@ -222,13 +219,11 @@ func generateContributorStats(genDone chan struct{}, cache cache.Cache, cacheKey } extendedCommitStats, err := getExtendedCommitStats(gitRepo, revision) if err != nil { - err := fmt.Errorf("ExtendedCommitStats: %w", err) - _ = cache.Put(cacheKey, err, contributorStatsCacheTimeout) + log.Error("getExtendedCommitStats[repo=%q revision=%q]: %v", repo.FullName(), revision, err) return } if len(extendedCommitStats) == 0 { - err := fmt.Errorf("no commit stats returned for revision '%s'", revision) - _ = cache.Put(cacheKey, err, contributorStatsCacheTimeout) + log.Error("No commit stats were returned [repo=%q revision=%q]", repo.FullName(), revision) return } @@ -312,14 +307,13 @@ func generateContributorStats(genDone chan struct{}, cache cache.Cache, cacheKey data, err := json.Marshal(contributorsCommitStats) if err != nil { - err := fmt.Errorf("couldn't marshal the data: %w", err) - _ = cache.Put(cacheKey, err, contributorStatsCacheTimeout) + log.Error("json.Marshal[repo=%q revision=%q]: %v", repo.FullName(), revision, err) return } // Store the data as an string, to make it uniform what data type is returned // from caches. - _ = cache.Put(cacheKey, string(data), contributorStatsCacheTimeout) + _ = cache.Put(cacheKey, string(data), setting.CacheService.TTLSeconds()) generateLock.Delete(cacheKey) if genDone != nil { genDone <- struct{}{} diff --git a/services/repository/contributors_graph_test.go b/services/repository/contributors_graph_test.go index 2c6102005d..a04587e243 100644 --- a/services/repository/contributors_graph_test.go +++ b/services/repository/contributors_graph_test.go @@ -6,12 +6,14 @@ package repository import ( "slices" "testing" + "time" "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" - "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/json" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/test" "gitea.com/go-chi/cache" "github.com/stretchr/testify/assert" @@ -27,10 +29,14 @@ func TestRepository_ContributorsGraph(t *testing.T) { }) assert.NoError(t, err) + lc, cleanup := test.NewLogChecker(log.DEFAULT, log.INFO) + lc.StopMark(`getExtendedCommitStats[repo="user2/repo2" revision="404ref"]: object does not exist [id: 404ref, rel_path: ]`) + defer cleanup() + generateContributorStats(nil, mockCache, "key", repo, "404ref") - err, isErr := mockCache.Get("key").(error) - assert.True(t, isErr) - assert.ErrorAs(t, err, &git.ErrNotExist{}) + assert.False(t, mockCache.IsExist("key")) + _, stopped := lc.Check(100 * time.Millisecond) + assert.True(t, stopped) generateContributorStats(nil, mockCache, "key2", repo, "master") dataString, isData := mockCache.Get("key2").(string) From a8460bb132f92a6f3c627f8bed42fb728c8e243d Mon Sep 17 00:00:00 2001 From: Gusted Date: Sat, 6 Jul 2024 22:04:31 +0200 Subject: [PATCH 0033/1984] [BUG] Use correct SHA in `GetCommitPullRequest` - The param wasn't `sha`, it was `ref`. Use this instead. - Adds new integration tests. - Resolves #4190 - Resolves #4025 --- routers/api/v1/repo/commits.go | 2 +- tests/integration/api_repo_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/routers/api/v1/repo/commits.go b/routers/api/v1/repo/commits.go index d06a3b4e49..5e7d10e6c2 100644 --- a/routers/api/v1/repo/commits.go +++ b/routers/api/v1/repo/commits.go @@ -354,7 +354,7 @@ func GetCommitPullRequest(ctx *context.APIContext) { // "404": // "$ref": "#/responses/notFound" - pr, err := issues_model.GetPullRequestByMergedCommit(ctx, ctx.Repo.Repository.ID, ctx.Params(":sha")) + pr, err := issues_model.GetPullRequestByMergedCommit(ctx, ctx.Repo.Repository.ID, ctx.Params("ref")) if err != nil { if issues_model.IsErrPullRequestNotExist(err) { ctx.Error(http.StatusNotFound, "GetPullRequestByMergedCommit", err) diff --git a/tests/integration/api_repo_test.go b/tests/integration/api_repo_test.go index 6e16a12f22..fe5e43eb2f 100644 --- a/tests/integration/api_repo_test.go +++ b/tests/integration/api_repo_test.go @@ -749,3 +749,17 @@ func TestAPIViewRepoObjectFormat(t *testing.T) { DecodeJSON(t, resp, &repo) assert.EqualValues(t, "sha1", repo.ObjectFormatName) } + +func TestAPIRepoCommitPull(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + var pr api.PullRequest + req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/commits/1a8823cd1a9549fde083f992f6b9b87a7ab74fb3/pull") + resp := MakeRequest(t, req, http.StatusOK) + + DecodeJSON(t, resp, &pr) + assert.EqualValues(t, 1, pr.ID) + + req = NewRequest(t, "GET", "/api/v1/repos/user2/repo1/commits/not-a-commit/pull") + MakeRequest(t, req, http.StatusNotFound) +} From 610487eb833da399e22cf81e127fb1865a5d9054 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 7 Jul 2024 01:37:38 +0200 Subject: [PATCH 0034/1984] [BUG] Fix mobile UI for organisation creation - Don't make checkpoints or radio inputs full width on a small screen, these obviously shouldn't try to take up the whole width of a container. - Wrap the label for organisation permission box inside a ``, so it gets a left-margin from the `.inline.field > :first-child` selector. This make the checkboxes and radio buttons groups look indented from the left. - Resolves #4361 --- templates/org/create.tmpl | 2 +- web_src/css/form.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/org/create.tmpl b/templates/org/create.tmpl index 004cd9be80..92be4a0adb 100644 --- a/templates/org/create.tmpl +++ b/templates/org/create.tmpl @@ -34,7 +34,7 @@
- +
diff --git a/web_src/css/form.css b/web_src/css/form.css index dd2788f542..d8239c5dcf 100644 --- a/web_src/css/form.css +++ b/web_src/css/form.css @@ -466,7 +466,7 @@ textarea:focus, margin-bottom: 1em; width: 100%; } - .new.org .ui.form .field input { + .new.org .ui.form .field input:not([type="checkbox"], [type="radio"]) { width: 100% !important; } } From cf8f26d61638089d18c70fefbea596a6630f033b Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 7 Jul 2024 03:04:45 +0200 Subject: [PATCH 0035/1984] [CHORE] Remove github.com/yuin/goldmark-meta - Remove a unused dependency. This dependency was added to handle YAML 'frontmatter' meta, parsing them and converting them to a table or details in the resulting HTML. As can be read in the issue that reported the behavior of YAML frontmatter being rendered literally, https://github.com/go-gitea/gitea/issues/5377. - It's an unused dependency as the codebase since then moved on to do this YAML parsing and rendering on their own, this was implemented in 812cfd0ad9bb85b13ce77f611b3c80dad371d1ef. - Adds unit tests that was related to this functionality, to proof the codebase already handles this and to prevent regressions. --- assets/go-licenses.json | 10 -- go.mod | 1 - go.sum | 2 - modules/markup/markdown/markdown.go | 4 +- modules/markup/markdown/markdown_test.go | 124 +++++++++++++++++++++++ modules/markup/renderer.go | 1 - 6 files changed, 125 insertions(+), 17 deletions(-) diff --git a/assets/go-licenses.json b/assets/go-licenses.json index 3766257757..f9d2080f22 100644 --- a/assets/go-licenses.json +++ b/assets/go-licenses.json @@ -1024,11 +1024,6 @@ "path": "github.com/yuin/goldmark-highlighting/v2/LICENSE", "licenseText": "MIT License\n\nCopyright (c) 2019 Yusuke Inuzuka\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n" }, - { - "name": "github.com/yuin/goldmark-meta", - "path": "github.com/yuin/goldmark-meta/LICENSE", - "licenseText": "MIT License\n\nCopyright (c) 2019 Yusuke Inuzuka\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n" - }, { "name": "github.com/yuin/goldmark", "path": "github.com/yuin/goldmark/LICENSE", @@ -1149,11 +1144,6 @@ "path": "gopkg.in/warnings.v0/LICENSE", "licenseText": "Copyright (c) 2016 Péter Surányi.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" }, - { - "name": "gopkg.in/yaml.v2", - "path": "gopkg.in/yaml.v2/LICENSE", - "licenseText": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"{}\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright {yyyy} {name of copyright owner}\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n" - }, { "name": "gopkg.in/yaml.v3", "path": "gopkg.in/yaml.v3/LICENSE", diff --git a/go.mod b/go.mod index 921b04ffdf..ee4e9cd0c8 100644 --- a/go.mod +++ b/go.mod @@ -103,7 +103,6 @@ require ( github.com/yohcop/openid-go v1.0.1 github.com/yuin/goldmark v1.7.4 github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc - github.com/yuin/goldmark-meta v1.1.0 go.uber.org/mock v0.4.0 golang.org/x/crypto v0.24.0 golang.org/x/image v0.18.0 diff --git a/go.sum b/go.sum index 2d40e7a332..9257c5918d 100644 --- a/go.sum +++ b/go.sum @@ -746,8 +746,6 @@ github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc h1:+IAOyRda+RLrxa1WC7umKOZRsGq4QrFFMYApOeHzQwQ= github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I= -github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc= -github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0= github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY= github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/blake3 v0.2.3 h1:TFoLXsjeXqRNFxSbk35Dk4YtszE/MQQGK10BH4ptoTg= diff --git a/modules/markup/markdown/markdown.go b/modules/markup/markdown/markdown.go index 77c876dfff..d249d25014 100644 --- a/modules/markup/markdown/markdown.go +++ b/modules/markup/markdown/markdown.go @@ -22,7 +22,6 @@ import ( chromahtml "github.com/alecthomas/chroma/v2/formatters/html" "github.com/yuin/goldmark" highlighting "github.com/yuin/goldmark-highlighting/v2" - meta "github.com/yuin/goldmark-meta" "github.com/yuin/goldmark/extension" "github.com/yuin/goldmark/parser" "github.com/yuin/goldmark/renderer" @@ -121,7 +120,6 @@ func SpecializedMarkdown() goldmark.Markdown { math.NewExtension( math.Enabled(setting.Markdown.EnableMath), ), - meta.Meta, ), goldmark.WithParserOptions( parser.WithAttribute(), @@ -182,7 +180,7 @@ func actualRender(ctx *markup.RenderContext, input io.Reader, output io.Writer) bufWithMetadataLength := len(buf) rc := &RenderConfig{ - Meta: renderMetaModeFromString(string(ctx.RenderMetaAs)), + Meta: markup.RenderMetaAsDetails, Icon: "table", Lang: "", } diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go index 68428552c4..abeeb2e0a9 100644 --- a/modules/markup/markdown/markdown_test.go +++ b/modules/markup/markdown/markdown_test.go @@ -1210,3 +1210,127 @@ func TestCustomMarkdownURL(t *testing.T) { test("[test](abp)", `

test

`) } + +func TestYAMLMeta(t *testing.T) { + setting.AppURL = AppURL + + test := func(input, expected string) { + buffer, err := markdown.RenderString(&markup.RenderContext{ + Ctx: git.DefaultContext, + }, input) + assert.NoError(t, err) + assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(string(buffer))) + } + + test(`--- +include_toc: true +--- +## Header`, + `
+ + + + + + + + + + +
include_toc
true
+
toc +

Header

`) + + test(`--- +key: value +---`, + `
+ + + + + + + + + + +
key
value
+
`) + + test("---\n---\n", + `
+
`) + + test(`--- +gitea: + details_icon: smiley + include_toc: true +--- +# Another header`, + `
+ + + + + + + + + + +
gitea
+ + + + + + + + + + + + +
details_iconinclude_toc
smileytrue
+
+
toc +

Another header

`) + + test(`--- +gitea: + meta: table +key: value +---`, ` + + + + + + + + + + + + +
giteakey
+ + + + + + + + + + +
meta
table
+
value
`) +} diff --git a/modules/markup/renderer.go b/modules/markup/renderer.go index f1beee964a..2137302f43 100644 --- a/modules/markup/renderer.go +++ b/modules/markup/renderer.go @@ -78,7 +78,6 @@ type RenderContext struct { ShaExistCache map[string]bool cancelFn func() SidebarTocNode ast.Node - RenderMetaAs RenderMetaMode InStandalonePage bool // used by external render. the router "/org/repo/render/..." will output the rendered content in a standalone page } From c19222b22f728f3ddad397a3801e10da238ac6c3 Mon Sep 17 00:00:00 2001 From: 0ko <0ko@noreply.codeberg.org> Date: Sun, 7 Jul 2024 03:21:58 +0000 Subject: [PATCH 0036/1984] ui: improve button gap consistency in repos (#4365) Improve UI in a few areas in a similar way to https://codeberg.org/forgejo/forgejo/commit/dc0d3a40ab008f5ff20ad50d8b4a58277595f2fa. Ensure consistent 0.5em gaps in button rows, make buttons have more consistent horizontal paddings for better clickability. Preview: https://codeberg.org/attachments/cfca200a-3b68-4ba8-9876-75cea7822a00 https://codeberg.org/attachments/aaa5d387-919b-45af-8854-6d0f5273125f https://codeberg.org/attachments/989225b7-b1dd-491d-bf76-7e4a962ea54e Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4365 Reviewed-by: Earl Warren Reviewed-by: Gusted --- templates/repo/diff/box.tmpl | 4 ++-- templates/repo/diff/conversation.tmpl | 6 +++--- templates/repo/header.tmpl | 2 +- templates/repo/issue/view_content/conversation.tmpl | 4 ++-- web_src/css/repo.css | 9 ++++----- web_src/css/repo/header.css | 1 - 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/templates/repo/diff/box.tmpl b/templates/repo/diff/box.tmpl index 71154f9768..230e49752f 100644 --- a/templates/repo/diff/box.tmpl +++ b/templates/repo/diff/box.tmpl @@ -23,7 +23,7 @@
{{end}}
-
+
{{if and .PageIsPullFiles $.SignedUserID (not .IsArchived) (not .DiffNotAvailable)}}
-
+
{{if $showFileViewToggle}}
diff --git a/templates/repo/diff/conversation.tmpl b/templates/repo/diff/conversation.tmpl index ef92f3bdfc..c80d999f47 100644 --- a/templates/repo/diff/conversation.tmpl +++ b/templates/repo/diff/conversation.tmpl @@ -37,8 +37,8 @@ {{template "repo/diff/comments" dict "root" $ "comments" .comments}}
-
-
+
+
@@ -56,7 +56,7 @@ {{end}} {{if and $.SignedUserID (not $.Repository.IsArchived)}} - {{end}} diff --git a/templates/repo/header.tmpl b/templates/repo/header.tmpl index d8c53d08be..e81e65bc7d 100644 --- a/templates/repo/header.tmpl +++ b/templates/repo/header.tmpl @@ -35,7 +35,7 @@
{{if not (or .IsBeingCreated .IsBroken)}} -
+
{{if $.RepoTransfer}}
{{$.CsrfTokenHtml}} diff --git a/templates/repo/issue/view_content/conversation.tmpl b/templates/repo/issue/view_content/conversation.tmpl index 8e37b5487f..2526e5c848 100644 --- a/templates/repo/issue/view_content/conversation.tmpl +++ b/templates/repo/issue/view_content/conversation.tmpl @@ -115,7 +115,7 @@
{{end}}
-
+
{{if and $.CanMarkConversation $isNotPending}} {{end}} {{if and $.SignedUserID (not $.Repository.IsArchived)}} - {{end}} diff --git a/web_src/css/repo.css b/web_src/css/repo.css index e90e0ec4fe..1a901e07a2 100644 --- a/web_src/css/repo.css +++ b/web_src/css/repo.css @@ -601,7 +601,7 @@ td .commit-summary { align-items: center; } -.repository.view.issue .button-row, +.issue-title .button-row, .repository.releases .button-row { display: flex; } @@ -610,7 +610,7 @@ td .commit-summary { .repository.view.issue .issue-title { flex-direction: column; } - .repository.view.issue .button-row { + .issue-title .button-row { width: 100%; margin-top: .5rem; justify-content: space-between; @@ -1539,7 +1539,6 @@ td .commit-summary { .diff-detail-actions { display: flex; align-items: center; - gap: 0.25em; justify-content: end; } @@ -1574,7 +1573,7 @@ td .commit-summary { } .repository .diff-detail-box .ui.button { - padding: 0 12px; + padding: 0 1.125em; height: 30px; } @@ -1596,7 +1595,7 @@ td .commit-summary { } .repository .diff-box .header:not(.resolved-placeholder) .button { - padding: 0 12px; + padding: 0 1.125em; flex: 0 0 auto; margin-right: 0; height: 30px; diff --git a/web_src/css/repo/header.css b/web_src/css/repo/header.css index 55e704ed10..9da5fe6acd 100644 --- a/web_src/css/repo/header.css +++ b/web_src/css/repo/header.css @@ -33,7 +33,6 @@ display: flex; flex-flow: row wrap; word-break: keep-all; - gap: 0.25em; } .repo-buttons .ui.labeled.button > .label:hover { From e1b90212e4709cfb4de823e6e47655cf6d4f86b0 Mon Sep 17 00:00:00 2001 From: silverwind Date: Sat, 29 Jun 2024 17:37:18 +0200 Subject: [PATCH 0037/1984] Use stable version of fabric (#31526) Fabric 6 is [now stable](https://github.com/fabricjs/fabric.js/releases/tag/v6.0.0-rc5), use it. (cherry picked from commit 5821d22891cb3aa1e1c9590d8b921728b4969c5f) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 926c4a4a30..e5d29a06bb 100644 --- a/Makefile +++ b/Makefile @@ -981,7 +981,7 @@ generate-gomock: .PHONY: generate-images generate-images: | node_modules - npm install --no-save fabric@6.0.0-beta20 imagemin-zopfli@7 + npm install --no-save fabric@6 imagemin-zopfli@7 node tools/generate-images.js $(TAGS) .PHONY: generate-manpage From f92591b8256a03864e1ac56119175461f7879c8b Mon Sep 17 00:00:00 2001 From: charles <30816317+charles7668@users.noreply.github.com> Date: Sun, 30 Jun 2024 07:23:47 +0800 Subject: [PATCH 0038/1984] Fix markdown preview $$ support (#31514) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close #31481 currently `$$A + B$$ test` will ignore text after $$ block test text ![圖片](https://github.com/go-gitea/gitea/assets/30816317/39b2974b-c0b6-48a0-87d0-5f4a13615eed) before fix ![圖片](https://github.com/go-gitea/gitea/assets/30816317/15469e4c-474d-4128-b46f-d6cadaafbd68) after fix ![圖片](https://github.com/go-gitea/gitea/assets/30816317/c1025eef-177f-4ade-988f-510e7039f3f9) github display ![圖片](https://github.com/go-gitea/gitea/assets/30816317/97cd1e10-ac94-4899-86d8-8e359ef1d694) (cherry picked from commit f0033051d5ce07f5a18d2aacef6bfdca5fc69014) --- modules/markup/markdown/markdown_test.go | 8 +++++ modules/markup/markdown/math/block_parser.go | 6 ++++ .../markup/markdown/math/inline_block_node.go | 31 +++++++++++++++++++ modules/markup/markdown/math/inline_parser.go | 30 +++++++++++++++--- .../markup/markdown/math/inline_renderer.go | 7 ++++- modules/markup/markdown/math/math.go | 3 +- 6 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 modules/markup/markdown/math/inline_block_node.go diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go index 68428552c4..f21c571b7f 100644 --- a/modules/markup/markdown/markdown_test.go +++ b/modules/markup/markdown/markdown_test.go @@ -552,6 +552,14 @@ func TestMathBlock(t *testing.T) { "$a$ ($b$) [$c$] {$d$}", `

a (b) [$c$] {$d$}

` + nl, }, + { + "$$a$$ test", + `

a test

` + nl, + }, + { + "test $$a$$", + `

test a

` + nl, + }, } for _, test := range testcases { diff --git a/modules/markup/markdown/math/block_parser.go b/modules/markup/markdown/math/block_parser.go index f3262c82c0..527df84975 100644 --- a/modules/markup/markdown/math/block_parser.go +++ b/modules/markup/markdown/math/block_parser.go @@ -47,6 +47,12 @@ func (b *blockParser) Open(parent ast.Node, reader text.Reader, pc parser.Contex } idx := bytes.Index(line[pos+2:], endBytes) if idx >= 0 { + // for case $$ ... $$ any other text + for i := pos + idx + 4; i < len(line); i++ { + if line[i] != ' ' && line[i] != '\n' { + return nil, parser.NoChildren + } + } segment.Stop = segment.Start + idx + 2 reader.Advance(segment.Len() - 1) segment.Start += 2 diff --git a/modules/markup/markdown/math/inline_block_node.go b/modules/markup/markdown/math/inline_block_node.go new file mode 100644 index 0000000000..c92d0c8d84 --- /dev/null +++ b/modules/markup/markdown/math/inline_block_node.go @@ -0,0 +1,31 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package math + +import ( + "github.com/yuin/goldmark/ast" +) + +// InlineBlock represents inline math e.g. $$...$$ +type InlineBlock struct { + Inline +} + +// InlineBlock implements InlineBlock. +func (n *InlineBlock) InlineBlock() {} + +// KindInlineBlock is the kind for math inline block +var KindInlineBlock = ast.NewNodeKind("MathInlineBlock") + +// Kind returns KindInlineBlock +func (n *InlineBlock) Kind() ast.NodeKind { + return KindInlineBlock +} + +// NewInlineBlock creates a new ast math inline block node +func NewInlineBlock() *InlineBlock { + return &InlineBlock{ + Inline{}, + } +} diff --git a/modules/markup/markdown/math/inline_parser.go b/modules/markup/markdown/math/inline_parser.go index 614cf329af..b11195d551 100644 --- a/modules/markup/markdown/math/inline_parser.go +++ b/modules/markup/markdown/math/inline_parser.go @@ -21,11 +21,20 @@ var defaultInlineDollarParser = &inlineParser{ end: []byte{'$'}, } +var defaultDualDollarParser = &inlineParser{ + start: []byte{'$', '$'}, + end: []byte{'$', '$'}, +} + // NewInlineDollarParser returns a new inline parser func NewInlineDollarParser() parser.InlineParser { return defaultInlineDollarParser } +func NewInlineDualDollarParser() parser.InlineParser { + return defaultDualDollarParser +} + var defaultInlineBracketParser = &inlineParser{ start: []byte{'\\', '('}, end: []byte{'\\', ')'}, @@ -38,7 +47,7 @@ func NewInlineBracketParser() parser.InlineParser { // Trigger triggers this parser on $ or \ func (parser *inlineParser) Trigger() []byte { - return parser.start[0:1] + return parser.start } func isPunctuation(b byte) bool { @@ -88,7 +97,11 @@ func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser. break } suceedingCharacter := line[pos] - if !isPunctuation(suceedingCharacter) && !(suceedingCharacter == ' ') && !isBracket(suceedingCharacter) { + // check valid ending character + if !isPunctuation(suceedingCharacter) && + !(suceedingCharacter == ' ') && + !(suceedingCharacter == '\n') && + !isBracket(suceedingCharacter) { return nil } if line[ender-1] != '\\' { @@ -101,12 +114,21 @@ func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser. block.Advance(opener) _, pos := block.Position() - node := NewInline() + var node ast.Node + if parser == defaultDualDollarParser { + node = NewInlineBlock() + } else { + node = NewInline() + } segment := pos.WithStop(pos.Start + ender - opener) node.AppendChild(node, ast.NewRawTextSegment(segment)) block.Advance(ender - opener + len(parser.end)) - trimBlock(node, block) + if parser == defaultDualDollarParser { + trimBlock(&(node.(*InlineBlock)).Inline, block) + } else { + trimBlock(node.(*Inline), block) + } return node } diff --git a/modules/markup/markdown/math/inline_renderer.go b/modules/markup/markdown/math/inline_renderer.go index b4e9ade0ae..96848099cc 100644 --- a/modules/markup/markdown/math/inline_renderer.go +++ b/modules/markup/markdown/math/inline_renderer.go @@ -21,7 +21,11 @@ func NewInlineRenderer() renderer.NodeRenderer { func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Node, entering bool) (ast.WalkStatus, error) { if entering { - _, _ = w.WriteString(``) + extraClass := "" + if _, ok := n.(*InlineBlock); ok { + extraClass = "display " + } + _, _ = w.WriteString(``) for c := n.FirstChild(); c != nil; c = c.NextSibling() { segment := c.(*ast.Text).Segment value := util.EscapeHTML(segment.Value(source)) @@ -43,4 +47,5 @@ func (r *InlineRenderer) renderInline(w util.BufWriter, source []byte, n ast.Nod // RegisterFuncs registers the renderer for inline math nodes func (r *InlineRenderer) RegisterFuncs(reg renderer.NodeRendererFuncRegisterer) { reg.Register(KindInline, r.renderInline) + reg.Register(KindInlineBlock, r.renderInline) } diff --git a/modules/markup/markdown/math/math.go b/modules/markup/markdown/math/math.go index 8a50753574..3d9f376bc6 100644 --- a/modules/markup/markdown/math/math.go +++ b/modules/markup/markdown/math/math.go @@ -96,7 +96,8 @@ func (e *Extension) Extend(m goldmark.Markdown) { util.Prioritized(NewInlineBracketParser(), 501), } if e.parseDollarInline { - inlines = append(inlines, util.Prioritized(NewInlineDollarParser(), 501)) + inlines = append(inlines, util.Prioritized(NewInlineDollarParser(), 503), + util.Prioritized(NewInlineDualDollarParser(), 502)) } m.Parser().AddOptions(parser.WithInlineParsers(inlines...)) From 33f9fb815097f2c179f31892a940e5e0231bb435 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 4 Jul 2024 20:57:11 +0200 Subject: [PATCH 0039/1984] Fix slow patch checking with commits that add or remove many files (#31548) Running git update-index for every individual file is slow, so add and remove everything with a single git command. When such a big commit lands in the default branch, it could cause PR creation and patch checking for all open PRs to be slow, or time out entirely. For example, a commit that removes 1383 files was measured to take more than 60 seconds and timed out. With this change checking took about a second. This is related to #27967, though this will not help with commits that change many lines in few files. (cherry picked from commit b88e5fc72d99e9d4a0aa9c13f70e0a9e967fe057) --- modules/git/repo_index.go | 35 +++++++++++++++++++++++++++-------- services/pull/patch.go | 29 +++++++++++++++++++++-------- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/modules/git/repo_index.go b/modules/git/repo_index.go index 6aaab242c1..8390570098 100644 --- a/modules/git/repo_index.go +++ b/modules/git/repo_index.go @@ -104,11 +104,8 @@ func (repo *Repository) RemoveFilesFromIndex(filenames ...string) error { buffer := new(bytes.Buffer) for _, file := range filenames { if file != "" { - buffer.WriteString("0 ") - buffer.WriteString(objectFormat.EmptyObjectID().String()) - buffer.WriteByte('\t') - buffer.WriteString(file) - buffer.WriteByte('\000') + // using format: mode SP type SP sha1 TAB path + buffer.WriteString("0 blob " + objectFormat.EmptyObjectID().String() + "\t" + file + "\000") } } return cmd.Run(&RunOpts{ @@ -119,11 +116,33 @@ func (repo *Repository) RemoveFilesFromIndex(filenames ...string) error { }) } +type IndexObjectInfo struct { + Mode string + Object ObjectID + Filename string +} + +// AddObjectsToIndex adds the provided object hashes to the index at the provided filenames +func (repo *Repository) AddObjectsToIndex(objects ...IndexObjectInfo) error { + cmd := NewCommand(repo.Ctx, "update-index", "--add", "--replace", "-z", "--index-info") + stdout := new(bytes.Buffer) + stderr := new(bytes.Buffer) + buffer := new(bytes.Buffer) + for _, object := range objects { + // using format: mode SP type SP sha1 TAB path + buffer.WriteString(object.Mode + " blob " + object.Object.String() + "\t" + object.Filename + "\000") + } + return cmd.Run(&RunOpts{ + Dir: repo.Path, + Stdin: bytes.NewReader(buffer.Bytes()), + Stdout: stdout, + Stderr: stderr, + }) +} + // AddObjectToIndex adds the provided object hash to the index at the provided filename func (repo *Repository) AddObjectToIndex(mode string, object ObjectID, filename string) error { - cmd := NewCommand(repo.Ctx, "update-index", "--add", "--replace", "--cacheinfo").AddDynamicArguments(mode, object.String(), filename) - _, _, err := cmd.RunStdString(&RunOpts{Dir: repo.Path}) - return err + return repo.AddObjectsToIndex(IndexObjectInfo{Mode: mode, Object: object, Filename: filename}) } // WriteTree writes the current index as a tree to the object db and returns its hash diff --git a/services/pull/patch.go b/services/pull/patch.go index 12b79a0625..e90b4bdbbe 100644 --- a/services/pull/patch.go +++ b/services/pull/patch.go @@ -128,7 +128,7 @@ func (e *errMergeConflict) Error() string { return fmt.Sprintf("conflict detected at: %s", e.filename) } -func attemptMerge(ctx context.Context, file *unmergedFile, tmpBasePath string, gitRepo *git.Repository) error { +func attemptMerge(ctx context.Context, file *unmergedFile, tmpBasePath string, filesToRemove *[]string, filesToAdd *[]git.IndexObjectInfo) error { log.Trace("Attempt to merge:\n%v", file) switch { @@ -142,14 +142,13 @@ func attemptMerge(ctx context.Context, file *unmergedFile, tmpBasePath string, g } // Not a genuine conflict and we can simply remove the file from the index - return gitRepo.RemoveFilesFromIndex(file.stage1.path) + *filesToRemove = append(*filesToRemove, file.stage1.path) + return nil case file.stage1 == nil && file.stage2 != nil && (file.stage3 == nil || file.stage2.SameAs(file.stage3)): // 2. Added in ours but not in theirs or identical in both // // Not a genuine conflict just add to the index - if err := gitRepo.AddObjectToIndex(file.stage2.mode, git.MustIDFromString(file.stage2.sha), file.stage2.path); err != nil { - return err - } + *filesToAdd = append(*filesToAdd, git.IndexObjectInfo{Mode: file.stage2.mode, Object: git.MustIDFromString(file.stage2.sha), Filename: file.stage2.path}) return nil case file.stage1 == nil && file.stage2 != nil && file.stage3 != nil && file.stage2.sha == file.stage3.sha && file.stage2.mode != file.stage3.mode: // 3. Added in both with the same sha but the modes are different @@ -160,7 +159,8 @@ func attemptMerge(ctx context.Context, file *unmergedFile, tmpBasePath string, g // 4. Added in theirs but not ours: // // Not a genuine conflict just add to the index - return gitRepo.AddObjectToIndex(file.stage3.mode, git.MustIDFromString(file.stage3.sha), file.stage3.path) + *filesToAdd = append(*filesToAdd, git.IndexObjectInfo{Mode: file.stage3.mode, Object: git.MustIDFromString(file.stage3.sha), Filename: file.stage3.path}) + return nil case file.stage1 == nil: // 5. Created by new in both // @@ -221,7 +221,8 @@ func attemptMerge(ctx context.Context, file *unmergedFile, tmpBasePath string, g return err } hash = strings.TrimSpace(hash) - return gitRepo.AddObjectToIndex(file.stage2.mode, git.MustIDFromString(hash), file.stage2.path) + *filesToAdd = append(*filesToAdd, git.IndexObjectInfo{Mode: file.stage2.mode, Object: git.MustIDFromString(hash), Filename: file.stage2.path}) + return nil default: if file.stage1 != nil { return &errMergeConflict{file.stage1.path} @@ -245,6 +246,9 @@ func AttemptThreeWayMerge(ctx context.Context, gitPath string, gitRepo *git.Repo return false, nil, fmt.Errorf("unable to run read-tree -m! Error: %w", err) } + var filesToRemove []string + var filesToAdd []git.IndexObjectInfo + // Then we use git ls-files -u to list the unmerged files and collate the triples in unmergedfiles unmerged := make(chan *unmergedFile) go unmergedFiles(ctx, gitPath, unmerged) @@ -270,7 +274,7 @@ func AttemptThreeWayMerge(ctx context.Context, gitPath string, gitRepo *git.Repo } // OK now we have the unmerged file triplet attempt to merge it - if err := attemptMerge(ctx, file, gitPath, gitRepo); err != nil { + if err := attemptMerge(ctx, file, gitPath, &filesToRemove, &filesToAdd); err != nil { if conflictErr, ok := err.(*errMergeConflict); ok { log.Trace("Conflict: %s in %s", conflictErr.filename, description) conflict = true @@ -283,6 +287,15 @@ func AttemptThreeWayMerge(ctx context.Context, gitPath string, gitRepo *git.Repo return false, nil, err } } + + // Add and remove files in one command, as this is slow with many files otherwise + if err := gitRepo.RemoveFilesFromIndex(filesToRemove...); err != nil { + return false, nil, err + } + if err := gitRepo.AddObjectsToIndex(filesToAdd...); err != nil { + return false, nil, err + } + return conflict, conflictedFiles, nil } From 629ca22a975d74cf6d02bbb25963195d4d21ff5b Mon Sep 17 00:00:00 2001 From: Anbraten <6918444+anbraten@users.noreply.github.com> Date: Fri, 5 Jul 2024 19:10:09 +0200 Subject: [PATCH 0040/1984] Refactor login page (#31530) As requested in https://github.com/go-gitea/gitea/pull/31504#issuecomment-2196196646. This PR refactor the login page: ![Screenshot from 2024-07-04 19-23-10](https://github.com/go-gitea/gitea/assets/6918444/c45700f4-6747-473c-bdee-2156718a7953) ![Screenshot from 2024-07-04 19-23-21](https://github.com/go-gitea/gitea/assets/6918444/b1bf71cf-85f9-4517-a409-cc6d72e6af8f) ![Screenshot from 2024-06-30 09-35-20](https://github.com/go-gitea/gitea/assets/6918444/728cc37e-0cca-4883-afec-a43663d2c666) - [x] use separate box for passkey login and go to registration - [x] move forgot passoword next to password label - [x] fix password required label `*` and padding - [x] remove tabs from login page --------- Co-authored-by: silverwind (cherry picked from commit 9c00dda33ad7bd594dd8f331fa1bf0acefc2ca54) Conflict resolution: * signin_navbar.tmpl has been deleted * additions in form.css * major code changes in signin_openid * ... --- options/locale/locale_en-US.ini | 8 +- templates/user/auth/captcha.tmpl | 9 +- templates/user/auth/oauth_container.tmpl | 29 ++++++ templates/user/auth/signin.tmpl | 3 +- templates/user/auth/signin_inner.tmpl | 127 +++++++++++------------ templates/user/auth/signin_navbar.tmpl | 24 ----- templates/user/auth/signin_openid.tmpl | 69 +++++++----- templates/user/auth/signup.tmpl | 5 +- templates/user/auth/signup_inner.tmpl | 41 +++----- web_src/css/form.css | 18 ++++ 10 files changed, 178 insertions(+), 155 deletions(-) create mode 100644 templates/user/auth/oauth_container.tmpl delete mode 100644 templates/user/auth/signin_navbar.tmpl diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index bac0e8515a..b5bd435990 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -399,8 +399,8 @@ relevant_repositories = Only relevant repositories are being shown, %s. Please check your inbox within the next %s to complete the registration process. If the email is incorrect, you can log in, and request another confirmation email to be sent to a different address. must_change_password = Update your password @@ -473,6 +474,7 @@ sspi_auth_failed = SSPI authentication failed password_pwned = The password you chose is on a list of stolen passwords previously exposed in public data breaches. Please try again with a different password and consider changing this password elsewhere too. password_pwned_err = Could not complete request to HaveIBeenPwned last_admin = You cannot remove the last admin. There must be at least one admin. +back_to_sign_in = Back to Sign In [mail] view_it_on = View it on %s diff --git a/templates/user/auth/captcha.tmpl b/templates/user/auth/captcha.tmpl index 0e9c2b9d22..8dd4d1cc51 100644 --- a/templates/user/auth/captcha.tmpl +++ b/templates/user/auth/captcha.tmpl @@ -1,5 +1,5 @@ {{if .EnableCaptcha}}{{if eq .CaptchaType "image"}} -
+
{{.Captcha.CreateHTML}}
@@ -7,18 +7,17 @@
{{else if eq .CaptchaType "recaptcha"}} -
+
{{else if eq .CaptchaType "hcaptcha"}} -
+
{{else if eq .CaptchaType "mcaptcha"}} -
- +
diff --git a/templates/user/auth/oauth_container.tmpl b/templates/user/auth/oauth_container.tmpl new file mode 100644 index 0000000000..7599b49fbb --- /dev/null +++ b/templates/user/auth/oauth_container.tmpl @@ -0,0 +1,29 @@ +{{if or .OAuth2Providers .EnableOpenIDSignIn}} +
+ {{ctx.Locale.Tr "sign_in_or"}} +
+ +{{end}} diff --git a/templates/user/auth/signin.tmpl b/templates/user/auth/signin.tmpl index b0e9ce8c74..54cc82d49d 100644 --- a/templates/user/auth/signin.tmpl +++ b/templates/user/auth/signin.tmpl @@ -1,8 +1,7 @@ {{template "base/head" .}}
- {{template "user/auth/signin_navbar" .}}
-
+
{{template "user/auth/signin_inner" .}}
diff --git a/templates/user/auth/signin_inner.tmpl b/templates/user/auth/signin_inner.tmpl index 9872096fbc..b0a52d2c64 100644 --- a/templates/user/auth/signin_inner.tmpl +++ b/templates/user/auth/signin_inner.tmpl @@ -1,70 +1,65 @@ -{{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn)}} -{{template "base/alert" .}} -{{end}} -

- {{if .LinkAccountMode}} - {{ctx.Locale.Tr "auth.oauth_signin_title"}} - {{else}} - {{ctx.Locale.Tr "auth.login_userpass"}} +
+ {{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn)}} + {{template "base/alert" .}} {{end}} -

-
- - {{.CsrfTokenHtml}} -
- - -
- {{if or (not .DisablePassword) .LinkAccountMode}} -
- - -
- {{end}} - {{if not .LinkAccountMode}} -
-
- - -
-
- {{end}} - - {{template "user/auth/captcha" .}} - -
- - {{ctx.Locale.Tr "auth.forgot_password"}} -
- - {{if .ShowRegistrationButton}} - - {{end}} - - {{if .OAuth2Providers}} -
- {{ctx.Locale.Tr "sign_in_or"}} -
-
-
-
- {{range $provider := .OAuth2Providers}} - - {{end}} +

+ {{if .LinkAccountMode}} + {{ctx.Locale.Tr "auth.oauth_signin_title"}} + {{else}} + {{ctx.Locale.Tr "auth.login_userpass"}} + {{end}} +

+
+ + {{.CsrfTokenHtml}} +
+ +
-
+ {{if or (not .DisablePassword) .LinkAccountMode}} +
+ + {{ctx.Locale.Tr "auth.forgot_password"}} + +
+ {{end}} + {{if not .LinkAccountMode}} +
+
+ + +
+
+ {{end}} + + {{template "user/auth/captcha" .}} + +
+ +
+ + + {{template "user/auth/oauth_container" .}} +
+
+ +
+ {{template "user/auth/webauthn_error" .}} + +
+ + + {{if .ShowRegistrationButton}} +
+ {{ctx.Locale.Tr "auth.need_account"}} + {{ctx.Locale.Tr "auth.sign_up_now"}} +
+ {{end}}
- {{end}} -
diff --git a/templates/user/auth/signin_navbar.tmpl b/templates/user/auth/signin_navbar.tmpl deleted file mode 100644 index 01b994b982..0000000000 --- a/templates/user/auth/signin_navbar.tmpl +++ /dev/null @@ -1,24 +0,0 @@ -{{if or .EnableOpenIDSignIn .EnableSSPI}} - - - -{{end}} diff --git a/templates/user/auth/signin_openid.tmpl b/templates/user/auth/signin_openid.tmpl index c1f392dc13..20c7bdc924 100644 --- a/templates/user/auth/signin_openid.tmpl +++ b/templates/user/auth/signin_openid.tmpl @@ -1,35 +1,50 @@ {{template "base/head" .}}