From 2d436a5244b0d1b8f048f4377c816c8add7c149e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Jun 2025 02:03:08 +0000 Subject: [PATCH 01/22] Update module github.com/minio/minio-go/v7 to v7.0.93 --- go.mod | 4 +++- go.sum | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0eca1be551..a839fd83b6 100644 --- a/go.mod +++ b/go.mod @@ -76,7 +76,7 @@ require ( github.com/meilisearch/meilisearch-go v0.31.0 github.com/mholt/archiver/v3 v3.5.1 github.com/microcosm-cc/bluemonday v1.0.27 - github.com/minio/minio-go/v7 v7.0.91 + github.com/minio/minio-go/v7 v7.0.93 github.com/msteinert/pam/v2 v2.1.0 github.com/nektos/act v0.2.52 github.com/niklasfasching/go-org v1.8.0 @@ -209,6 +209,7 @@ require ( github.com/nwaples/rardecode v1.1.3 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onsi/ginkgo v1.16.5 // indirect + github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pjbgf/sha1cd v0.3.2 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -224,6 +225,7 @@ require ( github.com/sirupsen/logrus v1.9.3 // indirect github.com/skeema/knownhosts v1.3.0 // indirect github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect + github.com/tinylib/msgp v1.3.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect diff --git a/go.sum b/go.sum index 18e37ae5f6..eef9a9e7d9 100644 --- a/go.sum +++ b/go.sum @@ -413,8 +413,8 @@ github.com/minio/crc64nvme v1.0.1 h1:DHQPrYPdqK7jQG/Ls5CTBZWeex/2FMS3G5XGkycuFrY github.com/minio/crc64nvme v1.0.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg= 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.91 h1:tWLZnEfo3OZl5PoXQwcwTAPNNrjyWwOh6cbZitW5JQc= -github.com/minio/minio-go/v7 v7.0.91/go.mod h1:uvMUcGrpgeSAAI6+sD3818508nUyMULw94j2Nxku/Go= +github.com/minio/minio-go/v7 v7.0.93 h1:lAB4QJp8Nq3vDMOU0eKgMuyBiEGMNlXQ5Glc8qAxqSU= +github.com/minio/minio-go/v7 v7.0.93/go.mod h1:71t2CqDt3ThzESgZUlU1rBN54mksGGlkLcFgguDnnAc= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -457,6 +457,8 @@ github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3I github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= +github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= +github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= @@ -525,6 +527,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/tinylib/msgp v1.3.0 h1:ULuf7GPooDaIlbyvgAxBV/FI7ynli6LZ1/nVUNu+0ww= +github.com/tinylib/msgp v1.3.0/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= From fe28f128df4ff14af3506d7fe86cb8063be4f6e2 Mon Sep 17 00:00:00 2001 From: Codeberg Translate Date: Thu, 12 Jun 2025 10:09:11 +0000 Subject: [PATCH 02/22] i18n: update of translations from Codeberg Translate Co-authored-by: 0ko <0ko@noreply.codeberg.org> Co-authored-by: Benedikt Straub Co-authored-by: BlackSpirits Co-authored-by: Codeberg Translate Co-authored-by: Edgarsons Co-authored-by: Fjuro Co-authored-by: Juno Takano Co-authored-by: Outbreak2096 Co-authored-by: Salif Mehmed Co-authored-by: Shihfu Juan Co-authored-by: SomeTr Co-authored-by: Vyxie Co-authored-by: Wuzzy Co-authored-by: earl-warren Co-authored-by: gedankenstuecke Co-authored-by: justbispo Co-authored-by: nightfurysl2001 Co-authored-by: xtex Co-authored-by: yeager Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/bg/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/cs/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/de/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/fil/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/lv/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/nds/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/pt_PT/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/ru/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/sv/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/uk/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/zh_Hans/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo-next/zh_Hant/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/bg/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/cs/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/de/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fil/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/fr/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/lv/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_BR/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/pt_PT/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/ru/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/uk/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hans/ Translate-URL: https://translate.codeberg.org/projects/forgejo/forgejo/zh_Hant/ Translation: Forgejo/forgejo Translation: Forgejo/forgejo-next --- options/locale/locale_bg.ini | 499 +++++++++++++++++++++++--- options/locale/locale_cs-CZ.ini | 6 +- options/locale/locale_de-DE.ini | 7 + options/locale/locale_fil.ini | 4 + options/locale/locale_fr-FR.ini | 6 +- options/locale/locale_lv-LV.ini | 7 + options/locale/locale_pt-BR.ini | 7 + options/locale/locale_pt-PT.ini | 9 +- options/locale/locale_ru-RU.ini | 17 +- options/locale/locale_uk-UA.ini | 8 +- options/locale/locale_zh-CN.ini | 7 + options/locale/locale_zh-TW.ini | 158 +++++--- options/locale_next/locale_bg.json | 95 ++++- options/locale_next/locale_cs-CZ.json | 4 +- options/locale_next/locale_de-DE.json | 3 +- options/locale_next/locale_fil.json | 4 +- options/locale_next/locale_lv-LV.json | 4 +- options/locale_next/locale_nds.json | 4 +- options/locale_next/locale_pt-PT.json | 3 +- options/locale_next/locale_ru-RU.json | 3 +- options/locale_next/locale_sv-SE.json | 98 ++++- options/locale_next/locale_uk-UA.json | 4 +- options/locale_next/locale_zh-CN.json | 3 +- options/locale_next/locale_zh-TW.json | 3 +- 24 files changed, 832 insertions(+), 131 deletions(-) diff --git a/options/locale/locale_bg.ini b/options/locale/locale_bg.ini index 6fc4b55eae..abce4f1133 100644 --- a/options/locale/locale_bg.ini +++ b/options/locale/locale_bg.ini @@ -11,7 +11,7 @@ copy_content = Копиране на съдържанието user_profile_and_more = Профил и настройки… view = Преглед your_settings = Настройки -mirrors = Огледала +mirrors = Огледални explore = Разглеждане write = Писане twofa = Двуфакторно удостоверяване @@ -36,7 +36,7 @@ dashboard = Табло logo = Лого toc = Съдържание copy_url = Копиране на URL -new_mirror = Ново огледало +new_mirror = Ново огледално re_type = Потвърдете паролата copy = Копиране enabled = Включено @@ -61,7 +61,7 @@ ok = Добре manage_org = Управление на организациите new_repo = Ново хранилище register = Регистрация -mirror = Огледало +mirror = Огледално username = Потребителско име password = Парола template = Шаблон @@ -69,7 +69,7 @@ signed_in_as = Влезли сте като sign_up = Регистриране enable_javascript = Този сайт изисква JavaScript. home = Начало -email = Адрес на ел. поща +email = Адрес за ел. поща issues = Задачи retry = Повторен опит remove = Премахване @@ -93,8 +93,8 @@ filter.not_fork = Не разклонения filter.is_template = Шаблони filter.not_template = Не шаблони filter.private = Частни -filter.is_mirror = Огледала -filter.not_mirror = Не огледала +filter.is_mirror = Огледални +filter.not_mirror = Не огледални copy_hash = Копиране на контролната сума artifacts = Артефакти show_log_seconds = Показване на секундите @@ -102,7 +102,7 @@ remove_all = Премахване на всичко test = Проба remove_label_str = Премахване на елемента „%s“ copy_branch = Копиране на името на клона -error404 = Страницата, която се опитвате да отворите, или не съществува или не сте упълномощени да я видите. +error404 = Страницата, която се опитвате да отворите, или не съществува, или е премахната, или не сте упълномощени да я видите. new_repo.link = Ново хранилище new_migrate.title = Нова миграция new_repo.title = Ново хранилище @@ -112,6 +112,35 @@ new_org.link = Нова организация copy_generic = Копиране в клипборда copy_error = Неуспешно копиране copy_path = Копиране на пътя +toggle_menu = Превключване на менюто +confirm_delete_artifact = Сигурни ли сте, че искате да изтриете артефакта „%s“? +more_items = Още елементи +twofa_scratch = Резервен код за двуфакторно удостоверяване +webauthn_use_twofa = Използвайте двуфакторен код от телефона си +webauthn_error_insecure = WebAuthn поддържа само сигурни връзки. За тестване през HTTP можете да използвате произход „localhost“ или „127.0.0.1“ +error413 = Изчерпали сте квотата си. +go_back = Връщане +invalid_data = Невалидни данни: %v +archived = Архивирано +concept_system_global = Глобално +concept_user_individual = Индивидуално +show_full_screen = Показване на цял екран +show_timestamps = Показване на времеви отпечатъци +rerun = Повторно изпълнение +copy_type_unsupported = Този тип файл не може да бъде копиран +webauthn_error_unknown = Възникна неизвестна грешка. Моля, опитайте отново. +webauthn_error_unable_to_process = Сървърът не можа да обработи заявката ви. +webauthn_error_empty = Трябва да зададете име за този ключ. +webauthn_error_timeout = Времето за изчакване изтече преди ключът ви да бъде прочетен. Моля, презаредете страницата и опитайте отново. +return_to_forgejo = Връщане към Forgejo +unknown = Неизвестно +confirm_delete_selected = Потвърждавате ли изтриването на всички избрани елементи? +webauthn_insert_key = Поставете вашия ключ за сигурност +webauthn_press_button = Моля, натиснете бутона на вашия ключ за сигурност… +webauthn_sign_in = Натиснете бутона на вашия ключ за сигурност. Ако ключът ви за сигурност няма бутон, поставете го отново. +webauthn_error = Неуспешно прочитане на вашия ключ за сигурност. +webauthn_unsupported_browser = Вашият браузър в момента не поддържа WebAuthn. +webauthn_error_duplicated = Ключът за сигурност не е разрешен за тази заявка. Моля, уверете се, че ключът не е вече регистриран. [settings] ui = Тема @@ -157,7 +186,7 @@ account = Акаунт update_avatar = Обновяване на профилната снимка ssh_gpg_keys = SSH / GPG ключове comment_type_group_milestone = Етап -manage_emails = Управление на адресите на ел. поща +manage_emails = Управление на адресите за ел. поща permission_read = Четене update_password = Обновяване на паролата biography_placeholder = Разкажете на другите малко за себе си! (Можете да използвате Маркдаун) @@ -183,7 +212,7 @@ user_block_success = Потребителят е блокиран успешно update_profile_success = Профилът ви е обновен. update_user_avatar_success = Профилната снимка на потребителя е обновена. remove_oauth2_application_success = Приложението е изтрито. -email_deletion_success = Адресът на ел. поща е премахнат. +email_deletion_success = Адресът за ел. поща е премахнат. update_avatar_success = Профилната ви снимка е обновена. change_username = Потребителското ви име е променено. comment_type_group_assignee = Изпълнител @@ -191,22 +220,22 @@ enable_custom_avatar = Използване на персонализирана requires_activation = Изисква активиране activated = Активиран primary = Основен -email_deletion = Премахване на адреса на ел. поща -add_new_email = Добавяне на нов адрес на ел. поща -add_email = Добавяне на адрес на ел. поща +email_deletion = Премахване на адреса за ел. поща +add_new_email = Добавяне на нов адрес за ел. поща +add_email = Добавяне на адрес за ел. поща key_content_gpg_placeholder = Започва с „-----BEGIN PGP PUBLIC KEY BLOCK-----“ comment_type_group_title = Заглавие comment_type_group_label = Етикет -change_username_prompt = Забележка: Промяната на потребителското ви име променя също URL на вашия акаунт. +change_username_prompt = Бележка: Промяната на потребителското ви име променя също URL на вашия акаунт. update_language_not_found = Езикът „%s“ не е наличен. keep_activity_private_popup = Вашата дейност ще бъде видима само за вас и администраторите на сайта uploaded_avatar_not_a_image = Каченият файл не е изображение. uploaded_avatar_is_too_big = Размерът на качения файл (%d KiB) надвишава максималния размер (%d KiB). -change_password_success = Паролата ви е обновена. Влизайте с новата си парола от сега нататък. +change_password_success = Паролата ви е обновена. Отсега нататък използвайте новата си парола, за да влезете. manage_themes = Тема по подразбиране manage_openid = OpenID адреси primary_email = Да е основен -keep_email_private = Скриване на адреса на ел. поща +keep_email_private = Скриване на адреса за ел. поща theme_update_error = Избраната тема не съществува. theme_update_success = Темата ви е обновена. 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“ @@ -227,7 +256,7 @@ saved_successfully = Настройките бяха запазени успеш no_activity = Няма скорошна дейност theme_desc = Тази тема ще се използва за уеб интерфейса, когато сте влезли. keep_activity_private = Скриване на дейността от профилната страница -lookup_avatar_by_mail = Търсене на профилна снимка по адреса на ел. поща +lookup_avatar_by_mail = Търсене на профилна снимка по адреса за ел. поща password_incorrect = Текущата парола е неправилна. change_username_redirect_prompt = Старото потребителско име ще се пренасочва, докато някой не го вземе. principal_content = Съдържание @@ -246,7 +275,7 @@ delete_prompt = Тази операция ще изтрие перманентн email_notifications.disable = Изключване на известията по ел. поща delete_account = Изтриване на акаунта ви confirm_delete_account = Потвърждаване на изтриването -email_notifications.onmention = Ел. поща само при споменаване +email_notifications.onmention = Ел. писмо само при споменаване pronouns_unspecified = Непосочени pronouns = Местоимения gpg_token_code = echo "%s" | gpg -a --default-key %s --detach-sig @@ -254,8 +283,103 @@ language.title = Език по подразбиране language.localization_project = Помогнете ни да преведем Forgejo на вашия език! Научете повече. language.description = Този език ще бъде запазен във вашия акаунт и ще се използва като език по подразбиране, след като влезете. pronouns_custom = Персонализирани -visibility.limited_tooltip = Видимо само за влезли потребители +visibility.limited_tooltip = Видим само за влезли потребители pronouns_custom_label = Персонализирани местоимения +comment_type_group_review_request = Искане за рецензия +ssh_key_been_used = Този SSH ключ вече е добавен към сървъра. +create_oauth2_application = Създаване на ново OAuth2 приложение +update_oauth2_application_success = Успешно обновихте OAuth2 приложението. +authorized_oauth2_applications = Упълномощени OAuth2 приложения +manage_account_links = Свързани акаунти +revoke_oauth2_grant = Отнемане на достъпа +added_on = Добавен на %s +comment_type_group_dependency = Зависимост +update_hints_success = Подсказките са обновени. +manage_oauth2_applications = Управление на OAuth2 приложения +gpg_key_id_used = Вече съществува публичен GPG ключ със същото ID. +oauth2_applications_desc = OAuth2 приложенията позволяват на вашето приложение от трета страна да удостоверява сигурно потребители в тази инстанция на Forgejo. +blocked_since = Блокиран от %s +hidden_comment_types.ref_tooltip = Коментари, в които тази задача е спомената от друга задача/подаване/… +create_oauth2_application_success = Успешно създадохте ново OAuth2 приложение. +quota.applies_to_org = Следните правила за квота се прилагат за тази организация +keep_activity_private.description = Вашата публична дейност ще бъде видима само за вас и администраторите на инстанцията. +ssh_helper = Нуждаете се от помощ? Разгледайте ръководството за създаване на собствени SSH ключове или за решаване на често срещани проблеми, които може да срещнете при използване на SSH. +twofa_desc = За да защитите акаунта си от кражба на парола, можете да използвате смартфон или друго устройство за получаване на еднократни пароли, базирани на време („TOTP“). +scan_this_image = Сканирайте това изображение с вашето приложение за удостоверяване: +quota.rule.exceeded.helper = Общият размер на обектите за това правило надвиши квотата. +password_change_disabled = Нелокални потребители не могат да обновяват паролата си през уеб интерфейса на Forgejo. +twofa_disable_note = Можете да изключите двуфакторното удостоверяване, ако е необходимо. +hooks.desc = Добавете уеб-куки, които ще се задействат за всички хранилища, които притежавате. +delete_account_desc = Сигурни ли сте, че искате да изтриете перманентно този потребителски акаунт? +last_used = Последно използван на +revoke_oauth2_grant_description = Отнемането на достъпа за това приложение от трета страна ще му попречи да има достъп до вашите данни. Сигурни ли сте? +password_username_disabled = Нелокални потребители не могат да променят потребителското си име. Моля, свържете се с администратора на сайта за повече подробности. +change_username_redirect_prompt.with_cooldown.one = Старото потребителско име ще бъде достъпно за всички след период на изчакване от %[1]d ден. Все още можете да си върнете старото потребителско име по време на периода на изчакване. +change_username_redirect_prompt.with_cooldown.few = Старото потребителско име ще бъде достъпно за всички след период на изчакване от %[1]d дни. Все още можете да си върнете старото потребителско име по време на периода на изчакване. +generate_token_name_duplicate = %s вече е използвано като име на приложение. Моля, използвайте ново. +quota.rule.exceeded = Надвишена +repo_and_org_access = Достъп до хранилища и организации +permissions_public_only = Само публични +permissions_list = Разрешения: +edit_oauth2_application = Редактиране на OAuth2 приложение +remove_oauth2_application = Премахване на OAuth2 приложение +twofa_recovery_tip = Ако загубите устройството си, ще можете да използвате ключ за еднократно възстановяване, за да си върнете достъпа до акаунта. +visibility.private_tooltip = Видим само за членове на организации, в които участвате +quota.applies_to_user = Следните правила за квота се прилагат за вашия акаунт +quota.rule.no_limit = Неограничена +hints = Подсказки +comment_type_group_issue_ref = Препратка към задача +activate_email = Изпращане на активация +ssh_disabled = SSH е изключен +twofa_disable_desc = Изключването на двуфакторното удостоверяване ще направи акаунта ви по-малко сигурен. Продължаване? +keep_pronouns_private = Показване на местоименията само на удостоверени потребители +keep_pronouns_private.description = Това ще скрие вашите местоимения от посетители, които не са влезли в системата. +gpg_helper = Нуждаете се от помощ? Разгледайте ръководството относно GPG. +valid_until_date = Валиден до %s +ssh_externally_managed = Този SSH ключ се управлява външно за този потребител +regenerate_scratch_token_desc = Ако сте загубили ключа си за възстановяване или вече сте го използвали, за да влезете, можете да го нулирате тук. +create_oauth2_application_button = Създаване на приложение +revoke_oauth2_grant_success = Достъпът е отнет успешно. +comment_type_group_deadline = Краен срок +comment_type_group_time_tracking = Проследяване на времето +activations_pending = Чакащи активации +valid_forever = Валиден завинаги +key_state_desc = Този ключ е използван през последните 7 дни +revoke_key = Отнемане +delete_account_title = Изтриване на потребителския акаунт +update_hints = Обновяване на подсказките +permissions_access_all = Всички (публични, частни и ограничени) +oauth2_application_name = Име на приложението +visibility.public_tooltip = Видим за всички +user_block_yourself = Не можете да блокирате себе си. +hidden_comment_types.issue_ref_tooltip = Коментари, в които потребителят променя клона/маркера, свързан със задачата +comment_type_group_reference = Препратка +comment_type_group_branch = Клон +comment_type_group_pull_request_push = Добавени подавания +quota = Квота +webauthn_delete_key = Премахване на ключ за сигурност +webauthn_register_key = Добавяне на ключ за сигурност +webauthn_nickname = Прякор +webauthn_delete_key_desc = Ако премахнете ключ за сигурност, вече няма да можете да влизате с него. Продължаване? +additional_repo_units_hint = Предлагане за включване на допълнителни елементи на хранилището +twofa_is_enrolled = Вашият акаунт в момента е включен в двуфакторно удостоверяване. +twofa_not_enrolled = Вашият акаунт в момента не е включен в двуфакторно удостоверяване. +webauthn_key_loss_warning = Ако загубите ключовете си за сигурност, ще загубите достъп до акаунта си. +email_desc = Вашият основен адрес за ел. поща ще се използва за известия, възстановяване на парола и, при условие че не е скрит, за уеб-базирани Git операции. +email_preference_set_success = Предпочитанията за ел. поща са зададени успешно. +add_email_confirmation_sent = Изпратено е ел. писмо за потвърждение до „%s“. За да потвърдите адреса си за ел. поща, моля, проверете входящата си кутия и последвайте предоставената връзка в рамките на следващите %s. +additional_repo_units_hint_description = Показване на подсказка „Включване на повече“ за хранилища, които нямат включени всички налични елементи. +email_notifications.submit = Задаване на предпочит. за ел. поща +email_notifications.andyourown = И вашите собствени известия +email_deletion_desc = Адресът за ел. поща и свързаната информация ще бъдат премахнати от вашия акаунт. Git подаванията от този адрес за ел. поща ще останат непроменени. Продължаване? +add_email_success = Новият адрес за ел. поща е добавен. +remove_account_link = Премахване на свързан акаунт +webauthn_alternative_tip = Може да искате да конфигурирате допълнителен метод за удостоверяване. +hidden_comment_types_description = Типовете коментари, отметнати тук, няма да се показват в страниците на задачите. Например, отмятането на „Етикет“ премахва всички коментари от типа „<потребител> добави/премахна <етикет>“. +hidden_comment_types = Скрити типове коментари +comment_type_group_lock = Състояние на заключване +can_not_add_email_activations_pending = Има чакаща активация, опитайте отново след няколко минути, ако искате да добавите нова ел. поща. +storage_overview = Преглед на съхранението [packages] container.labels.value = Стойност @@ -287,6 +411,33 @@ generic.download = Изтеглете пакета от командния ре container.details.type = Тип образ alpine.repository = За хранилището container.images.title = Образи +arch.version.description = Описание +search_in_external_registry = Търсене в %s +filter.type = Тип +filter.container.untagged = Без маркер +filter.type.all = Всички +registry.documentation = За повече информация относно регистъра %s, вижте документацията. +filter.no_result = Вашият филтър не даде резултати. +filter.container.tagged = С маркер +arch.pacman.repo.multi = %s има същата версия в различни дистрибуции. +arch.pacman.helper.gpg = Добавете доверителен сертификат за pacman: +alpine.repository.architectures = Архитектури +arch.version.provides = Доставя +arch.version.groups = Група +details.project_site = Уебсайт на проекта +arch.pacman.conf = Добавете сървър със свързаната дистрибуция и архитектура към /etc/pacman.conf : +arch.pacman.sync = Синхронизирайте пакета с pacman: +details.repository_site = Уебсайт на хранилището +arch.version.depends = Зависимости +arch.version.optdepends = Допълнителни зависимости +arch.version.replaces = Заменя +go.install = Инсталирайте пакета от командния ред: +cargo.registry = Настройте този регистър в конфигурационния файл на Cargo (например ~/.cargo/config.toml): +cargo.install = За да инсталирате пакета с Cargo, изпълнете следната команда: +details.documentation_site = Уебсайт на документацията +arch.version.conflicts = В конфликт +alpine.repository.branches = Клонове +arch.pacman.repo.multi.item = Конфигурация за %s [tool] hours = %d часа @@ -447,7 +598,7 @@ projects.template.desc = Шаблон projects.card_type.text_only = Само текст projects.card_type.images_and_text = Изображения и текст wiki = Уики -wiki.welcome = Добре дошли в Уикито. +wiki.welcome = Добре дошли в уикито. wiki.create_first_page = Създаване на първата страница editor.upload_file = Качване на файл projects.column.color = Цвят @@ -644,7 +795,7 @@ milestones.filter_sort.latest_due_date = Най-далечен краен сро diff.view_file = Преглед на файла release.deletion_success = Изданието е изтрито. projects.column.delete = Изтриване на колоната -migrate.migrating = Мигриране от %s ... +migrate.migrating = Мигриране от %s … escape_control_characters = Екраниране issues.label_deletion_success = Етикетът е изтрит. pulls.is_closed = Заявката за сливане е затворена. @@ -1025,7 +1176,7 @@ issues.content_history.edited = редактирано pulls.title_desc_one = иска да слее %[1]d подаване от %[2]s в %[3]s pulls.showing_specified_commit_range = Показани са само промените между %[1]s..%[2]s pulls.merged_title_desc_one = сля %[1]d подаване от %[2]s в %[3]s %[4]s -pulls.no_merge_access = Не сте упълномощени за сливане на тази заявка за сливане. +pulls.no_merge_access = Не сте упълномощени да слеете тази заявка за сливане. activity.navbar.code_frequency = Честота на промените activity.git_stats_pushed_1 = е изтласкал activity.git_stats_push_to_branch = към %s и @@ -1139,7 +1290,7 @@ issues.review.review = Рецензия issues.review.comment = рецензира %s branch.deleted_by = Изтрит от %s branch.restore = Възстановяване на клона „%s“ -archive.title_date = Това хранилище е архивирано на %s. Можете да преглеждате файлове и да го клонирате, но не можете да изтласквате или отваряте задачи или заявки за сливане. +archive.title_date = Това хранилище е архивирано на %s. Можете да преглеждате файлове и да го клонирате, но не можете да правите промени в състоянието му, като изтласкване и създаване на нови задачи, заявки за сливане или коментари. release.download_count_one = %s изтегляне release.download_count_few = %s изтегляния branch.restore_success = Клонът „%s“ е възстановен. @@ -1156,7 +1307,7 @@ pulls.reopen_to_merge = Моля, отворете наново тази зая pulls.cant_reopen_deleted_branch = Тази заявка за сливане не може да бъде отворена наново, защото клонът е изтрит. pulls.status_checks_hide_all = Скриване на всички проверки pulls.status_checks_failure = Някои проверки са неуспешни -issues.review.add_review_request = поиска рецензия от %s %s +issues.review.add_review_request = поиска рецензия от %[1]s %[2]s wiki.no_search_results = Няма резултати wiki.search = Търсене в уикито issues.author.tooltip.pr = Този потребител е авторът на тази заявка за сливане. @@ -1290,6 +1441,140 @@ issues.reaction.alt_few = %[1]s реагира с %[2]s. issues.reaction.alt_many = %[1]s и още %[2]d реагираха с %[3]s. issues.reaction.alt_add = Добавяне на реакция %[1]s към коментара. issues.reaction.alt_remove = Премахване на реакция %[1]s от коментара. +already_forked = Вече сте разклонили %s +generated_from = генерирано от +clear_ref = `Изчистване на текущата препратка` +file_follow = Последване на символната връзка +commitstatus.failure = Неуспех +issues.filter_label_exclude = `Използвайте alt + click/enter, за да изключите етикети` +migrate.migrating_failed = Мигрирането от %s е неуспешно. +migrate.migrating_issues = Мигриране на задачи +mirror_from = огледално на +fork_from_self = Не можете да разклоните хранилище, което притежавате. +commit_graph.hide_pr_refs = Скриване на заявките за сливане +generated = Генерирано +broken_message = Git данните, лежащи в основата на това хранилище, не могат да бъдат прочетени. Свържете се с администратора на тази инстанция или изтрийте това хранилище. +editor.file_is_a_symlink = `„%s“ е символна връзка. Символните връзки не могат да се редактират в уеб редактора` +commits.browse_further = Разглеждане нататък +commits.older = По-стари +form.reach_limit_of_creation_n = Притежателят вече е достигнал лимита от %d хранилища. +issues.edit.already_changed = Неуспешно запазване на промените в задачата. Изглежда съдържанието вече е променено от друг потребител. Моля, презаредете страницата и опитайте да редактирате отново, за да избегнете презаписването на техните промени +transfer.accept_desc = Прехвърляне към „%s“ +archive.title = Това хранилище е архивирано. Можете да преглеждате файлове и да го клонирате, но не можете да правите промени в състоянието му, като изтласкване и създаване на нови задачи, заявки за сливане или коментари. +form.reach_limit_of_creation_1 = Притежателят вече е достигнал лимита от %d хранилище. +editor.patching = Прилагане на кръпка: +editor.fail_to_apply_patch = Неуспешно прилагане на кръпка „%s“ +commits.no_commits = Няма общи подавания. „%s“ и „%s“ имат напълно различни истории. +migrate.migrating_pulls = Мигриране на заявки за сливане +migrate.migrating_topics = Мигриране на теми +projects.desc = Управлявайте задачи и заявки за сливане в проектни табла. +issues.choose.invalid_templates = %v невалидни шаблона са намерени +pulls.edit.already_changed = Неуспешно запазване на промените в заявката за сливане. Изглежда съдържанието вече е променено от друг потребител. Моля, презаредете страницата и опитайте да редактирате отново, за да избегнете презаписването на техните промени +migrate.gitbucket.description = Мигриране на данни от GitBucket инстанции. +migrate.migrating_git = Мигриране на Git данни +commits.newer = По-нови +issues.choose.blank_about = Създаване на задача от стандартен шаблон. +issues.filter_no_results = Няма резултати +issues.filter_no_results_placeholder = Опитайте да коригирате филтрите си за търсене. +archive.nocomment = Коментирането не е възможно, тъй като хранилището е архивирано. +migrate.gitlab.description = Мигриране на данни от gitlab.com или други GitLab инстанции. +transfer.no_permission_to_accept = Нямате разрешение да приемете това прехвърляне. +transfer.no_permission_to_reject = Нямате разрешение да отхвърлите това прехвърляне. +editor.file_changed_while_editing = Съдържанието на файла е променено, откакто сте го отворили. Щракнете тук, за да го видите, или Подайте промените отново, за да ги презапишете. +sync_fork.button = Синхронизиране +migrate.onedev.description = Мигриране на данни от code.onedev.io или други OneDev инстанции. +migrate.codebase.description = Мигриране на данни от codebasehq.com. +migrate.migrating_labels = Мигриране на етикети +migrate.migrating_releases = Мигриране на издания +editor.push_rejected_no_message = Промяната беше отхвърлена от сървъра без съобщение. Моля, проверете Git куките. +issues.choose.open_external_link = Отваряне +comments.edit.already_changed = Неуспешно запазване на промените в коментара. Изглежда съдържанието вече е променено от друг потребител. Моля, презаредете страницата и опитайте да редактирате отново, за да избегнете презаписването на техните промени +commits.nothing_to_compare = Тези клонове са равни. +transfer.reject_desc = Отказ от прехвърляне към „%s“ +subscribe.pull.guest.tooltip = Влезте, за да се абонирате за тази заявка за сливане. +commit.contained_in_default_branch = Това подаване е част от стандартния клон +normal_view = Нормален изглед +issues.context.menu = Меню за коментара +form.name_reserved = Името на хранилището „%s“ е резервирано. +need_auth = Упълномощаване +subscribe.issue.guest.tooltip = Влезте, за да се абонирате за тази задача. +commitstatus.pending = В очакване +commitstatus.success = Успех +editor.cannot_commit_to_protected_branch = Не може да се подава в защитения клон „%s“. +editor.no_commit_to_branch = Не може да се подава директно в клона, защото: +editor.push_rejected = Промяната беше отхвърлена от сървъра. Моля, проверете Git куките. +cite_this_repo = Цитиране на това хранилище +migrate.gitea.description = Мигриране на данни от gitea.com или други Gitea инстанции. +editor.push_rejected_summary = Пълно съобщение на отхвърлянето: +sync_fork.branch_behind_one = Този клон е %[1]d подаване зад %[2]s +sync_fork.branch_behind_few = Този клон е %[1]d подавания зад %[2]s +form.string_too_long = Даденият низ е по-дълъг от %d знака. +editor.commit_id_not_matching = Файлът е променен, докато сте го редактирали. Подайте в нов клон и след това слейте. +editor.user_no_push_to_branch = Потребителят не може да изтласква в клона +archive.pull.noreview = Това хранилище е архивирано. Не можете да рецензирате заявки за сливане. +migrate.migrating_failed.error = Неуспешно мигриране: %s +migrate.github.description = Мигриране на данни от github.com или GitHub Enterprise сървър. +migrate.forgejo.description = Мигриране на данни от codeberg.org или други Forgejo инстанции. +migrate.gogs.description = Мигриране на данни от notabug.org или други Gogs инстанции. +migrate.migrating_milestones = Мигриране на етапи +migrate.failed = Мигрирането е неуспешно: %v +pulls.nothing_to_compare_and_allow_empty_pr = Тези клонове са равни. Тази заявка за сливане ще бъде празна. +pulls.has_pull_request = `Вече съществува заявка за сливане между тези клонове: %[2]s#%[3]d` +pulls.is_checking = Проверката за конфликти при сливане е в ход. Опитайте отново след няколко минути. +pulls.cannot_merge_work_in_progress = Тази заявка за сливане е отбелязана като в процес на работа. +pulls.blocked_by_approvals = Тази заявка за сливане все още няма достатъчно одобрения. Дадени са %d от %d одобрения. +pulls.blocked_by_rejection = Тази заявка за сливане има поискани промени от официален рецензент. +pulls.waiting_count_1 = %d чакаща рецензия +pulls.status_checks_requested = Задължително +pulls.update_branch_success = Обновяването на клона е успешно +pulls.cannot_auto_merge_helper = Слейте ръчно, за да разрешите конфликтите. +migrate.clone_address_desc = HTTP(S) или Git „clone“ URL на съществуващо хранилище +pulls.add_prefix = Добавете префикс %s +pulls.merge_pull_request = Създаване на подаване със сливане +pulls.waiting_count_n = %d чакащи рецензии +pulls.is_ancestor = Този клон вече е включен в целевия клон. Няма какво да се слива. +pulls.required_status_check_missing = Някои задължителни проверки липсват. +pulls.change_target_branch_at = `промени целевия клон от %s на %s %s` +issues.time_spent_total = Общо изразходвано време +issues.del_time_history = `изтри изразходваното време %s` +pulls.nothing_to_compare_have_tag = Избраните клон/маркер са равни. +pulls.cannot_auto_merge_desc = Тази заявка за сливане не може да бъде слята автоматично поради конфликти. +issues.tracker_auto_close = Таймерът ще бъде спрян автоматично, когато тази задача бъде затворена +issues.force_push_codes = `изтласка принудително %[1]s от %[2]s към %[4]s %[6]s` +pulls.blocked_by_official_review_requests = Тази заявка за сливане е блокирана, защото липсва одобрение от един или повече официални рецензенти. +issues.tracker = Проследяване на времето +issues.add_time_history = `добави изразходвано време %s` +migrate.repo_desc_helper = Оставете празно, за да внесете съществуващото описание +migrate.git.description = Мигриране само на хранилище от всяка Git услуга. +mirror_sync = синхронизирано +migrate_repo = Мигриране на хранилище +migrate_options = Опции за мигрирането +editor.fork_before_edit = Трябва да разклоните това хранилище, за да направите или предложите промени в този файл. +editor.must_have_write_access = Трябва да имате право на запис, за да правите или предлагате промени в този файл. +editor.new_branch_name = Дайте име на новия клон за това подаване +editor.invalid_commit_mail = Невалидна ел. поща за създаване на подаване. +pulls.required_status_check_failed = Някои задължителни проверки не са успешни. +issues.time_spent_from_all_authors = `Общо изразходвано време: %s` +issues.attachment.download = `Щракнете, за да изтеглите „%s“` +issues.attachment.open_tab = `Щракнете, за да видите „%s“ в нов раздел` +pulls.update_branch = Обновяване на клона чрез сливане +migrate_items = Елементи за мигриране +commit.load_referencing_branches_and_tags = Зареждане на клонове и маркери, препращащи към това подаване +pulls.files_conflicted = Тази заявка за сливане има промени, които са в конфликт с целевия клон. +pulls.still_in_progress = Все още е в процес на работа? +pulls.ready_for_review = Готово е за рецензиране? +pulls.is_empty = Промените в този клон вече са в целевия клон. Това ще бъде празно подаване. +issues.start_tracking = Започване на проследяване на времето +migrate_options_mirror_helper = Това хранилище ще бъде огледално +migrate_options_lfs = Мигриране на LFS файлове +editor.upload_file_is_locked = Файлът „%s“ е заключен от %s. +issues.tracking_already_started = `Вече сте започнали проследяване на времето по друга задача!` +pulls.remove_prefix = Премахнете префикса %s +author_search_tooltip = Показва максимум 30 потребители +migrate.migrating_failed_no_addr = Мигрирането е неуспешно. +issues.force_push_compare = Сравняване +pulls.status_checking = Някои проверки са в очакване +pulls.nothing_to_compare = Тези клонове са равни. Не е нужно да създавате заявка за сливане. [modal] confirm = Потвърждаване @@ -1319,6 +1604,11 @@ table_modal.placeholder.content = Съдържание table_modal.placeholder.header = Заглавка buttons.new_table.tooltip = Добавяне на таблица table_modal.header = Добавяне на таблица +link_modal.description = Описание +link_modal.header = Добавяне на връзка +buttons.indent.tooltip = Вмъкване на елементи с едно ниво +buttons.unindent.tooltip = Изваждане на елементи с едно ниво +link_modal.paste_reminder = Подсказка: С URL адрес в клипборда можете да поставите директно в редактора, за да създадете връзка. [org] teams.write_access = Писане @@ -1393,11 +1683,12 @@ members.private_helper = Да е видим teams.no_desc = Този екип няма описание settings.delete_org_desc = Тази организация ще бъде изтрита перманентно. Продължаване? open_dashboard = Отваряне на таблото +settings.change_orgname_prompt = Бележка: Промяната на името на организацията ще промени и URL адреса на вашата организация и ще освободи старото име. [install] admin_password = Парола user = Потребителско име -admin_email = Адрес на ел. поща +admin_email = Адрес за ел. поща path = Път password = Парола host = Хост @@ -1427,13 +1718,17 @@ admin_title = Настройки на администраторския ака err_empty_admin_password = Администраторската парола не може да бъде празна. docker_helper = Ако стартирате Forgejo в Docker, моля, прочетете документацията преди да промените настройки. sqlite_helper = Път на файла за SQLite3 базата данни.
Въведете абсолютен път, ако стартирате Forgejo като service. -err_empty_admin_email = Администраторският адрес на ел. поща не може да бъде празен. +err_empty_admin_email = Администраторският адрес за ел. поща не може да бъде празен. password_algorithm = Алгоритъм за хеш. на паролите -default_keep_email_private = Скриване на адресите на ел. поща по подразбиране +default_keep_email_private = Скриване на адресите за ел. поща по подразбиране invalid_password_algorithm = Невалиден алгоритъм за хеш. на паролите err_admin_name_is_reserved = Потребителското име на администратора е невалидно, потребителското име е резервирано err_admin_name_pattern_not_allowed = Потребителското име на администратора е невалидно, потребителското име съответства с резервиран шаблон err_admin_name_is_invalid = Потребителското име на администратора е невалидно +db_schema_helper = Оставете празно за схемата по подразбиране на базата данни („public“). +reinstall_error = Опитвате се да инсталирате върху съществуваща Forgejo база данни +reinstall_confirm_message = Преинсталирането със съществуваща Forgejo база данни може да причини множество проблеми. В повечето случаи трябва да използвате съществуващия си „app.ini“, за да стартирате Forgejo. Ако знаете какво правите, потвърдете следното: +app_slogan = Слоган на инстанцията [filter] string.asc = А - Я @@ -1462,8 +1757,8 @@ link_not_working_do_paste = Ако връзката не работи, опит activate_account = Моля, активирайте своя акаунт admin.new_user.subject = Нов потребител %s току-що се регистрира activate_account.text_1 = Здравейте, %[1]s, благодарим ви за регистрацията в %[2]s! -activate_email.text = Моля, щракнете върху следната връзка, за да потвърдите своя адрес на ел. поща в рамките на %s: -activate_email = Потвърдете своя адрес на ел. поща +activate_email.text = Моля, щракнете върху следната връзка, за да потвърдите своя адрес за ел. поща в рамките на %s: +activate_email = Потвърдете своя адрес за ел. поща activate_account.text_2 = Моля, щракнете върху следната връзка, за да активирате своя акаунт в рамките на %s: issue_assigned.issue = @%[1]s ви възложи задача %[2]s в хранилище %[3]s. issue.action.push_n = @%[1]s изтласка %[3]d подавания към %[2]s @@ -1473,6 +1768,28 @@ issue.action.merge = @%[1]s сля #%[2]d в %[3]s. issue_assigned.pull = @%[1]s ви възложи заявката за сливане %[2]s в хранилище %[3]s. issue.action.ready_for_review = @%[1]s отбеляза тази заявка за сливане като готова за рецензиране. repo.transfer.subject_to = %s иска да прехвърли хранилище "%s" към %s +password_change.subject = Вашата парола е променена +admin.new_user.text = Моля, щракнете тук, за да управлявате този потребител от администраторския панел. +password_change.text_1 = Паролата за вашия акаунт току-що беше променена. +reset_password = Възстановете своя акаунт +account_security_caution.text_1 = Ако това сте били вие, можете спокойно да игнорирате това ел. писмо. +issue.action.force_push = %[1]s изтласка принудително %[2]s от %[3]s към %[4]s. +team_invite.text_3 = Бележка: Тази покана е предназначена за %[1]s. Ако не сте очаквали тази покана, можете да игнорирате това ел. писмо. +view_it_on = Вижте го на %s +register_notify.text_1 = това е ел. писмо за потвърждение на вашата регистрация в %s! +register_notify.text_2 = Можете да влезете в акаунта си с потребителско име: %s +register_notify.text_3 = Ако някой друг е създал този акаунт за вас, първо ще трябва да зададете парола. +repo.collaborator.added.subject = %s ви добави към %s като сътрудник +primary_mail_change.text_1 = Основният адрес за ел. поща на вашия акаунт току-що беше променен на %[1]s. Това означава, че този адрес за ел. поща повече няма да получава известия по ел. поща за вашия акаунт. +team_invite.text_2 = Моля, щракнете върху следната връзка, за да се присъедините към екипа: +repo.transfer.body = За да го приемете или отхвърлите, посетете %s или просто го игнорирайте. +repo.collaborator.added.text = Бяхте добавени като сътрудник в хранилище: +team_invite.subject = %[1]s ви покани да се присъедините към организацията %[2]s +team_invite.text_1 = %[1]s ви покани да се присъедините към екип %[2]s в организация %[3]s. +reply = или отговорете директно на това ел. писмо +reset_password.text = Ако това сте вие, моля, щракнете върху следната връзка, за да възстановите акаунта си в рамките на %s: +primary_mail_change.subject = Основният ви адрес за ел. поща е променен +account_security_caution.text_2 = Ако това не сте били вие, акаунтът ви е компрометиран. Моля, свържете се с администраторите на този сайт. [user] joined_on = Присъединени на %s @@ -1493,7 +1810,7 @@ follow = Последване followers_few = %d последователи block_user = Блокиране на потребителя change_avatar = Променете профилната си снимка… -email_visibility.limited = Вашият адрес на ел. поща е видим за всички удостоверени потребители +email_visibility.limited = Вашият адрес за ел. поща е видим за всички удостоверени потребители disabled_public_activity = Този потребител е изключил публичната видимост на дейността. email_visibility.private = Вашият адрес на ел. поща е видим само за вас и администраторите show_on_map = Показване на това място на картата @@ -1507,6 +1824,15 @@ public_activity.visibility_hint.self_public = Вашата дейност е в form.name_pattern_not_allowed = Шаблонът "%s" не е разрешен в потребителско име. form.name_reserved = Потребителското име "%s" е резервирано. public_activity.visibility_hint.self_private_profile = Вашата дейност е видима само за вас и администраторите на инстанцията, тъй като вашият профил е частен. Конфигуриране. +block_user.detail = Моля, имайте предвид, че блокирането на потребител има и други ефекти, като например: +block_user.detail_2 = Този потребител няма да може да взаимодейства с хранилищата, които притежавате, или със задачите и коментарите, които сте създали. +block_user.detail_3 = Няма да можете да се добавяте един друг като сътрудници на хранилище. +public_activity.visibility_hint.self_private = Вашата дейност е видима само за вас и администраторите на инстанцията. Конфигуриране. +form.name_chars_not_allowed = Потребителското име „%s“ съдържа невалидни знаци. +public_activity.visibility_hint.admin_private = Тази дейност е видима за вас, защото сте администратор, но потребителят иска тя да остане частна. +public_activity.visibility_hint.admin_public = Тази дейност е видима за всички, но като администратор можете да виждате и взаимодействия в частни пространства. +follow_blocked_user = Не можете да последвате този потребител, защото сте го блокирали или той ви е блокирал. +block_user.detail_1 = Ще спрете да се следвате един друг и няма да можете да се последвате отново. [home] filter = Други филтри @@ -1530,6 +1856,7 @@ view_home = Преглед на %s collaborative_repos = Съвместни хранилища switch_dashboard_context = Превключване на контекста на таблото show_only_public = Показване само на публични +filter_by_team_repositories = Филтриране по хранилища на екипа [admin] packages.version = Версия @@ -1587,7 +1914,7 @@ config.server_config = Сървърна конфигурация packages.size = Размер settings = Админ. настройки users = Потребителски акаунти -emails.duplicate_active = Този адрес на ел. поща вече е активен за друг потребител. +emails.duplicate_active = Този адрес за ел. поща вече е активен за друг потребител. config.app_ver = Forgejo версия config.custom_conf = Път на конфигурационния файл config.git_version = Git версия @@ -1606,16 +1933,20 @@ users.details = Потребителски данни packages.total_size = Общ размер: %s dashboard.new_version_hint = Forgejo %s вече е наличен, вие изпълнявате %s. Проверете блога за повече подробности. total = Общо: %d +config.db_type = Тип +monitor.queue.type = Тип +notices.type = Тип [error] not_found = Целта не може да бъде намерена. report_message = Ако смятате, че това е грешка на Forgejo, моля, потърсете в задачите на Codeberg или отворете нова задача, ако е необходимо. network_error = Мрежова грешка occurred = Възникна грешка +server_internal = Вътрешна грешка на сървъра [form] UserName = Потребителско име -Email = Адрес на ел. поща +Email = Адрес за ел. поща Password = Парола RepoName = Име на хранилището username_been_taken = Потребителското име вече е заето. @@ -1633,8 +1964,8 @@ url_error = `„%s“ не е валиден URL.` Content = Съдържание team_not_exist = Екипът не съществува. TeamName = Име на екипа -email_error = ` не е валиден адрес на ел. поща.` -email_invalid = Адресът на ел. поща е невалиден. +email_error = ` не е валиден адрес за ел. поща.` +email_invalid = Адресът за ел. поща е невалиден. SSHTitle = Име на SSH ключ repo_name_been_taken = Името на хранилището вече е използвано. team_name_been_taken = Името на екипа вече е заето. @@ -1647,6 +1978,44 @@ Pronouns = Местоимения Biography = Биография Website = Уебсайт Location = Местоположение +cannot_add_org_to_team = Организация не може да бъде добавена като член на екип. +auth_failed = Неуспешно удостоверяване: %v +team_no_units_error = Разрешете достъп до поне една секция на хранилището. +password_uppercase_one = Поне един голям знак +CommitSummary = Обобщение на подаването +username_error = ` може да съдържа само буквено-цифрови знаци („0-9“, „a-z“, „A-Z“), тире („-“), долна черта („_“) и точка („.“). Не може да започва или завършва с не-буквено-цифрови знаци, като също така са забранени и последователни не-буквено-цифрови знаци.` +username_error_no_dots = ` може да съдържа само буквено-цифрови знаци („0-9“, „a-z“, „A-Z“), тире („-“) и долна черта („_“). Не може да започва или завършва с не-буквено-цифрови знаци, като също така са забранени и последователни не-буквено-цифрови знаци.` +duplicate_invite_to_team = Потребителят вече е поканен като член на екипа. +must_use_public_key = Ключът, който предоставихте, е частен ключ. Моля, не качвайте частния си ключ никъде. Вместо това използвайте публичния си ключ. +org_still_own_packages = Тази организация все още притежава един или повече пакети, първо ги изтрийте. +admin_cannot_delete_self = Не можете да изтриете себе си, когато сте администратор. Моля, първо премахнете администраторските си привилегии. +To = Име на клон +CommitMessage = Съобщение на подаването +include_error = ` трябва да съдържа подниз „%s“.` +alpha_dash_error = ` трябва да съдържа само буквено-цифрови знаци, тире („-“) и долна черта („_“).` +alpha_dash_dot_error = ` трябва да съдържа само буквено-цифрови знаци, тире („-“), долна черта („_“) и точка („.“).` +size_error = ` трябва да е с размер %s.` +min_size_error = ` трябва да съдържа поне %s знака.` +max_size_error = ` трябва да съдържа най-много %s знака.` +invalid_group_team_map_error = ` съпоставянето е невалидно: %s` +password_complexity = Паролата не отговаря на изискванията за сложност: +password_lowercase_one = Поне един малък знак +password_digit_one = Поне една цифра +password_special_one = Поне един специален знак (препинателни знаци, скоби, кавички и др.) +enterred_invalid_repo_name = Името на хранилището, което въведохте, е неправилно. +enterred_invalid_org_name = Името на организацията, което въведохте, е неправилно. +enterred_invalid_password = Паролата, която въведохте, е неправилна. +organization_leave_success = Успешно напуснахте организацията %s. +still_has_org = Вашият акаунт е член на една или повече организации, първо ги напуснете. +org_still_own_repo = Тази организация все още притежава едно или повече хранилища, първо ги изтрийте или прехвърлете. +target_branch_not_exist = Целевият клон не съществува. +glob_pattern_error = ` glob шаблонът е невалиден: %s.` +openid_been_used = OpenID адресът „%s“ вече е използван. +unknown_error = Неизвестна грешка: +TreeName = Път до файла +AdminEmail = Администраторски адрес за ел. поща +email_domain_is_not_allowed = Домейнът на адреса за ел. поща на потребителя %s е в конфликт с EMAIL_DOMAIN_ALLOWLIST или EMAIL_DOMAIN_BLOCKLIST. Уверете се, че сте въвели правилно адреса за ел. поща. +email_been_used = Адресът за ел. поща вече се използва. [action] close_issue = `затвори задача %[3]s#%[2]s` @@ -1709,11 +2078,38 @@ sign_up_button = Регистрирайте се. back_to_sign_in = Назад към Вход sign_in_openid = Продължаване с OpenID send_reset_mail = Изпращане на ел. писмо за възстановяване +authorize_application = Упълномощаване на приложение +password_pwned_err = Неуспешно завършване на заявката към HaveIBeenPwned +last_admin = Не можете да премахнете последния администратор. Трябва да има поне един администратор. +allow_password_change = Изискване потребителят да смени паролата си (препоръчително) +authorize_title = Упълномощавате ли „%s“ да има достъп до вашия акаунт? +reset_password_mail_sent_prompt = Изпратено е ел. писмо за потвърждение до %s. За да завършите процеса по възстановяване на акаунта, моля, проверете входящата си поща и последвайте предоставената връзка в рамките на следващите %s. +reset_password_wrong_user = Вие сте влезли като %s, но връзката за възстановяване на акаунта е предназначена за %s +authorize_redirect_notice = Ще бъдете пренасочени към %s, ако упълномощите това приложение. +authorize_application_description = Ако предоставите достъп, то ще може да осъществява достъп и да записва цялата информация за вашия акаунт, включително частни хранилища и организации. +twofa_scratch_used = Използвали сте своя резервен код. Пренасочени сте към страницата с настройки за двуфакторно удостоверяване, за да можете да премахнете регистрацията на устройството си или да генерирате нов резервен код. +reset_password_helper = Възстановяване на акаунт +invalid_password = Вашата парола не съвпада с паролата, използвана за създаване на акаунта. +invalid_code = Вашият код за потвърждение е невалиден или е изтекъл. +invalid_code_forgot_password = Вашият код за потвърждение е невалиден или е изтекъл. Щракнете тук, за да започнете нова сесия. +scratch_code = Резервен код +use_scratch_code = Използвайте резервен код +use_onetime_code = Използвайте еднократен код +twofa_scratch_token_incorrect = Вашият резервен код е неправилен. +authorize_application_created_by = Това приложение е създадено от %s. +authorization_failed = Неуспешно упълномощаване +resent_limit_prompt = Вече сте поискали ел. писмо за активация наскоро. Моля, изчакайте 3 минути и опитайте отново. +has_unconfirmed_mail = Здравейте, %s, имате непотвърден адрес за ел. поща (%s). Ако не сте получили ел. писмо за потвърждение или трябва да изпратите ново, моля, щракнете върху бутона по-долу. +change_unconfirmed_email_error = Неуспешна промяна на адреса за ел. поща: %v +resend_mail = Щракнете тук, за повторно изпращане на ел. писмо за активация +change_unconfirmed_email_summary = Промяна на адреса, на който се изпраща ел. писмо за активация. +change_unconfirmed_email = Ако сте въвели грешен адрес за ел. поща по време на регистрацията, можете да го промените по-долу и потвърждение ще бъде изпратено на новия адрес. [aria] footer.software = Относно този софтуер footer.links = Връзки footer = Долен колонтитул +navbar = Навигационна лента [startpage] install = Лесен за инсталиране @@ -1780,6 +2176,7 @@ runs.no_workflows.help_no_write_access = За да научите повече variables.management = Управление на променливи variables.not_found = Променливата не е открита. variables.id_not_exist = Променлива с идентификатор %d не съществува. +runners.owner_type = Тип [heatmap] less = По-малко @@ -1809,9 +2206,10 @@ invalid_input_type = Не можете да качвате файлове от component_loading_failed = Неуспешно зареждане на %s contributors.what = приноси recent_commits.what = скорошни подавания -component_loading = Зареждане на %s... +component_loading = Зареждане на %s… component_loading_info = Това може да отнеме известно време… code_frequency.what = честота на промените +component_failed_to_load = Възникна неочаквана грешка. [projects] type-1.display_name = Индивидуален проект @@ -1820,20 +2218,29 @@ deleted.display_name = Изтрит проект [search] no_results = Няма намерени съответстващи резултати. -team_kind = Търсене на екипи... -repo_kind = Търсене на хранилища... -org_kind = Търсене на организации... -user_kind = Търсене на потребители... -code_kind = Търсене на код... -commit_kind = Търсене на подавания... -project_kind = Търсене на проекти... -package_kind = Търсене на пакети... -search = Търсене... -branch_kind = Търсене на клонове... -pull_kind = Търсене на заявки за сливане... -issue_kind = Търсене на задачи... +team_kind = Търсене на екипи… +repo_kind = Търсене на хранилища… +org_kind = Търсене на организации… +user_kind = Търсене на потребители… +code_kind = Търсене на код… +commit_kind = Търсене на подавания… +project_kind = Търсене на проекти… +package_kind = Търсене на пакети… +search = Търсене… +branch_kind = Търсене на клонове… +pull_kind = Търсене на заявки за сливане… +issue_kind = Търсене на задачи… fuzzy = Приблизително exact = Прецизно +regexp = Регекс +regexp_tooltip = Третиране на термина за търсене като регулярен израз +fuzzy_tooltip = Включване на резултати, които също съвпадат приблизително с термина за търсене +exact_tooltip = Включване само на резултати, които съвпадат точно с термина за търсене +code_search_unavailable = Търсенето на код в момента не е достъпно. Моля, свържете се с администратора на сайта. +keyword_search_unavailable = Търсенето по ключова дума в момента не е достъпно. Моля, свържете се с администратора на сайта. +union_tooltip = Включване на резултати, които съвпадат с някоя от ключовите думи, разделени с интервал +union = Обединение +type_tooltip = Тип търсене [markup] filepreview.lines = Редове от %[1]d до %[2]d в %[3]s diff --git a/options/locale/locale_cs-CZ.ini b/options/locale/locale_cs-CZ.ini index 7a2562094d..5f25cdea43 100644 --- a/options/locale/locale_cs-CZ.ini +++ b/options/locale/locale_cs-CZ.ini @@ -493,11 +493,11 @@ use_onetime_code = Použít jednorázový kód view_it_on=Zobrazit na %s reply=nebo přímo odpovědět na tento e-mail link_not_working_do_paste=Odkaz nefunguje? Zkuste jej zkopírovat a vložit do adresního řádku svého prohlížeče. -hi_user_x=Ahoj %s, +hi_user_x=Dobrý den, uživateli %s, activate_account=Prosíme, aktivujte si váš účet activate_account.title=%s, prosím aktivujte si váš účet -activate_account.text_1=Ahoj %[1]s, děkujeme za registraci na %[2]s! +activate_account.text_1=Dobrý den, uživateli %[1]s, děkujeme za registraci ve službě %[2]s! activate_account.text_2=Pro aktivaci vašeho účtu klikněte %s na následující odkaz : activate_email=Ověřte vaši e-mailovou adresu @@ -932,7 +932,7 @@ generate_new_token=Vygenerovat nový token tokens_desc=Tyto tokeny umožňují přístup k vašemu účtu pomocí Forgejo API. token_name=Název tokenu generate_token=Vygenerovat token -generate_token_success=Nový token byl vygenerován. Zkopírujte jej nyní, jelikož již nebude znovu zobrazen. +generate_token_success=Nový token byl vygenerován. Zkopírujte si jej nyní, jelikož již nebude znovu zobrazen. generate_token_name_duplicate=%s byl již použit jako název aplikace. Použijte prosím nový. delete_token=Smazat access_token_deletion=Odstranit přístupový token diff --git a/options/locale/locale_de-DE.ini b/options/locale/locale_de-DE.ini index dffa9eb3d4..4b2e215107 100644 --- a/options/locale/locale_de-DE.ini +++ b/options/locale/locale_de-DE.ini @@ -2917,6 +2917,13 @@ comment.blocked_by_user = Kommentieren ist nicht möglich, da du vom Repository- sync_fork.branch_behind_one = Dieser Branch ist %[1]d Commit hinter %[2]s sync_fork.branch_behind_few = Dieser Branch ist %[1]d Commits hinter %[2]s sync_fork.button = Sync +settings.event_action_failure_desc = Action-Run endete im Fehlschlag. +settings.event_action_success_desc = Action-Run war erfolgreich. +settings.event_action_failure = Fehlschlag +settings.event_action_success = Erfolg +settings.event_header_action = Action-Run-Ereignisse +settings.event_action_recover_desc = Action-Run war erfolgreich, nachdem der letzte Action-Run im selben Arbeitsablauf fehlgeschlagen ist. +settings.event_action_recover = Wiederherstellen [graphs] component_loading_failed = Konnte %s nicht laden diff --git a/options/locale/locale_fil.ini b/options/locale/locale_fil.ini index 6d91cc7877..1dbfb588f0 100644 --- a/options/locale/locale_fil.ini +++ b/options/locale/locale_fil.ini @@ -2773,6 +2773,10 @@ comment.blocked_by_user = Hindi posible ang pagkomento dahil hinarang ka ng may- sync_fork.button = I-sync sync_fork.branch_behind_one = Ang branch na ito ay %[1]d commit sa likod ng %[2]s sync_fork.branch_behind_few = Ang branch na ito ay %[1]d mga commit sa likod ng %[2]s +settings.event_header_action = Mga event sa run ng aksyon +settings.event_action_failure = Pagkabigo +settings.event_action_failure_desc = Natapos ang action run bilang pagkabigo. +settings.event_action_recover = I-recover [search] commit_kind = Maghanap ng mga commit… diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index 3deaee8483..9ba91fc3a9 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -9,7 +9,7 @@ sign_in_with_provider=Se connecter avec %s sign_in_or=ou sign_out=Déconnexion sign_up=S'inscrire -link_account=Lier un Compte +link_account=Lier un compte register=S'inscrire version=Version powered_by=Propulsé par %s @@ -1516,7 +1516,7 @@ issues.desc=Organiser les rapports de bug, les tâches et les jalons. issues.filter_assignees=Filtrer par assignation issues.filter_milestones=Filtrer le jalon issues.filter_projects=Filtrer par projet -issues.filter_labels=Filtrer par labels +issues.filter_labels=Filtrer par étiquettes issues.filter_reviewers=Filtrer par évaluateur issues.new=Nouveau ticket issues.new.title_empty=Le titre ne peut pas être vide @@ -4090,4 +4090,4 @@ issues.write = Écrire : Fermer des tickets et gérer les métadonnées t pulls.read = Lire : Lire et créer des demandes de tirage. [translation_meta] -test = Ceci est une chaîne de test. Elle n'est pas affichée dans l'interface de Forgejo mais est utilisée à des fins de test. N'hésitez pas à entrer 'ok' pour gagner du temps (ou un fait amusant de votre choix) pour atteindre ce doux 100 % de complétion. :-) +test = Ceci est une chaîne de test. Elle n'est pas affichée dans l'interface de Forgejo mais est utilisée à des fins de test. N'hésitez pas à entrer 'ok' pour gagner du temps (ou un fait amusant de votre choix) pour atteindre ce difficile 100 % de complétion. :-) diff --git a/options/locale/locale_lv-LV.ini b/options/locale/locale_lv-LV.ini index 68e2f978ac..b53c0faa9b 100644 --- a/options/locale/locale_lv-LV.ini +++ b/options/locale/locale_lv-LV.ini @@ -2913,6 +2913,13 @@ comment.blocked_by_user = Piebilžu pievienošana nav iespējama, jo glabātavas sync_fork.branch_behind_one = Šis zars ir %[1]d iesūtījumu aiz %[2]s sync_fork.button = Sinhronizēt sync_fork.branch_behind_few = Šis zars ir %[1]d iesūtījumus aiz %[2]s +settings.event_action_failure = Kļūme +settings.event_action_failure_desc = Darbības izpilde beidzās ar kļūmi. +settings.event_header_action = Darbības izpildes notikumi +settings.event_action_recover = Atgūt +settings.event_action_recover_desc = Darbības izpilde bija sekmīga pēc kļūmes iepriekšējā darbības izpildē tajā pašā darbplūsmā. +settings.event_action_success = Sekmīgi +settings.event_action_success_desc = Darbības izpilde bija sekmīga. [graphs] component_loading=Ielādē %s… diff --git a/options/locale/locale_pt-BR.ini b/options/locale/locale_pt-BR.ini index 70dc813782..26bdd35420 100644 --- a/options/locale/locale_pt-BR.ini +++ b/options/locale/locale_pt-BR.ini @@ -2913,6 +2913,13 @@ comment.blocked_by_user = Não é possível comentar pois você foi bloqueado pe sync_fork.branch_behind_few = Este branch está %[1]d commits atrás de %[2]s sync_fork.branch_behind_one = Este branch está %[1]d commit atrás de %[2]s sync_fork.button = Sincronizar +settings.event_header_action = Eventos de execução de Actions +settings.event_action_failure = Falha +settings.event_action_failure_desc = Execução da Action terminou com falha. +settings.event_action_recover = Recuperar +settings.event_action_recover_desc = A execução da Action teve sucesso após a última execução no mesmo workflow ter falhado. +settings.event_action_success = Sucesso +settings.event_action_success_desc = A execução da Action foi bem sucedida. [graphs] component_loading = Carregando %s… diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini index f353dcca77..7f36d164b3 100644 --- a/options/locale/locale_pt-PT.ini +++ b/options/locale/locale_pt-PT.ini @@ -31,7 +31,7 @@ username=Nome de utilizador email=Endereço de email password=Senha access_token=Código de acesso -re_type=Confirme a senha +re_type=Confirme a palavra-passe captcha=CAPTCHA twofa=Autenticação com dois passos twofa_scratch=Código de uso único em dois passos @@ -2915,6 +2915,13 @@ comment.blocked_by_user = Não é possível comentar porque está bloqueado pelo sync_fork.branch_behind_few = Este ramo está %[1]d cometimentos atrás de %[2]s sync_fork.button = Sincronizar sync_fork.branch_behind_one = Este ramo está %[1]d cometimento atrás de %[2]s +settings.event_action_failure = Falha +settings.event_action_failure_desc = A execução da ação terminou com falha. +settings.event_action_recover = Recuperar +settings.event_header_action = Eventos da execução de ações +settings.event_action_recover_desc = A execução de ação foi bem sucedida depois da última execução de ação na mesma sequência de trabalho ter falhado. +settings.event_action_success = Sucesso +settings.event_action_success_desc = A Execução de ação foi bem sucedida. [graphs] component_loading=A carregar %s… diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 8e310eaf28..bcb62eb23b 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -1450,7 +1450,7 @@ commit.cherry-pick-content=Выбрать ветвь для переноса: commitstatus.error=Ошибка commitstatus.failure=Неудача commitstatus.pending=Ожидание -commitstatus.success=Успешно +commitstatus.success=Успех ext_issues=Внешние задачи ext_issues.desc=Ссылка на внешнюю систему отслеживания задач. @@ -2916,6 +2916,13 @@ comment.blocked_by_user = Комментирование невозможно, sync_fork.branch_behind_few = Эта ветвь отстаёт от %[2]s на %[1]d коммитов sync_fork.button = Синхронизировать sync_fork.branch_behind_one = Эта ветвь отстаёт от %[2]s на %[1]d коммит +settings.event_header_action = События выполнений Действий +settings.event_action_failure = Неудача +settings.event_action_failure_desc = Выполнение завершилось неудачно. +settings.event_action_recover = Восстановлен +settings.event_action_recover_desc = После неудачи повторное выполнение рабочего потока было успешно. +settings.event_action_success = Успех +settings.event_action_success_desc = Выполнение завершилось успешно. [graphs] component_loading_failed = Не удалось загрузить %s @@ -3914,10 +3921,10 @@ unit.desc=Управление встроенными конвейерами CI/ status.unknown=Неизвестно status.waiting=Ожидает status.running=Запущено -status.success=Успешно +status.success=Успех status.failure=Неудача status.cancelled=Отменено -status.skipped=Пропущено +status.skipped=Пропущен status.blocked=Заблокировано runners=Исполнители @@ -3938,7 +3945,7 @@ runners.task_list.run=Запуск runners.task_list.status=Состояние runners.task_list.repository=Репозиторий runners.task_list.commit=Коммит -runners.task_list.done_at=Время завершения +runners.task_list.done_at=Завершено runners.edit_runner=Изменить исполнитель runners.update_runner=Обновить изменения runners.update_runner_success=Исполнитель успешно обновлён @@ -3960,7 +3967,7 @@ runners.reset_registration_token_success=Токен регистрации ис runs.all_workflows=Все рабочие потоки runs.commit=коммит runs.scheduled=Запланировано -runs.pushed_by=отправлено +runs.pushed_by=отправлен runs.invalid_workflow_helper=Файл конфигурации рабочего потока некорректен. Пожалуйста, проверьте конфигурационный файл: %s runs.actor=Автор runs.status=Состояние diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 569392fafa..d2d7c58edc 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -2856,12 +2856,12 @@ dashboard.current_memory_usage=Поточне використання пам'я dashboard.total_memory_allocated=Виділено пам'яті загалом dashboard.memory_obtained=Отримано пам'яті dashboard.pointer_lookup_times=Пошуків вказівника -dashboard.memory_allocate_times=Виділення пам'яті +dashboard.memory_allocate_times=Виділень пам'яті dashboard.memory_free_times=Звільнень пам'яті dashboard.current_heap_usage=Поточне використання динамічної пам'яті dashboard.heap_memory_obtained=Отримано динамічної пам'яті -dashboard.heap_memory_idle=Не використовується динамічною пам'яттю -dashboard.heap_memory_in_use=Використовується динамічною пам'яттю +dashboard.heap_memory_idle=Динамічної пам'яті простоює +dashboard.heap_memory_in_use=Динамічної пам'яті використовується dashboard.heap_memory_released=Звільнено динамічної пам'яті dashboard.heap_objects=Об'єктів динамічної пам'яті dashboard.bootstrap_stack_usage=Використання стеку Bootstrap @@ -3625,6 +3625,8 @@ runners.runner_title = Ранер runners.task_list = Нещодавні завдання ранера runners.update_runner_success = Ранер оновлено runners.delete_runner_header = Підтвердіть видалення ранера +runners.status.offline = Неактивний +runners.status.idle = Простоює diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 99ae720866..acdd4c0ced 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -2915,6 +2915,13 @@ comment.blocked_by_user = 您无法评论,因为您已被仓库所有者或作 sync_fork.button = 同步 sync_fork.branch_behind_one = 此分支落后于 %[2]s %[1]d 个提交 sync_fork.branch_behind_few = 此分支落后于 %[2]s %[1]d 个提交 +settings.event_action_failure = 失败 +settings.event_action_recover = 恢复 +settings.event_action_recover_desc = Action运行在同一工作流上次失败后成功。 +settings.event_action_success = 成功 +settings.event_action_success_desc = Action运行以成功结束。 +settings.event_action_failure_desc = Action运行以失败结束。 +settings.event_header_action = Action运行事件 [graphs] component_loading=正在加载 %s… diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 7d5852a4dd..b21e4c8f79 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -209,6 +209,7 @@ buttons.unindent.tooltip = 使項目取消縮排一層 link_modal.header = 新增連結 link_modal.url = 網址 link_modal.description = 描述 +link_modal.paste_reminder = 提示:當您的剪貼簿中有網址時,可以直接貼到編輯器中來建立連結。 [filter] string.asc=A - Z @@ -220,7 +221,7 @@ missing_csrf=錯誤的請求:未提供 CSRF 符記 invalid_csrf=錯誤的請求:無效的 CSRF 符記 not_found=找不到目標。 network_error=網路錯誤 -report_message = 如果您相信這是一個 Forgejo 的錯誤,請在 Codeberg 上搜尋相關問題,或在必要時提出一個新問題。 +report_message = 如果您相信這是一個 Forgejo 的錯誤,請在 Codeberg 上搜尋相關議題,或在必要時提出一個新議題。 server_internal = 伺服器內部錯誤 [startpage] @@ -713,7 +714,7 @@ show_on_map = 在地圖上顯示這個地點 settings = 使用者設定 block_user = 封鎖使用者 block_user.detail_1 = 你們將停止互相關注,並且無法互相關注。 -block_user.detail_2 = 此使用者將無法與你擁有的儲存庫或由你建立的問題和評論進行互動。 +block_user.detail_2 = 此使用者將無法與你擁有的儲存庫或由你建立的議題和評論進行互動。 followers_one = %d 位追蹤者 following_one = 追蹤 %d 個人 block_user.detail_3 = 你們將無法互相新增為儲存庫協作者。 @@ -1013,7 +1014,7 @@ uploaded_avatar_is_too_big = 上傳檔案的大小 (%d KiB)超過了上限 select_permissions = 選擇權限 permission_write = 讀寫 permissions_list = 權限: -add_email_confirmation_sent = 我們已發送一封確認信至 「%s」。請檢查您的信箱並在 %s 內確認您的信箱地址。 +add_email_confirmation_sent = 確認信已發送至「%s」。請在接下來的 %s 內前往收件匣查看該郵件,並點擊其中的連結以完成電子郵件地址的確認。 repo_and_org_access = 儲存庫和組織存取權 permissions_public_only = 僅公開 permissions_access_all = 全部(公開、私有和受限) @@ -1027,9 +1028,9 @@ unbind_success = 已成功移除該社群帳號。 create_oauth2_application_success = 您已成功建立一個新的 OAuth2 應用程式。 change_username_prompt = 註:更改您的使用者名稱也會更改您的帳號 URL。 change_username_redirect_prompt = 舊的使用者名稱在被其他使用者認領之前將會轉址到新的使用者名稱。 -visibility.limited_tooltip = 只有已登入的使用者能看見 +visibility.limited_tooltip = 僅對已登入的使用者可見 visibility.private_tooltip = 只有您加入的組織之成員能看見 -keep_email_private_popup = 這將在您的個人資料頁面、合併請求或網頁檔案編輯器中隱藏您的電子信箱地址。已推送的提交不會被修改。在提交中使用 %s 來將其連結至您的帳號。 +keep_email_private_popup = 您的電子郵件地址不會顯示在個人資料頁面中,也不會成為透過網頁介面(例如上傳檔案、編輯或合併提交)所建立的提交紀錄的預設地址。取而代之的是,可以使用特殊地址 %s 將這些提交關聯到您的帳號。此設定不會影響既有的提交紀錄。 ssh_signonly = 因為目前 SSH 已被停用,這個金鑰只被用來校驗提交簽署。 email_desc = 您的主要電子信箱將被用於通知、密碼復原、和網頁 Git 操作(如果您的信箱不是隱藏的)。 pronouns_custom = 自訂 @@ -1076,6 +1077,20 @@ quota.sizes.assets.attachments.all = 附件 quota.sizes.assets.artifacts = 製品 quota.sizes.wiki = 百科 quota = 配額 +access_token_regeneration = 重新產生存取符記 +access_token_regeneration_desc = 重新產生存取符記將會撤銷使用該符記的應用程式對您帳號的存取權限,此操作無法還原。是否繼續? +regenerate_token_success = 符記已重新產生。使用該符記的應用程式將不再具有你帳號的存取權限,必須更新為新的符記後才能繼續使用。 +quota.applies_to_user = 以下配額規則適用於您的帳號 +quota.applies_to_org = 以下配額規則適用於此組織 +quota.rule.exceeded.helper = 符合此規則的物件總大小已超出配額限制。 +quota.sizes.repos.public = 公開儲存庫 +quota.sizes.repos.private = 私有儲存庫 +quota.sizes.git.all = Git 內容 +quota.sizes.git.lfs = Git LFS +quota.sizes.assets.attachments.issues = 問題附件 +quota.sizes.assets.attachments.releases = 版本發布附件 +keep_pronouns_private = 僅向已驗證的使用者顯示代名詞 +keep_pronouns_private.description = 這將對未登入的訪客隱藏您的代名詞。 [repo] owner=所有者 @@ -1147,7 +1162,7 @@ forks=分叉 reactions_more=和其他 %d 個 unit_disabled=網站管理員已經停用這個儲存庫區域。 language_other=其他 -adopt_search=輸入帳號以搜尋未接管的儲存庫... (留白以查詢全部) +adopt_search=輸入帳號以搜尋未接管的儲存庫... (留白以查詢全部) adopt_preexisting_label=接管檔案 adopt_preexisting=接管既有的檔案 adopt_preexisting_content=從 %s 建立儲存庫 @@ -1362,7 +1377,7 @@ editor.filename_cannot_be_empty=檔案名稱不能為空。 editor.filename_is_invalid=檔名無效:「%s」。 editor.branch_does_not_exist=此儲存庫沒有名為「%s」的分支。 editor.branch_already_exists=此儲存庫已有名為「%s」的分支。 -editor.file_changed_while_editing=檔案內容在您編輯時已被更改。按一下此處來檢視被更改的地方或再次提交以覆蓋這些變更。 +editor.file_changed_while_editing=檔案內容自您開啟後已有變更。點此查看,或再次提交變更以覆寫原內容。 editor.file_already_exists=此儲存庫已有名為「%s」的檔案。 editor.commit_empty_file_header=提交空白檔案 editor.commit_empty_file_text=你準備提交的檔案是空白的,是否繼續? @@ -1581,7 +1596,7 @@ issues.commented_at=`已留言 %s` issues.delete_comment_confirm=您確定要刪除這則留言嗎? issues.context.copy_link=複製連結 issues.context.quote_reply=引用回覆 -issues.context.reference_issue=新增問題並參考 +issues.context.reference_issue=在新問題中引用 issues.context.edit=編輯 issues.context.delete=刪除 issues.close=關閉問題 @@ -1594,8 +1609,8 @@ issues.reopened_at=`重新開放了這個問題 %[2] issues.commit_ref_at=`在提交中關聯了這個問題 %[2]s` issues.ref_issue_from=`關聯了這個問題 %[4]s %[2]s` issues.ref_pull_from=`關聯了這個合併請求 %[4]s %[2]s` -issues.ref_closing_from=`關聯了合併請求 %[4]s 將關閉這個問題 %[2]s` -issues.ref_reopening_from=`關聯了合併請求 %[4]s 將重新開放這個問題 %[2]s` +issues.ref_closing_from=從將關閉此問題的拉取請求 %[4]s 中提及了此問題%[2]s +issues.ref_reopening_from=從將重新開啟此問題的拉取請求 %[4]s 中提及了此問題%[2]s issues.ref_closed_from=`關閉了這個問題 %[4]s %[2]s` issues.ref_reopened_from=`重新開放了這個問題 %[4]s %[2]s` issues.ref_from=`自 %[1]s` @@ -1644,8 +1659,8 @@ issues.unlock=解鎖對話 issues.lock.unknown_reason=由於未知的原因而無法鎖定問題。 issues.lock_duplicate=問題無法被鎖定兩次。 issues.unlock_error=無法解鎖未被鎖定的問題。 -issues.lock_with_reason=因為 %s 而鎖定,並將對話設為協作者限定 %s -issues.lock_no_reason=鎖定並將對話設為協作者限定 %s +issues.lock_with_reason=因為 %s 而鎖定,並將對話限制為協作者 %s +issues.lock_no_reason=鎖定並將對話限制為協作者 %s issues.unlock_comment=解鎖這個對話 %s issues.lock_confirm=鎖定 issues.unlock_confirm=解除鎖定 @@ -1739,8 +1754,8 @@ issues.review.left_comment=留下了回應 issues.review.content.empty=您必須留下訊息指出需要修正的地方。 issues.review.reject=請求了變更 %s issues.review.wait=被請求進行審核 %s -issues.review.add_review_request=請求了 %s 來審核 %s -issues.review.remove_review_request=移除了對 %s 的審核請求 %s +issues.review.add_review_request=請求 %[1]s 進行審查 %[2]s +issues.review.remove_review_request=移除了對 %[1]s 的審查請求 %[2]s issues.review.remove_review_request_self=拒絕了審核 %s issues.review.pending=待處理 issues.review.review=審核 @@ -1824,7 +1839,7 @@ pulls.reject_count_1=%d 個變更請求 pulls.reject_count_n=%d 個變更請求 pulls.waiting_count_1=%d 個正在等待審核 pulls.waiting_count_n=%d 個正在等待審核 -pulls.wrong_commit_id=提交 id 必須存在於目標分支上 +pulls.wrong_commit_id=提交 ID 必須存在於目標分支上 pulls.no_merge_desc=無法進行合併,因為所有儲存庫的合併選項已被停用。 pulls.no_merge_helper=在儲存庫設定啟用合併選項或手動合併該合併請求。 @@ -1840,13 +1855,13 @@ pulls.merge_commit_id=合併提交 ID pulls.require_signed_wont_sign=該分支需要經簽署的提交,但此合併將不會被簽署 pulls.invalid_merge_option=您無法對此合併請求使用這個合併選項。 -pulls.merge_conflict=合併失敗:合併時發生衝突。 提示:請嘗試不同的策略 +pulls.merge_conflict=合併失敗:合併時發生衝突。 提示:請嘗試其他的合併策略 pulls.merge_conflict_summary=錯誤訊息 -pulls.rebase_conflict=合併失敗:Rebase 提交時發生衝突:%[1]s。 提示:請嘗試不同的策略 +pulls.rebase_conflict=合併失敗:Rebase 提交時發生衝突:%[1]s。 提示:請嘗試其他的合併策略 pulls.rebase_conflict_summary=錯誤訊息 -pulls.unrelated_histories=合併失敗:要合併的 HEAD 和基底分支沒有共同的歷史。 提示:請嘗試不同的策略 +pulls.unrelated_histories=合併失敗:要合併的 HEAD 和基底分支沒有共同的歷史。 提示:請嘗試其他的合併策略 pulls.merge_out_of_date=合併失敗:產生合併時,基底已被更新。提示:再試一次。 -pulls.head_out_of_date=合併失敗:產生合併時,head 已被更新。提示:再試一次。 +pulls.head_out_of_date=合併失敗:產生合併時,HEAD 已被更新。提示:再試一次。 pulls.push_rejected=合併失敗:此推送被拒絕。請檢查此儲存庫的 Git Hook。 pulls.push_rejected_summary=完整的拒絕訊息 pulls.push_rejected_no_message=推送失敗:此推送被拒絕但未提供其他資訊。請檢查此儲存庫的 Git Hook @@ -2082,7 +2097,7 @@ settings.pulls.default_allow_edits_from_maintainers=預設允許維護者進行 settings.releases_desc=啟用儲存庫版本發佈 settings.packages_desc=啟用儲存庫軟體包註冊中心 settings.projects_desc=啟用儲存庫專案 -settings.actions_desc=啟用儲存庫 Actions +settings.actions_desc=啟用與 Forgejo Actions 整合的 CI/CD 流程 settings.admin_settings=管理員設定 settings.admin_enable_health_check=啟用儲存庫的健康檢查(git fsck) settings.admin_code_indexer=程式碼索引器 @@ -2181,7 +2196,7 @@ settings.webhook.payload=內容 settings.webhook.body=本體 settings.webhook.replay.description=再次執行此 Webhook。 settings.webhook.delivery.success=已將事件加入到傳送佇列,可能需要等待幾分鐘才會出現於傳送紀錄。 -settings.githooks_desc=Git Hook 是 Git 本身提供的功能。您可以在下方編輯 hook 檔案以設定自訂作業。 +settings.githooks_desc=Git hook 是 Git 本身提供的功能。您可以在下方編輯 hook 檔案以設定自訂作業。 settings.githook_edit_desc=如果 Hook 未啟動,則會顯示範例文件中的內容。如果想要刪除某個 Hook,則送出空白內容即可。 settings.githook_name=Hook 名稱 settings.githook_content=Hook 內容 @@ -2232,15 +2247,15 @@ settings.event_pull_request_desc=建立、編輯、關閉及重新開放合併 settings.event_pull_request_assign=指派 settings.event_pull_request_assign_desc=指派或取消指派合併請求。 settings.event_pull_request_label=標籤 -settings.event_pull_request_label_desc=更新或清除合併請求標籤。 +settings.event_pull_request_label_desc=已新增或移除合併請求的標籤。 settings.event_pull_request_milestone=里程碑 settings.event_pull_request_milestone_desc=里程碑已新增、已移除或已修改。 settings.event_pull_request_comment=評註 settings.event_pull_request_comment_desc=建立、編輯或刪除合併請求的留言。 settings.event_pull_request_review=審核 -settings.event_pull_request_review_desc=核准、退回或提出審核留言。 +settings.event_pull_request_review_desc=合併請求已被核准、拒絕,或已有審查留言新增。 settings.event_pull_request_sync=同步 -settings.event_pull_request_sync_desc=合併請求同步。 +settings.event_pull_request_sync_desc=分支已自動與目標分支同步更新。 settings.event_package=軟體包 settings.event_package_desc=已在儲存庫中建立或刪除軟體包。 settings.branch_filter=分支篩選 @@ -2352,7 +2367,7 @@ settings.choose_branch=選擇一個分支… settings.no_protected_branch=沒有受保護的分支。 settings.edit_protected_branch=編輯 settings.protected_branch_required_rule_name=必須填寫規則名稱 -settings.protected_branch_duplicate_rule_name=規則名稱已存在 +settings.protected_branch_duplicate_rule_name=已經存在一條針對這組分支的規則 settings.protected_branch_required_approvals_min=需要的核可數量不能為負數。 settings.tags=標籤 settings.tags.protection=標籤保護 @@ -2486,7 +2501,7 @@ release.tag_helper=新增或選擇現有的標籤。 release.tag_helper_new=新標籤,將在目標上建立此標籤。 release.tag_helper_existing=現有的標籤。 release.title_empty=標題不可為空。 -release.prerelease_desc=標記為 Pre-Release +release.prerelease_desc=標記為預發行 release.prerelease_helper=標記此版本不適合生產使用。 release.cancel=取消 release.publish=發佈發行 @@ -2629,10 +2644,10 @@ issues.filter_milestone_all = 所有里程碑 issues.author_helper = 此使用者是作者。 pulls.blocked_by_approvals = 此合併請求還沒有足夠的核可。已有 %d 個,總共需要 %d 個核可。 wiki.search = 搜尋百科 -settings.mirror_settings.docs.disabled_pull_mirror.instructions = 設定您的儲存庫以自動推送提交、標簽、和分支至另一個儲存庫。Pull 鏡像已被您的管理員停用。 +settings.mirror_settings.docs.disabled_pull_mirror.instructions = 設定你的專案使其自動將提交、標籤與分支推送到另一個儲存庫。您的網站管理員已停用拉取鏡像功能。 settings.mirror_settings.docs = 設定您的儲存庫以自動與另一個儲存庫同步提交、標籤、和分支。 settings.mirror_settings.docs.disabled_push_mirror.info = 推送鏡像已被您的網站管理員停用。 -settings.mirror_settings.docs.pull_mirror_instructions = 如需建立一個 pull 鏡像,請參閱: +settings.mirror_settings.docs.pull_mirror_instructions = 如需建立一個拉取鏡像,請參閱: blame.ignore_revs = .git-blame-ignore-revs 中的修訂已被忽略。點擊這裡來檢視一般的責任歸屬界面。 editor.file_is_a_symlink = `「%s」是一個符號連結。網頁編輯器無法編輯符號連結` issues.label_archive = 封存標籤 @@ -2644,7 +2659,7 @@ pulls.showing_only_single_commit = 只顯示提交 %[1]s 的變更 pulls.cmd_instruction_merge_desc = 合併更改並在 Forgejo 上更新。 signing.wont_sign.pubkey = 無法簽署該提交,因為您沒有與您帳號連結的公鑰。 signing.wont_sign.twofa = 您必須啟用兩步驟認證才能簽署提交。 -signing.wont_sign.basesigned = 因為 base 提交沒有被簽署,無法簽署該提交。 +signing.wont_sign.basesigned = 合併將不會被簽署,因為其基礎提交尚未簽署。 settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning = 目前,這個操作只能在「新的遷移」目錄完成。如需更多資訊,請參閱: settings.mirror_settings.docs.disabled_push_mirror.instructions = 設定您的儲存庫以自動從另一個儲存庫拉取提交、標籤和分支。 issues.role.contributor_helper = 該使用者過去曾經提交至此儲存庫。 @@ -2657,14 +2672,14 @@ signing.wont_sign.error = 在檢查是否能簽署提交時發生錯誤。 issues.num_participants_one = %d 位參與者 pulls.showing_specified_commit_range = 只顯示 %[1]s 至 %[2]s 之間的變更 blame.ignore_revs.failed = 忽略 .git-blame-ignore-revs 中的修訂失敗。 -issues.blocked_by_user = 因為您被該儲存庫的所有者封鎖,您不能提出一個新的問題。 +issues.blocked_by_user = 因為您已被儲存庫擁有者封鎖,您無法在此儲存庫中建立問題。 pulls.blocked_by_user = 因為您被這個儲存庫的所有者封鎖,您不能在這裡開啟一個合併請求。 pulls.has_merged = 失敗:該合併請求已被合併,您無法再合併一次或更改目標分支。 wiki.cancel = 取消 activity.navbar.code_frequency = 寫程式頻率 settings.mirror_settings.docs.no_new_mirrors = 您的儲存庫目前是另一個儲存庫的鏡像。請記住,您目前不能建立新的鏡像。 settings.mirror_settings.docs.can_still_use = 雖然您不能建立新的鏡像,您還是可以使用既有的鏡像。 -pulls.reopen_failed.base_branch = 因為這個合併請求的 base 分支不存在,它無法被開啟。 +pulls.reopen_failed.base_branch = 因為這個合併請求的基礎分支不存在,它無法被開啟。 issues.label_archive_tooltip = 在預設情況下,標籤搜尋時會排除被封存的標籤。 signing.wont_sign.approved = 因為合併請求沒有被核可,這個合併不會被簽署。 activity.navbar.recent_commits = 最近的提交 @@ -2679,7 +2694,7 @@ editor.push_out_of_date = 該推送似乎過期了。 issues.cancel_tracking_history = `已取消時間追蹤 %s` issues.due_date_not_writer = 您需要有寫入這個儲存庫的權限才能更新其問題的到期日。 pulls.commit_ref_at = `在提交 %[2]s 引用了這個合併請求` -pulls.cmd_instruction_checkout_desc = 從您的專案儲存庫 checkout 一個新的分支來測試這些更改。 +pulls.cmd_instruction_checkout_desc = 從您的專案儲存庫中,建立並切換到一個新分支以測試這些變更。 pulls.cmd_instruction_merge_title = 合併 pulls.ready_for_review = 可以開始審閱了嗎? pulls.cmd_instruction_hint = `檢視命令列指示` @@ -2704,7 +2719,7 @@ pulls.blocked_by_changed_protected_files_1 = 這個合併請求被暫止,因 pulls.blocked_by_changed_protected_files_n = 這個合併請求被暫止,因為它更改了這些受保護的檔案: pulls.status_checks_hide_all = 隱藏所有檢查 pulls.status_checks_show_all = 顯示所有檢查 -pulls.reopen_failed.head_branch = 因為這個合併請求的 head 分支不存在,它無法被開啟。 +pulls.reopen_failed.head_branch = 因為這個合併請求的 HEAD 分支不存在,無法重新開啟此合併請求。 activity.navbar.pulse = 動態 signing.will_sign = 將以金鑰「%s」簽署這個提交。 signing.wont_sign.headsigned = 因為 head 提交沒有被簽署,這個合併不會被簽署。 @@ -2721,7 +2736,7 @@ pulls.show_changes_since_your_last_review = 顯示自您上次審閱的變更 pulls.blocked_by_rejection = 這個合併請求有正式審閱者所請求的更改。 pulls.blocked_by_official_review_requests = 因為這個合併請求還缺少至少一個正式審閱者的核可,它已被暫止。 wiki.original_git_entry_tooltip = 與其使用友善連結,檢視原始 Git 檔案。 -settings.mirror_settings.docs.more_information_if_disabled = 您可以在這裡找到更多關於 push 和 pull 鏡像的資訊: +settings.mirror_settings.docs.more_information_if_disabled = 您可以在這裡找到更多關於推送和拉取鏡像的資訊: settings.mirror_settings.docs.doc_link_title = 如何建立儲存庫鏡像? settings.mirror_settings.docs.pulling_remote_title = 從遠端儲存庫拉取 issues.author.tooltip.pr = 此使用者是這個合併請求的作者。 @@ -2872,12 +2887,40 @@ settings.units.units = 功能 diff.git-notes.add = 增加註釋 diff.git-notes.remove-header = 移除註釋 settings.event_pull_request_enforcement = 執行 -sync_fork.branch_behind_few = 此分支落後 %[2]s %[1]d 次提交 +sync_fork.branch_behind_few = 此分支落後 %[2]s 共 %[1]d 次提交 sync_fork.button = 同步 sync_fork.branch_behind_one = 此分支落後 %[2]s %[1]d 次提交 +issues.review.remove_review_requests = 移除了對 %[1]s 的審查請求 %[2]s +issues.filter_no_results_placeholder = 嘗試調整您的搜尋篩選條件。 +issues.reaction.alt_add = 對留言添加 %[1]s 個反應。 +issues.reopen.blocked_by_user = 您無法重新開啟此問題,因為您已被儲存庫擁有者或此問題的發佈者封鎖。 +issues.filter_no_results = 沒有結果 +archive.nocomment = 您無法留言,因為此儲存庫已被封存。 +migrate.repo_desc_helper = 如欲匯入現有描述請留空 +comment.blocked_by_user = 您無法留言,因為您已被儲存庫擁有者或作者封鎖。 +pulls.editable_explanation = 此合併請求允許維護者進行編輯。您可以直接參與貢獻。 +pulls.agit_explanation = 此合併請求使用 AGit 工作流程建立。AGit 允許貢獻者透過「git push」提出變更,無需建立分支或分叉。 +issues.review.add_remove_review_requests = 請求 %[1]s 進行審查,並取消了對 %[2]s 的審查請求 %[3]s +pulls.cmd_instruction_merge_warning = 警告:此儲存庫尚未啟用「自動偵測手動合併」設定,您之後需要手動標記此合併請求為已合併。 +issues.review.add_review_requests = 請求 %[1]s 進行審查 %[2]s +settings.event_header_action = Action 執行事件 +settings.event_action_failure = 失敗 +settings.event_action_recover = 恢復 +settings.event_action_recover_desc = Action 執行成功,先前同一工作流程中的 Action 執行曾經失敗。 +settings.event_action_success = 成功 +settings.event_action_success_desc = Action 執行成功。 +settings.sourcehut_builds.manifest_path = 建置清單路徑 +settings.sourcehut_builds.visibility = 作業可見性 +settings.event_action_failure_desc = Action 執行以失敗結束。 +settings.protect_branch_name_pattern_desc = 受保護分支名稱的模式。請參閱文件說明以了解模式語法。範例:main、release/** +settings.sourcehut_builds.access_token_helper = 具有 JOBS:RW 權限的存取權杖。請在 meta.sr.ht 上產生一個 builds.sr.ht 權杖,或一個 具有機密存取權限的 builds.sr.ht 權杖。 +settings.matrix.room_id_helper = 可從 Element 網頁版客戶端取得 Room ID:進入房間設定 > 進階 > Internal room ID。範例:%s。 +settings.web_hook_name_sourcehut_builds = SourceHut Builds +diff.git-notes.remove-body = 此注釋將會被移除。 +settings.sourcehut_builds.secrets_helper = 授權此作業存取建置機密(需要 SECRETS:RO 權限) [graphs] -component_loading = %s載入中… +component_loading = 正在載入 %s… code_frequency.what = 寫程式頻率 recent_commits.what = 最近的提交 contributors.what = 貢獻 @@ -2920,7 +2963,7 @@ settings.permission=權限 settings.repoadminchangeteam=儲存庫管理者可增加與移除團隊權限 settings.visibility=瀏覽權限 settings.visibility.public=公開 -settings.visibility.limited=受限(只有已驗證的使用者才可以看到) +settings.visibility.limited=受限(僅對已登入使用者可見) settings.visibility.limited_shortname=受限 settings.visibility.private=私有(只有組織成員才能看到) settings.visibility.private_shortname=私有 @@ -3096,8 +3139,8 @@ dashboard.total_gc_time=總 GC 暫停時間 dashboard.total_gc_pause=總 GC 暫停時間 dashboard.last_gc_pause=上次 GC 暫停時間 dashboard.gc_times=GC 執行次數 -dashboard.delete_old_actions=從資料庫刪除所有舊行為 -dashboard.delete_old_actions.started=從資料庫刪除所有舊行為的任務已啟動。 +dashboard.delete_old_actions=從資料庫刪除所有舊操作紀錄 +dashboard.delete_old_actions.started=從資料庫刪除所有舊操作紀錄的任務已啟動。 dashboard.update_checker=更新檢查器 dashboard.delete_old_system_notices=從資料庫刪除所有舊系統提示 dashboard.gc_lfs=對 LFS meta objects 進行垃圾回收 @@ -3117,7 +3160,7 @@ users.repos=儲存庫數 users.created=建立時間 users.last_login=上次登入 users.never_login=從未登入 -users.send_register_notify=寄送使用者註冊通知 +users.send_register_notify=透過電子郵件傳送註冊通知 users.new_success=已建立新帳號「%s」。 users.edit=編輯 users.auth_source=認證來源 @@ -3133,7 +3176,7 @@ users.prohibit_login=已停權帳號 users.is_admin=管理員帳號 users.is_restricted=受限制的帳號 users.allow_git_hook=可以建立 Git Hook -users.allow_git_hook_tooltip=Git Hook 將以和 Forgejo 相同的作業系統使用者執行,並擁有同等的主機存取權限。因此擁有此特殊 Git Hook 權限的使用者可存取和修改所有的 Forgejo 儲存庫和 Forgejo 的資料庫。他們甚至能取得 Forgejo 的管理員權限。 +users.allow_git_hook_tooltip=Git hooks 會以執行 Forgejo 的作業系統使用者身分執行,並擁有相同等級的主機存取權限。因此,擁有此特殊 Git hook 權限的使用者,可以存取並修改所有 Forgejo 儲存庫,以及 Forgejo 使用的資料庫。換句話說,他們也具備取得 Forgejo 管理員權限的能力。 users.allow_import_local=可以匯入本地儲存庫 users.allow_create_organization=可以建立組織 users.update_profile=更新使用者帳號 @@ -3335,7 +3378,7 @@ config.custom_file_root_path=自訂檔案根路徑 config.domain=伺服器域名 config.offline_mode=本地模式 config.disable_router_log=停用路由日誌 -config.run_user=以使用者名稱執行 +config.run_user=以使用者執行 config.run_mode=執行模式 config.git_version=Git 版本 config.repo_root_path=儲存庫根路徑 @@ -3440,8 +3483,8 @@ config.enable_federated_avatar=啟用聯邦式大頭貼 config.git_config=Git 設定 config.git_disable_diff_highlight=停用比較語法高亮 -config.git_max_diff_lines=差異比較時顯示的最多行數 (單檔) -config.git_max_diff_line_characters=差異比較時顯示的最多字元數 (單行) +config.git_max_diff_lines=差異比較時顯示的最多行數 +config.git_max_diff_line_characters=差異比較時顯示的最多字元數 config.git_max_diff_files=差異比較時顯示的最多檔案數 config.git_gc_args=GC 參數 config.git_migrate_timeout=遷移逾時 @@ -3599,7 +3642,7 @@ mirror_sync_create=從鏡像同步了新參考 %[3]s%[3]s 刪除了參考 %[2]s approve_pull_request=`核可了 %[3]s#%[2]s` reject_pull_request=`提出了修改建議 %[3]s#%[2]s` -publish_release=`發布了 %[3]s "%[4]s" ` +publish_release=`已於 %[3]s 發佈 %[4]s` review_dismissed=`取消了 %[4]s%[3]s#%[2]s 的審核` review_dismissed_reason=原因: create_branch=在 %[4]s 中建立了分支 %[3]s @@ -3817,7 +3860,7 @@ arch.version.depends = 依賴 owner.settings.cargo.rebuild.no_index = 無法重建,未初始化任何索引。 cran.registry = 在你的 Rprofile.site 檔案中設定此註冊表: debian.repository.distributions = 發行版 -owner.settings.chef.keypair.description = 需要金鑰對才能向 Chef 註冊表進行身份驗證。如果你之前已經產生過金鑰對,產生新的金鑰對將會丟棄舊的金鑰對。 +owner.settings.chef.keypair.description = 送往 Chef 註冊表的請求必須經過加密簽署,以作為驗證身分的方式。在產生金鑰對時,只有公鑰會儲存在 Forgejo 上,私鑰則會提供給你用於 knife 工具。產生新的金鑰對將會覆蓋先前的金鑰。 owner.settings.cargo.initialize.description = 使用 Cargo 註冊表需要一個特殊的索引 Git 儲存庫。使用此選項將會(重新)建立儲存庫並自動配置它。 rpm.repository.multiple_groups = 此套件可以在多個群組中使用。 rpm.distros.suse = 在基於 SUSE 的發行版上 @@ -3839,6 +3882,7 @@ registry.documentation = 有關 %s 註冊表的更多資訊,請參閱讀取:查看並建立問題與留言。 +releases.write = 寫入:發布、編輯與刪除發行版本及其資源。 +wiki.read = 讀取:查看整合的 Wiki 及其歷史紀錄。 +code.write = 寫入:推送到儲存庫,建立分支與標籤。 +code.read = 讀取:存取並複製此儲存庫的原始碼。 +issues.write = 寫入:關閉問題,並管理標籤、里程碑、指派對象、到期日與依賴關係等中繼資料。 +pulls.read = 讀取:查看並建立合併請求。 +pulls.write = 寫入:關閉合併請求,並管理標籤、里程碑、指派對象、到期日與依賴關係等中繼資料。 +releases.read = 讀取:檢視並下載發行版本。 +wiki.write = 寫入:在整合的 Wiki 中建立、更新與刪除頁面。 +projects.read = 讀取:存取儲存庫的專案看板。 +packages.write = 寫入:發布與刪除指派給此儲存庫的套件。 +projects.write = 寫入:建立專案與欄位,並編輯它們。 +packages.read = 讀取:檢視並下載指派給此儲存庫的套件。 +actions.read = 讀取:查看整合的 CI/CD 流程及其紀錄。 +actions.write = 寫入:手動觸發、重新啟動、取消或核准待處理的 CI/CD 流程。 \ No newline at end of file diff --git a/options/locale_next/locale_bg.json b/options/locale_next/locale_bg.json index 02144c8b38..1faf269aba 100644 --- a/options/locale_next/locale_bg.json +++ b/options/locale_next/locale_bg.json @@ -1,10 +1,89 @@ { - "repo.pulls.merged_title_desc": { - "one": "сля %[1]d подаване от %[2]s в %[3]s %[4]s", - "other": "сля %[1]d подавания от %[2]s в %[3]s %[4]s" - }, - "repo.pulls.title_desc": { - "one": "иска да слее %[1]d подаване от %[2]s в %[3]s", - "other": "иска да слее %[1]d подавания от %[2]s в %[3]s" - } + "repo.pulls.merged_title_desc": { + "one": "сля %[1]d подаване от %[2]s в %[3]s %[4]s", + "other": "сля %[1]d подавания от %[2]s в %[3]s %[4]s" + }, + "repo.pulls.title_desc": { + "one": "иска да слее %[1]d подаване от %[2]s в %[3]s", + "other": "иска да слее %[1]d подавания от %[2]s в %[3]s" + }, + "mail.actions.run_info_ref": "Клон: %[1]s (%[2]s)", + "mail.actions.run_info_trigger": "Задействано поради: %[1]s от: %[2]s", + "meta.last_line": "В България расте най-старото дърво в страната, Байкушевата мура, на възраст над 1300 години.", + "relativetime.1day": "вчера", + "relativetime.2months": "преди два месеца", + "home.explore_repos": "Разглеждане на хранилища", + "home.explore_users": "Разглеждане на потребители", + "home.explore_orgs": "Разглеждане на организации", + "relativetime.mins": { + "one": "преди %d минута", + "other": "преди %d минути" + }, + "repo.form.cannot_create": "Всички пространства, в които можете да създавате хранилища, са достигнали лимита си на хранилища.", + "moderation.report_remarks": "Подробности", + "moderation.submit_report": "Изпращане на доклада", + "followers.incoming.list.self.none": "Никой не следва вашия профил.", + "followers.incoming.list.none": "Никой не следва този потребител.", + "relativetime.now": "сега", + "home.welcome.no_activity": "Няма дейност", + "relativetime.1year": "миналата година", + "moderation.abuse_category": "Категория", + "moderation.abuse_category.illegal_content": "Незаконно съдържание", + "home.welcome.activity_hint": "Все още няма нищо в емисията ви. Вашите действия и дейност от хранилищата, които наблюдавате, ще се появят тук.", + "stars.list.none": "Никой не е отбелязал това хранилище със звезда.", + "moderation.report_abuse_form.invalid": "Невалидни аргументи", + "moderation.report_abuse_form.already_reported": "Вече сте докладвали това съдържание", + "moderation.abuse_category.placeholder": "Изберете категория", + "moderation.abuse_category.spam": "Спам", + "repo.issue_indexer.title": "Индексатор на задачи", + "moderation.report_abuse_form.details": "Този формуляр трябва да се използва за докладване на потребители, които създават спам профили, хранилища, задачи, коментари или се държат неподходящо.", + "moderation.report_remarks.placeholder": "Моля, предоставете подробности относно злоупотребата, за която докладвате.", + "moderation.reporting_failed": "Не може да се изпрати новият доклад за злоупотреба: %v", + "moderation.reported_thank_you": "Благодарим ви за доклада. Администрацията е уведомена.", + "error.not_found.title": "Страницата не е намерена", + "incorrect_root_url": "Тази инстанция на Forgejo е конфигурирана да се сервира на \"%s\". В момента разглеждате Forgejo през друг URL адрес, което може да доведе до неправилно функциониране на части от приложението. Каноничният URL адрес се контролира от администраторите на Forgejo чрез настройката ROOT_URL в app.ini.", + "themes.names.forgejo-dark": "Forgejo тъмна", + "themes.names.forgejo-auto": "Forgejo (следване на системната тема)", + "themes.names.forgejo-light": "Forgejo светла", + "watch.list.none": "Никой не наблюдава това хранилище.", + "followers.outgoing.list.self.none": "Не следвате никого.", + "followers.outgoing.list.none": "%s не следва никого.", + "relativetime.future": "в бъдеще", + "relativetime.2days": "преди два дни", + "relativetime.1week": "миналата седмица", + "relativetime.2weeks": "преди две седмици", + "relativetime.1month": "миналия месец", + "relativetime.2years": "преди две години", + "moderation.report_abuse_form.header": "Докладване на злоупотреба до администратора", + "moderation.abuse_category.malware": "Зловреден софтуер", + "moderation.abuse_category.other_violations": "Други нарушения на правилата на платформата", + "alert.asset_load_failed": "Неуспешно зареждане на файлове с ресурси от {path}. Моля, уверете се, че файловете с ресурси са достъпни.", + "alert.range_error": " трябва да бъде число между %[1]s и %[2]s.", + "install.invalid_lfs_path": "Не може да се създаде LFS корен в посочения път: %[1]s", + "search.milestone_kind": "Търсене на етапи…", + "admin.config.moderation_config": "Конфигурация на модерацията", + "moderation.report_abuse": "Докладване на злоупотреба", + "moderation.report_content": "Докладване на съдържание", + "relativetime.hours": { + "one": "преди %d час", + "other": "преди %d часа" + }, + "relativetime.days": { + "one": "преди %d ден", + "other": "преди %d дни" + }, + "relativetime.weeks": { + "one": "преди %d седмица", + "other": "преди %d седмици" + }, + "relativetime.months": { + "one": "преди %d месец", + "other": "преди %d месеца" + }, + "relativetime.years": { + "one": "преди %d година", + "other": "преди %d години" + }, + "editor.textarea.tab_hint": "Редът вече е с отстъп. Натиснете отново Tab или Escape, за да излезете от редактора.", + "editor.textarea.shift_tab_hint": "Няма отстъп на този ред. Натиснете отново Shift + Tab или Escape, за да излезете от редактора." } diff --git a/options/locale_next/locale_cs-CZ.json b/options/locale_next/locale_cs-CZ.json index d70790c5d9..0e3ea260de 100644 --- a/options/locale_next/locale_cs-CZ.json +++ b/options/locale_next/locale_cs-CZ.json @@ -100,5 +100,7 @@ "stars.list.none": "Tento repozitář si nikdo nepřidal do oblíbených.", "followers.outgoing.list.self.none": "Nikoho nesledujete.", "editor.textarea.tab_hint": "Řádek je již odsazen. Pro opuštění editoru stiskněte znovu Tab nebo Escape.", - "editor.textarea.shift_tab_hint": "Na tomto řádku není žádné odsazení. Pro opuštění editoru stiskněte znovu Shift + Tab nebo Escape." + "editor.textarea.shift_tab_hint": "Na tomto řádku není žádné odsazení. Pro opuštění editoru stiskněte znovu Shift + Tab nebo Escape.", + "admin.dashboard.cleanup_offline_runners": "Vymazat offline runnery", + "settings.visibility.description": "Viditelnost profilu ovlivňuje možnost ostatních přistupovat k vašim veřejným repozitářům. Zjistit více" } diff --git a/options/locale_next/locale_de-DE.json b/options/locale_next/locale_de-DE.json index 331f319a86..846e85d094 100644 --- a/options/locale_next/locale_de-DE.json +++ b/options/locale_next/locale_de-DE.json @@ -92,5 +92,6 @@ "stars.list.none": "Niemand hat dieses Repo favorisiert.", "followers.incoming.list.none": "Niemand folgt diesem Benutzer.", "editor.textarea.tab_hint": "Zeile bereits eingerückt. Drücke nochmals Tab oder Escape um den Editor zu verlassen.", - "editor.textarea.shift_tab_hint": "Keine Einrückung auf dieser Zeile. Drücke nochmals Shift + Tab oder Escape um den Editor zu verlassen." + "editor.textarea.shift_tab_hint": "Keine Einrückung auf dieser Zeile. Drücke nochmals Shift + Tab oder Escape um den Editor zu verlassen.", + "admin.dashboard.cleanup_offline_runners": "Aufräumen der offline Runner" } diff --git a/options/locale_next/locale_fil.json b/options/locale_next/locale_fil.json index ae066d0663..1f1e535dad 100644 --- a/options/locale_next/locale_fil.json +++ b/options/locale_next/locale_fil.json @@ -92,5 +92,7 @@ "followers.outgoing.list.self.none": "Hindi ka sumusunod ng anumang tao.", "followers.outgoing.list.none": "Hindi sinusundan ni %s ang sinuman.", "editor.textarea.tab_hint": "Naka-indent na ang linya. Pindutin ulit ang Tab o Escape para umalis sa editor.", - "editor.textarea.shift_tab_hint": "Walang indentation sa linyang ito. Pindutin ang Shift + Tab ulit o Escape para umalis sa editor." + "editor.textarea.shift_tab_hint": "Walang indentation sa linyang ito. Pindutin ang Shift + Tab ulit o Escape para umalis sa editor.", + "admin.dashboard.cleanup_offline_runners": "Linisin ang mga offline na runner", + "settings.visibility.description": "Maaapektuhan ng visibility ng profile ang kakayahan ng iba na i-access ang iyong mga hindi pribadong repositoryo. Matuto pa" } diff --git a/options/locale_next/locale_lv-LV.json b/options/locale_next/locale_lv-LV.json index 1b03595ee3..6386f2163b 100644 --- a/options/locale_next/locale_lv-LV.json +++ b/options/locale_next/locale_lv-LV.json @@ -100,5 +100,7 @@ "stars.list.none": "Neviens šo glabātavu nav atzīmējis ar zvaigzni.", "followers.incoming.list.self.none": "Neviens neseko Tavam profilam.", "editor.textarea.tab_hint": "Rinda jau ir ar atkāpi. Spied Tab vēlreiz vai Escape, lai izietu no redaktora!", - "editor.textarea.shift_tab_hint": "Šajā rindā nav atkāpes. Spied Shift + Tab vēlreiz vai Escape, lai izietu no redaktora!" + "editor.textarea.shift_tab_hint": "Šajā rindā nav atkāpes. Spied Shift + Tab vēlreiz vai Escape, lai izietu no redaktora!", + "admin.dashboard.cleanup_offline_runners": "Notīrīt bezsaistes izpildītājus", + "settings.visibility.description": "Profila redzamība ietekmē iespēju citiem piekļūt Tavām glabātavām, kas nav privātas. Uzzināt vairāk" } diff --git a/options/locale_next/locale_nds.json b/options/locale_next/locale_nds.json index 71225a720b..ba8d66a2da 100644 --- a/options/locale_next/locale_nds.json +++ b/options/locale_next/locale_nds.json @@ -92,5 +92,7 @@ "followers.outgoing.list.self.none": "Du gahst nüms na.", "stars.list.none": "Nüms hett up deesem Repositorium eenen Steern sett.", "editor.textarea.tab_hint": "Rieg al inschuven. Drück weer Tab of Esc, um de Bewarker to verlaten.", - "editor.textarea.shift_tab_hint": "Keen Inschuuv in deeser Rieg. Drück weer Umschalt+Tab of Esc, um de Bewarker to verlaten." + "editor.textarea.shift_tab_hint": "Keen Inschuuv in deeser Rieg. Drück weer Umschalt+Tab of Esc, um de Bewarker to verlaten.", + "admin.dashboard.cleanup_offline_runners": "Nich verbunnen Lopers uprümen", + "settings.visibility.description": "De Profil-Sichtbaarkeid maakt daar wat an, of un wo anner Lüü diene nich-privaaten Repositoriums ankieken könen. Mehr unnerhören" } diff --git a/options/locale_next/locale_pt-PT.json b/options/locale_next/locale_pt-PT.json index e43f34c6da..da27faa2ce 100644 --- a/options/locale_next/locale_pt-PT.json +++ b/options/locale_next/locale_pt-PT.json @@ -100,5 +100,6 @@ "followers.outgoing.list.self.none": "Não está a seguir ninguém.", "editor.textarea.tab_hint": "Linha já indentada. Pressione Tab novamente ou Escape para sair do editor.", "editor.textarea.shift_tab_hint": "Sem indentação nesta linha. Pressione Shift + Tab novamente ou Escape para sair do editor.", - "stars.list.none": "Ninguém juntou este repositório aos favoritos." + "stars.list.none": "Ninguém juntou este repositório aos favoritos.", + "admin.dashboard.cleanup_offline_runners": "Limpeza de executores offline" } diff --git a/options/locale_next/locale_ru-RU.json b/options/locale_next/locale_ru-RU.json index 768c4b23ae..6dd2b6fb7e 100644 --- a/options/locale_next/locale_ru-RU.json +++ b/options/locale_next/locale_ru-RU.json @@ -100,5 +100,6 @@ "moderation.report_abuse_form.invalid": "Невалидные аргументы", "moderation.report_abuse_form.header": "Жалоба администрации", "editor.textarea.tab_hint": "Отступ уже добавлен. Нажмите Tab снова или Escape, чтобы покинуть редактор.", - "editor.textarea.shift_tab_hint": "В строке нет отступов. Нажмите Shift + Tab снова или Escape, чтобы покинуть редактор." + "editor.textarea.shift_tab_hint": "В строке нет отступов. Нажмите Shift + Tab снова или Escape, чтобы покинуть редактор.", + "admin.dashboard.cleanup_offline_runners": "Удалить недоступных исполнителей" } diff --git a/options/locale_next/locale_sv-SE.json b/options/locale_next/locale_sv-SE.json index dc41e4d6e1..53b25dffcb 100644 --- a/options/locale_next/locale_sv-SE.json +++ b/options/locale_next/locale_sv-SE.json @@ -1,5 +1,97 @@ { - "repo.pulls.merged_title_desc": "sammanfogade %[1]d incheckningar från %[2]s in i %[3]s %[4]s", - "repo.pulls.title_desc": "vill sammanfoga %[1]d incheckningar från s[2]s in i %[3]s", - "search.milestone_kind": "Sök milstolpar..." + "repo.pulls.merged_title_desc": { + "one": "sammanfogade %[1]d incheckning från %[2]s in i %[3]s %[4]s", + "other": "sammanfogade %[1]d incheckningar från %[2]s in i %[3]s %[4]s" + }, + "repo.pulls.title_desc": { + "one": "vill sammanfoga %[1]d incheckning från s[2]s in i %[3]s", + "other": "vill sammanfoga %[1]d incheckningar från s[2]s in i %[3]s" + }, + "search.milestone_kind": "Sök milstolpar…", + "mail.actions.not_successful_run_subject": "Arbetsflödet %[1]s misslyckades i förrådet %[2]s", + "discussion.locked": "Denna diskussion har låsts. Kommentarer är begränsade till bidragsgivare.", + "relativetime.now": "nu", + "relativetime.1day": "igår", + "relativetime.2days": "för två dagar sedan", + "relativetime.days": { + "one": "%d dag sedan", + "other": "%d dagar sedan" + }, + "admin.dashboard.cleanup_offline_runners": "Städa upp offline runners", + "repo.issue_indexer.title": "Indexerare för utgåvor", + "moderation.reported_thank_you": "Tack för din rapport. Administrationen har gjorts uppmärksam på det.", + "themes.names.forgejo-light": "Forgejo ljus", + "themes.names.forgejo-dark": "Forgejo mörk", + "themes.names.forgejo-auto": "Forgejo (följ systemets tema)", + "moderation.submit_report": "Skicka in rapport", + "moderation.reporting_failed": "Det gick inte att skicka in den nya övergreppsrapporten: %v", + "mail.actions.run_info_cur_status": "Status för denna körning: %[1]s (just uppdaterad från %[2]s)", + "mail.actions.run_info_previous_status": "Status för föregående körning: %[1]s", + "mail.actions.run_info_ref": "Gren: %[1]s (%[2]s)", + "mail.actions.run_info_trigger": "Utlöses på grund av: %[1]s av: %[2]s", + "alert.asset_load_failed": "Misslyckades med att läsa in resursfiler från {path}. Kontrollera att resursfilerna är åtkomliga.", + "install.invalid_lfs_path": "Det gick inte att skapa LFS-roten på den angivna sökvägen: %[1]s", + "alert.range_error": " måste vara ett tal mellan %[1]s och %[2]s.", + "stars.list.none": "Ingen har stjärnmarkerat detta förråd.", + "watch.list.none": "Ingen tittar på det här förrådet.", + "followers.incoming.list.self.none": "Ingen följer din profil.", + "followers.incoming.list.none": "Ingen följer den här användaren.", + "followers.outgoing.list.self.none": "Du följer inte någon.", + "followers.outgoing.list.none": "%s följer inte någon.", + "relativetime.future": "i framtiden", + "relativetime.1week": "förra veckan", + "relativetime.2weeks": "för två veckor sedan", + "relativetime.1month": "senaste månaden", + "relativetime.2months": "för två månader sedan", + "relativetime.1year": "förra året", + "relativetime.2years": "för två år sedan", + "repo.form.cannot_create": "Alla utrymmen där du kan skapa förråd har nått gränsen för antal förråd.", + "incorrect_root_url": "Denna Forgejo-instans är konfigurerad att serveras på \"%s\". Du tittar för närvarande på Forgejo via en annan URL, vilket kan leda till att delar av applikationen bryts. Den kanoniska webbadressen styrs av Forgejo-administratörer via inställningen ROOT_URL i app.ini.", + "error.not_found.title": "Sidan hittades inte", + "moderation.abuse_category.illegal_content": "Olagligt innehåll", + "moderation.abuse_category.other_violations": "Andra överträdelser av plattformsreglerna", + "moderation.report_remarks": "Anmärkningar", + "moderation.report_remarks.placeholder": "Ge några detaljer om det övergrepp som du rapporterar.", + "mail.actions.successful_run_after_failure_subject": "Arbetsflöde %[1]s återställdes i förrådet %[2]s", + "mail.actions.successful_run_after_failure": "Arbetsflöde %[1]s återställdes i förrådet %[2]s", + "mail.actions.not_successful_run": "Arbetsflödet %[1]s misslyckades i förrådet %[2]s", + "editor.textarea.shift_tab_hint": "Ingen indragning på den här raden. Tryck på Shift + Tab igen eller Escape för att lämna redigeringsläget.", + "meta.last_line": "Tack för att du översatte Forgejo! Daniel Nylander heter jag. https://www.danielnylander.se", + "editor.textarea.tab_hint": "Raden är redan indragen. Tryck på Tab igen eller Escape för att lämna redigeringsläget.", + "home.welcome.no_activity": "Ingen aktivitet", + "home.welcome.activity_hint": "Det finns inget i ditt flöde ännu. Dina åtgärder och aktivitet från förråd som du bevakar kommer att visas här.", + "home.explore_repos": "Utforska förråd", + "home.explore_users": "Utforska användare", + "home.explore_orgs": "Utforska organisationer", + "relativetime.mins": { + "one": "%d minut sedan", + "other": "%d minuter sedan" + }, + "relativetime.hours": { + "one": "%d timme sedan", + "other": "%d timmar sedan" + }, + "relativetime.weeks": { + "one": "%d vecka sedan", + "other": "%d veckor sedan" + }, + "relativetime.months": { + "one": "%d månad sedan", + "other": "%d månader sedan" + }, + "relativetime.years": { + "one": "%d år sedan", + "other": "%d år sedan" + }, + "admin.config.moderation_config": "Konfiguration av moderering", + "moderation.report_abuse": "Rapportera missbruk", + "moderation.report_content": "Rapportera innehåll", + "moderation.report_abuse_form.header": "Rapportera missbruk till administratör", + "moderation.report_abuse_form.details": "Detta formulär ska användas för att rapportera användare som skapar skräpprofiler, förråd, problem, kommentarer eller beter sig olämpligt.", + "moderation.report_abuse_form.invalid": "Ogiltiga argument", + "moderation.report_abuse_form.already_reported": "Du har redan rapporterat detta innehåll", + "moderation.abuse_category": "Kategori", + "moderation.abuse_category.placeholder": "Välj en kategori", + "moderation.abuse_category.spam": "Skräppost", + "moderation.abuse_category.malware": "Skadlig kod" } diff --git a/options/locale_next/locale_uk-UA.json b/options/locale_next/locale_uk-UA.json index 998237c6b4..a00d368f4a 100644 --- a/options/locale_next/locale_uk-UA.json +++ b/options/locale_next/locale_uk-UA.json @@ -100,5 +100,7 @@ "stars.list.none": "Ніхто не додав цей репозиторій в обрані.", "watch.list.none": "Ніхто не спостерігає за цим репозиторієм.", "editor.textarea.tab_hint": "У рядку вже є відступ. Натисніть Tab ще раз або Esc, щоб вийти з редактора.", - "editor.textarea.shift_tab_hint": "У цьому рядку немає відступів. Натисніть Shift + Tab ще раз або Esc, щоб вийти з редактора." + "editor.textarea.shift_tab_hint": "У цьому рядку немає відступів. Натисніть Shift + Tab ще раз або Esc, щоб вийти з редактора.", + "admin.dashboard.cleanup_offline_runners": "Очистити неактивні раннери", + "settings.visibility.description": "Видимість профілю впливає на можливість інших користувачів отримати доступ до ваших неприватних репозиторіїв. Дізнатися більше" } diff --git a/options/locale_next/locale_zh-CN.json b/options/locale_next/locale_zh-CN.json index 9a4874b22c..721e2ad839 100644 --- a/options/locale_next/locale_zh-CN.json +++ b/options/locale_next/locale_zh-CN.json @@ -68,5 +68,6 @@ "stars.list.none": "没有人点赞这个仓库。", "followers.incoming.list.self.none": "没有人关注你的个人资料。", "editor.textarea.tab_hint": "此行已缩进。再次按 Tab 或按 Escape 退出编辑器。", - "editor.textarea.shift_tab_hint": "此行无缩进。再次按 Shift + Tab 或按 Escape 退出编辑器。" + "editor.textarea.shift_tab_hint": "此行无缩进。再次按 Shift + Tab 或按 Escape 退出编辑器。", + "admin.dashboard.cleanup_offline_runners": "清理离线运行器" } diff --git a/options/locale_next/locale_zh-TW.json b/options/locale_next/locale_zh-TW.json index 59933571db..5e3e43f66e 100644 --- a/options/locale_next/locale_zh-TW.json +++ b/options/locale_next/locale_zh-TW.json @@ -67,5 +67,6 @@ "moderation.report_abuse_form.header": "向管理員回報濫用", "moderation.report_abuse_form.details": "這個表單是用來檢舉用戶建立垃圾帳號、儲存庫、問題、留言,或其他不當行為。", "moderation.report_abuse_form.invalid": "無效參數", - "moderation.report_abuse_form.already_reported": "您已檢舉此內容" + "moderation.report_abuse_form.already_reported": "您已檢舉此內容", + "meta.last_line": "Rubi-chan? Hai! Nani ga suki? Choko minto yori mo a・na・ta♡ Ayumu-chan? Hai! Nani ga suki? Sutoroberii fureibaa yori mo a・na・ta♡ Shiki-chan! Hai! Nani ga suki? Kukkii and kuriimu yori mo a・na・ta♡ Minna? Hai! Nani ga suki? Mochiron daisuki AiScReam." } From 6753480ab1601b6a9d3f181cbf7fa00f1b2bea12 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 12 Jun 2025 13:35:55 +0200 Subject: [PATCH 03/22] Update module github.com/minio/minio-go/v7 to v7.0.93 (licenses) --- assets/go-licenses.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/assets/go-licenses.json b/assets/go-licenses.json index d177bc5653..0113e77120 100644 --- a/assets/go-licenses.json +++ b/assets/go-licenses.json @@ -809,6 +809,11 @@ "path": "github.com/opencontainers/image-spec/specs-go/LICENSE", "licenseText": "\n 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 Copyright 2016 The Linux Foundation.\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/philhofer/fwd", + "path": "github.com/philhofer/fwd/LICENSE.md", + "licenseText": "Copyright (c) 2014-2015, Philip Hofer\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + }, { "name": "github.com/pierrec/lz4/v4", "path": "github.com/pierrec/lz4/v4/LICENSE", @@ -924,6 +929,11 @@ "path": "github.com/syndtr/goleveldb/leveldb/LICENSE", "licenseText": "Copyright 2012 Suryandaru Triandana \u003csyndtr@gmail.com\u003e\nAll 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 copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\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\nHOLDER 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": "github.com/tinylib/msgp/msgp", + "path": "github.com/tinylib/msgp/msgp/LICENSE", + "licenseText": "Copyright (c) 2014 Philip Hofer\nPortions Copyright (c) 2009 The Go Authors (license at http://golang.org) where indicated\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE." + }, { "name": "github.com/ulikunitz/xz", "path": "github.com/ulikunitz/xz/LICENSE", From e2cf8520bcdcba410f95e080cff476d36364bb60 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 12 Jun 2025 15:38:03 +0200 Subject: [PATCH 04/22] fix: do not mix urfave v2 with urfave v3 (#8168) [Spotted](https://codeberg.org/forgejo/forgejo/pulls/8137#issuecomment-5079471) by @nilsph ## Checklist The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org). ### Tests - I added test coverage for Go changes... - [ ] in their respective `*_test.go` for unit tests. - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server. - I added test coverage for JavaScript changes... - [ ] in `web_src/js/*.test.js` if it can be unit tested. - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)). ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [x] I did not document these changes and I do not expect someone else to do it. ### Release notes - [x] I do not want this change to show in the release notes. - [ ] I want the title to show in the release notes with a link to this pull request. - [ ] I want the content of the `release-notes/.md` to be be used for the release notes instead of the title. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8168 Reviewed-by: Otto Co-authored-by: Earl Warren Co-committed-by: Earl Warren --- assets/go-licenses.json | 20 -------------------- go.mod | 4 ---- go.sum | 8 -------- main.go | 2 +- 4 files changed, 1 insertion(+), 33 deletions(-) diff --git a/assets/go-licenses.json b/assets/go-licenses.json index 0113e77120..fb6c201a5e 100644 --- a/assets/go-licenses.json +++ b/assets/go-licenses.json @@ -289,11 +289,6 @@ "path": "github.com/cloudflare/circl/LICENSE", "licenseText": "Copyright (c) 2019 Cloudflare. 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 Cloudflare 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========================================================================\n\nCopyright (c) 2009 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" }, - { - "name": "github.com/cpuguy83/go-md2man/v2/md2man", - "path": "github.com/cpuguy83/go-md2man/v2/md2man/LICENSE.md", - "licenseText": "The MIT License (MIT)\n\nCopyright (c) 2014 Brian Goff\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/cyphar/filepath-securejoin", "path": "github.com/cyphar/filepath-securejoin/LICENSE", @@ -889,11 +884,6 @@ "path": "github.com/rs/xid/LICENSE", "licenseText": "Copyright (c) 2015 Olivier Poitrey \u003crs@dailymotion.com\u003e\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 furnished\nto 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\nTHE SOFTWARE.\n" }, - { - "name": "github.com/russross/blackfriday/v2", - "path": "github.com/russross/blackfriday/v2/LICENSE.txt", - "licenseText": "Blackfriday is distributed under the Simplified BSD License:\n\n\u003e Copyright © 2011 Russ Ross\n\u003e All rights reserved.\n\u003e\n\u003e Redistribution and use in source and binary forms, with or without\n\u003e modification, are permitted provided that the following conditions\n\u003e are met:\n\u003e\n\u003e 1. Redistributions of source code must retain the above copyright\n\u003e notice, this list of conditions and the following disclaimer.\n\u003e\n\u003e 2. Redistributions in binary form must reproduce the above\n\u003e copyright notice, this list of conditions and the following\n\u003e disclaimer in the documentation and/or other materials provided with\n\u003e the distribution.\n\u003e\n\u003e THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\u003e \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\u003e LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n\u003e FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n\u003e COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n\u003e INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n\u003e BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\u003e LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n\u003e CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n\u003e LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n\u003e ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n\u003e POSSIBILITY OF SUCH DAMAGE.\n" - }, { "name": "github.com/santhosh-tekuri/jsonschema/v6", "path": "github.com/santhosh-tekuri/jsonschema/v6/LICENSE", @@ -939,11 +929,6 @@ "path": "github.com/ulikunitz/xz/LICENSE", "licenseText": "Copyright (c) 2014-2022 Ulrich Kunitz\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* My name, Ulrich Kunitz, may not be used to endorse or promote products\n derived from 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/urfave/cli/v2", - "path": "github.com/urfave/cli/v2/LICENSE", - "licenseText": "MIT License\n\nCopyright (c) 2022 urfave/cli maintainers\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/urfave/cli/v3", "path": "github.com/urfave/cli/v3/LICENSE", @@ -964,11 +949,6 @@ "path": "github.com/xanzy/ssh-agent/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\n" }, - { - "name": "github.com/xrash/smetrics", - "path": "github.com/xrash/smetrics/LICENSE", - "licenseText": "Copyright (C) 2016 Felipe da Cunha Gonçalves\nAll Rights Reserved.\n\nMIT LICENSE\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject 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, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n" - }, { "name": "github.com/yohcop/openid-go", "path": "github.com/yohcop/openid-go/LICENSE", diff --git a/go.mod b/go.mod index 0f47839420..8b5767d04c 100644 --- a/go.mod +++ b/go.mod @@ -92,7 +92,6 @@ require ( github.com/stretchr/testify v1.10.0 github.com/syndtr/goleveldb v1.0.0 github.com/ulikunitz/xz v0.5.12 - github.com/urfave/cli/v2 v2.27.6 github.com/urfave/cli/v3 v3.3.3 github.com/valyala/fastjson v1.6.4 github.com/yohcop/openid-go v1.0.1 @@ -152,7 +151,6 @@ require ( github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudflare/circl v1.6.1 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidmz/go-pageant v1.0.2 // indirect @@ -221,7 +219,6 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/xid v1.6.0 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/skeema/knownhosts v1.3.0 // indirect github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect @@ -229,7 +226,6 @@ require ( github.com/x448/float16 v0.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect - github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/zeebo/assert v1.3.0 // indirect github.com/zeebo/blake3 v0.2.4 // indirect go.etcd.io/bbolt v1.4.0 // indirect diff --git a/go.sum b/go.sum index 9a93fa8359..65c9d3fe51 100644 --- a/go.sum +++ b/go.sum @@ -152,8 +152,6 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= -github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM= github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= @@ -497,8 +495,6 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= @@ -533,8 +529,6 @@ github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oW github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli/v2 v2.27.6 h1:VdRdS98FNhKZ8/Az8B7MTyGQmpIr36O1EHybx/LaZ4g= -github.com/urfave/cli/v2 v2.27.6/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/urfave/cli/v3 v3.3.3 h1:byCBaVdIXuLPIDm5CYZRVG6NvT7tv1ECqdU4YzlEa3I= github.com/urfave/cli/v3 v3.3.3/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo= github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= @@ -545,8 +539,6 @@ github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yohcop/openid-go v1.0.1 h1:DPRd3iPO5F6O5zX2e62XpVAbPT6wV51cuucH0z9g3js= diff --git a/main.go b/main.go index 3f0283db7f..ade43881cf 100644 --- a/main.go +++ b/main.go @@ -21,7 +21,7 @@ import ( _ "forgejo.org/modules/markup/markdown" _ "forgejo.org/modules/markup/orgmode" - "github.com/urfave/cli/v2" + "github.com/urfave/cli/v3" ) // these flags will be set by the build flags From 4a06153709949d7015a8933e46ead68567205c0b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Jun 2025 17:35:25 +0200 Subject: [PATCH 05/22] Update dependency postcss to v8.5.5 (forgejo) (#8160) Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8160 Reviewed-by: Gusted Co-authored-by: Renovate Bot Co-committed-by: Renovate Bot --- 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 b73bc9099b..6d942bf138 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "monaco-editor": "0.52.2", "monaco-editor-webpack-plugin": "7.1.0", "pdfobject": "2.3.0", - "postcss": "8.5.4", + "postcss": "8.5.5", "postcss-loader": "8.1.1", "postcss-nesting": "13.0.2", "pretty-ms": "9.0.0", @@ -11857,9 +11857,9 @@ } }, "node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", + "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", "funding": [ { "type": "opencollective", diff --git a/package.json b/package.json index d602a2613c..b5a1b6840f 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "monaco-editor": "0.52.2", "monaco-editor-webpack-plugin": "7.1.0", "pdfobject": "2.3.0", - "postcss": "8.5.4", + "postcss": "8.5.5", "postcss-loader": "8.1.1", "postcss-nesting": "13.0.2", "pretty-ms": "9.0.0", From 563d8f1564ca27b9c4f4987ed1a2263a10bfb01d Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 12 Jun 2025 21:13:52 +0200 Subject: [PATCH 06/22] chore(ci): skip tests if TEST_{MINIO_ENDPOINT,ELASTICSEARCH_URL} is not set (#8166) This allows the daily tests to work instead of failing because elasticsearch & minio are not present. * [Minio](https://codeberg.org/forgejo-integration/forgejo/actions/runs/10172#jobstep-5-353) * [Elasticsearch](https://codeberg.org/forgejo-integration/forgejo/actions/runs/10172#jobstep-5-272) Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8166 Reviewed-by: Gusted Co-authored-by: Earl Warren Co-committed-by: Earl Warren --- .forgejo/workflows/testing.yml | 1 + .../elasticsearch/elasticsearch_test.go | 14 ++++--------- modules/storage/minio_test.go | 21 +++++++++++-------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/.forgejo/workflows/testing.yml b/.forgejo/workflows/testing.yml index 4d88d3efb0..86e74591f1 100644 --- a/.forgejo/workflows/testing.yml +++ b/.forgejo/workflows/testing.yml @@ -91,6 +91,7 @@ jobs: RACE_ENABLED: 'true' TAGS: bindata TEST_ELASTICSEARCH_URL: http://elasticsearch:9200 + TEST_MINIO_ENDPOINT: minio:9000 test-e2e: if: vars.ROLE == 'forgejo-coding' || vars.ROLE == 'forgejo-testing' runs-on: docker diff --git a/modules/indexer/issues/elasticsearch/elasticsearch_test.go b/modules/indexer/issues/elasticsearch/elasticsearch_test.go index 0c2635fd0c..1ad01352d3 100644 --- a/modules/indexer/issues/elasticsearch/elasticsearch_test.go +++ b/modules/indexer/issues/elasticsearch/elasticsearch_test.go @@ -16,16 +16,10 @@ import ( ) func TestElasticsearchIndexer(t *testing.T) { - // The elasticsearch instance started by testing.yml > test-unit > services > elasticsearch - url := "http://elastic:changeme@elasticsearch:9200" - - if os.Getenv("CI") == "" { - // Make it possible to run tests against a local elasticsearch instance - url = os.Getenv("TEST_ELASTICSEARCH_URL") - if url == "" { - t.Skip("TEST_ELASTICSEARCH_URL not set and not running in CI") - return - } + url := os.Getenv("TEST_ELASTICSEARCH_URL") + if url == "" { + t.Skip("TEST_ELASTICSEARCH_URL not set") + return } require.Eventually(t, func() bool { diff --git a/modules/storage/minio_test.go b/modules/storage/minio_test.go index e168a2efbb..ec1b2fc77a 100644 --- a/modules/storage/minio_test.go +++ b/modules/storage/minio_test.go @@ -18,13 +18,14 @@ import ( ) func TestMinioStorageIterator(t *testing.T) { - if os.Getenv("CI") == "" { - t.Skip("minioStorage not present outside of CI") + endpoint := os.Getenv("TEST_MINIO_ENDPOINT") + if endpoint == "" { + t.Skip("TEST_MINIO_ENDPOINT not set") return } testStorageIterator(t, setting.MinioStorageType, &setting.Storage{ MinioConfig: setting.MinioStorageConfig{ - Endpoint: "minio:9000", + Endpoint: endpoint, AccessKeyID: "123456", SecretAccessKey: "12345678", Bucket: "gitea", @@ -34,13 +35,14 @@ func TestMinioStorageIterator(t *testing.T) { } func TestVirtualHostMinioStorage(t *testing.T) { - if os.Getenv("CI") == "" { - t.Skip("minioStorage not present outside of CI") + endpoint := os.Getenv("TEST_MINIO_ENDPOINT") + if endpoint == "" { + t.Skip("TEST_MINIO_ENDPOINT not set") return } testStorageIterator(t, setting.MinioStorageType, &setting.Storage{ MinioConfig: setting.MinioStorageConfig{ - Endpoint: "minio:9000", + Endpoint: endpoint, AccessKeyID: "123456", SecretAccessKey: "12345678", Bucket: "gitea", @@ -85,13 +87,14 @@ func TestMinioStoragePath(t *testing.T) { } func TestS3StorageBadRequest(t *testing.T) { - if os.Getenv("CI") == "" { - t.Skip("S3Storage not present outside of CI") + endpoint := os.Getenv("TEST_MINIO_ENDPOINT") + if endpoint == "" { + t.Skip("TEST_MINIO_ENDPOINT not set") return } cfg := &setting.Storage{ MinioConfig: setting.MinioStorageConfig{ - Endpoint: "minio:9000", + Endpoint: endpoint, AccessKeyID: "123456", SecretAccessKey: "12345678", Bucket: "bucket", From 402a85a9b629ea540ce49d53de321289d35449ee Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Thu, 12 Jun 2025 23:23:37 +0200 Subject: [PATCH 07/22] fix: use zstd.WithLowerEncoderMem for generate-bindata (#8172) Closes forgejo/forgejo#8165 The test that matters will happen on the next integration build. A manual test was run in the integration repository: * commit https://codeberg.org/forgejo-integration/forgejo/commit/82c419a85e4c283a05fe3bad0ef2886724f025d6 * run that builds bindata for v6 https://codeberg.org/forgejo-integration/forgejo/actions/runs/10219#jobstep-9-5286 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8172 Reviewed-by: Gusted Co-authored-by: Earl Warren Co-committed-by: Earl Warren --- build/generate-bindata.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/generate-bindata.go b/build/generate-bindata.go index 2bdfc39574..fd4ae7d29e 100644 --- a/build/generate-bindata.go +++ b/build/generate-bindata.go @@ -113,7 +113,7 @@ type direntry struct { } func generate(fsRoot fs.FS, packageName string, globalTime bool, output io.Writer) error { - enc, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedBestCompression)) + enc, err := zstd.NewWriter(nil, zstd.WithLowerEncoderMem(true)) if err != nil { return err } From 07e8684a6132f50b195eebe8d097cfad25a7b72a Mon Sep 17 00:00:00 2001 From: oliverpool Date: Fri, 13 Jun 2025 11:26:59 +0200 Subject: [PATCH 08/22] api: GitBlob consistent naming --- modules/structs/git_blob.go | 4 ++-- routers/api/v1/repo/blob.go | 4 ++-- routers/api/v1/swagger/repo.go | 8 ++++---- services/repository/files/content.go | 6 +++--- services/repository/files/content_test.go | 2 +- tests/integration/api_repo_git_blobs_test.go | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/structs/git_blob.go b/modules/structs/git_blob.go index 96c7a271a9..ef06693905 100644 --- a/modules/structs/git_blob.go +++ b/modules/structs/git_blob.go @@ -3,8 +3,8 @@ package structs -// GitBlobResponse represents a git blob -type GitBlobResponse struct { +// GitBlob represents a git blob +type GitBlob struct { Content string `json:"content"` Encoding string `json:"encoding"` URL string `json:"url"` diff --git a/routers/api/v1/repo/blob.go b/routers/api/v1/repo/blob.go index 8ed57d4787..ebff5aba26 100644 --- a/routers/api/v1/repo/blob.go +++ b/routers/api/v1/repo/blob.go @@ -30,12 +30,12 @@ func GetBlob(ctx *context.APIContext) { // required: true // - name: sha // in: path - // description: sha of the commit + // description: sha of the blob to retrieve // type: string // required: true // responses: // "200": - // "$ref": "#/responses/GitBlobResponse" + // "$ref": "#/responses/GitBlob" // "400": // "$ref": "#/responses/error" // "404": diff --git a/routers/api/v1/swagger/repo.go b/routers/api/v1/swagger/repo.go index a27e94253b..e69eeea639 100644 --- a/routers/api/v1/swagger/repo.go +++ b/routers/api/v1/swagger/repo.go @@ -231,11 +231,11 @@ type swaggerGitTreeResponse struct { Body api.GitTreeResponse `json:"body"` } -// GitBlobResponse -// swagger:response GitBlobResponse -type swaggerGitBlobResponse struct { +// GitBlob +// swagger:response GitBlob +type swaggerGitBlob struct { // in: body - Body api.GitBlobResponse `json:"body"` + Body api.GitBlob `json:"body"` } // Commit diff --git a/services/repository/files/content.go b/services/repository/files/content.go index 5f7dd38303..d51e5a4361 100644 --- a/services/repository/files/content.go +++ b/services/repository/files/content.go @@ -250,8 +250,8 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref return contentsResponse, nil } -// GetBlobBySHA get the GitBlobResponse of a repository using a sha hash. -func GetBlobBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, sha string) (*api.GitBlobResponse, error) { +// GetBlobBySHA get the GitBlob of a repository using a sha hash. +func GetBlobBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, sha string) (*api.GitBlob, error) { gitBlob, err := gitRepo.GetBlob(sha) if err != nil { return nil, err @@ -263,7 +263,7 @@ func GetBlobBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git return nil, err } } - return &api.GitBlobResponse{ + return &api.GitBlob{ SHA: gitBlob.ID.String(), URL: repo.APIURL() + "/git/blobs/" + url.PathEscape(gitBlob.ID.String()), Size: gitBlob.Size(), diff --git a/services/repository/files/content_test.go b/services/repository/files/content_test.go index e55b840660..70b79bb58d 100644 --- a/services/repository/files/content_test.go +++ b/services/repository/files/content_test.go @@ -192,7 +192,7 @@ func TestGetBlobBySHA(t *testing.T) { defer gitRepo.Close() gbr, err := GetBlobBySHA(db.DefaultContext, repo, gitRepo, "65f1bf27bc3bf70f64657658635e66094edbcb4d") - expectedGBR := &api.GitBlobResponse{ + expectedGBR := &api.GitBlob{ Content: "dHJlZSAyYTJmMWQ0NjcwNzI4YTJlMTAwNDllMzQ1YmQ3YTI3NjQ2OGJlYWI2CmF1dGhvciB1c2VyMSA8YWRkcmVzczFAZXhhbXBsZS5jb20+IDE0ODk5NTY0NzkgLTA0MDAKY29tbWl0dGVyIEV0aGFuIEtvZW5pZyA8ZXRoYW50a29lbmlnQGdtYWlsLmNvbT4gMTQ4OTk1NjQ3OSAtMDQwMAoKSW5pdGlhbCBjb21taXQK", Encoding: "base64", URL: "https://try.gitea.io/api/v1/repos/user2/repo1/git/blobs/65f1bf27bc3bf70f64657658635e66094edbcb4d", diff --git a/tests/integration/api_repo_git_blobs_test.go b/tests/integration/api_repo_git_blobs_test.go index 980fff1e52..a4424a3348 100644 --- a/tests/integration/api_repo_git_blobs_test.go +++ b/tests/integration/api_repo_git_blobs_test.go @@ -37,7 +37,7 @@ func TestAPIReposGitBlobs(t *testing.T) { // Test a public repo that anyone can GET the blob of req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/git/blobs/%s", user2.Name, repo1.Name, repo1ReadmeSHA) resp := MakeRequest(t, req, http.StatusOK) - var gitBlobResponse api.GitBlobResponse + var gitBlobResponse api.GitBlob DecodeJSON(t, resp, &gitBlobResponse) assert.NotNil(t, gitBlobResponse) expectedContent := "dHJlZSAyYTJmMWQ0NjcwNzI4YTJlMTAwNDllMzQ1YmQ3YTI3NjQ2OGJlYWI2CmF1dGhvciB1c2VyMSA8YWRkcmVzczFAZXhhbXBsZS5jb20+IDE0ODk5NTY0NzkgLTA0MDAKY29tbWl0dGVyIEV0aGFuIEtvZW5pZyA8ZXRoYW50a29lbmlnQGdtYWlsLmNvbT4gMTQ4OTk1NjQ3OSAtMDQwMAoKSW5pdGlhbCBjb21taXQK" From c21d27135887739df19e063a099bd59f95c8d36d Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Fri, 13 Jun 2025 08:25:18 +0200 Subject: [PATCH 09/22] Revert "fix: use zstd.WithLowerEncoderMem for generate-bindata (#8172)" This reverts commit 402a85a9b629ea540ce49d53de321289d35449ee. --- build/generate-bindata.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/generate-bindata.go b/build/generate-bindata.go index fd4ae7d29e..2bdfc39574 100644 --- a/build/generate-bindata.go +++ b/build/generate-bindata.go @@ -113,7 +113,7 @@ type direntry struct { } func generate(fsRoot fs.FS, packageName string, globalTime bool, output io.Writer) error { - enc, err := zstd.NewWriter(nil, zstd.WithLowerEncoderMem(true)) + enc, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedBestCompression)) if err != nil { return err } From 09699c15069eaefa771503c8fc1eb315a513a5d7 Mon Sep 17 00:00:00 2001 From: oliverpool Date: Fri, 13 Jun 2025 12:41:34 +0200 Subject: [PATCH 10/22] feat: always publish the link to the commit status (#8177) See https://codeberg.org/forgejo/forgejo/pulls/4801#issuecomment-5094525 and #8152 for more context. The current implementation is limited to self-hosted actions and buggy as soon as multiple repos are involved, like for the homepage (because each permission must be fetched individually). Ideally this feature should work for all kind of status (with some setting indicating which collaborator can access with status). Probably inside the `git_model.ParseCommitsWithStatus` function. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8177 Reviewed-by: Earl Warren Co-authored-by: oliverpool Co-committed-by: oliverpool --- models/git/commit_status.go | 70 +++++++------------------------- models/git/commit_status_test.go | 25 ------------ models/issues/comment.go | 2 +- routers/web/repo/branch.go | 5 --- routers/web/repo/commit.go | 24 ++--------- routers/web/repo/compare.go | 2 +- routers/web/repo/issue.go | 14 ------- routers/web/repo/pull.go | 11 +---- routers/web/repo/repo.go | 3 -- routers/web/repo/view.go | 3 -- routers/web/repo/wiki.go | 2 +- routers/web/user/home.go | 6 --- routers/web/user/notification.go | 7 ---- 13 files changed, 21 insertions(+), 153 deletions(-) diff --git a/models/git/commit_status.go b/models/git/commit_status.go index a679703ffd..60a0aa5a4f 100644 --- a/models/git/commit_status.go +++ b/models/git/commit_status.go @@ -179,25 +179,6 @@ func (status *CommitStatus) LocaleString(lang translation.Locale) string { return lang.TrString("repo.commitstatus." + status.State.String()) } -// HideActionsURL set `TargetURL` to an empty string if the status comes from Gitea Actions -func (status *CommitStatus) HideActionsURL(ctx context.Context) { - if status.RepoID == 0 { - return - } - - if status.Repo == nil { - if err := status.loadRepository(ctx); err != nil { - log.Error("loadRepository: %v", err) - return - } - } - - prefix := fmt.Sprintf("%s/actions", status.Repo.Link()) - if strings.HasPrefix(status.TargetURL, prefix) { - status.TargetURL = "" - } -} - // CalcCommitStatus returns commit status state via some status, the commit statues should order by id desc func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus { if len(statuses) == 0 { @@ -453,11 +434,19 @@ type SignCommitWithStatuses struct { *asymkey_model.SignCommit } -// ParseCommitsWithStatus checks commits latest statuses and calculates its worst status state -func ParseCommitsWithStatus(ctx context.Context, oldCommits []*asymkey_model.SignCommit, repo *repo_model.Repository) []*SignCommitWithStatuses { - newCommits := make([]*SignCommitWithStatuses, 0, len(oldCommits)) +// ParseCommitsWithStatus converts git commits into SignCommitWithStatuses (checks signature and calculates its worst status state) +func ParseCommitsWithStatus(ctx context.Context, commits []*git.Commit, repo *repo_model.Repository) []*SignCommitWithStatuses { + commitsWithSignature := asymkey_model.ParseCommitsWithSignature( + ctx, + user_model.ValidateCommitsWithEmails(ctx, commits), + repo.GetTrustModel(), + func(user *user_model.User) (bool, error) { + return repo_model.IsOwnerMemberCollaborator(ctx, repo, user.ID) + }, + ) - for _, c := range oldCommits { + commitsWithStatus := make([]*SignCommitWithStatuses, 0, len(commitsWithSignature)) + for _, c := range commitsWithSignature { commit := &SignCommitWithStatuses{ SignCommit: c, } @@ -469,43 +458,12 @@ func ParseCommitsWithStatus(ctx context.Context, oldCommits []*asymkey_model.Sig commit.Status = CalcCommitStatus(statuses) } - newCommits = append(newCommits, commit) + commitsWithStatus = append(commitsWithStatus, commit) } - return newCommits + return commitsWithStatus } // hashCommitStatusContext hash context func hashCommitStatusContext(context string) string { return fmt.Sprintf("%x", sha1.Sum([]byte(context))) } - -// ConvertFromGitCommit converts git commits into SignCommitWithStatuses -func ConvertFromGitCommit(ctx context.Context, commits []*git.Commit, repo *repo_model.Repository) []*SignCommitWithStatuses { - return ParseCommitsWithStatus(ctx, - asymkey_model.ParseCommitsWithSignature( - ctx, - user_model.ValidateCommitsWithEmails(ctx, commits), - repo.GetTrustModel(), - func(user *user_model.User) (bool, error) { - return repo_model.IsOwnerMemberCollaborator(ctx, repo, user.ID) - }, - ), - repo, - ) -} - -// CommitStatusesHideActionsURL hide Gitea Actions urls -func CommitStatusesHideActionsURL(ctx context.Context, statuses []*CommitStatus) { - idToRepos := make(map[int64]*repo_model.Repository) - for _, status := range statuses { - if status == nil { - continue - } - - if status.Repo == nil { - status.Repo = idToRepos[status.RepoID] - } - status.HideActionsURL(ctx) - idToRepos[status.RepoID] = status.Repo - } -} diff --git a/models/git/commit_status_test.go b/models/git/commit_status_test.go index c062bbbbb9..ce6c0d4673 100644 --- a/models/git/commit_status_test.go +++ b/models/git/commit_status_test.go @@ -4,11 +4,9 @@ package git_test import ( - "fmt" "testing" "time" - actions_model "forgejo.org/models/actions" "forgejo.org/models/db" git_model "forgejo.org/models/git" repo_model "forgejo.org/models/repo" @@ -246,26 +244,3 @@ func TestFindRepoRecentCommitStatusContexts(t *testing.T) { assert.Equal(t, "compliance/lint-backend", contexts[0]) } } - -func TestCommitStatusesHideActionsURL(t *testing.T) { - require.NoError(t, unittest.PrepareTestDatabase()) - - repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4}) - run := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionRun{ID: 791, RepoID: repo.ID}) - require.NoError(t, run.LoadAttributes(db.DefaultContext)) - - statuses := []*git_model.CommitStatus{ - { - RepoID: repo.ID, - TargetURL: fmt.Sprintf("%s/jobs/%d", run.Link(), run.Index), - }, - { - RepoID: repo.ID, - TargetURL: "https://mycicd.org/1", - }, - } - - git_model.CommitStatusesHideActionsURL(db.DefaultContext, statuses) - assert.Empty(t, statuses[0].TargetURL) - assert.Equal(t, "https://mycicd.org/1", statuses[1].TargetURL) -} diff --git a/models/issues/comment.go b/models/issues/comment.go index c44f65e29c..a81221caf4 100644 --- a/models/issues/comment.go +++ b/models/issues/comment.go @@ -802,7 +802,7 @@ func (c *Comment) LoadPushCommits(ctx context.Context) (err error) { } defer closer.Close() - c.Commits = git_model.ConvertFromGitCommit(ctx, gitRepo.GetCommitsFromIDs(data.CommitIDs), c.Issue.Repo) + c.Commits = git_model.ParseCommitsWithStatus(ctx, gitRepo.GetCommitsFromIDs(data.CommitIDs), c.Issue.Repo) c.CommitsNum = int64(len(c.Commits)) } diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index af8a838fc9..0fe52bfb48 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -70,11 +70,6 @@ func Branches(ctx *context.Context) { ctx.ServerError("LoadBranches", err) return } - if !ctx.Repo.CanRead(unit.TypeActions) { - for key := range commitStatuses { - git_model.CommitStatusesHideActionsURL(ctx, commitStatuses[key]) - } - } commitStatus := make(map[string]*git_model.CommitStatus) for commitID, cs := range commitStatuses { diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index 89463d9d03..f3192266ad 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -16,7 +16,6 @@ import ( "forgejo.org/models/db" git_model "forgejo.org/models/git" repo_model "forgejo.org/models/repo" - unit_model "forgejo.org/models/unit" user_model "forgejo.org/models/user" "forgejo.org/modules/base" "forgejo.org/modules/charset" @@ -84,7 +83,7 @@ func Commits(ctx *context.Context) { ctx.ServerError("CommitsByRange", err) return } - ctx.Data["Commits"] = processGitCommits(ctx, commits) + ctx.Data["Commits"] = git_model.ParseCommitsWithStatus(ctx, commits, ctx.Repo.Repository) ctx.Data["Username"] = ctx.Repo.Owner.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name @@ -202,7 +201,7 @@ func SearchCommits(ctx *context.Context) { return } ctx.Data["CommitCount"] = len(commits) - ctx.Data["Commits"] = processGitCommits(ctx, commits) + ctx.Data["Commits"] = git_model.ParseCommitsWithStatus(ctx, commits, ctx.Repo.Repository) ctx.Data["Keyword"] = query if all { @@ -267,7 +266,7 @@ func FileHistory(ctx *context.Context) { } } - ctx.Data["Commits"] = processGitCommits(ctx, commits) + ctx.Data["Commits"] = git_model.ParseCommitsWithStatus(ctx, commits, ctx.Repo.Repository) ctx.Data["Username"] = ctx.Repo.Owner.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name @@ -375,9 +374,6 @@ func Diff(ctx *context.Context) { if err != nil { log.Error("GetLatestCommitStatus: %v", err) } - if !ctx.Repo.CanRead(unit_model.TypeActions) { - git_model.CommitStatusesHideActionsURL(ctx, statuses) - } ctx.Data["CommitStatus"] = git_model.CalcCommitStatus(statuses) ctx.Data["CommitStatuses"] = statuses @@ -456,20 +452,6 @@ func RawDiff(ctx *context.Context) { } } -func processGitCommits(ctx *context.Context, gitCommits []*git.Commit) []*git_model.SignCommitWithStatuses { - commits := git_model.ConvertFromGitCommit(ctx, gitCommits, ctx.Repo.Repository) - if !ctx.Repo.CanRead(unit_model.TypeActions) { - for _, commit := range commits { - if commit.Status == nil { - continue - } - commit.Status.HideActionsURL(ctx) - git_model.CommitStatusesHideActionsURL(ctx, commit.Statuses) - } - } - return commits -} - func SetCommitNotes(ctx *context.Context) { form := web.GetForm(ctx).(*forms.CommitNotesForm) diff --git a/routers/web/repo/compare.go b/routers/web/repo/compare.go index f5826cf249..de2e29ab9f 100644 --- a/routers/web/repo/compare.go +++ b/routers/web/repo/compare.go @@ -654,7 +654,7 @@ func PrepareCompareDiff( return false } - commits := processGitCommits(ctx, ci.CompareInfo.Commits) + commits := git_model.ParseCommitsWithStatus(ctx, ci.CompareInfo.Commits, ctx.Repo.Repository) ctx.Data["Commits"] = commits ctx.Data["CommitCount"] = len(commits) diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index b97c268ae2..d8f3bd8d9f 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -348,11 +348,6 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption opt ctx.ServerError("GetIssuesAllCommitStatus", err) return } - if !ctx.Repo.CanRead(unit.TypeActions) { - for key := range commitStatuses { - git_model.CommitStatusesHideActionsURL(ctx, commitStatuses[key]) - } - } if err := issues.LoadAttributes(ctx); err != nil { ctx.ServerError("issues.LoadAttributes", err) @@ -1799,15 +1794,6 @@ func ViewIssue(ctx *context.Context) { ctx.ServerError("LoadPushCommits", err) return } - if !ctx.Repo.CanRead(unit.TypeActions) { - for _, commit := range comment.Commits { - if commit.Status == nil { - continue - } - commit.Status.HideActionsURL(ctx) - git_model.CommitStatusesHideActionsURL(ctx, commit.Statuses) - } - } } else if comment.Type == issues_model.CommentTypeAddTimeManual || comment.Type == issues_model.CommentTypeStopTracking || comment.Type == issues_model.CommentTypeDeleteTimeManual { diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go index bb89e30d54..2db982d3b6 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -515,9 +515,6 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *issues_model.Issue) ctx.ServerError("GetLatestCommitStatus", err) return nil } - if !ctx.Repo.CanRead(unit.TypeActions) { - git_model.CommitStatusesHideActionsURL(ctx, commitStatuses) - } if len(commitStatuses) != 0 { ctx.Data["LatestCommitStatuses"] = commitStatuses @@ -581,9 +578,6 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C ctx.ServerError("GetLatestCommitStatus", err) return nil } - if !ctx.Repo.CanRead(unit.TypeActions) { - git_model.CommitStatusesHideActionsURL(ctx, commitStatuses) - } if len(commitStatuses) > 0 { ctx.Data["LatestCommitStatuses"] = commitStatuses @@ -677,9 +671,6 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C ctx.ServerError("GetLatestCommitStatus", err) return nil } - if !ctx.Repo.CanRead(unit.TypeActions) { - git_model.CommitStatusesHideActionsURL(ctx, commitStatuses) - } if len(commitStatuses) > 0 { ctx.Data["LatestCommitStatuses"] = commitStatuses @@ -847,7 +838,7 @@ func ViewPullCommits(ctx *context.Context) { ctx.Data["Username"] = ctx.Repo.Owner.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name - commits := processGitCommits(ctx, prInfo.Commits) + commits := git_model.ParseCommitsWithStatus(ctx, prInfo.Commits, ctx.Repo.Repository) ctx.Data["Commits"] = commits ctx.Data["CommitCount"] = len(commits) diff --git a/routers/web/repo/repo.go b/routers/web/repo/repo.go index 3c923c2c5e..493787ad8b 100644 --- a/routers/web/repo/repo.go +++ b/routers/web/repo/repo.go @@ -693,9 +693,6 @@ func SearchRepo(ctx *context.Context) { ctx.JSON(http.StatusInternalServerError, nil) return } - if !ctx.Repo.CanRead(unit.TypeActions) { - git_model.CommitStatusesHideActionsURL(ctx, latestCommitStatuses) - } results := make([]*repo_service.WebSearchRepository, len(repos)) for i, repo := range repos { diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index de508509dc..c7cc715fc1 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -369,9 +369,6 @@ func loadLatestCommitData(ctx *context.Context, latestCommit *git.Commit) bool { if err != nil { log.Error("GetLatestCommitStatus: %v", err) } - if !ctx.Repo.CanRead(unit_model.TypeActions) { - git_model.CommitStatusesHideActionsURL(ctx, statuses) - } ctx.Data["LatestCommitStatus"] = git_model.CalcCommitStatus(statuses) ctx.Data["LatestCommitStatuses"] = statuses diff --git a/routers/web/repo/wiki.go b/routers/web/repo/wiki.go index 9a21ac21a3..1b5265978a 100644 --- a/routers/web/repo/wiki.go +++ b/routers/web/repo/wiki.go @@ -393,7 +393,7 @@ func renderRevisionPage(ctx *context.Context) (*git.Repository, *git.TreeEntry) ctx.ServerError("CommitsByFileAndRange", err) return nil, nil } - ctx.Data["Commits"] = git_model.ConvertFromGitCommit(ctx, commitsHistory, ctx.Repo.Repository) + ctx.Data["Commits"] = git_model.ParseCommitsWithStatus(ctx, commitsHistory, ctx.Repo.Repository) pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5) pager.SetDefaultParams(ctx) diff --git a/routers/web/user/home.go b/routers/web/user/home.go index 2a93221c8f..d980fa393a 100644 --- a/routers/web/user/home.go +++ b/routers/web/user/home.go @@ -16,7 +16,6 @@ import ( activities_model "forgejo.org/models/activities" asymkey_model "forgejo.org/models/asymkey" "forgejo.org/models/db" - git_model "forgejo.org/models/git" issues_model "forgejo.org/models/issues" "forgejo.org/models/organization" repo_model "forgejo.org/models/repo" @@ -611,11 +610,6 @@ func buildIssueOverview(ctx *context.Context, unitType unit.Type) { ctx.ServerError("GetIssuesLastCommitStatus", err) return } - if !ctx.Repo.CanRead(unit.TypeActions) { - for key := range commitStatuses { - git_model.CommitStatusesHideActionsURL(ctx, commitStatuses[key]) - } - } // ------------------------------- // Fill stats to post to ctx.Data. diff --git a/routers/web/user/notification.go b/routers/web/user/notification.go index 9fa71add57..fdca1a2fdd 100644 --- a/routers/web/user/notification.go +++ b/routers/web/user/notification.go @@ -13,10 +13,8 @@ import ( activities_model "forgejo.org/models/activities" "forgejo.org/models/db" - git_model "forgejo.org/models/git" issues_model "forgejo.org/models/issues" repo_model "forgejo.org/models/repo" - "forgejo.org/models/unit" "forgejo.org/modules/base" "forgejo.org/modules/log" "forgejo.org/modules/optional" @@ -311,11 +309,6 @@ func NotificationSubscriptions(ctx *context.Context) { ctx.ServerError("GetIssuesAllCommitStatus", err) return } - if !ctx.Repo.CanRead(unit.TypeActions) { - for key := range commitStatuses { - git_model.CommitStatusesHideActionsURL(ctx, commitStatuses[key]) - } - } ctx.Data["CommitLastStatus"] = lastStatus ctx.Data["CommitStatuses"] = commitStatuses ctx.Data["Issues"] = issues From 42514a4744eb59ec6d0b659abe9b5123f8ca1afb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 13 Jun 2025 13:24:14 +0200 Subject: [PATCH 11/22] Update dependency minimatch to v10.0.3 (forgejo) (#8174) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [minimatch](https://github.com/isaacs/minimatch) | dependencies | patch | [`10.0.2` -> `10.0.3`](https://renovatebot.com/diffs/npm/minimatch/10.0.2/10.0.3) | --- ### Release Notes
isaacs/minimatch (minimatch) ### [`v10.0.3`](https://github.com/isaacs/minimatch/compare/v10.0.2...v10.0.3) [Compare Source](https://github.com/isaacs/minimatch/compare/v10.0.2...v10.0.3)
--- ### Configuration 📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8174 Reviewed-by: Michael Kriese Co-authored-by: Renovate Bot Co-committed-by: Renovate Bot --- package-lock.json | 52 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6d942bf138..e5d932fbb4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "katex": "0.16.22", "mermaid": "11.6.0", "mini-css-extract-plugin": "2.9.2", - "minimatch": "10.0.2", + "minimatch": "10.0.3", "monaco-editor": "0.52.2", "monaco-editor-webpack-plugin": "7.1.0", "pdfobject": "2.3.0", @@ -1748,6 +1748,27 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -11012,12 +11033,12 @@ } }, "node_modules/minimatch": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.2.tgz", - "integrity": "sha512-+9TJCIYXgZ2Dm5LxVCFsa8jOm+evMwXHFI0JM1XROmkfkpz8/iLLDh+TwSmyIBrs6C6Xu9294/fq8cBA+P6AqA==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "license": "ISC", "dependencies": { - "brace-expansion": "^4.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" @@ -11026,27 +11047,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimatch/node_modules/balanced-match": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz", - "integrity": "sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==", - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/minimatch/node_modules/brace-expansion": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-4.0.1.tgz", - "integrity": "sha512-YClrbvTCXGe70pU2JiEiPLYXO9gQkyxYeKpJIQHVS/gOs6EWMQP2RYBwjFLNT322Ji8TOC3IMPfsYCedNpzKfA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^3.0.0" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", diff --git a/package.json b/package.json index b5a1b6840f..f7f04b1c0b 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "katex": "0.16.22", "mermaid": "11.6.0", "mini-css-extract-plugin": "2.9.2", - "minimatch": "10.0.2", + "minimatch": "10.0.3", "monaco-editor": "0.52.2", "monaco-editor-webpack-plugin": "7.1.0", "pdfobject": "2.3.0", From a4ea74020f77aadc50f1763ec932f208753c493d Mon Sep 17 00:00:00 2001 From: oliverpool Date: Fri, 13 Jun 2025 11:36:57 +0200 Subject: [PATCH 12/22] feat: API GET /repos/{owner}/{repo}/git/blobs --- routers/api/v1/api.go | 1 + routers/api/v1/repo/blob.go | 43 +++++++++++++++ routers/api/v1/swagger/repo.go | 7 +++ services/repository/files/content.go | 17 ++++++ services/repository/files/content_test.go | 40 ++++++++++++++ templates/swagger/v1_json.tmpl | 66 ++++++++++++++++++++--- 6 files changed, 167 insertions(+), 7 deletions(-) diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index e371ebb28b..bf08bdd249 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -1310,6 +1310,7 @@ func Routes() *web.Route { m.Get("/refs", repo.GetGitAllRefs) m.Get("/refs/*", repo.GetGitRefs) m.Get("/trees/{sha}", repo.GetTree) + m.Get("/blobs", repo.GetBlobs) m.Get("/blobs/{sha}", repo.GetBlob) m.Get("/tags/{sha}", repo.GetAnnotatedTag) m.Group("/notes/{sha}", func() { diff --git a/routers/api/v1/repo/blob.go b/routers/api/v1/repo/blob.go index ebff5aba26..63baec2025 100644 --- a/routers/api/v1/repo/blob.go +++ b/routers/api/v1/repo/blob.go @@ -5,11 +5,54 @@ package repo import ( "net/http" + "strings" "forgejo.org/services/context" files_service "forgejo.org/services/repository/files" ) +// GetBlobs gets multiple blobs of a repository. +func GetBlobs(ctx *context.APIContext) { + // swagger:operation GET /repos/{owner}/{repo}/git/blobs repository GetBlobs + // --- + // summary: Gets multiplbe blobs of a repository. + // produces: + // - application/json + // parameters: + // - name: owner + // in: path + // description: owner of the repo + // type: string + // required: true + // - name: repo + // in: path + // description: name of the repo + // type: string + // required: true + // - name: shas + // in: query + // description: a comma separated list of blob-sha (mind the overall URL-length limit of ~2,083 chars) + // type: string + // required: true + // responses: + // "200": + // "$ref": "#/responses/GitBlobList" + // "400": + // "$ref": "#/responses/error" + + shas := ctx.FormString("shas") + if len(shas) == 0 { + ctx.Error(http.StatusBadRequest, "", "shas not provided") + return + } + + if blobs, err := files_service.GetBlobsBySHA(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, strings.Split(shas, ",")); err != nil { + ctx.Error(http.StatusBadRequest, "", err) + } else { + ctx.JSON(http.StatusOK, blobs) + } +} + // GetBlob get the blob of a repository file. func GetBlob(ctx *context.APIContext) { // swagger:operation GET /repos/{owner}/{repo}/git/blobs/{sha} repository GetBlob diff --git a/routers/api/v1/swagger/repo.go b/routers/api/v1/swagger/repo.go index e69eeea639..bde0efea4e 100644 --- a/routers/api/v1/swagger/repo.go +++ b/routers/api/v1/swagger/repo.go @@ -238,6 +238,13 @@ type swaggerGitBlob struct { Body api.GitBlob `json:"body"` } +// GitBlobList +// swagger:response GitBlobList +type swaggerGitBlobList struct { + // in: body + Body []api.GitBlob `json:"body"` +} + // Commit // swagger:response Commit type swaggerCommit struct { diff --git a/services/repository/files/content.go b/services/repository/files/content.go index d51e5a4361..3d2217df18 100644 --- a/services/repository/files/content.go +++ b/services/repository/files/content.go @@ -250,6 +250,23 @@ func GetContents(ctx context.Context, repo *repo_model.Repository, treePath, ref return contentsResponse, nil } +// GetBlobsBySHA gets multiple GitBlobs of a repository by sha hash. +func GetBlobsBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, shas []string) ([]*api.GitBlob, error) { + if len(shas) > setting.API.MaxResponseItems { + shas = shas[:setting.API.MaxResponseItems] + } + + blobs := make([]*api.GitBlob, 0, len(shas)) + for _, sha := range shas { + blob, err := GetBlobBySHA(ctx, repo, gitRepo, sha) + if err != nil { + return nil, err + } + blobs = append(blobs, blob) + } + return blobs, nil +} + // GetBlobBySHA get the GitBlob of a repository using a sha hash. func GetBlobBySHA(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, sha string) (*api.GitBlob, error) { gitBlob, err := gitRepo.GetBlob(sha) diff --git a/services/repository/files/content_test.go b/services/repository/files/content_test.go index 70b79bb58d..8fc8f56b4f 100644 --- a/services/repository/files/content_test.go +++ b/services/repository/files/content_test.go @@ -202,3 +202,43 @@ func TestGetBlobBySHA(t *testing.T) { require.NoError(t, err) assert.Equal(t, expectedGBR, gbr) } + +func TestGetBlobsBySHA(t *testing.T) { + unittest.PrepareTestEnv(t) + repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}) + + gitRepo, err := gitrepo.OpenRepository(db.DefaultContext, repo) + require.NoError(t, err) + defer gitRepo.Close() + + gbr, err := GetBlobsBySHA(db.DefaultContext, repo, gitRepo, []string{ + "ea82fc8777a24b07c26b3a4bf4e2742c03733eab", // Home.md + "6395b68e1feebb1e4c657b4f9f6ba2676a283c0b", // line.svg + "26f842bcad37fa40a1bb34cbb5ee219ee35d863d", // test.xml + }) + expectedGBR := []*api.GitBlob{ + { + Content: "IyBIb21lIHBhZ2UKClRoaXMgaXMgdGhlIGhvbWUgcGFnZSEK", + Encoding: "base64", + URL: "https://try.gitea.io/api/v1/repos/user2/repo2/git/blobs/ea82fc8777a24b07c26b3a4bf4e2742c03733eab", + SHA: "ea82fc8777a24b07c26b3a4bf4e2742c03733eab", + Size: 36, + }, + { + Content: "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZwogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHdpZHRoPSIxMjgiCiAgIGhlaWdodD0iMTI4IgogICB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+CgogIDxsaW5lIHgxPSIwIiB5MT0iNyIgeDI9IjEwIiB5Mj0iNyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPC9zdmc+", + Encoding: "base64", + URL: "https://try.gitea.io/api/v1/repos/user2/repo2/git/blobs/6395b68e1feebb1e4c657b4f9f6ba2676a283c0b", + SHA: "6395b68e1feebb1e4c657b4f9f6ba2676a283c0b", + Size: 246, + }, + { + Content: "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHRlc3Q+VGhpcyBpcyBYTUw8L3Rlc3Q+Cg==", + Encoding: "base64", + URL: "https://try.gitea.io/api/v1/repos/user2/repo2/git/blobs/26f842bcad37fa40a1bb34cbb5ee219ee35d863d", + SHA: "26f842bcad37fa40a1bb34cbb5ee219ee35d863d", + Size: 64, + }, + } + require.NoError(t, err) + assert.Equal(t, expectedGBR, gbr) +} diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 1b5f55f97b..124d5bd1bd 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -7616,6 +7616,49 @@ } } }, + "/repos/{owner}/{repo}/git/blobs": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "repository" + ], + "summary": "Gets multiplbe blobs of a repository.", + "operationId": "GetBlobs", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "a comma separated list of blob-sha (mind the overall URL-length limit of ~2,083 chars)", + "name": "shas", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/GitBlobList" + }, + "400": { + "$ref": "#/responses/error" + } + } + } + }, "/repos/{owner}/{repo}/git/blobs/{sha}": { "get": { "produces": [ @@ -7643,7 +7686,7 @@ }, { "type": "string", - "description": "sha of the commit", + "description": "sha of the blob to retrieve", "name": "sha", "in": "path", "required": true @@ -7651,7 +7694,7 @@ ], "responses": { "200": { - "$ref": "#/responses/GitBlobResponse" + "$ref": "#/responses/GitBlob" }, "400": { "$ref": "#/responses/error" @@ -24864,8 +24907,8 @@ }, "x-go-package": "forgejo.org/modules/structs" }, - "GitBlobResponse": { - "description": "GitBlobResponse represents a git blob", + "GitBlob": { + "description": "GitBlob represents a git blob", "type": "object", "properties": { "content": { @@ -29119,10 +29162,19 @@ "$ref": "#/definitions/GeneralUISettings" } }, - "GitBlobResponse": { - "description": "GitBlobResponse", + "GitBlob": { + "description": "GitBlob", "schema": { - "$ref": "#/definitions/GitBlobResponse" + "$ref": "#/definitions/GitBlob" + } + }, + "GitBlobList": { + "description": "GitBlobList", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/GitBlob" + } } }, "GitHook": { From fd2f9e684223cf44137e44a0f13b24ccfcbdf2ec Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Fri, 13 Jun 2025 08:22:54 +0200 Subject: [PATCH 13/22] fix: Dockerfile should re-use bindata files when possible - Revert "fix: use zstd.WithLowerEncoderMem for generate-bindata - Re-use bindata files when available instead of ignoring them in Dockerfile - Add missing modules/migration/bindata.go to go sources in the Makefile Closes forgejo/forgejo#8165 --- .dockerignore | 4 ---- Dockerfile | 4 ++-- Dockerfile.rootless | 4 ++-- Makefile | 10 +++++++--- build/generate-bindata.go | 23 +++++++++++++++++------ 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/.dockerignore b/.dockerignore index 5e7a893014..807c70b000 100644 --- a/.dockerignore +++ b/.dockerignore @@ -37,13 +37,9 @@ coverage.all coverage/ cpu.out -/modules/migration/bindata.go /modules/migration/bindata.go.hash -/modules/options/bindata.go /modules/options/bindata.go.hash -/modules/public/bindata.go /modules/public/bindata.go.hash -/modules/templates/bindata.go /modules/templates/bindata.go.hash *.db diff --git a/Dockerfile b/Dockerfile index a94f4d2b46..397e97acb1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -33,10 +33,10 @@ RUN apk --no-cache add build-base git nodejs npm COPY . ${GOPATH}/src/forgejo.org WORKDIR ${GOPATH}/src/forgejo.org -RUN make clean +RUN make clean-no-bindata RUN make frontend RUN go build contrib/environment-to-ini/environment-to-ini.go && xx-verify environment-to-ini -RUN LDFLAGS="-buildid=" make RELEASE_VERSION=$RELEASE_VERSION GOFLAGS="-trimpath" go-check generate-backend static-executable && xx-verify gitea +RUN LDFLAGS="-buildid=" make FORGEJO_GENERATE_SKIP_HASH=true RELEASE_VERSION=$RELEASE_VERSION GOFLAGS="-trimpath" go-check generate-backend static-executable && xx-verify gitea # Copy local files COPY docker/root /tmp/local diff --git a/Dockerfile.rootless b/Dockerfile.rootless index 36df26c042..9ee71f64e0 100644 --- a/Dockerfile.rootless +++ b/Dockerfile.rootless @@ -33,10 +33,10 @@ RUN apk --no-cache add build-base git nodejs npm COPY . ${GOPATH}/src/forgejo.org WORKDIR ${GOPATH}/src/forgejo.org -RUN make clean +RUN make clean-no-bindata RUN make frontend RUN go build contrib/environment-to-ini/environment-to-ini.go && xx-verify environment-to-ini -RUN make RELEASE_VERSION=$RELEASE_VERSION go-check generate-backend static-executable && xx-verify gitea +RUN make FORGEJO_GENERATE_SKIP_HASH=true RELEASE_VERSION=$RELEASE_VERSION go-check generate-backend static-executable && xx-verify gitea # Copy local files COPY docker/rootless /tmp/local diff --git a/Makefile b/Makefile index 9774200b06..e0e6e12ed4 100644 --- a/Makefile +++ b/Makefile @@ -129,7 +129,7 @@ WEBPACK_CONFIGS := webpack.config.js tailwind.config.js WEBPACK_DEST := public/assets/js/index.js public/assets/css/index.css WEBPACK_DEST_ENTRIES := public/assets/js public/assets/css public/assets/fonts -BINDATA_DEST := modules/public/bindata.go modules/options/bindata.go modules/templates/bindata.go +BINDATA_DEST := modules/migration/bindata.go modules/public/bindata.go modules/options/bindata.go modules/templates/bindata.go BINDATA_HASH := $(addsuffix .hash,$(BINDATA_DEST)) GENERATED_GO_DEST := modules/charset/invisible_gen.go modules/charset/ambiguous_gen.go @@ -325,8 +325,12 @@ clean-all: clean rm -rf $(WEBPACK_DEST_ENTRIES) node_modules .PHONY: clean -clean: - rm -rf $(EXECUTABLE) $(DIST) $(BINDATA_DEST) $(BINDATA_HASH) \ +clean: clean-no-bindata + rm -rf $(BINDATA_DEST) $(BINDATA_HASH) + +.PHONY: clean-no-bindata +clean-no-bindata: + rm -rf $(EXECUTABLE) $(DIST) \ integrations*.test \ e2e*.test \ tests/integration/gitea-integration-* \ diff --git a/build/generate-bindata.go b/build/generate-bindata.go index 2bdfc39574..67d3776847 100644 --- a/build/generate-bindata.go +++ b/build/generate-bindata.go @@ -22,12 +22,19 @@ import ( "github.com/klauspost/compress/zstd" ) -func needsUpdate(dir, filename string) (bool, []byte) { - needRegen := false +func fileExists(filename string) bool { _, err := os.Stat(filename) - if err != nil { - needRegen = true + if err == nil { + return true } + if os.IsNotExist(err) { + return false + } + panic(err) +} + +func needsUpdate(dir, filename string) (bool, []byte) { + needRegen := !fileExists(filename) oldHash, err := os.ReadFile(filename + ".hash") if err != nil { @@ -73,10 +80,14 @@ func main() { useGlobalModTime, _ = strconv.ParseBool(os.Args[4]) } - update, newHash := needsUpdate(dir, filename) + if os.Getenv("FORGEJO_GENERATE_SKIP_HASH") == "true" && fileExists(filename) { + fmt.Printf("bindata %s already exists and FORGEJO_GENERATE_SKIP_HASH=true\n", packageName) + return + } + update, newHash := needsUpdate(dir, filename) if !update { - fmt.Printf("bindata for %s already up-to-date\n", packageName) + fmt.Printf("bindata %s already exists and the checksum is a match\n", packageName) return } From 2fdddcb04ea5e8bada5aa83e9161ffed43ae9ba9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 13 Jun 2025 14:22:21 +0200 Subject: [PATCH 14/22] Update https://data.forgejo.org/forgejo/forgejo-build-publish action to v5.3.5 (forgejo) (#8181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [https://data.forgejo.org/forgejo/forgejo-build-publish](https://data.forgejo.org/forgejo/forgejo-build-publish) | action | patch | `v5.3.4` -> `v5.3.5` | --- ### Release Notes
forgejo/forgejo-build-publish (https://data.forgejo.org/forgejo/forgejo-build-publish) ### [`v5.3.5`](https://data.forgejo.org/forgejo/forgejo-build-publish/compare/v5.3.4...v5.3.5) [Compare Source](https://data.forgejo.org/forgejo/forgejo-build-publish/compare/v5.3.4...v5.3.5)
--- ### Configuration 📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8181 Reviewed-by: Earl Warren Co-authored-by: Renovate Bot Co-committed-by: Renovate Bot --- .forgejo/workflows/build-release.yml | 4 ++-- .forgejo/workflows/publish-release.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/build-release.yml b/.forgejo/workflows/build-release.yml index a34f3533fd..3ab63b0589 100644 --- a/.forgejo/workflows/build-release.yml +++ b/.forgejo/workflows/build-release.yml @@ -164,7 +164,7 @@ jobs: - name: build container & release if: ${{ secrets.TOKEN != '' }} - uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.3.4 + uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.3.5 with: forgejo: "${{ env.GITHUB_SERVER_URL }}" owner: "${{ env.GITHUB_REPOSITORY_OWNER }}" @@ -183,7 +183,7 @@ jobs: - name: build rootless container if: ${{ secrets.TOKEN != '' }} - uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.3.4 + uses: https://data.forgejo.org/forgejo/forgejo-build-publish/build@v5.3.5 with: forgejo: "${{ env.GITHUB_SERVER_URL }}" owner: "${{ env.GITHUB_REPOSITORY_OWNER }}" diff --git a/.forgejo/workflows/publish-release.yml b/.forgejo/workflows/publish-release.yml index 27d3b9383e..3aec46fb03 100644 --- a/.forgejo/workflows/publish-release.yml +++ b/.forgejo/workflows/publish-release.yml @@ -44,7 +44,7 @@ jobs: - uses: https://data.forgejo.org/actions/checkout@v4 - name: copy & sign - uses: https://data.forgejo.org/forgejo/forgejo-build-publish/publish@v5.3.4 + uses: https://data.forgejo.org/forgejo/forgejo-build-publish/publish@v5.3.5 with: from-forgejo: ${{ vars.FORGEJO }} to-forgejo: ${{ vars.FORGEJO }} From 44de50fcac62a2a9912a3ed56258095a15c568a2 Mon Sep 17 00:00:00 2001 From: Lucas Schwiderski Date: Fri, 13 Jun 2025 21:59:26 +0200 Subject: [PATCH 15/22] Update environment-to-ini README (#8183) The README is linked to by the docs, but has become outdated. This brings the file back in line with the tool's description, fixes the left over Gitea branding and improves the wording in some places. ## Checklist The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org). ### Tests - I added test coverage for Go changes... - [ ] in their respective `*_test.go` for unit tests. - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server. - I added test coverage for JavaScript changes... - [ ] in `web_src/js/*.test.js` if it can be unit tested. - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)). ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [x] I did not document these changes and I do not expect someone else to do it. ### Release notes - [x] I do not want this change to show in the release notes. - [ ] I want the title to show in the release notes with a link to this pull request. - [ ] I want the content of the `release-notes/.md` to be be used for the release notes instead of the title. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8183 Reviewed-by: Earl Warren Co-authored-by: Lucas Schwiderski Co-committed-by: Lucas Schwiderski --- contrib/environment-to-ini/README | 51 ++++++++++++++++--------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/contrib/environment-to-ini/README b/contrib/environment-to-ini/README index f1d3f2ae83..e4caf25666 100644 --- a/contrib/environment-to-ini/README +++ b/contrib/environment-to-ini/README @@ -1,45 +1,46 @@ Environment To Ini ================== -Multiple docker users have requested that the Gitea docker is changed -to permit arbitrary configuration via environment variables. +This tool allows defining Forgejo's entire configuration via environment +variables, mostly geared towards usage in Docker. -Gitea needs to use an ini file for configuration because the running -environment that starts the docker may not be the same as that used -by the hooks. An ini file also gives a good default and means that -users do not have to completely provide a full environment. +Forgejo needs to use an INI file for configuration because the running +environment that starts the container may not be the same as the one used +by the hooks. An INI file also gives a good default and means that +users do not have to provide the entire set of environment variables. With those caveats above, this command provides a generic way of converting suitably structured environment variables into any ini value. -To use the command is very simple just run it and the default gitea -app.ini will be rewritten to take account of the variables provided, -however there are various options to give slightly different -behavior and these can be interrogated with the `-h` option. +When run, `environment-to-ini` will write the config files based on the +environment variables provided. +Check with the `-h` flag for several options to alter this behaviour. -The environment variables should be of the form: +Environment variables of the form "FORGEJO__SECTION_NAME__KEY_NAME" +will be mapped to the ini section "[section_name]" and the key +"KEY_NAME" with the value as provided. - GITEA__SECTION_NAME__KEY_NAME - -Note, SECTION_NAME in the notation above is case-insensitive. +Environment variables of the form "FORGEJO__SECTION_NAME__KEY_NAME__FILE" +will be mapped to the ini section "[section_name]" and the key +"KEY_NAME" with the value loaded from the specified file. Environment variables are usually restricted to a reduced character set "0-9A-Z_" - in order to allow the setting of sections with characters outside of that set, they should be escaped as following: -"_0X2E_" for "." and "_0X2D_" for "-". The entire section and key names -can be escaped as a UTF8 byte string if necessary. E.g. to configure: +"_0X2E_" for ".". The entire section and key names can be escaped as +a UTF8 byte string if necessary. E.g. to configure: - """ - ... - [log.console] - COLORIZE=false - STDERR=true - ... - """ + """ + ... + [log.console] + COLORIZE=false + STDERR=true + ... + """ -You would set the environment variables: "GITEA__LOG_0x2E_CONSOLE__COLORIZE=false" -and "GITEA__LOG_0x2E_CONSOLE__STDERR=false". Other examples can be found +You would set the environment variables: "FORGEJO__LOG_0x2E_CONSOLE__COLORIZE=false" +and "FORGEJO__LOG_0x2E_CONSOLE__STDERR=false". Other examples can be found on the configuration cheat sheet. To build locally, run: From 6cdf2cd66edc165771644c7af040d4ff5012f01b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 14 Jun 2025 07:54:51 +0200 Subject: [PATCH 16/22] Update module github.com/go-sql-driver/mysql to v1.9.3 (forgejo) (#8186) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github.com/go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) | require | patch | `v1.9.2` -> `v1.9.3` | --- ### Release Notes
go-sql-driver/mysql (github.com/go-sql-driver/mysql) ### [`v1.9.3`](https://github.com/go-sql-driver/mysql/releases/tag/v1.9.3) [Compare Source](https://github.com/go-sql-driver/mysql/compare/v1.9.2...v1.9.3) #### What's Changed - \[1.9] test stability improvement. by [@​methane](https://github.com/methane) in https://github.com/go-sql-driver/mysql/pull/1699 - \[1.9] Transaction Commit/Rollback returns conn's cached error by [@​methane](https://github.com/methane) in https://github.com/go-sql-driver/mysql/pull/1702 - backport benchmark_test by [@​methane](https://github.com/methane) in https://github.com/go-sql-driver/mysql/pull/1706 - \[1.9] optimize readPacket ([#​1705](https://github.com/go-sql-driver/mysql/issues/1705)) by [@​methane](https://github.com/methane) in https://github.com/go-sql-driver/mysql/pull/1707 - \[1.9] fix PING on compressed connections by [@​methane](https://github.com/methane) in https://github.com/go-sql-driver/mysql/pull/1723 - release v1.9.3 by [@​methane](https://github.com/methane) in https://github.com/go-sql-driver/mysql/pull/1725 **Full Changelog**: https://github.com/go-sql-driver/mysql/compare/v1.9.2...v1.9.3
--- ### Configuration 📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8186 Reviewed-by: Earl Warren Co-authored-by: Renovate Bot Co-committed-by: Renovate Bot --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 8b5767d04c..b993bcbe3b 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,7 @@ require ( github.com/go-git/go-git/v5 v5.13.2 github.com/go-ldap/ldap/v3 v3.4.6 github.com/go-openapi/spec v0.21.0 - github.com/go-sql-driver/mysql v1.9.2 + github.com/go-sql-driver/mysql v1.9.3 github.com/go-webauthn/webauthn v0.13.0 github.com/gobwas/glob v0.2.3 github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f diff --git a/go.sum b/go.sum index 65c9d3fe51..d6c7b2c6a5 100644 --- a/go.sum +++ b/go.sum @@ -245,8 +245,8 @@ github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9Z github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= -github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU= -github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= +github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= +github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= From 53d5e6d754b29bfdccc517487c1f931fc66fa28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=B6hler?= Date: Sat, 14 Jun 2025 16:35:50 +0200 Subject: [PATCH 17/22] feat(ui): show size constraints of custom avatar (#7998) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #7862 This adds a note for the user profile settings page about the avatar constraints. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7998 Reviewed-by: 0ko <0ko@noreply.codeberg.org> Co-authored-by: Thomas Böhler Co-committed-by: Thomas Böhler --- options/locale_next/locale_en-US.json | 1 + routers/web/admin/users.go | 3 ++ routers/web/org/setting.go | 3 ++ routers/web/repo/setting/setting.go | 3 ++ routers/web/user/setting/profile.go | 3 ++ templates/admin/user/edit.tmpl | 1 + templates/org/settings/options.tmpl | 1 + templates/repo/settings/options.tmpl | 1 + templates/user/settings/profile.tmpl | 1 + tests/integration/setting_test.go | 48 +++++++++++++++++++++++++++ 10 files changed, 65 insertions(+) diff --git a/options/locale_next/locale_en-US.json b/options/locale_next/locale_en-US.json index c7e9f65a68..356aaaead0 100644 --- a/options/locale_next/locale_en-US.json +++ b/options/locale_next/locale_en-US.json @@ -94,5 +94,6 @@ "editor.textarea.shift_tab_hint": "No indentation on this line. Press Shift + Tab again or Escape to leave the editor.", "admin.dashboard.cleanup_offline_runners": "Cleanup offline runners", "settings.visibility.description": "Profile visibility affects others' ability to access your non-private repositories. Learn more", + "avatar.constraints_hint": "Custom avatar may not exceed %[1]s in size or be larger than %[2]dx%[3]d pixels", "meta.last_line": "Thank you for translating Forgejo! This line isn't seen by the users but it serves other purposes in the translation management. You can place a fun fact in the translation instead of translating it." } diff --git a/routers/web/admin/users.go b/routers/web/admin/users.go index 0188df17b4..964326291e 100644 --- a/routers/web/admin/users.go +++ b/routers/web/admin/users.go @@ -313,6 +313,9 @@ func editUserCommon(ctx *context.Context) { ctx.Data["DisableMigrations"] = setting.Repository.DisableMigrations ctx.Data["AllowedUserVisibilityModes"] = setting.Service.AllowedUserVisibilityModesSlice.ToVisibleTypeSlice() ctx.Data["DisableGravatar"] = setting.Config().Picture.DisableGravatar.Value(ctx) + ctx.Data["MaxAvatarFileSize"] = setting.Avatar.MaxFileSize + ctx.Data["MaxAvatarWidth"] = setting.Avatar.MaxWidth + ctx.Data["MaxAvatarHeight"] = setting.Avatar.MaxHeight } // EditUser show editing user page diff --git a/routers/web/org/setting.go b/routers/web/org/setting.go index 284f406413..c83242754b 100644 --- a/routers/web/org/setting.go +++ b/routers/web/org/setting.go @@ -50,6 +50,9 @@ func Settings(ctx *context.Context) { ctx.Data["RepoAdminChangeTeamAccess"] = ctx.Org.Organization.RepoAdminChangeTeamAccess ctx.Data["ContextUser"] = ctx.ContextUser ctx.Data["CooldownPeriod"] = setting.Service.UsernameCooldownPeriod + ctx.Data["MaxAvatarFileSize"] = setting.Avatar.MaxFileSize + ctx.Data["MaxAvatarWidth"] = setting.Avatar.MaxWidth + ctx.Data["MaxAvatarHeight"] = setting.Avatar.MaxHeight err := shared_user.LoadHeaderCount(ctx) if err != nil { diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go index c59225ba49..b65d1fbc92 100644 --- a/routers/web/repo/setting/setting.go +++ b/routers/web/repo/setting/setting.go @@ -64,6 +64,9 @@ func SettingsCtxData(ctx *context.Context) { ctx.Data["DisableNewPushMirrors"] = setting.Mirror.DisableNewPush ctx.Data["DefaultMirrorInterval"] = setting.Mirror.DefaultInterval ctx.Data["MinimumMirrorInterval"] = setting.Mirror.MinInterval + ctx.Data["MaxAvatarFileSize"] = setting.Avatar.MaxFileSize + ctx.Data["MaxAvatarWidth"] = setting.Avatar.MaxWidth + ctx.Data["MaxAvatarHeight"] = setting.Avatar.MaxHeight signing, _ := asymkey_service.SigningKey(ctx, ctx.Repo.Repository.RepoPath()) ctx.Data["SigningKeyAvailable"] = len(signing) > 0 diff --git a/routers/web/user/setting/profile.go b/routers/web/user/setting/profile.go index fe6ffb802d..0ddb1b21f5 100644 --- a/routers/web/user/setting/profile.go +++ b/routers/web/user/setting/profile.go @@ -51,6 +51,9 @@ func Profile(ctx *context.Context) { ctx.Data["DisableGravatar"] = setting.Config().Picture.DisableGravatar.Value(ctx) ctx.Data["CooldownPeriod"] = setting.Service.UsernameCooldownPeriod ctx.Data["CommonPronouns"] = commonPronouns + ctx.Data["MaxAvatarFileSize"] = setting.Avatar.MaxFileSize + ctx.Data["MaxAvatarWidth"] = setting.Avatar.MaxWidth + ctx.Data["MaxAvatarHeight"] = setting.Avatar.MaxHeight ctx.HTML(http.StatusOK, tplSettingsProfile) } diff --git a/templates/admin/user/edit.tmpl b/templates/admin/user/edit.tmpl index 7d004dd903..a1ff3d4117 100644 --- a/templates/admin/user/edit.tmpl +++ b/templates/admin/user/edit.tmpl @@ -208,6 +208,7 @@
+
{{ctx.Locale.Tr "avatar.constraints_hint" (ctx.Locale.TrSize .MaxAvatarFileSize) .MaxAvatarWidth .MaxAvatarHeight}}
diff --git a/templates/org/settings/options.tmpl b/templates/org/settings/options.tmpl index 2ef7031aef..562f3f3ae3 100644 --- a/templates/org/settings/options.tmpl +++ b/templates/org/settings/options.tmpl @@ -94,6 +94,7 @@
+
{{ctx.Locale.Tr "avatar.constraints_hint" (ctx.Locale.TrSize .MaxAvatarFileSize) .MaxAvatarWidth .MaxAvatarHeight}}
diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl index a6f30c27ed..797dbe403b 100644 --- a/templates/repo/settings/options.tmpl +++ b/templates/repo/settings/options.tmpl @@ -56,6 +56,7 @@
+
{{ctx.Locale.Tr "avatar.constraints_hint" (ctx.Locale.TrSize .MaxAvatarFileSize) .MaxAvatarWidth .MaxAvatarHeight}}
diff --git a/templates/user/settings/profile.tmpl b/templates/user/settings/profile.tmpl index e4c3e82727..203da3f341 100644 --- a/templates/user/settings/profile.tmpl +++ b/templates/user/settings/profile.tmpl @@ -138,6 +138,7 @@
+
{{ctx.Locale.Tr "avatar.constraints_hint" (ctx.Locale.TrSize .MaxAvatarFileSize) .MaxAvatarWidth .MaxAvatarHeight}}
diff --git a/tests/integration/setting_test.go b/tests/integration/setting_test.go index 409ef5132a..0456d5cfff 100644 --- a/tests/integration/setting_test.go +++ b/tests/integration/setting_test.go @@ -155,3 +155,51 @@ func TestSettingSecurityAuthSource(t *testing.T) { assert.Contains(t, resp.Body.String(), `gitlab-active`) assert.Contains(t, resp.Body.String(), `gitlab-inactive`) } + +func TestUserAvatarSizeNotice(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + session := loginUser(t, "user1") + req := NewRequest(t, "GET", "/user/settings") + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + assert.Contains(t, + htmlDoc.doc.Find("form div:has(input#new-avatar) .help").Text(), + "Custom avatar may not exceed 1 MiB in size or be larger than 4096x4096 pixels") +} + +func TestRepoAvatarSizeNotice(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + session := loginUser(t, "user2") + req := NewRequest(t, "GET", "/user2/repo1/settings") + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + assert.Contains(t, + htmlDoc.doc.Find("form div:has(input[name=\"avatar\"]) .help").Text(), + "Custom avatar may not exceed 1 MiB in size or be larger than 4096x4096 pixels") +} + +func TestOrgAvatarSizeNotice(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + session := loginUser(t, "user2") + req := NewRequest(t, "GET", "/org/org3/settings") + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + assert.Contains(t, + htmlDoc.doc.Find("form div:has(input[name=\"avatar\"]) .help").Text(), + "Custom avatar may not exceed 1 MiB in size or be larger than 4096x4096 pixels") +} + +func TestAdminAvatarSizeNotice(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + session := loginUser(t, "user1") + req := NewRequest(t, "GET", "/admin/users/2/edit") + resp := session.MakeRequest(t, req, http.StatusOK) + htmlDoc := NewHTMLParser(t, resp.Body) + assert.Contains(t, + htmlDoc.doc.Find("form div:has(input[name=\"avatar\"]) .help").Text(), + "Custom avatar may not exceed 1 MiB in size or be larger than 4096x4096 pixels") +} From 90f82394487479c8d5469c21d1c9fef4c6b16407 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sat, 14 Jun 2025 19:50:58 +0200 Subject: [PATCH 18/22] fix: make test suite run on older git version (#8188) Ref: forgejo/forgejo#8140, forgejo/forgejo#8144 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8188 Reviewed-by: Michael Kriese Co-authored-by: Gusted Co-committed-by: Gusted --- modules/git/git.go | 2 + modules/git/grep.go | 3 +- modules/git/grep_test.go | 87 ++++++++++++----------- modules/git/repo_attribute_test.go | 10 ++- tests/integration/patch_status_test.go | 7 +- tests/integration/repo_signed_tag_test.go | 4 ++ tests/integration/signing_git_test.go | 4 ++ 7 files changed, 71 insertions(+), 46 deletions(-) diff --git a/modules/git/git.go b/modules/git/git.go index 743ff59ddd..1dfd0b5134 100644 --- a/modules/git/git.go +++ b/modules/git/git.go @@ -38,6 +38,7 @@ var ( InvertedGitFlushEnv bool // 2.43.1 SupportCheckAttrOnBare bool // >= 2.40 SupportGitMergeTree bool // >= 2.38 + SupportGrepMaxCount bool // >= 2.38 HasSSHExecutable bool @@ -191,6 +192,7 @@ func InitFull(ctx context.Context) (err error) { InvertedGitFlushEnv = CheckGitVersionEqual("2.43.1") == nil SupportGitMergeTree = CheckGitVersionAtLeast("2.38") == nil + SupportGrepMaxCount = CheckGitVersionAtLeast("2.38") == nil if setting.LFS.StartServer { if CheckGitVersionAtLeast("2.1.2") != nil { diff --git a/modules/git/grep.go b/modules/git/grep.go index 117b09fc83..3703b13660 100644 --- a/modules/git/grep.go +++ b/modules/git/grep.go @@ -98,8 +98,7 @@ func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepO cmd.AddOptionValues("--context", fmt.Sprint(opts.ContextLineNumber)) - // --max-count requires at least git 2.38 - if CheckGitVersionAtLeast("2.38.0") == nil { + if SupportGrepMaxCount { cmd.AddOptionValues("--max-count", fmt.Sprint(opts.MatchesPerFile)) } else { log.Warn("git-grep: --max-count requires at least git 2.38") diff --git a/modules/git/grep_test.go b/modules/git/grep_test.go index 534468e268..83ddb766af 100644 --- a/modules/git/grep_test.go +++ b/modules/git/grep_test.go @@ -59,48 +59,55 @@ func TestGrepSearch(t *testing.T) { }, }, res) - res, err = GrepSearch(t.Context(), repo, "world", GrepOptions{MatchesPerFile: 1}) - require.NoError(t, err) - assert.Equal(t, []*GrepResult{ - { - Filename: "i-am-a-python.p", - LineNumbers: []int{1}, - LineCodes: []string{"## This is a simple file to do a hello world"}, - HighlightedRanges: [][3]int{{0, 39, 44}}, - }, - { - Filename: "java-hello/main.java", - LineNumbers: []int{1}, - LineCodes: []string{"public class HelloWorld"}, - HighlightedRanges: [][3]int{{0, 18, 23}}, - }, - { - Filename: "main.vendor.java", - LineNumbers: []int{1}, - LineCodes: []string{"public class HelloWorld"}, - HighlightedRanges: [][3]int{{0, 18, 23}}, - }, - { - Filename: "python-hello/hello.py", - LineNumbers: []int{1}, - LineCodes: []string{"## This is a simple file to do a hello world"}, - HighlightedRanges: [][3]int{{0, 39, 44}}, - }, - }, res) + t.Run("Max count", func(t *testing.T) { + if !SupportGrepMaxCount { + t.Skip("Skipping, git grep --max-count is not supported") + return + } - res, err = GrepSearch(t.Context(), repo, "world", GrepOptions{ - MatchesPerFile: 1, - Filename: "java-hello/", + res, err = GrepSearch(t.Context(), repo, "world", GrepOptions{MatchesPerFile: 1}) + require.NoError(t, err) + assert.Equal(t, []*GrepResult{ + { + Filename: "i-am-a-python.p", + LineNumbers: []int{1}, + LineCodes: []string{"## This is a simple file to do a hello world"}, + HighlightedRanges: [][3]int{{0, 39, 44}}, + }, + { + Filename: "java-hello/main.java", + LineNumbers: []int{1}, + LineCodes: []string{"public class HelloWorld"}, + HighlightedRanges: [][3]int{{0, 18, 23}}, + }, + { + Filename: "main.vendor.java", + LineNumbers: []int{1}, + LineCodes: []string{"public class HelloWorld"}, + HighlightedRanges: [][3]int{{0, 18, 23}}, + }, + { + Filename: "python-hello/hello.py", + LineNumbers: []int{1}, + LineCodes: []string{"## This is a simple file to do a hello world"}, + HighlightedRanges: [][3]int{{0, 39, 44}}, + }, + }, res) + + res, err = GrepSearch(t.Context(), repo, "world", GrepOptions{ + MatchesPerFile: 1, + Filename: "java-hello/", + }) + require.NoError(t, err) + assert.Equal(t, []*GrepResult{ + { + Filename: "java-hello/main.java", + LineNumbers: []int{1}, + LineCodes: []string{"public class HelloWorld"}, + HighlightedRanges: [][3]int{{0, 18, 23}}, + }, + }, res) }) - require.NoError(t, err) - assert.Equal(t, []*GrepResult{ - { - Filename: "java-hello/main.java", - LineNumbers: []int{1}, - LineCodes: []string{"public class HelloWorld"}, - HighlightedRanges: [][3]int{{0, 18, 23}}, - }, - }, res) res, err = GrepSearch(t.Context(), repo, "no-such-content", GrepOptions{}) require.NoError(t, err) diff --git a/modules/git/repo_attribute_test.go b/modules/git/repo_attribute_test.go index 0006559709..c69382e245 100644 --- a/modules/git/repo_attribute_test.go +++ b/modules/git/repo_attribute_test.go @@ -251,10 +251,14 @@ func TestGitAttributeCheckerError(t *testing.T) { cancel() ac, err := gitRepo.GitAttributeChecker("8fee858da5796dfb37704761701bb8e800ad9ef3", "linguist-language") - require.NoError(t, err) + if SupportCheckAttrOnBare { + require.NoError(t, err) - _, err = ac.CheckPath("i-am-a-python.p") - require.Error(t, err) + _, err = ac.CheckPath("i-am-a-python.p") + require.Error(t, err) + } else { + require.Error(t, err) + } }) t.Run("Cancelled/DuringRun", func(t *testing.T) { diff --git a/tests/integration/patch_status_test.go b/tests/integration/patch_status_test.go index 49eb9c501c..078051fe63 100644 --- a/tests/integration/patch_status_test.go +++ b/tests/integration/patch_status_test.go @@ -32,10 +32,15 @@ func TestPatchStatus(t *testing.T) { user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) session := loginUser(t, user2.Name) + var objectFormat optional.Option[string] + if git.SupportHashSha256 { + objectFormat = optional.Some("sha256") + } + repo, _, f := tests.CreateDeclarativeRepoWithOptions(t, user2, tests.DeclarativeRepoOptions{ AutoInit: optional.Some(true), EnabledUnits: optional.Some([]unit_model.Type{unit_model.TypeCode}), - ObjectFormat: optional.Some("sha256"), + ObjectFormat: objectFormat, Files: optional.Some([]*files_service.ChangeRepoFile{ { Operation: "create", diff --git a/tests/integration/repo_signed_tag_test.go b/tests/integration/repo_signed_tag_test.go index 16d8841304..686690bd19 100644 --- a/tests/integration/repo_signed_tag_test.go +++ b/tests/integration/repo_signed_tag_test.go @@ -25,6 +25,10 @@ import ( ) func TestRepoSSHSignedTags(t *testing.T) { + if git.CheckGitVersionAtLeast("2.34") != nil { + t.Skip("Skipping, does not support SSH signing") + return + } defer tests.PrepareTestEnv(t)() // Preparations diff --git a/tests/integration/signing_git_test.go b/tests/integration/signing_git_test.go index e82abea5e6..9d69306e0a 100644 --- a/tests/integration/signing_git_test.go +++ b/tests/integration/signing_git_test.go @@ -42,6 +42,10 @@ func TestInstanceSigning(t *testing.T) { defer test.MockProtect(&setting.Repository.Signing.CRUDActions)() t.Run("SSH", func(t *testing.T) { + if git.CheckGitVersionAtLeast("2.34") != nil { + t.Skip("Skipping, does not support git SSH signing") + return + } defer tests.PrintCurrentTest(t)() pubKeyContent, err := os.ReadFile("tests/integration/ssh-signing-key.pub") From 7380eac5a2a2c04e6e8948f74d1b71dee2ffb61e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bogus=C5=82awski?= Date: Sat, 14 Jun 2025 23:01:56 +0200 Subject: [PATCH 19/22] fix: improve dashboard loading performances (#7604) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generating dashboard page takes too long when table `action` contains many records and error log contains message like ``` 2025/04/21 21:21:07 ...activities/action.go:470:GetFeeds() [W] [Slow SQL Query] SELECT `action`.* FROM `action` INNER JOIN `repository` ON `repository`.id = `action`.repo_id WHERE user_id=? AND is_deleted=? ORDER BY `action`.`created_unix` DESC LIMIT 20 [12 false] - 2m8.393454675s ``` This mod removes unnecessary inner join like proposed in https://github.com/go-gitea/gitea/pull/32127 For complete solution index(user_id, is_deleted) for action table should be created also like in https://github.com/go-gitea/gitea/pull/32333 (not included in this mod). Related: https://github.com/go-gitea/gitea/pull/32127 Related: https://github.com/go-gitea/gitea/pull/32333 Author-Change-Id: IB#1160173 ## Checklist The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org). ### Tests - I added test coverage for Go changes... - [x] in their respective `*_test.go` for unit tests. - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server. - I added test coverage for JavaScript changes... - [ ] in `web_src/js/*.test.js` if it can be unit tested. - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)). ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [x] I did not document these changes and I do not expect someone else to do it. ### Release notes - [ ] I do not want this change to show in the release notes. - [ ] I want the title to show in the release notes with a link to this pull request. - [ ] I want the content of the `release-notes/.md` to be be used for the release notes instead of the title. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7604 Reviewed-by: Earl Warren Co-authored-by: Paweł Bogusławski Co-committed-by: Paweł Bogusławski --- models/activities/action.go | 5 +---- models/activities/action_test.go | 18 ------------------ models/fixtures/action.yml | 8 -------- 3 files changed, 1 insertion(+), 30 deletions(-) diff --git a/models/activities/action.go b/models/activities/action.go index a309637d04..1e40546b97 100644 --- a/models/activities/action.go +++ b/models/activities/action.go @@ -467,11 +467,8 @@ func GetFeeds(ctx context.Context, opts GetFeedsOptions) (ActionList, int64, err return nil, 0, err } - sess := db.GetEngine(ctx).Where(cond). - Select("`action`.*"). // this line will avoid select other joined table's columns - Join("INNER", "repository", "`repository`.id = `action`.repo_id") - opts.SetDefaultValues() + sess := db.GetEngine(ctx).Where(cond) sess = db.SetSessionPagination(sess, &opts) actions := make([]*Action, 0, opts.PageSize) diff --git a/models/activities/action_test.go b/models/activities/action_test.go index 8b9b2f6929..bcc9c98cec 100644 --- a/models/activities/action_test.go +++ b/models/activities/action_test.go @@ -226,24 +226,6 @@ func TestNotifyWatchers(t *testing.T) { }) } -func TestGetFeedsCorrupted(t *testing.T) { - require.NoError(t, unittest.PrepareTestDatabase()) - user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}) - unittest.AssertExistsAndLoadBean(t, &activities_model.Action{ - ID: 8, - RepoID: 1700, - }) - - actions, count, err := activities_model.GetFeeds(db.DefaultContext, activities_model.GetFeedsOptions{ - RequestedUser: user, - Actor: user, - IncludePrivate: true, - }) - require.NoError(t, err) - assert.Empty(t, actions) - assert.Equal(t, int64(0), count) -} - func TestConsistencyUpdateAction(t *testing.T) { if !setting.Database.Type.IsSQLite3() { t.Skip("Test is only for SQLite database.") diff --git a/models/fixtures/action.yml b/models/fixtures/action.yml index f1592d4569..a97e94fbf4 100644 --- a/models/fixtures/action.yml +++ b/models/fixtures/action.yml @@ -59,14 +59,6 @@ created_unix: 1603011540 # grouped with id:7 - id: 8 - user_id: 1 - op_type: 12 # close issue - act_user_id: 1 - repo_id: 1700 # dangling intentional - is_private: false - created_unix: 1603011541 - -- id: 9 user_id: 34 op_type: 12 # close issue act_user_id: 34 From 65bb09a3325cae6a0c3ff79c306ecac2ea6fa8a3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 16 Jun 2025 11:42:27 +0200 Subject: [PATCH 20/22] Lock file maintenance (forgejo) (#8195) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed | 🔧 This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration 📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8195 Reviewed-by: Earl Warren Co-authored-by: Renovate Bot Co-committed-by: Renovate Bot --- package-lock.json | 672 +++++++++++++++++------------ web_src/fomantic/package-lock.json | 44 +- 2 files changed, 412 insertions(+), 304 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5d932fbb4..4a91eeecc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1020,9 +1020,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1034,17 +1034,6 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1059,9 +1048,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", + "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1122,17 +1111,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", @@ -1190,19 +1168,32 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", - "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", + "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.14.0", + "@eslint/core": "^0.15.0", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", + "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@github/combobox-nav": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@github/combobox-nav/-/combobox-nav-2.3.1.tgz", @@ -2234,9 +2225,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.42.0.tgz", - "integrity": "sha512-gldmAyS9hpj+H6LpRNlcjQWbuKUtb94lodB9uCz71Jm+7BxK1VIOo7y62tZZwxhA7j1ylv/yQz080L5WkS+LoQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz", + "integrity": "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==", "cpu": [ "arm" ], @@ -2248,9 +2239,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.42.0.tgz", - "integrity": "sha512-bpRipfTgmGFdCZDFLRvIkSNO1/3RGS74aWkJJTFJBH7h3MRV4UijkaEUeOMbi9wxtxYmtAbVcnMtHTPBhLEkaw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz", + "integrity": "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==", "cpu": [ "arm64" ], @@ -2262,9 +2253,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.42.0.tgz", - "integrity": "sha512-JxHtA081izPBVCHLKnl6GEA0w3920mlJPLh89NojpU2GsBSB6ypu4erFg/Wx1qbpUbepn0jY4dVWMGZM8gplgA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz", + "integrity": "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==", "cpu": [ "arm64" ], @@ -2276,9 +2267,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.42.0.tgz", - "integrity": "sha512-rv5UZaWVIJTDMyQ3dCEK+m0SAn6G7H3PRc2AZmExvbDvtaDc+qXkei0knQWcI3+c9tEs7iL/4I4pTQoPbNL2SA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz", + "integrity": "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==", "cpu": [ "x64" ], @@ -2290,9 +2281,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.42.0.tgz", - "integrity": "sha512-fJcN4uSGPWdpVmvLuMtALUFwCHgb2XiQjuECkHT3lWLZhSQ3MBQ9pq+WoWeJq2PrNxr9rPM1Qx+IjyGj8/c6zQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz", + "integrity": "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==", "cpu": [ "arm64" ], @@ -2304,9 +2295,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.42.0.tgz", - "integrity": "sha512-CziHfyzpp8hJpCVE/ZdTizw58gr+m7Y2Xq5VOuCSrZR++th2xWAz4Nqk52MoIIrV3JHtVBhbBsJcAxs6NammOQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz", + "integrity": "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==", "cpu": [ "x64" ], @@ -2318,9 +2309,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.42.0.tgz", - "integrity": "sha512-UsQD5fyLWm2Fe5CDM7VPYAo+UC7+2Px4Y+N3AcPh/LdZu23YcuGPegQly++XEVaC8XUTFVPscl5y5Cl1twEI4A==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz", + "integrity": "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==", "cpu": [ "arm" ], @@ -2332,9 +2323,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.42.0.tgz", - "integrity": "sha512-/i8NIrlgc/+4n1lnoWl1zgH7Uo0XK5xK3EDqVTf38KvyYgCU/Rm04+o1VvvzJZnVS5/cWSd07owkzcVasgfIkQ==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz", + "integrity": "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==", "cpu": [ "arm" ], @@ -2346,9 +2337,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.42.0.tgz", - "integrity": "sha512-eoujJFOvoIBjZEi9hJnXAbWg+Vo1Ov8n/0IKZZcPZ7JhBzxh2A+2NFyeMZIRkY9iwBvSjloKgcvnjTbGKHE44Q==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz", + "integrity": "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==", "cpu": [ "arm64" ], @@ -2360,9 +2351,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.42.0.tgz", - "integrity": "sha512-/3NrcOWFSR7RQUQIuZQChLND36aTU9IYE4j+TB40VU78S+RA0IiqHR30oSh6P1S9f9/wVOenHQnacs/Byb824g==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz", + "integrity": "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==", "cpu": [ "arm64" ], @@ -2374,9 +2365,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.42.0.tgz", - "integrity": "sha512-O8AplvIeavK5ABmZlKBq9/STdZlnQo7Sle0LLhVA7QT+CiGpNVe197/t8Aph9bhJqbDVGCHpY2i7QyfEDDStDg==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz", + "integrity": "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==", "cpu": [ "loong64" ], @@ -2388,9 +2379,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.42.0.tgz", - "integrity": "sha512-6Qb66tbKVN7VyQrekhEzbHRxXXFFD8QKiFAwX5v9Xt6FiJ3BnCVBuyBxa2fkFGqxOCSGGYNejxd8ht+q5SnmtA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz", + "integrity": "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==", "cpu": [ "ppc64" ], @@ -2402,9 +2393,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.42.0.tgz", - "integrity": "sha512-KQETDSEBamQFvg/d8jajtRwLNBlGc3aKpaGiP/LvEbnmVUKlFta1vqJqTrvPtsYsfbE/DLg5CC9zyXRX3fnBiA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz", + "integrity": "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==", "cpu": [ "riscv64" ], @@ -2416,9 +2407,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.42.0.tgz", - "integrity": "sha512-qMvnyjcU37sCo/tuC+JqeDKSuukGAd+pVlRl/oyDbkvPJ3awk6G6ua7tyum02O3lI+fio+eM5wsVd66X0jQtxw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz", + "integrity": "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==", "cpu": [ "riscv64" ], @@ -2430,9 +2421,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.42.0.tgz", - "integrity": "sha512-I2Y1ZUgTgU2RLddUHXTIgyrdOwljjkmcZ/VilvaEumtS3Fkuhbw4p4hgHc39Ypwvo2o7sBFNl2MquNvGCa55Iw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz", + "integrity": "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==", "cpu": [ "s390x" ], @@ -2444,9 +2435,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.42.0.tgz", - "integrity": "sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz", + "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==", "cpu": [ "x64" ], @@ -2458,9 +2449,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.42.0.tgz", - "integrity": "sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz", + "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==", "cpu": [ "x64" ], @@ -2472,9 +2463,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.42.0.tgz", - "integrity": "sha512-+axkdyDGSp6hjyzQ5m1pgcvQScfHnMCcsXkx8pTgy/6qBmWVhtRVlgxjWwDp67wEXXUr0x+vD6tp5W4x6V7u1A==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz", + "integrity": "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==", "cpu": [ "arm64" ], @@ -2486,9 +2477,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.42.0.tgz", - "integrity": "sha512-F+5J9pelstXKwRSDq92J0TEBXn2nfUrQGg+HK1+Tk7VOL09e0gBqUHugZv7SW4MGrYj41oNCUe3IKCDGVlis2g==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz", + "integrity": "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==", "cpu": [ "ia32" ], @@ -2500,9 +2491,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.42.0.tgz", - "integrity": "sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz", + "integrity": "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==", "cpu": [ "x64" ], @@ -2722,17 +2713,6 @@ "node": "^12.20 || >=14.13" } }, - "node_modules/@stoplight/spectral-core/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@stoplight/spectral-core/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3710,6 +3690,23 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -3768,10 +3765,38 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz", + "integrity": "sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz", + "integrity": "sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.11.tgz", - "integrity": "sha512-i3/wlWjQJXMh1uiGtiv7k1EYvrrS3L1hdwmWJJiz1D8jWy726YFYPIxQWbEIVPVAgrfRR0XNlLrTQwq17cuCGw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz", + "integrity": "sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==", "cpu": [ "arm64" ], @@ -3783,9 +3808,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.11.tgz", - "integrity": "sha512-8XXyFvc6w6kmMmi6VYchZhjd5CDcp+Lv6Cn1YmUme0ypsZ/0Kzd+9ESrWtDrWibKPTgSteDTxp75cvBOY64FQQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz", + "integrity": "sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==", "cpu": [ "x64" ], @@ -3797,9 +3822,9 @@ ] }, "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.11.tgz", - "integrity": "sha512-0qJBYzP8Qk24CZ05RSWDQUjdiQUeIJGfqMMzbtXgCKl/a5xa6thfC0MQkGIr55LCLd6YmMyO640ifYUa53lybQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz", + "integrity": "sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==", "cpu": [ "x64" ], @@ -3811,9 +3836,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.11.tgz", - "integrity": "sha512-1sGwpgvx+WZf0GFT6vkkOm6UJ+mlsVnjw+Yv9esK71idWeRAG3bbpkf3AoY8KIqKqmnzJExi0uKxXpakQ5Pcbg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz", + "integrity": "sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==", "cpu": [ "arm" ], @@ -3825,9 +3850,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.11.tgz", - "integrity": "sha512-D/1F/2lTe+XAl3ohkYj51NjniVly8sIqkA/n1aOND3ZMO418nl2JNU95iVa1/RtpzaKcWEsNTtHRogykrUflJg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz", + "integrity": "sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==", "cpu": [ "arm" ], @@ -3839,9 +3864,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.11.tgz", - "integrity": "sha512-7vFWHLCCNFLEQlmwKQfVy066ohLLArZl+AV/AdmrD1/pD1FlmqM+FKbtnONnIwbHtgetFUCV/SRi1q4D49aTlw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz", + "integrity": "sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==", "cpu": [ "arm64" ], @@ -3853,9 +3878,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.11.tgz", - "integrity": "sha512-tYkGIx8hjWPh4zcn17jLEHU8YMmdP2obRTGkdaB3BguGHh31VCS3ywqC4QjTODjmhhNyZYkj/1Dz/+0kKvg9YA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz", + "integrity": "sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==", "cpu": [ "arm64" ], @@ -3867,9 +3892,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.11.tgz", - "integrity": "sha512-6F328QIUev29vcZeRX6v6oqKxfUoGwIIAhWGD8wSysnBYFY0nivp25jdWmAb1GildbCCaQvOKEhCok7YfWkj4Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz", + "integrity": "sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==", "cpu": [ "ppc64" ], @@ -3881,9 +3906,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.11.tgz", - "integrity": "sha512-NqhWmiGJGdzbZbeucPZIG9Iav4lyYLCarEnxAceguMx9qlpeEF7ENqYKOwB8Zqk7/CeuYMEcLYMaW2li6HyDzQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz", + "integrity": "sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==", "cpu": [ "riscv64" ], @@ -3895,9 +3920,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.11.tgz", - "integrity": "sha512-J2RPIFKMdTrLtBdfR1cUMKl8Gcy05nlQ+bEs/6al7EdWLk9cs3tnDREHZ7mV9uGbeghpjo4i8neNZNx3PYUY9w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz", + "integrity": "sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==", "cpu": [ "riscv64" ], @@ -3909,9 +3934,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.11.tgz", - "integrity": "sha512-bDpGRerHvvHdhun7MmFUNDpMiYcJSqWckwAVVRTJf8F+RyqYJOp/mx04PDc7DhpNPeWdnTMu91oZRMV+gGaVcQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz", + "integrity": "sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==", "cpu": [ "s390x" ], @@ -3923,9 +3948,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.11.tgz", - "integrity": "sha512-G9U7bVmylzRLma3cK39RBm3guoD1HOvY4o0NS4JNm37AD0lS7/xyMt7kn0JejYyc0Im8J+rH69/dXGM9DAJcSQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz", + "integrity": "sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==", "cpu": [ "x64" ], @@ -3937,9 +3962,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.11.tgz", - "integrity": "sha512-7qL20SBKomekSunm7M9Fe5L93bFbn+FbHiGJbfTlp0RKhPVoJDP73vOxf1QrmJHyDPECsGWPFnKa/f8fO2FsHw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz", + "integrity": "sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==", "cpu": [ "x64" ], @@ -3951,9 +3976,9 @@ ] }, "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.11.tgz", - "integrity": "sha512-jisvIva8MidjI+B1lFRZZMfCPaCISePgTyR60wNT1MeQvIh5Ksa0G3gvI+Iqyj3jqYbvOHByenpa5eDGcSdoSg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz", + "integrity": "sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==", "cpu": [ "wasm32" ], @@ -3961,16 +3986,16 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.10" + "@napi-rs/wasm-runtime": "^0.2.11" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.11.tgz", - "integrity": "sha512-G+H5nQZ8sRZ8ebMY6mRGBBvTEzMYEcgVauLsNHpvTUavZoCCRVP1zWkCZgOju2dW3O22+8seTHniTdl1/uLz3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz", + "integrity": "sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==", "cpu": [ "arm64" ], @@ -3982,9 +4007,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.11.tgz", - "integrity": "sha512-Hfy46DBfFzyv0wgR0MMOwFFib2W2+Btc8oE5h4XlPhpelnSyA6nFxkVIyTgIXYGTdFaLoZFNn62fmqx3rjEg3A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz", + "integrity": "sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==", "cpu": [ "ia32" ], @@ -3996,9 +4021,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.11.tgz", - "integrity": "sha512-7L8NdsQlCJ8T106Gbz/AjzM4QKWVsoQbKpB9bMBGcIZswUuAnJMHpvbqGW3RBqLHCIwX4XZ5fxSBHEFcK2h9wA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz", + "integrity": "sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==", "cpu": [ "x64" ], @@ -4986,9 +5011,10 @@ } }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -5040,14 +5066,23 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -5174,9 +5209,9 @@ } }, "node_modules/cacheable/node_modules/keyv": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz", - "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.4.tgz", + "integrity": "sha512-ypEvQvInNpUe+u+w8BIcPkQvEqXquyyibWE/1NB5T2BTzIpS5cGEV1LZskDzPSTvNAaT4+5FutvzlvnkxOSKlw==", "dev": true, "license": "MIT", "dependencies": { @@ -5252,9 +5287,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001721", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", - "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", + "version": "1.0.30001723", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", + "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", "funding": [ { "type": "opencollective", @@ -5680,13 +5715,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", - "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.43.0.tgz", + "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.25.0" }, "funding": { "type": "opencollective", @@ -6484,9 +6519,9 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", - "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6788,6 +6823,23 @@ "node": ">=14" } }, + "node_modules/editorconfig/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/editorconfig/node_modules/minimatch": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", @@ -6805,9 +6857,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.165", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", - "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", + "version": "1.5.167", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.167.tgz", + "integrity": "sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -7444,6 +7496,23 @@ "eslint": "^8.0.0 || ^9.0.0" } }, + "node_modules/eslint-plugin-sonarjs/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-sonarjs/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/eslint-plugin-sonarjs/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -7628,9 +7697,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7645,9 +7714,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7681,17 +7750,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -7713,15 +7771,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8292,17 +8350,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -9580,6 +9627,23 @@ "node": ">=14" } }, + "node_modules/js-beautify/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/js-beautify/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -10228,15 +10292,15 @@ } }, "node_modules/markdownlint-cli/node_modules/glob": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", - "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", "dev": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -12414,6 +12478,23 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/read-package-json/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/read-package-json/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -13751,13 +13832,6 @@ "postcss-selector-parser": "^7.0.0" } }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "license": "MIT" - }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.1.tgz", @@ -13900,6 +13974,21 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/sucrase/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -14166,9 +14255,9 @@ } }, "node_modules/terser": { - "version": "5.41.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.41.0.tgz", - "integrity": "sha512-H406eLPXpZbAX14+B8psIuvIr8+3c+2hkuYzpMkoE0ij+NdsVATbA78vb8neA/eqrj7rywa2pIkdmWRsXW6wmw==", + "version": "5.42.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.42.0.tgz", + "integrity": "sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -14238,6 +14327,23 @@ "node": ">=18" } }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/test-exclude/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -14349,9 +14455,9 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, "license": "MIT", "peerDependencies": { @@ -14721,9 +14827,9 @@ } }, "node_modules/unrs-resolver": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.11.tgz", - "integrity": "sha512-OhuAzBImFPjKNgZ2JwHMfGFUA6NSbRegd1+BPjC1Y0E6X9Y/vJ4zKeGmIMqmlYboj6cMNEwKI+xQisrg4J0HaQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.0.tgz", + "integrity": "sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -14734,23 +14840,25 @@ "url": "https://opencollective.com/unrs-resolver" }, "optionalDependencies": { - "@unrs/resolver-binding-darwin-arm64": "1.7.11", - "@unrs/resolver-binding-darwin-x64": "1.7.11", - "@unrs/resolver-binding-freebsd-x64": "1.7.11", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.11", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.11", - "@unrs/resolver-binding-linux-arm64-gnu": "1.7.11", - "@unrs/resolver-binding-linux-arm64-musl": "1.7.11", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.11", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.11", - "@unrs/resolver-binding-linux-riscv64-musl": "1.7.11", - "@unrs/resolver-binding-linux-s390x-gnu": "1.7.11", - "@unrs/resolver-binding-linux-x64-gnu": "1.7.11", - "@unrs/resolver-binding-linux-x64-musl": "1.7.11", - "@unrs/resolver-binding-wasm32-wasi": "1.7.11", - "@unrs/resolver-binding-win32-arm64-msvc": "1.7.11", - "@unrs/resolver-binding-win32-ia32-msvc": "1.7.11", - "@unrs/resolver-binding-win32-x64-msvc": "1.7.11" + "@unrs/resolver-binding-android-arm-eabi": "1.9.0", + "@unrs/resolver-binding-android-arm64": "1.9.0", + "@unrs/resolver-binding-darwin-arm64": "1.9.0", + "@unrs/resolver-binding-darwin-x64": "1.9.0", + "@unrs/resolver-binding-freebsd-x64": "1.9.0", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.9.0", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.9.0", + "@unrs/resolver-binding-linux-arm64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-arm64-musl": "1.9.0", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-riscv64-musl": "1.9.0", + "@unrs/resolver-binding-linux-s390x-gnu": "1.9.0", + "@unrs/resolver-binding-linux-x64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-x64-musl": "1.9.0", + "@unrs/resolver-binding-wasm32-wasi": "1.9.0", + "@unrs/resolver-binding-win32-arm64-msvc": "1.9.0", + "@unrs/resolver-binding-win32-ia32-msvc": "1.9.0", + "@unrs/resolver-binding-win32-x64-msvc": "1.9.0" } }, "node_modules/update-browserslist-db": { @@ -14969,9 +15077,9 @@ "license": "MIT" }, "node_modules/vite/node_modules/fdir": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, "license": "MIT", "peerDependencies": { @@ -15012,9 +15120,9 @@ } }, "node_modules/vite/node_modules/rollup": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.42.0.tgz", - "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", + "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", "dev": true, "license": "MIT", "dependencies": { @@ -15028,26 +15136,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.42.0", - "@rollup/rollup-android-arm64": "4.42.0", - "@rollup/rollup-darwin-arm64": "4.42.0", - "@rollup/rollup-darwin-x64": "4.42.0", - "@rollup/rollup-freebsd-arm64": "4.42.0", - "@rollup/rollup-freebsd-x64": "4.42.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.42.0", - "@rollup/rollup-linux-arm-musleabihf": "4.42.0", - "@rollup/rollup-linux-arm64-gnu": "4.42.0", - "@rollup/rollup-linux-arm64-musl": "4.42.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.42.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.42.0", - "@rollup/rollup-linux-riscv64-gnu": "4.42.0", - "@rollup/rollup-linux-riscv64-musl": "4.42.0", - "@rollup/rollup-linux-s390x-gnu": "4.42.0", - "@rollup/rollup-linux-x64-gnu": "4.42.0", - "@rollup/rollup-linux-x64-musl": "4.42.0", - "@rollup/rollup-win32-arm64-msvc": "4.42.0", - "@rollup/rollup-win32-ia32-msvc": "4.42.0", - "@rollup/rollup-win32-x64-msvc": "4.42.0", + "@rollup/rollup-android-arm-eabi": "4.43.0", + "@rollup/rollup-android-arm64": "4.43.0", + "@rollup/rollup-darwin-arm64": "4.43.0", + "@rollup/rollup-darwin-x64": "4.43.0", + "@rollup/rollup-freebsd-arm64": "4.43.0", + "@rollup/rollup-freebsd-x64": "4.43.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", + "@rollup/rollup-linux-arm-musleabihf": "4.43.0", + "@rollup/rollup-linux-arm64-gnu": "4.43.0", + "@rollup/rollup-linux-arm64-musl": "4.43.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-musl": "4.43.0", + "@rollup/rollup-linux-s390x-gnu": "4.43.0", + "@rollup/rollup-linux-x64-gnu": "4.43.0", + "@rollup/rollup-linux-x64-musl": "4.43.0", + "@rollup/rollup-win32-arm64-msvc": "4.43.0", + "@rollup/rollup-win32-ia32-msvc": "4.43.0", + "@rollup/rollup-win32-x64-msvc": "4.43.0", "fsevents": "~2.3.2" } }, @@ -15315,6 +15423,12 @@ "node": ">=10.13.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, "node_modules/webpack": { "version": "5.99.9", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", @@ -15494,12 +15608,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/whatwg-url/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/web_src/fomantic/package-lock.json b/web_src/fomantic/package-lock.json index e4f33d0ab0..7d95ad2e1b 100644 --- a/web_src/fomantic/package-lock.json +++ b/web_src/fomantic/package-lock.json @@ -494,12 +494,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz", - "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==", + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.1.tgz", + "integrity": "sha512-MX4Zioh39chHlDJbKmEgydJDS3tspMP/lnQC67G3SWsTnb9NeYVWOjkxpOSy4oMfPs4StcWHwBrvUb4ybfnuaw==", "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.8.0" } }, "node_modules/@types/vinyl": { @@ -1086,9 +1086,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1249,9 +1249,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001721", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", - "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", + "version": "1.0.30001723", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", + "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", "funding": [ { "type": "opencollective", @@ -1969,9 +1969,9 @@ } }, "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -2005,9 +2005,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.165", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", - "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", + "version": "1.5.167", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.167.tgz", + "integrity": "sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -5019,9 +5019,9 @@ } }, "node_modules/js-beautify/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -8226,9 +8226,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT" }, "node_modules/union-value": { From 5e157d40dff75eb561db3f7f70812f1e05ee6612 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 16 Jun 2025 11:54:29 +0200 Subject: [PATCH 21/22] Update renovate to v40.57.1 (forgejo) (#8194) Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8194 Reviewed-by: Michael Kriese Co-authored-by: Renovate Bot Co-committed-by: Renovate Bot --- .forgejo/workflows/renovate.yml | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/renovate.yml b/.forgejo/workflows/renovate.yml index b584f94cf8..98b93b5757 100644 --- a/.forgejo/workflows/renovate.yml +++ b/.forgejo/workflows/renovate.yml @@ -28,7 +28,7 @@ jobs: runs-on: docker container: - image: data.forgejo.org/renovate/renovate:40.48.4 + image: data.forgejo.org/renovate/renovate:40.57.1 steps: - name: Load renovate repo cache diff --git a/Makefile b/Makefile index e0e6e12ed4..e6416d5a6f 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1 # renovate: datasour DEADCODE_PACKAGE ?= golang.org/x/tools/cmd/deadcode@v0.34.0 # renovate: datasource=go GOMOCK_PACKAGE ?= go.uber.org/mock/mockgen@v0.5.2 # renovate: datasource=go GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.18.1 # renovate: datasource=go -RENOVATE_NPM_PACKAGE ?= renovate@40.48.4 # renovate: datasource=docker packageName=data.forgejo.org/renovate/renovate +RENOVATE_NPM_PACKAGE ?= renovate@40.57.1 # renovate: datasource=docker packageName=data.forgejo.org/renovate/renovate # https://github.com/disposable-email-domains/disposable-email-domains/commits/main/ DISPOSABLE_EMAILS_SHA ?= 0c27e671231d27cf66370034d7f6818037416989 # renovate: ... From 877fa8cec142e7b4bddfc1ed85c8dfaa3902aa47 Mon Sep 17 00:00:00 2001 From: Robert Wolff Date: Mon, 16 Jun 2025 14:55:17 +0200 Subject: [PATCH 22/22] feat(ui): fediverse handle markup via redirect server (#8185) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This implements the fediverse handle markup as discussed in https://codeberg.org/forgejo/forgejo/issues/7942#issuecomment-5152173 by adding links to the https://fedirect.toolforge.org server. It’s likely a temporary solution that will be reverted by proper federation implementation. I wasn’t sure, but because I already had the implementation ready, I put the code here. I won’t be offended if we just close it. (Also it relies on external server, that could be done configurable, but given that this is likely to be temporary it may not be worth the further implementation?) ### Tests - I added test coverage for Go changes... - [ ] in their respective `*_test.go` for unit tests. - [x] in the `tests/integration` directory if it involves interactions with a live Forgejo server. - I added test coverage for JavaScript changes... - [ ] in `web_src/js/*.test.js` if it can be unit tested. - [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)). ### Documentation - [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change. - [ ] I did not document these changes and I do not expect someone else to do it. ### Release notes - [ ] I do not want this change to show in the release notes. - [x] I want the title to show in the release notes with a link to this pull request. - [ ] I want the content of the `release-notes/.md` to be be used for the release notes instead of the title. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8185 Reviewed-by: Lucas Co-authored-by: Robert Wolff Co-committed-by: Robert Wolff --- modules/markup/html.go | 20 ++++++++++++++++++++ modules/markup/html_test.go | 13 +++++++++++++ 2 files changed, 33 insertions(+) diff --git a/modules/markup/html.go b/modules/markup/html.go index c13ebab98a..7961c5c930 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -69,6 +69,10 @@ var ( // https://html.spec.whatwg.org/multipage/input.html#e-mail-state-(type%3Demail) emailRegex = regexp.MustCompile("(?:\\s|^|\\(|\\[)([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9]{2,}(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+)(?:\\s|$|\\)|\\]|;|,|\\?|!|\\.(\\s|$))") + // Fediverse handle regex (same as emailRegex but with additonal @ or ! + // at start) + fediRegex = regexp.MustCompile("(?:\\s|^|\\(|\\[)([@!]([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+)@([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9]{2,}(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+))(?:\\s|$|\\)|\\]|;|,|\\?|!|\\.(\\s|$))") + // blackfriday extensions create IDs like fn:user-content-footnote blackfridayExtRegex = regexp.MustCompile(`[^:]*:user-content-`) @@ -153,6 +157,7 @@ var defaultProcessors = []processor{ issueIndexPatternProcessor, commitCrossReferencePatternProcessor, hashCurrentPatternProcessor, + fediAddressProcessor, emailAddressProcessor, emojiProcessor, emojiShortCodeProcessor, @@ -1237,6 +1242,21 @@ func hashCurrentPatternProcessor(ctx *RenderContext, node *html.Node) { } } +// fediAddressProcessor replaces raw fediverse handles with toolforge links +func fediAddressProcessor(ctx *RenderContext, node *html.Node) { + next := node.NextSibling + for node != nil && node != next { + m := fediRegex.FindStringSubmatchIndex(node.Data) + if m == nil { + return + } + + fedihandle := node.Data[m[2]:m[3]] + replaceContent(node, m[2], m[3], createLink("https://fedirect.toolforge.org/?id="+url.QueryEscape(fedihandle), fedihandle, "fedihandle")) + node = node.NextSibling.NextSibling + } +} + // emailAddressProcessor replaces raw email addresses with a mailto: link. func emailAddressProcessor(ctx *RenderContext, node *html.Node) { next := node.NextSibling diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index 9d0c40c9e8..2bc929bb04 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -307,6 +307,19 @@ func TestRender_email(t *testing.T) { test( "email@domain..com", `

email@domain..com

`) + + // Test fediverse handle + test( + "@forgejo@floss.social", + `

@forgejo@floss.social

`) + + test( + "!forgejo@programming.dev", + `

!forgejo@programming.dev

`) + + test( + "@#&@forgejo.org", + `

@#&@forgejo.org

`) } func TestRender_emoji(t *testing.T) {