Compare commits

..

No commits in common. "578d9132a7b56ad334315387db6b884db89a5ace" and "86d65ba0bebd48470a7fa1240f8566dfdd4d6242" have entirely different histories.

48 changed files with 207 additions and 482 deletions

View file

@ -1,4 +1,4 @@
FROM data.forgejo.org/oci/alpine:3.22
FROM data.forgejo.org/oci/alpine:3.21
ARG RELEASE_VERSION=unkown
LABEL maintainer="contact@forgejo.org" \
org.opencontainers.image.version="${RELEASE_VERSION}"

View file

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

View file

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

View file

@ -1,5 +1,5 @@
import eslintCommunityEslintPluginEslintComments from '@eslint-community/eslint-plugin-eslint-comments';
import stylisticEslintPlugin from '@stylistic/eslint-plugin';
import stylisticEslintPluginJs from '@stylistic/eslint-plugin-js';
import vitest from '@vitest/eslint-plugin';
import arrayFunc from 'eslint-plugin-array-func';
import eslintPluginImportX from 'eslint-plugin-import-x';
@ -26,7 +26,7 @@ export default tseslint.config(
{
plugins: {
'@eslint-community/eslint-comments': eslintCommunityEslintPluginEslintComments,
'@stylistic': stylisticEslintPlugin,
'@stylistic/js': stylisticEslintPluginJs,
'@vitest': vitest,
'array-func': arrayFunc,
'no-jquery': noJquery,
@ -69,62 +69,62 @@ export default tseslint.config(
'@eslint-community/eslint-comments/no-unused-enable': [2],
'@eslint-community/eslint-comments/no-use': [0],
'@eslint-community/eslint-comments/require-description': [0],
'@stylistic/array-bracket-newline': [0],
'@stylistic/array-bracket-spacing': [2, 'never'],
'@stylistic/array-element-newline': [0],
'@stylistic/arrow-parens': [2, 'always'],
'@stylistic/js/array-bracket-newline': [0],
'@stylistic/js/array-bracket-spacing': [2, 'never'],
'@stylistic/js/array-element-newline': [0],
'@stylistic/js/arrow-parens': [2, 'always'],
'@stylistic/arrow-spacing': [2, {
'@stylistic/js/arrow-spacing': [2, {
before: true,
after: true,
}],
'@stylistic/block-spacing': [0],
'@stylistic/js/block-spacing': [0],
'@stylistic/brace-style': [2, '1tbs', {
'@stylistic/js/brace-style': [2, '1tbs', {
allowSingleLine: true,
}],
'@stylistic/comma-dangle': [2, 'always-multiline'],
'@stylistic/js/comma-dangle': [2, 'always-multiline'],
'@stylistic/comma-spacing': [2, {
'@stylistic/js/comma-spacing': [2, {
before: false,
after: true,
}],
'@stylistic/comma-style': [2, 'last'],
'@stylistic/computed-property-spacing': [2, 'never'],
'@stylistic/dot-location': [2, 'property'],
'@stylistic/eol-last': [2],
'@stylistic/function-call-spacing': [2, 'never'],
'@stylistic/function-call-argument-newline': [0],
'@stylistic/function-paren-newline': [0],
'@stylistic/generator-star-spacing': [0],
'@stylistic/implicit-arrow-linebreak': [0],
'@stylistic/js/comma-style': [2, 'last'],
'@stylistic/js/computed-property-spacing': [2, 'never'],
'@stylistic/js/dot-location': [2, 'property'],
'@stylistic/js/eol-last': [2],
'@stylistic/js/function-call-spacing': [2, 'never'],
'@stylistic/js/function-call-argument-newline': [0],
'@stylistic/js/function-paren-newline': [0],
'@stylistic/js/generator-star-spacing': [0],
'@stylistic/js/implicit-arrow-linebreak': [0],
'@stylistic/indent': [2, 2, {
'@stylistic/js/indent': [2, 2, {
ignoreComments: true,
SwitchCase: 1,
}],
'@stylistic/key-spacing': [2],
'@stylistic/keyword-spacing': [2],
'@stylistic/linebreak-style': [2, 'unix'],
'@stylistic/lines-around-comment': [0],
'@stylistic/lines-between-class-members': [0],
'@stylistic/max-len': [0],
'@stylistic/max-statements-per-line': [0],
'@stylistic/multiline-ternary': [0],
'@stylistic/new-parens': [2],
'@stylistic/newline-per-chained-call': [0],
'@stylistic/no-confusing-arrow': [0],
'@stylistic/no-extra-parens': [0],
'@stylistic/no-extra-semi': [2],
'@stylistic/no-floating-decimal': [0],
'@stylistic/no-mixed-operators': [0],
'@stylistic/no-mixed-spaces-and-tabs': [2],
'@stylistic/js/key-spacing': [2],
'@stylistic/js/keyword-spacing': [2],
'@stylistic/js/linebreak-style': [2, 'unix'],
'@stylistic/js/lines-around-comment': [0],
'@stylistic/js/lines-between-class-members': [0],
'@stylistic/js/max-len': [0],
'@stylistic/js/max-statements-per-line': [0],
'@stylistic/js/multiline-ternary': [0],
'@stylistic/js/new-parens': [2],
'@stylistic/js/newline-per-chained-call': [0],
'@stylistic/js/no-confusing-arrow': [0],
'@stylistic/js/no-extra-parens': [0],
'@stylistic/js/no-extra-semi': [2],
'@stylistic/js/no-floating-decimal': [0],
'@stylistic/js/no-mixed-operators': [0],
'@stylistic/js/no-mixed-spaces-and-tabs': [2],
'@stylistic/no-multi-spaces': [2, {
'@stylistic/js/no-multi-spaces': [2, {
ignoreEOLComments: true,
exceptions: {
@ -132,60 +132,60 @@ export default tseslint.config(
},
}],
'@stylistic/no-multiple-empty-lines': [2, {
'@stylistic/js/no-multiple-empty-lines': [2, {
max: 1,
maxEOF: 0,
maxBOF: 0,
}],
'@stylistic/no-tabs': [2],
'@stylistic/no-trailing-spaces': [2],
'@stylistic/no-whitespace-before-property': [2],
'@stylistic/nonblock-statement-body-position': [2],
'@stylistic/object-curly-newline': [0],
'@stylistic/object-curly-spacing': [2, 'never'],
'@stylistic/object-property-newline': [0],
'@stylistic/one-var-declaration-per-line': [0],
'@stylistic/operator-linebreak': [2, 'after'],
'@stylistic/padded-blocks': [2, 'never'],
'@stylistic/padding-line-between-statements': [0],
'@stylistic/quote-props': [0],
'@stylistic/js/no-tabs': [2],
'@stylistic/js/no-trailing-spaces': [2],
'@stylistic/js/no-whitespace-before-property': [2],
'@stylistic/js/nonblock-statement-body-position': [2],
'@stylistic/js/object-curly-newline': [0],
'@stylistic/js/object-curly-spacing': [2, 'never'],
'@stylistic/js/object-property-newline': [0],
'@stylistic/js/one-var-declaration-per-line': [0],
'@stylistic/js/operator-linebreak': [2, 'after'],
'@stylistic/js/padded-blocks': [2, 'never'],
'@stylistic/js/padding-line-between-statements': [0],
'@stylistic/js/quote-props': [0],
'@stylistic/quotes': [2, 'single', {
'@stylistic/js/quotes': [2, 'single', {
avoidEscape: true,
allowTemplateLiterals: true,
}],
'@stylistic/rest-spread-spacing': [2, 'never'],
'@stylistic/js/rest-spread-spacing': [2, 'never'],
'@stylistic/semi': [2, 'always', {
'@stylistic/js/semi': [2, 'always', {
omitLastInOneLineBlock: true,
}],
'@stylistic/semi-spacing': [2, {
'@stylistic/js/semi-spacing': [2, {
before: false,
after: true,
}],
'@stylistic/semi-style': [2, 'last'],
'@stylistic/space-before-blocks': [2, 'always'],
'@stylistic/js/semi-style': [2, 'last'],
'@stylistic/js/space-before-blocks': [2, 'always'],
'@stylistic/space-before-function-paren': [2, {
'@stylistic/js/space-before-function-paren': [2, {
anonymous: 'ignore',
named: 'never',
asyncArrow: 'always',
}],
'@stylistic/space-in-parens': [2, 'never'],
'@stylistic/space-infix-ops': [2],
'@stylistic/space-unary-ops': [2],
'@stylistic/spaced-comment': [2, 'always'],
'@stylistic/switch-colon-spacing': [2],
'@stylistic/template-curly-spacing': [2, 'never'],
'@stylistic/template-tag-spacing': [2, 'never'],
'@stylistic/wrap-iife': [2, 'inside'],
'@stylistic/wrap-regex': [0],
'@stylistic/yield-star-spacing': [2, 'after'],
'@stylistic/js/space-in-parens': [2, 'never'],
'@stylistic/js/space-infix-ops': [2],
'@stylistic/js/space-unary-ops': [2],
'@stylistic/js/spaced-comment': [2, 'always'],
'@stylistic/js/switch-colon-spacing': [2],
'@stylistic/js/template-curly-spacing': [2, 'never'],
'@stylistic/js/template-tag-spacing': [2, 'never'],
'@stylistic/js/wrap-iife': [2, 'inside'],
'@stylistic/js/wrap-regex': [0],
'@stylistic/js/yield-star-spacing': [2, 'after'],
'accessor-pairs': [2],
'array-callback-return': [2, {

4
go.mod
View file

@ -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.94
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
@ -242,7 +242,7 @@ require (
replace github.com/hashicorp/go-version => github.com/6543/go-version v1.3.1
replace github.com/nektos/act => code.forgejo.org/forgejo/act v1.28.0
replace github.com/nektos/act => code.forgejo.org/forgejo/act v1.26.0
replace github.com/mholt/archiver/v3 => code.forgejo.org/forgejo/archiver/v3 v3.5.1

8
go.sum
View file

@ -4,8 +4,8 @@ code.forgejo.org/f3/gof3/v3 v3.11.0 h1:f/xToKwqTgxG6PYxvewywjDQyCcyHEEJ6sZqUitFs
code.forgejo.org/f3/gof3/v3 v3.11.0/go.mod h1:4FaRUNSQGBiD1M0DuB0yNv+Z2wMtlOeckgygHSSq4KQ=
code.forgejo.org/forgejo-contrib/go-libravatar v0.0.0-20191008002943-06d1c002b251 h1:HTZl3CBk3ABNYtFI6TPLvJgGKFIhKT5CBk0sbOtkDKU=
code.forgejo.org/forgejo-contrib/go-libravatar v0.0.0-20191008002943-06d1c002b251/go.mod h1:PphB88CPbx601QrWPMZATeorACeVmQlyv3u+uUMbSaM=
code.forgejo.org/forgejo/act v1.28.0 h1:96njNC7C1YNyjWq5OWvLZMF/nw0PMthzIA8Nwbnn7jo=
code.forgejo.org/forgejo/act v1.28.0/go.mod h1:dFuiwAmD5vyrzecysHB2kL/GM3wRpoVPl+WdbCTC8Bs=
code.forgejo.org/forgejo/act v1.26.0 h1:6mTmoaw7d/WpYiw/Pw6AaypxFdgJog5OFi/PMEgEbxs=
code.forgejo.org/forgejo/act v1.26.0/go.mod h1:HFDFrXPrqfM9aH2RCnMiBdo/3ThxDmZjp58InPjGOfo=
code.forgejo.org/forgejo/archiver/v3 v3.5.1 h1:UmmbA7D5550uf71SQjarmrn6yKwOGxtEjb3jaYYtmSE=
code.forgejo.org/forgejo/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
code.forgejo.org/forgejo/go-rpmutils v1.0.0 h1:RZGGeKt70p/WaIEL97pyT6uiiEIoN8/aLmS5Z6WmX0M=
@ -411,8 +411,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.94 h1:1ZoksIKPyaSt64AVOyaQvhDOgVC3MfZsWM6mZXRUGtM=
github.com/minio/minio-go/v7 v7.0.94/go.mod h1:71t2CqDt3ThzESgZUlU1rBN54mksGGlkLcFgguDnnAc=
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=

View file

@ -323,10 +323,6 @@ func matchPushEvent(commit *git.Commit, pushPayload *api.PushPayload, evt *jobpa
matchTimes++
}
case "paths":
if refName.IsTag() {
matchTimes++
break
}
filesChanged, err := commit.GetFilesChangedSinceCommit(pushPayload.Before)
if err != nil {
log.Error("GetFilesChangedSinceCommit [commit_sha1: %s]: %v", commit.ID.String(), err)
@ -340,10 +336,6 @@ func matchPushEvent(commit *git.Commit, pushPayload *api.PushPayload, evt *jobpa
}
}
case "paths-ignore":
if refName.IsTag() {
matchTimes++
break
}
filesChanged, err := commit.GetFilesChangedSinceCommit(pushPayload.Before)
if err != nil {
log.Error("GetFilesChangedSinceCommit [commit_sha1: %s]: %v", commit.ID.String(), err)

View file

@ -150,24 +150,6 @@ func TestDetectMatched(t *testing.T) {
yamlOn: "on: workflow_dispatch",
expected: true,
},
{
desc: "push to tag matches workflow with paths condition (should skip paths check)",
triggeredEvent: webhook_module.HookEventPush,
payload: &api.PushPayload{
Ref: "refs/tags/v1.0.0",
Before: "0000000",
Commits: []*api.PayloadCommit{
{
ID: "abcdef123456",
Added: []string{"src/main.go"},
Message: "Release v1.0.0",
},
},
},
commit: nil,
yamlOn: "on:\n push:\n paths:\n - src/**",
expected: true,
},
}
for _, tc := range testCases {

View file

@ -54,12 +54,3 @@ func SplitTrimSpace(input, sep string) []string {
return stringList
}
// TruncateRunes returns a truncated string with given rune limit,
// it returns input string if its rune length doesn't exceed the limit.
func TruncateRunes(str string, limit int) string {
if utf8.RuneCountInString(str) < limit {
return str
}
return string([]rune(str)[:limit])
}

View file

@ -44,18 +44,3 @@ func TestSplitString(t *testing.T) {
}
test(tc, SplitStringAtByteN)
}
func TestTruncateRunes(t *testing.T) {
assert.Empty(t, TruncateRunes("", 0))
assert.Empty(t, TruncateRunes("", 1))
assert.Empty(t, TruncateRunes("ab", 0))
assert.Equal(t, "a", TruncateRunes("ab", 1))
assert.Equal(t, "ab", TruncateRunes("ab", 2))
assert.Equal(t, "ab", TruncateRunes("ab", 3))
assert.Empty(t, TruncateRunes("测试", 0))
assert.Equal(t, "测", TruncateRunes("测试", 1))
assert.Equal(t, "测试", TruncateRunes("测试", 2))
assert.Equal(t, "测试", TruncateRunes("测试", 3))
}

View file

@ -2922,7 +2922,6 @@ settings.event_action_success = Úspěch
settings.event_action_success_desc = Běh akce byl úspěšný.
settings.event_header_action = Události běhu akce
settings.event_action_recover_desc = Běh akce byl úspěšný, předchozí běh akce ve stejném workflow selhal.
issues.filter_type.all_pull_requests = Všechny žádosti o sloučení
[graphs]
component_loading_info = Tohle může chvíli trvat…

View file

@ -2735,7 +2735,6 @@ settings.event_action_success = Success
settings.event_action_recover_desc = Handlingskørsel lykkedes efter at den sidste handlingskørsel i samme arbejdsgang mislykkedes.
settings.event_action_failure_desc = Handlingskørsel sluttede som en fejl.
settings.event_action_recover = Gendan
issues.filter_type.all_pull_requests = Alle pull-anmodninger
[notification]
watching = Overvåger

View file

@ -2924,7 +2924,6 @@ 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
issues.filter_type.all_pull_requests = Alle Pull-Requests
[graphs]
component_loading_failed = Konnte %s nicht laden

View file

@ -1628,7 +1628,6 @@ issues.filter_poster = Author
issues.filter_poster_no_select = All authors
issues.filter_type = Type
issues.filter_type.all_issues = All issues
issues.filter_type.all_pull_requests = All pull requests
issues.filter_type.assigned_to_you = Assigned to you
issues.filter_type.created_by_you = Created by you
issues.filter_type.mentioning_you = Mentioning you

View file

@ -1500,7 +1500,7 @@ issues.content_history.created = ginawa
editor.patching = Pina-patch:
editor.fail_to_apply_patch = Hindi malapat ang patch na "%s"
settings.danger_zone = Mapanganib na lugar
issues.closed_at = `isinara ang isyung ito <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.closed_at = `isinara ang isyung <a id="%[1]s" href="#%[1]s">%[2]s</a>`
settings.collaboration.admin = Tagapangasiwa
settings.admin_settings = Mga setting ng tagapangasiwa
issues.start_tracking_history = `sinimulan ang trabaho %s`
@ -2777,9 +2777,6 @@ 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
settings.event_action_success = Matagumpay
settings.event_action_success_desc = Matagumpay na natapos ang Action Run.
settings.event_action_recover_desc = Matagumpay na natapos ang Action Run pagkatapos na nabigo ang huling Action Run sa katulad na workflow.
[search]
commit_kind = Maghanap ng mga commit…

View file

@ -2920,7 +2920,6 @@ settings.event_header_action = Événements d'exécution d'action
settings.event_action_success_desc = L'exécution de l'action a réussi.
settings.event_action_failure_desc = L'exécution de l'action a échoué.
settings.event_action_recover_desc = L'exécution de l'action a réussi après l'échec de la dernière exécution de l'action dans le même workflow.
issues.filter_type.all_pull_requests = Toutes les demandes d'ajout
[graphs]
component_loading = Chargement %s…

View file

@ -2920,7 +2920,6 @@ 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.
issues.filter_type.all_pull_requests = Visi izmaiņu pieprasījumi
[graphs]
component_loading=Ielādē %s…

View file

@ -2621,7 +2621,6 @@ settings.event_action_recover = Verhaalt
settings.event_header_action = Aktioons-Loop-Vörfallen
settings.event_action_failure_desc = Aktioons-Loop is as fehlslagen ennt.
settings.event_action_recover_desc = Aktioons-Loop is daankregen worden, nadeem de leste Aktioons-Loop in de sülven Warkwies fehlslagen is.
issues.filter_type.all_pull_requests = All Haalvörslagen
[repo.permissions]
code.read = <b>Lesen:</b> De Quelltext vun deesem Repositorium ankieken un klonen.

View file

@ -1408,7 +1408,7 @@ editor.fail_to_update_file=Не удалось обновить/создать
editor.fail_to_update_file_summary=Ошибка:
editor.push_rejected_no_message=Изменение отклонено сервером без сообщения. Пожалуйста, проверьте Git-хуки.
editor.push_rejected=Изменение отклонено сервером. Пожалуйста, проверьте Git-хуки.
editor.push_rejected_summary=Полная причина отклонения:
editor.push_rejected_summary=Причина отклонения:
editor.add_subdir=Добавить каталог…
editor.unable_to_upload_files=Не удалось загрузить файлы в «%s» из-за ошибки: %v
editor.upload_file_is_locked=Файл «%s» заблокирован %s.
@ -1545,27 +1545,27 @@ issues.add_labels=добавлены метки %s %s
issues.remove_label=удалил(а) метку %s %s
issues.remove_labels=удалил(а) метки %s %s
issues.add_remove_labels=добавлены метки %s и убраны метки %s %s
issues.add_milestone_at=`добавление в этап <b>%s</b> %s`
issues.add_project_at=`добавление в проект <b>%s</b> %s`
issues.change_milestone_at=`этап изменён с <b>%s</b> на <b>%s</b> %s`
issues.change_project_at=`проект изменён с <b>%s</b> на <b>%s</b> %s`
issues.remove_milestone_at=`удаление из этапа <b>%s</b> %s`
issues.remove_project_at=`удаление из проекта <b>%s</b> %s`
issues.add_milestone_at=`добавлено в этап <b>%s</b> %s`
issues.add_project_at=`добавлено в проект <b>%s</b> %s`
issues.change_milestone_at=`изменил(а) целевой этап с <b>%s</b> на <b>%s</b> %s`
issues.change_project_at=`изменил(а) проект с <b>%s</b> на <b>%s</b> %s`
issues.remove_milestone_at=`удалил(а) это из этапа <b>%s</b> %s`
issues.remove_project_at=`удалил(а) это из проекта <b>%s</b> %s`
issues.deleted_milestone=`(удалено)`
issues.deleted_project=`(удалено)`
issues.self_assign_at=`назначение себя %s`
issues.add_assignee_at=`назначение <b>%s</b> %s`
issues.remove_assignee_at=`снятие с назначения <b>%s</b> %s`
issues.remove_self_assignment=`снято назначение с себя %s`
issues.change_title_at=`заголовок изменён с <b><strike>%s</strike></b> на <b>%s</b> %s`
issues.change_ref_at=`изменена ссылка с <b><strike>%s</strike></b> на <b>%s</b> %s`
issues.remove_ref_at=`убрана ссылка на <b>%s</b> %s`
issues.add_ref_at=`добавлена ссылка на <b>%s</b> %s`
issues.self_assign_at=`назначил(а) на себя %s`
issues.add_assignee_at=`был(а) назначен(а) <b>%s</b> %s`
issues.remove_assignee_at=`был снят с назначения <b>%s</b> %s`
issues.remove_self_assignment=`убрал(а) их назначение %s`
issues.change_title_at=`изменил(а) заголовок с <b><strike>%s</strike></b> на <b>%s</b> %s`
issues.change_ref_at=`изменил(а) ссылку с <b><strike>%s</strike></b> на <b>%s</b> %s`
issues.remove_ref_at=`убрал(а) ссылку <b>%s</b> %s`
issues.add_ref_at=`добавлена ссылка <b>%s</b> %s`
issues.delete_branch_at=`удалена ветвь <b>%s</b> %s`
issues.filter_label=Метки
issues.filter_label_exclude=`Исключайте метки с помощью <code>alt</code> + <code>лкм/enter</code>`
issues.filter_label_no_select=Любые метки
issues.filter_label_select_no_label=Без меток
issues.filter_label=Метка
issues.filter_label_exclude=`Используйте <code>alt</code> + <code>click/enter</code>, чтобы исключить метки`
issues.filter_label_no_select=Все метки
issues.filter_label_select_no_label=Нет метки
issues.filter_milestone=Этап
issues.filter_milestone_all=Все этапы
issues.filter_milestone_none=Нет этапов
@ -2923,7 +2923,6 @@ settings.event_action_recover = Восстановлен
settings.event_action_recover_desc = После неудачи повторное выполнение рабочего потока было успешно.
settings.event_action_success = Успех
settings.event_action_success_desc = Выполнение завершилось успешно.
issues.filter_type.all_pull_requests = Все запросы на слияние
[graphs]
component_loading_failed = Не удалось загрузить %s

View file

@ -201,9 +201,6 @@ table_modal.placeholder.content = Innehåll
table_modal.label.rows = Rader
table_modal.label.columns = Kolumner
buttons.switch_to_legacy.tooltip = Använd legacy-redigeraren istället
link_modal.url = Url
link_modal.description = Beskrivning
link_modal.header = Lägg till en länk
[filter]
string.asc = A - Ö
@ -332,7 +329,6 @@ invalid_app_data_path = Sökvägen för appdata är ogiltig: %v
internal_token_failed = Misslyckades att generera intern token: %v
password_algorithm = Hashalgoritm för lösenord
invalid_password_algorithm = Ogiltig hashalgoritm för lösenord
env_config_keys_prompt = Följande miljövariabler kommer också att tillämpas på din konfigurationsfil:
[home]
uname_holder=Användarnamn eller e-postadress
@ -466,41 +462,6 @@ reply = eller svara på detta e-postmeddelande direkt
hi_user_x = Hej <b>%s</b>,
admin.new_user.user_info = Användarinformation
admin.new_user.text = Vänligen <a href="%s">klicka här</a> för att hantera denna användare från administratörspanelen.
admin.new_user.subject = Ny användare %s har just registrerat sig
totp_disabled.no_2fa = Det finns inga andra 2FA-metoder konfigurerade längre, vilket innebär att det inte längre är nödvändigt att logga in på ditt konto med 2FA.
removed_security_key.text_1 = Säkerhetsnyckeln ”%[1]s” har just tagits bort från ditt konto.
repo.transfer.to_you = dig
repo.transfer.body = För att acceptera eller avvisa det, besök %s eller ignorera det helt enkelt.
removed_security_key.no_2fa = Det finns inga andra 2FA-metoder konfigurerade längre, vilket innebär att det inte längre är nödvändigt att logga in på ditt konto med 2FA.
release.note = Notera:
totp_enrolled.subject = Du har aktiverat TOTP som 2FA-metod
totp_enrolled.text_1.no_webauthn = Du har just aktiverat TOTP för ditt konto. Det innebär att du måste använda TOTP som 2FA-metod vid alla framtida inloggningar på ditt konto.
totp_enrolled.text_1.has_webauthn = Du har just aktiverat TOTP för ditt konto. Det innebär att du vid alla framtida inloggningar på ditt konto kan använda TOTP som 2FA-metod eller någon av dina säkerhetsnycklar.
link_not_working_do_paste = Fungerar inte länken? Prova att kopiera och klistra in den i webbläsarens adressfält.
primary_mail_change.text_1 = Den primära e-postadressen för ditt konto har just ändrats till %[1]s. Det innebär att denna e-postadress inte längre kommer att ta emot e-postmeddelanden för ditt konto.
totp_disabled.subject = TOTP har inaktiverats
totp_disabled.text_1 = Tidsbaserat engångslösenord (TOTP) på ditt konto har just inaktiverats.
account_security_caution.text_2 = Om detta inte var du, har ditt konto blivit kompromitterat. Kontakta administratören för denna webbplats.
account_security_caution.text_1 = Om detta var du, kan du tryggt ignorera detta meddelande.
activate_account.text_2 = Klicka på följande länk för att aktivera ditt konto inom <b>%s</b>:
activate_email.text = Klicka på följande länk för att verifiera din e-postadress inom <b>%s</b>:
register_notify.text_3 = Om någon annan har skapat det här kontot åt dig måste du först <a href="%s">ställa in ditt lösenord</a>.
issue.x_mentioned_you = <b>@%s2</b> nämnde dig:
repo.collaborator.added.subject = %s har lagt till dig som medarbetare i %s
repo.collaborator.added.text = Du har lagts till som medarbetare i förrådet:
team_invite.subject = %[1]s har bjudit in dig att gå med i organisationen %[2]s
register_notify.text_1 = detta är din registreringsbekräftelse via e-post för %s!
release.downloads = Hämtningar:
release.download.zip = Källkod (ZIP)
release.download.targz = Källkod (TAR.GZ)
repo.transfer.subject_to = %s vill överföra förrådet ”%s” till %s
removed_security_key.subject = En säkerhetsnyckel har tagits bort
issue_assigned.pull = @%[1] har tilldelat dig pull-begäran %[2]s i förrådet %[3]s.
issue_assigned.issue = @%[1] har tilldelat dig ärendet %[2] i förrådet %[3].
register_notify.text_2 = Du kan logga in på ditt konto med ditt användarnamn: %s
reset_password.text = Om detta var du, klicka på följande länk för att återställa ditt konto inom <b>%s</b>:
issue.action.force_push = <b>%[1]s2</b> gjorde en force-push av <b>%[2]s</b> från %[3]s till %[4]s.
repo.transfer.subject_to_you = %s vill överföra förrådet ”%s” till dig
@ -584,12 +545,6 @@ auth_failed=Autentisering misslyckades: %v
target_branch_not_exist=Målgrenen finns inte.
org_still_own_repo = Denna organisation äger fortfarande ett eller flera förråd, ta bort eller överför dem först.
must_use_public_key = Den nyckel du angav är en privat nyckel. Skicka inte upp din privata nyckel någonstans. Använd istället din publika nyckel.
unable_verify_ssh_key = SSH-nyckeln kan inte verifieras. Kontrollera att den är korrekt.
still_own_repo = Ditt konto äger ett eller flera förråd, ta bort eller överför dem först.
still_has_org = Ditt konto är medlem i en eller flera organisationer. Lämna dem först.
still_own_packages = Ditt konto har ett eller flera paket, ta bort dem först.
[user]
@ -605,13 +560,6 @@ follow=Följ
unfollow=Sluta följa
user_bio=Biografi
disabled_public_activity=Den här användaren har inaktiverat den publika synligheten av aktiviteten.
code = Kod
watched = Övervakade förråd
unblock = Avblockera
email_visibility.limited = Din e-postadress är synlig för alla autentiserade användare
show_on_map = Visa denna plats på en karta
settings = Användarinställningar
block = Blockera
[settings]
@ -812,17 +760,6 @@ email_notifications.submit=Ställ in e-postpreferenser
visibility.public=Offentlig
visibility.private=Privat
change_password = Byt lösenord
user_block_success = Användaren har blockerats.
blocked_since = Blockerad sedan %s
user_unblock_success = Användaren har blivit avblockerad.
visibility.limited = Begränsad
visibility.limited_tooltip = Synlig endast för inloggade användare
visibility.private_tooltip = Synlig endast för medlemmar i organisationer som du har gått med i
select_permissions = Välj behörigheter
permission_no_access = Ingen åtkomst
permission_write = Läs och skriv
user_block_yourself = Du kan inte blockera dig själv.
gpg_token_help = Du kan skapa en signatur med hjälp av:
[repo]
owner=Ägare
@ -1756,21 +1693,6 @@ topic.manage_topics=Hantera ämnen
topic.done=Klar
topic.count_prompt=Du kan inte välja fler än 25 ämnen
settings.enter_repo_name = Ange ägar- och utvecklingskatalog-namnet exakt som det visas:
release = Utgåva
commitstatus.success = Lyckades
visibility_helper = Gör förrådet privat
download_bundle = Hämta BUNDLE
download_zip = Hämta ZIP
download_tar = Hämta TAR.GZ
repo_desc_helper = Ange kort beskrivning (valfritt)
all_branches = Alla grenar
fork_no_valid_owners = Detta förråd kan inte förgrenas eftersom det inte finns några giltiga ägare.
fork_to_different_account = Förgrena till ett annat konto
size_format = %[1]s: %[2]s, %[3]s: %[4]s
already_forked = Du har redan förgrenat %s
commitstatus.failure = Fel
ext_issues = Externa fel
open_with_editor = Öppna med %s
@ -2333,7 +2255,7 @@ project_kind = Sök projekt...
search = Sök…
type_tooltip = Söktyp
team_kind = Sök lag...
org_kind = Sök organisationer
org_kind = Sök organisationer...
issue_kind = Sök ärenden...
regexp_tooltip = Tolka söktermen som ett reguljärt uttryck
code_search_unavailable = Kodsökning är för närvarande inte tillgänglig. Vänligen kontakta webbplatsadministratören.

View file

@ -668,7 +668,6 @@ username_error_no_dots = ` sadece alfanumerik karakterler ("0-9","a-z","A-Z"), t
unset_password = Oturum açma kullanıcısı parola belirlemedi.
unsupported_login_type = Oturum açma türü hesap silmeyi desteklemiyor.
email_domain_is_not_allowed = Kullanıcı e-posta adresi <b>%s</b> alan adı EMAIL_DOMAIN_ALLOWLIST veya EMAIL_DOMAIN_BLOCKLIST ile çelişiyor. Lütfen işleminizin beklendiğinden emin olun.
[user]
change_avatar=Profil resmini değiştir…
@ -2164,7 +2163,7 @@ settings.pulls.allow_rebase_update=Değişiklik isteği dalının yeniden yapıl
settings.pulls.default_delete_branch_after_merge=Varsayılan olarak birleştirmeden sonra değişiklik isteği dalını sil
settings.pulls.default_allow_edits_from_maintainers=Bakımcıların düzenlemelerine izin ver
settings.releases_desc=Depo Sürümlerini Etkinleştir
settings.packages_desc=Depo paket kütüğünü etkinleştir
settings.packages_desc=Depo Paket Kütüğünü Etkinleştir
settings.projects_desc=Depo Projelerini Etkinleştir
settings.actions_desc=Depo İşlemlerini Etkinleştir
settings.admin_settings=Yönetici Ayarları
@ -3493,7 +3492,7 @@ error.unit_not_allowed=Bu depo bölümüne erişme izniniz yok.
title=Paketler
desc=Depo paketlerini yönet.
empty=Henüz hiçbir paket yok.
empty.documentation=Paket deposu hakkında daha fazla bilgi için, <a target="_blank" rel="noopener noreferrer" href="%s">belgeye</a> bakabilirsiniz.
empty.documentation=Paket kütüğü hakkında daha fazla bilgi için, <a target="_blank" rel="noopener noreferrer" href="%s">belgeye</a> bakabilirsiniz.
empty.repo=Bir paket yüklediniz ama burada gösterilmiyor mu? <a href="%[1]s">Paket ayarları</a>na gidin ve bu depoya bağlantı verin.
registry.documentation=%s kütüğü hakkında daha fazla bilgi için, <a target="_blank" rel="noopener noreferrer" href="%s">belgeye</a> bakabilirsiniz.
filter.type=Tür
@ -3636,9 +3635,9 @@ owner.settings.cleanuprules.remove.days=Şundan eski sürümleri kaldır
owner.settings.cleanuprules.remove.pattern=Eşleşen sürümlari kaldır
owner.settings.cleanuprules.success.update=Temizleme kuralı güncellendi.
owner.settings.cleanuprules.success.delete=Temizleme kuralı silindi.
owner.settings.chef.title=Chef deposu
owner.settings.chef.title=Chef Kütüğü
owner.settings.chef.keypair=Anahtar çifti üret
owner.settings.chef.keypair.description=Chef kayıt defterine gönderilen istekler kimlik doğrulama yöntemi olarak kriptografik olarak imzalanmalıdır. Bir anahtar çifti oluştururken, yalnızca genel anahtar Forgejo'da saklanır. Özel anahtar size knife ile kullanılmak üzere sağlanır. Yeni bir anahtar çifti oluşturmak öncekini geçersiz kılar.
owner.settings.chef.keypair.description=Chef kütüğünde kimlik doğrulaması için bir anahtar çifti gereklidir. Eğer daha önce bir anahtar çifti ürettiyseniz, yeni bir anahtar çifti üretmek eski anahtar çiftini ıskartaya çıkartacaktır.
npm.dependencies.bundle = Paketlenmiş Bağımlılıklar
rpm.repository.multiple_groups = Bu paket birçok grupta mevcut.

View file

@ -2668,7 +2668,6 @@ settings.event_action_success = Успіх
settings.event_action_recover = Відновлено
commitstatus.success = Успіх
commitstatus.failure = Збій
issues.filter_type.all_pull_requests = Усі запити на злиття
[graphs]
contributors.what = внески
@ -3232,7 +3231,7 @@ notices.view_detail_header=Переглянути деталі повідомл
notices.select_all=Вибрати все
notices.deselect_all=Скасувати виділення
notices.inverse_selection=Інвертувати виділене
notices.delete_selected=Видалити вибране
notices.delete_selected=Видалити обране
notices.delete_all=Видалити всі cповіщення
notices.type=Тип
notices.type_1=Репозиторій

View file

@ -9,7 +9,7 @@ sign_up = Đăng ký
link_account = Liên kết tài khoản
register = Đăng ký
version = Phiên bản
powered_by = Được cung cấp bởi %s
powered_by = Sử dụng %s
page = Trang
template = Mẫu
language = Ngôn ngữ
@ -25,7 +25,7 @@ access_token = Mã truy cập
captcha = CAPTCHA
twofa = Xác thực hai lớp
webauthn_insert_key = Cắm khóa bảo mật của bạn vào
copy_hash = Sao chép chuỗi băm
copy_hash = Chép chuỗi băm
sign_in_with_provider = Đăng nhập bằng %s
webauthn_press_button = Hãy nhấn nút trên khóa bảo mật…
webauthn_use_twofa = Dùng mã xác thực hai lớp ở trên điện thoại
@ -36,7 +36,7 @@ webauthn_error_insecure = WebAuthn chỉ hỗ trợ kết nối mã hóa. Nếu
webauthn_error_unable_to_process = Máy chủ không thể xử lý yêu cầu của bạn.
webauthn_error_empty = Bạn phải đặt tên cho khóa này.
webauthn_error_timeout = Hết thời gian đọc khóa mất rồi. Hãy tải lại trang và thử lại.
copy_type_unsupported = Không thể sao chép loại tệp này
copy_type_unsupported = Không chép được
repository = Kho mã
organization = Tổ chức
new_fork = Tạo một nhánh mới
@ -55,17 +55,17 @@ all = Tất cả
sources = Nguồn
forks = Các phân nhánh
activities = Hoạt động
pull_requests = Yêu cầu kéo
pull_requests = Yêu cầu thêm
save = Lưu
issues =Vấn đề
issues =
enabled = Bật
disabled = Tắt
copy = Sao chép
copy_generic = Sao chép vào bộ nhớ tạm
copy_url = Sao chép URL
copy_content = Sao chép nội dung
copy_success = Đã sao chép!
copy_error = Sao chép thất bại
copy = Chép
copy_generic = Chép vào bộ nhớ tạm
copy_url = Chép URL
copy_content = Chép nội dung
copy_success = Đã chép!
copy_error = Không chép được
write = Viết
preview = Xem trước
error = Lỗi
@ -73,7 +73,7 @@ error413 = Bạn đã dùng hết định mức.
go_back = Quay lại
invalid_data = Dữ liệu không hợp lệ: %v
never = Không bao giờ
unknown = Không xác định
unknown = Không biết
unpin = Bỏ ghim
pin = Ghim
archived = Đã lưu trữ
@ -81,60 +81,6 @@ signed_in_as = Đăng nhập bằng
re_type = Xác nhận mật khẩu
webauthn_sign_in = Nhấn nút trên khóa bảo mật, nếu không có nút thì bạn hãy rút ra rồi cắm lại.
new_org.link = Tạo tổ chức
error404 = Trang bạn đang tìm <strong>không tồn tại</strong>, <strong>đã bị xoá</strong> hoặc <strong>bạn không có quyền</strong> để xem nó.
error404 = Trang bạn đang tìm <strong>không tồn tại</strong> hoặc <strong>bạn không có quyền xem</strong>.
edit = Chỉnh sửa
filter = Bộ lọc
dashboard = Trang quản lý
logo = Logo
toc = Mục lục
user_profile_and_more = Hồ sơ và cài đặt…
passcode = Mã xác thực
webauthn_error_duplicated = Khóa bảo mật không được phép cho yêu cầu này. Vui lòng đảm bảo rằng khóa chưa được đăng ký trước đó.
mirror = Bản sao
new_mirror = Tạo bản sao mới
your_starred = Đã đánh sao
mirrors = Các bản sao
concept_system_global = Chung
concept_user_individual = Cá nhân
show_log_seconds = Hiện giây
show_full_screen = Toàn màn hình
download_logs = Tải xuống nhật ký
confirm_delete_selected = Xác nhận xoá tất cả mục được chọn?
name = Tên
filter.clear = Xoá bộ lọc
filter.not_fork = Không phải phân nhánh
filter.not_archived = Không bị lưu trữ
filter.is_archived = Bị lưu trữ
filter.is_fork = Phân nhánh
filter.is_mirror = Bản sao
filter.is_template = Mẫu
filter.not_template = Không phải mẫu
filter.public = Công khai
filter.private = Riêng tư
twofa_scratch = Mã xác thực 2 lớp dự phòng
collaborative = Cộng tác
milestones = Cột mốc
cancel = Huỷ bỏ
retry = Thử lại
rerun = Chạy lại
rerun_all = Chạy lại tất cả
ok = Đồng ý
add = Thêm
add_all = Thêm tất cả
remove = Xoá
remove_all = Xoá tất cả
remove_label_str = Xoá "%s"
locked = Bị khoá
copy_branch = Sao chép tên nhánh
loading = Đang tải…
rss_feed = Nguồn RSS
confirm_delete_artifact = Bạn có chắc muốn xoá "%s" ?
value = Giá trị
copy_path = Sao chép đường dẫn
filter.not_mirror = Không phải bản sao
show_timestamps = Hiện mốc thời gian
concept_code_repository = Kho mã
concept_user_organization = Tổ chức
[search]
search = Tìm kiếm…
filter = Lọc

View file

@ -102,8 +102,5 @@
"editor.textarea.tab_hint": "Řádek je již odsazen. Pro opuštění editoru stiskněte znovu <kbd>Tab</kbd> nebo <kbd>Escape</kbd>.",
"editor.textarea.shift_tab_hint": "Na tomto řádku není žádné odsazení. Pro opuštění editoru stiskněte znovu <kbd>Shift</kbd> + <kbd>Tab</kbd> nebo <kbd>Escape</kbd>.",
"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. <a href=\"%s\" target=\"_blank\">Zjistit více</a>",
"avatar.constraints_hint": "Velikost vlastního avataru nesmí překročit %[1]s nebo být větší než %[2]dx%[3]d pixelů",
"repo.diff.commit.next-short": "Další",
"repo.diff.commit.previous-short": "Předchozí"
"settings.visibility.description": "Viditelnost profilu ovlivňuje možnost ostatních přistupovat k vašim veřejným repozitářům. <a href=\"%s\" target=\"_blank\">Zjistit více</a>"
}

View file

@ -92,10 +92,5 @@
"followers.outgoing.list.self.none": "Du følger ikke nogen.",
"followers.outgoing.list.none": "%s følger ikke nogen.",
"editor.textarea.tab_hint": "Linjen er allerede indrykket. Tryk på <kbd>Tab</kbd> igen eller <kbd>Escape</kbd> for at forlade editoren.",
"editor.textarea.shift_tab_hint": "Ingen indrykning på denne linje. Tryk på <kbd>Shift</kbd> + <kbd>Tab</kbd> igen eller <kbd>Escape</kbd> for at forlade editoren.",
"admin.dashboard.cleanup_offline_runners": "Ryd op offline runners",
"settings.visibility.description": "Profilsynlighed påvirker andres adgang til dine ikke-private depoter. <a href=\"%s\" target=\"_blank\">Læs mere</a>",
"avatar.constraints_hint": "Brugerdefineret avatar må ikke overstige %[1]s i størrelse eller være større end %[2]dx%[3]d pixels",
"repo.diff.commit.next-short": "Næste",
"repo.diff.commit.previous-short": "Forrige"
"editor.textarea.shift_tab_hint": "Ingen indrykning på denne linje. Tryk på <kbd>Shift</kbd> + <kbd>Tab</kbd> igen eller <kbd>Escape</kbd> for at forlade editoren."
}

View file

@ -93,9 +93,5 @@
"followers.incoming.list.none": "Niemand folgt diesem Benutzer.",
"editor.textarea.tab_hint": "Zeile bereits eingerückt. Drücke nochmals <kbd>Tab</kbd> oder <kbd>Escape</kbd> um den Editor zu verlassen.",
"editor.textarea.shift_tab_hint": "Keine Einrückung auf dieser Zeile. Drücke nochmals <kbd>Shift</kbd> + <kbd>Tab</kbd> oder <kbd>Escape</kbd> um den Editor zu verlassen.",
"admin.dashboard.cleanup_offline_runners": "Aufräumen der offline Runner",
"settings.visibility.description": "Die Profilsichtbarkeit beeinflusst die Möglichkeit anderer, auf deine nicht-privaten Repositorys zuzugreifen. <a href=\"%s\" target=\"_blank\">Erfahre mehr</a>",
"avatar.constraints_hint": "Individuelles Profilbild darf %[1]s in der Größe nicht überschreiten, und nicht größer als %[2]dx%[3]d Pixel sein",
"repo.diff.commit.next-short": "Nächste",
"repo.diff.commit.previous-short": "Vorherige"
"admin.dashboard.cleanup_offline_runners": "Aufräumen der offline Runner"
}

View file

@ -97,11 +97,5 @@
"repo.issue_indexer.title": "Indexeur de problèmes",
"stars.list.none": "Personne n'a mis d'étoiles sur ce dépôt.",
"watch.list.none": "Personne ne consulte ce dépôt.",
"repo.form.cannot_create": "Tous les espaces dans lesquels vous pouvez créer des dépôts ont atteint la limite de dépôts.",
"admin.dashboard.cleanup_offline_runners": "Nettoyer les exécuteurs hors ligne",
"mail.actions.run_info_trigger": "Déclenché parce que : %[1]s par : %[2]s",
"settings.visibility.description": "La visibilité du profil affecte la capacité des autres à accéder à vos dépôts non-privés. <a href=\"%s\" target=\"_blank\">Voir plus</a>",
"editor.textarea.shift_tab_hint": "Pas d'indentation sur cette ligne. Appuyez sur <kbd>Maj</kbd> + <kbd>Tab</kbd> une nouvelle fois ou sur <kbd>Échap</kbd> pour quitter l'éditeur.",
"avatar.constraints_hint": "L'avatar personnalisé ne doit pas dépasser une taille de %[1]s ou être plus grand que %[2]dx%[3]d pixels",
"editor.textarea.tab_hint": "Ligne déjà indentée. Appuyez sur <kbd>Tab</kbd> une nouvelle fois ou sur <kbd>Échap</kbd> pour quitter l'éditeur."
"repo.form.cannot_create": "Tous les espaces dans lesquels vous pouvez créer des dépôts ont atteint la limite de dépôts."
}

View file

@ -102,8 +102,5 @@
"editor.textarea.tab_hint": "Rinda jau ir ar atkāpi. Spied <kbd>Tab</kbd> vēlreiz vai <kbd>Escape</kbd>, lai izietu no redaktora!",
"editor.textarea.shift_tab_hint": "Šajā rindā nav atkāpes. Spied <kbd>Shift</kbd> + <kbd>Tab</kbd> vēlreiz vai <kbd>Escape</kbd>, 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. <a href=\"%s\" target=\"_blank\">Uzzināt vairāk</a>",
"avatar.constraints_hint": "Pielāgots profila attēls nevar pārsniegt %[1]s vai būt lielāks par %[2]dx%[3]d pikseļiem",
"repo.diff.commit.next-short": "Nāk.",
"repo.diff.commit.previous-short": "Iepr."
"settings.visibility.description": "Profila redzamība ietekmē iespēju citiem piekļūt Tavām glabātavām, kas nav privātas. <a href=\"%s\" target=\"_blank\">Uzzināt vairāk</a>"
}

View file

@ -94,8 +94,5 @@
"editor.textarea.tab_hint": "Rieg al inschuven. Drück weer <kbd>Tab</kbd> of <kbd>Esc</kbd>, um de Bewarker to verlaten.",
"editor.textarea.shift_tab_hint": "Keen Inschuuv in deeser Rieg. Drück weer <kbd>Umschalt</kbd>+<kbd>Tab</kbd> of <kbd>Esc</kbd>, 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. <a href=\"%s\" target=\"_blank\">Mehr unnerhören</a>",
"avatar.constraints_hint": "Dat eegene Kontobill düür nich groter as %[1]s wesen of groter as %[2]d×%[3]d Billtüttels wesen",
"repo.diff.commit.next-short": "Anner",
"repo.diff.commit.previous-short": "Vörig"
"settings.visibility.description": "De Profil-Sichtbaarkeid maakt daar wat an, of un wo anner Lüü diene nich-privaaten Repositoriums ankieken könen. <a href=\"%s\" target=\"_blank\">Mehr unnerhören</a>"
}

View file

@ -100,8 +100,5 @@
"stars.list.none": "Ninguém favoritou este repositório.",
"followers.outgoing.list.self.none": "Você não está seguindo ninguém.",
"editor.textarea.tab_hint": "Linha já indentada. Pressione <kbd>Tab</kbd> novamente ou <kbd>Esc</kbd> para sair do editor.",
"editor.textarea.shift_tab_hint": "Sem indentação nesta linha. Pressione <kbd>Shift</kbd> + <kbd>Tab</kbd> novamente ou <kbd>Esc</kbd> para sair do editor.",
"admin.dashboard.cleanup_offline_runners": "Limpar runners desconectados",
"avatar.constraints_hint": "Imagem de perfil personalizada não pode exceder %[1]s em tamanho ou ser maior que %[2]dx%[3]d pixels",
"settings.visibility.description": "A visibilidade do perfil afeta a habilidade de acessarem seus repositórios não-privados. <a href=\"%s\" target=\"_blank\">Saiba mais</a>"
"editor.textarea.shift_tab_hint": "Sem indentação nesta linha. Pressione <kbd>Shift</kbd> + <kbd>Tab</kbd> novamente ou <kbd>Esc</kbd> para sair do editor."
}

View file

@ -101,7 +101,5 @@
"editor.textarea.tab_hint": "Linha já indentada. Pressione <kbd>Tab</kbd> novamente ou <kbd>Escape</kbd> para sair do editor.",
"editor.textarea.shift_tab_hint": "Sem indentação nesta linha. Pressione <kbd>Shift</kbd> + <kbd>Tab</kbd> novamente ou <kbd>Escape</kbd> para sair do editor.",
"stars.list.none": "Ninguém juntou este repositório aos favoritos.",
"admin.dashboard.cleanup_offline_runners": "Limpeza de executores offline",
"settings.visibility.description": "A visibilidade do perfil afecta a capacidade de outros acederem aos seus repositórios não privados. <a href=\"%s\" target=\"_blank\">Ler mais</a>",
"avatar.constraints_hint": "O avatar personalizado não pode exceder %[1]s de tamanho ou ser maior do que %[2]dx%[3]d pixéis"
"admin.dashboard.cleanup_offline_runners": "Limpeza de executores offline"
}

View file

@ -101,9 +101,5 @@
"moderation.report_abuse_form.header": "Жалоба администрации",
"editor.textarea.tab_hint": "Отступ уже добавлен. Нажмите <kbd>Tab</kbd> снова или <kbd>Escape</kbd>, чтобы покинуть редактор.",
"editor.textarea.shift_tab_hint": "В строке нет отступов. Нажмите <kbd>Shift</kbd> + <kbd>Tab</kbd> снова или <kbd>Escape</kbd>, чтобы покинуть редактор.",
"admin.dashboard.cleanup_offline_runners": "Удалить недоступных исполнителей",
"avatar.constraints_hint": "Изображение профиля не может быть более %[1]s и крупнее %[2]dx%[3]d пикселей",
"settings.visibility.description": "Видимость профиля влияет на доступ других до ваших не частных репозиториев. <a href=\"%s\" target=\"_blank\">Подробнее</a>",
"repo.diff.commit.previous-short": "Предыдущий",
"repo.diff.commit.next-short": "Далее"
"admin.dashboard.cleanup_offline_runners": "Удалить недоступных исполнителей"
}

View file

@ -56,7 +56,7 @@
"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å <kbd>Shift</kbd> + <kbd>Tab</kbd> igen eller <kbd>Escape</kbd> för att lämna redigeringsläget.",
"meta.last_line": "Daniel Nylander heter jag och har översatt Forgejo. Mer information om mig på https://www.danielnylander.se",
"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å <kbd>Tab</kbd> igen eller <kbd>Escape</kbd> 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.",
@ -93,7 +93,5 @@
"moderation.abuse_category": "Kategori",
"moderation.abuse_category.placeholder": "Välj en kategori",
"moderation.abuse_category.spam": "Skräppost",
"moderation.abuse_category.malware": "Skadlig kod",
"settings.visibility.description": "Profilens synlighet påverkar andras möjlighet att komma åt dina icke-privata förråd. <a href=\"%s\" target=\"_blank\">Läs mer</a>",
"avatar.constraints_hint": "Anpassade avatarer får inte vara större än %[1] eller %[2]dx%[3] bildpunkter"
"moderation.abuse_category.malware": "Skadlig kod"
}

View file

@ -88,10 +88,10 @@
"moderation.report_abuse_form.details": "Використовуйте цю форму, щоб повідомити про користувачів, які створюють спам-профілі, репозиторії, задачі, коментарі або поводяться неналежним чином.",
"moderation.abuse_category": "Категорія",
"moderation.abuse_category.other_violations": "Інші порушення правил платформи",
"moderation.reporting_failed": "Не вдалося надіслати повідомлення про порушення: %v",
"moderation.reporting_failed": "Не вдалося надіслати нове повідомлення про порушення: %v",
"moderation.report_remarks": "Подробиці",
"moderation.reported_thank_you": "Дякуємо за ваше повідомлення. Адміністрацію поінформовано про нього.",
"repo.form.cannot_create": "У всіх просторах, де ви можете створювати репозиторії, досягнуто обмеження кількості репозиторіїв.",
"repo.form.cannot_create": "Усі простори, в яких ви можете створювати репозиторії, досягли максимальної кількості репозиторіїв.",
"repo.issue_indexer.title": "Індексатор задач",
"followers.incoming.list.self.none": "Ніхто не стежить за вашим профілем.",
"followers.incoming.list.none": "Ніхто не стежить за цим користувачем.",
@ -102,8 +102,5 @@
"editor.textarea.tab_hint": "У рядку вже є відступ. Натисніть <kbd>Tab</kbd> ще раз або <kbd>Esc</kbd>, щоб вийти з редактора.",
"editor.textarea.shift_tab_hint": "У цьому рядку немає відступів. Натисніть <kbd>Shift</kbd> + <kbd>Tab</kbd> ще раз або <kbd>Esc</kbd>, щоб вийти з редактора.",
"admin.dashboard.cleanup_offline_runners": "Очистити неактивні раннери",
"settings.visibility.description": "Видимість профілю впливає на можливість інших користувачів отримати доступ до ваших неприватних репозиторіїв. <a href=\"%s\" target=\"_blank\">Дізнатися більше</a>",
"avatar.constraints_hint": "Розмір користувацького аватара не може перевищувати %[1]s або бути більшим за %[2]d×%[3]d пікселів",
"repo.diff.commit.next-short": "Наступний",
"repo.diff.commit.previous-short": "Попередній"
"settings.visibility.description": "Видимість профілю впливає на можливість інших користувачів отримати доступ до ваших неприватних репозиторіїв. <a href=\"%s\" target=\"_blank\">Дізнатися більше</a>"
}

View file

@ -69,7 +69,5 @@
"followers.incoming.list.self.none": "没有人关注你的个人资料。",
"editor.textarea.tab_hint": "此行已缩进。再次按 <kbd>Tab</kbd> 或按 <kbd>Escape</kbd> 退出编辑器。",
"editor.textarea.shift_tab_hint": "此行无缩进。再次按 <kbd>Shift</kbd> + <kbd>Tab</kbd> 或按 <kbd>Escape</kbd> 退出编辑器。",
"admin.dashboard.cleanup_offline_runners": "清理离线运行器",
"settings.visibility.description": "个人资料可见性设置会影响他人对您的非私有仓库的访问。<a href=\"%s\" target=\"_blank\">了解更多</a>",
"avatar.constraints_hint": "自定义头像大小不得超过 %[1]s或大于 %[2]d×%[3]d 像素"
"admin.dashboard.cleanup_offline_runners": "清理离线运行器"
}

42
package-lock.json generated
View file

@ -64,7 +64,7 @@
"@eslint-community/eslint-plugin-eslint-comments": "4.5.0",
"@playwright/test": "1.53.0",
"@stoplight/spectral-cli": "6.15.0",
"@stylistic/eslint-plugin": "4.4.1",
"@stylistic/eslint-plugin-js": "4.4.1",
"@stylistic/stylelint-plugin": "3.1.2",
"@vitejs/plugin-vue": "5.2.4",
"@vitest/coverage-v8": "3.2.3",
@ -84,7 +84,7 @@
"eslint-plugin-vitest-globals": "1.5.0",
"eslint-plugin-vue": "10.2.0",
"eslint-plugin-vue-scoped-css": "2.10.0",
"eslint-plugin-wc": "3.0.1",
"eslint-plugin-wc": "2.2.1",
"globals": "16.1.0",
"happy-dom": "18.0.0",
"license-checker-rseidelsohn": "4.4.2",
@ -3011,18 +3011,15 @@
"node": "^12.20 || >=14.13"
}
},
"node_modules/@stylistic/eslint-plugin": {
"node_modules/@stylistic/eslint-plugin-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.1.tgz",
"integrity": "sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==",
"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-4.4.1.tgz",
"integrity": "sha512-eLisyHvx7Sel8vcFZOEwDEBGmYsYM1SqDn81BWgmbqEXfXRf8oe6Rwp+ryM/8odNjlxtaaxp0Ihmt86CnLAxKg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/utils": "^8.32.1",
"eslint-visitor-keys": "^4.2.0",
"espree": "^10.3.0",
"estraverse": "^5.3.0",
"picomatch": "^4.0.2"
"espree": "^10.3.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -3031,19 +3028,6 @@
"eslint": ">=9.0.0"
}
},
"node_modules/@stylistic/eslint-plugin/node_modules/picomatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/@stylistic/stylelint-plugin": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz",
@ -7699,14 +7683,14 @@
}
},
"node_modules/eslint-plugin-wc": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-3.0.1.tgz",
"integrity": "sha512-0p1wkSlA2Ue3FA4qW+5LZ+15sy0p1nUyVl1eyBMLq4rtN1LtE9IdI49BXNWMz8N8bM/y7Ulx8SWGAni5f8XO5g==",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-2.2.1.tgz",
"integrity": "sha512-KstLqGmyQz088DvFlDYHg0sHih+w2QeulreCi1D1ftr357klO2zqHdG/bbnNMmuQdVFDuNkopNIyNhmG0XCT/g==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-valid-element-name": "^1.0.0",
"js-levenshtein-esm": "^2.0.0"
"js-levenshtein-esm": "^1.2.0"
},
"peerDependencies": {
"eslint": ">=8.40.0"
@ -9708,9 +9692,9 @@
}
},
"node_modules/js-levenshtein-esm": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-2.0.0.tgz",
"integrity": "sha512-1n4LEPOL4wRXY8rOQcuA7Iuaphe5xCMayvufCzlLAi+hRsnBRDbSS6XPuV58CBVJxj5D9ApFLyjQ7KzFToyHBw==",
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz",
"integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==",
"dev": true,
"license": "MIT"
},

View file

@ -63,7 +63,7 @@
"@eslint-community/eslint-plugin-eslint-comments": "4.5.0",
"@playwright/test": "1.53.0",
"@stoplight/spectral-cli": "6.15.0",
"@stylistic/eslint-plugin": "4.4.1",
"@stylistic/eslint-plugin-js": "4.4.1",
"@stylistic/stylelint-plugin": "3.1.2",
"@vitejs/plugin-vue": "5.2.4",
"@vitest/coverage-v8": "3.2.3",
@ -83,7 +83,7 @@
"eslint-plugin-vitest-globals": "1.5.0",
"eslint-plugin-vue": "10.2.0",
"eslint-plugin-vue-scoped-css": "2.10.0",
"eslint-plugin-wc": "3.0.1",
"eslint-plugin-wc": "2.2.1",
"globals": "16.1.0",
"happy-dom": "18.0.0",
"license-checker-rseidelsohn": "4.4.2",

View file

@ -1,33 +0,0 @@
<!--start release-notes-assistant-->
## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Features
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7986) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7991)): <!--number 7991 --><!--line 0 --><!--description ZmVhdDogbWFrZSBGb3JnZWpvIEFjdGlvbnMgc2VydmVyIGxvZ3MgbGVzcyBub2lzeQ==-->feat: make Forgejo Actions server logs less noisy<!--description-->
- Bug fixes
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8155) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8167)): <!--number 8167 --><!--line 0 --><!--description Zml4OiBkbyBub3QgZmFpbCB3aGVuIHJlbGVhc2Ugb3Igd2lraSBpcyBzZXQgaW4gYC9yZXBvcy9taWdyYXRlYCBBUEk=-->fix: do not fail when release or wiki is set in `/repos/migrate` API<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7976) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7985)): <!--number 7985 --><!--line 0 --><!--description Zml4OiBpZ25vcmUgZXhwaXJlZCBhcnRpZmFjdHMgZm9yIHF1b3RhIGNhbGN1bGF0aW9u-->fix: ignore expired artifacts for quota calculation<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7979) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7983)): <!--number 7983 --><!--line 0 --><!--description Zml4OiBwdWxsIHJlcXVlc3QgY3Jvc3MgcmVmZXJlbmNlcw==-->fix: pull request cross references<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7883) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7886)): <!--number 7886 --><!--line 0 --><!--description Zml4OiBxdW90ZSByZXBseSBpbiBDaHJvbWl1bQ==-->fix: quote reply in Chromium<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7775) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7779)): <!--number 7779 --><!--line 0 --><!--description Zml4OiBtYWtlIGhhc2ggcGF0dGVybiBtb3JlIHN0cmljdA==-->fix: make hash pattern more strict<!--description-->
- Included for completeness but not worth a release note
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8112) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8120)): <!--number 8120 --><!--line 0 --><!--description Zml4OiByZW1vdmUgZG93bmxvYWQgYXR0cmlidXRlIGZyb20gZXh0ZXJuYWwgYXNzZXRz-->fix: remove download attribute from external assets<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8110): <!--number 8110 --><!--line 0 --><!--description VXBkYXRlIGJsZXZlIHRvIHYyLjUuMiB3aXRoIGNoYW5nZXMgbWFkZSBpbiBiYWNrcG9ydCBvZiAyLjUuMA==-->Update bleve to v2.5.2 with changes made in backport of 2.5.0<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8094) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8095)): <!--number 8095 --><!--line 0 --><!--description Zml4OiBzaG93IG1lbWJlcnNoaXAgb2YgbGltaXRlZCBvcmdz-->fix: show membership of limited orgs<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8059): <!--number 8059 --><!--line 0 --><!--description VXBkYXRlIGRlcGVuZGVuY3kgZ28gdG8gdjEuMjQuMyAodjExLjAvZm9yZ2Vqbyk=-->Update dependency go to v1.24.3 (v11.0/forgejo)<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8057): <!--number 8057 --><!--line 0 --><!--description Y2hvcmU6IGRyb3AgdW51c2VkIGBAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyYCBwYWNrYWdl-->chore: drop unused `@typescript-eslint/parser` package<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8021) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8022)): <!--number 8022 --><!--line 0 --><!--description Y2hvcmUoY2xlYW51cCk6IHN1cHByZXNzIG5vbiBhY3Rpb25hYmxlIFhPUk0gd2FybmluZ3M=-->chore(cleanup): suppress non actionable XORM warnings<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7987) ([backported](https://codeberg.org/forgejo/forgejo/pulls/8000)): <!--number 8000 --><!--line 0 --><!--description Zml4OiBhZ2dyZWdhdGUgZGVsZXRlZCB0ZWFtIGFzIGdob3N0IHRlYW0=-->fix: aggregate deleted team as ghost team<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7925) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7937)): <!--number 7937 --><!--line 0 --><!--description Zml4KHVpKTogY2VudGVyIGZvb3RlciBsaW5rcw==-->fix(ui): center footer links<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7894) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7903)): <!--number 7903 --><!--line 0 --><!--description Zml4KHVpKTogZml4IGZvcmNlLXB1c2ggY29tcGFyZSBsaW5lIGxheW91dA==-->fix(ui): fix force-push compare line layout<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7884) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7887)): <!--number 7887 --><!--line 0 --><!--description Zml4OiBwYXJzZSBgY2hhbmdlLWlkYCBpbiB0aGUgZ2l0IGNvbW1pdCBoZWFkZXI=-->fix: parse `change-id` in the git commit header<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7885): <!--number 7885 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnaXRodWIuY29tL2JsZXZlc2VhcmNoL2JsZXZlL3YyIHRvIHYyLjUuMSAodjExLjAvZm9yZ2VqbykgLSBhYmFuZG9uZWQ=-->Update module github.com/blevesearch/bleve/v2 to v2.5.1 (v11.0/forgejo) - abandoned<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7746) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7871)): <!--number 7871 --><!--line 0 --><!--description Zml4KHVpKTogaW1wcm92ZSBmb3JjZS1wdXNoIGNvbXBhcmUgbGluZSBsYXlvdXQ=-->fix(ui): improve force-push compare line layout<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7640) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7869)): <!--number 7869 --><!--line 0 --><!--description Zml4OiBSZW1vdmUgImNyZWF0ZSBicmFuY2giIGJ1dHRvbiBvbiBtaXJyb3JlZCByZXBvcw==-->fix: Remove "create branch" button on mirrored repos<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7858): <!--number 7858 --><!--line 0 --><!--description VXBkYXRlIG1vZHVsZSBnaXRodWIuY29tL21zdGVpbmVydC9wYW0vdjIgdG8gdjIuMS4wICh2MTEuMC9mb3JnZWpvKQ==-->Update module github.com/msteinert/pam/v2 to v2.1.0 (v11.0/forgejo)<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7817) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7821)): <!--number 7821 --><!--line 0 --><!--description Zml4OiByZXBsYWNlIMOfIHdpdGggc3MgaW4gbm9ybWFsaXplVXNlck5hbWU=-->fix: replace ß with ss in normalizeUserName<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7784) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7786)): <!--number 7786 --><!--line 0 --><!--description Zml4KGFwaSk6IGRvY3VtZW50IGBpc19zeXN0ZW1fd2ViaG9va2AgZmllbGQ=-->fix(api): document `is_system_webhook` field<!--description-->
- [PR](https://codeberg.org/forgejo/forgejo/pulls/7773) ([backported](https://codeberg.org/forgejo/forgejo/pulls/7774)): <!--number 7774 --><!--line 0 --><!--description Zml4OiByZW1vdmUgYXJ0aWZpY2lhbCBkZWxheSBmb3IgUFIgdXBkYXRl-->fix: remove artificial delay for PR update<!--description-->
<!--end release-notes-assistant-->

View file

@ -70,6 +70,17 @@ func userProfile(ctx *context.Context) {
ctx.Data["OpenGraphURL"] = ctx.ContextUser.HTMLURL()
ctx.Data["OpenGraphDescription"] = ctx.ContextUser.Description
// prepare heatmap data
if setting.Service.EnableUserHeatmap {
data, err := activities_model.GetUserHeatmapDataByUser(ctx, ctx.ContextUser, ctx.Doer)
if err != nil {
ctx.ServerError("GetUserHeatmapDataByUser", err)
return
}
ctx.Data["HeatmapData"] = data
ctx.Data["HeatmapTotalContributions"] = activities_model.GetTotalContributionsInHeatmap(data)
}
profileDbRepo, profileGitRepo, profileReadmeBlob, profileClose := shared_user.FindUserProfileReadme(ctx, ctx.Doer)
defer profileClose()
@ -175,17 +186,6 @@ func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileDb
ctx.Data["CardsNoneMsg"] = ctx.Tr("followers.outgoing.list.none", ctx.ContextUser.Name)
}
case "activity":
// prepare heatmap data
if setting.Service.EnableUserHeatmap {
data, err := activities_model.GetUserHeatmapDataByUser(ctx, ctx.ContextUser, ctx.Doer)
if err != nil {
ctx.ServerError("GetUserHeatmapDataByUser", err)
return
}
ctx.Data["HeatmapData"] = data
ctx.Data["HeatmapTotalContributions"] = activities_model.GetTotalContributionsInHeatmap(data)
}
date := ctx.FormString("date")
pagingNum = setting.UI.FeedPagingNum
items, count, err := activities_model.GetFeeds(ctx, activities_model.GetFeedsOptions{

View file

@ -766,7 +766,7 @@ func (g *GiteaLocalUploader) newPullRequest(pr *base.PullRequest) (*issues_model
issue := issues_model.Issue{
RepoID: g.repo.ID,
Repo: g.repo,
Title: util.TruncateRunes(prTitle, 255),
Title: prTitle,
Index: pr.Number,
Content: pr.Content,
MilestoneID: milestoneID,

View file

@ -127,7 +127,7 @@
</span>
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
<div class="menu">
<a rel="nofollow" class="{{if eq .ViewType "all"}}active {{end}}item" href="?q={{$.Keyword}}&type=all&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.all_pull_requests"}}</a>
<a rel="nofollow" class="{{if eq .ViewType "all"}}active {{end}}item" href="?q={{$.Keyword}}&type=all&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.all_issues"}}</a>
<a rel="nofollow" class="{{if eq .ViewType "assigned"}}active {{end}}item" href="?q={{$.Keyword}}&type=assigned&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.assigned_to_you"}}</a>
<a rel="nofollow" class="{{if eq .ViewType "created_by"}}active {{end}}item" href="?q={{$.Keyword}}&type=created_by&sort={{$.SortType}}&state={{$.State}}&labels={{.SelectLabels}}&milestone={{$.MilestoneID}}&project={{$.ProjectID}}&assignee={{$.AssigneeID}}&poster={{$.PosterID}}{{if $.ShowArchivedLabels}}&archived=true{{end}}">{{ctx.Locale.Tr "repo.issues.filter_type.created_by_you"}}</a>
{{if .PageIsPullList}}

View file

@ -94,7 +94,7 @@ test.describe('Pull: Toggle WIP', () => {
test('Issue: Labels', async ({page}, workerInfo) => {
test.skip(workerInfo.project.name === 'Mobile Safari', 'Unable to get tests working on Safari Mobile, see https://codeberg.org/forgejo/forgejo/pulls/3445#issuecomment-1789636');
async function submitLabels({page}: {page: Page}) {
async function submitLabels({page}: { page: Page }) {
const submitted = page.waitForResponse('/user2/repo1/issues/labels');
await page.locator('textarea').first().click(); // close via unrelated element
await submitted;

View file

@ -31,7 +31,7 @@ const reviewTeamUrl = '/org/org17/teams/review_team';
const ownersUrl = '/org/org17/teams/owners';
const adminUrl = '/org/org17/teams/super-user';
const cases: Record<string, {read?: Unit[], write?: Unit[]}> = {
const cases: Record<string, { read?: Unit[], write?: Unit[] }> = {
[testTeamUrl]: {write: ['Issues']},
[reviewTeamUrl]: {read: ['Code']},
};

View file

@ -19,7 +19,6 @@ import (
"os"
"os/exec"
"path/filepath"
"slices"
"strconv"
"strings"
"sync/atomic"
@ -41,7 +40,6 @@ import (
"forgejo.org/routers"
"forgejo.org/services/auth/source/remote"
gitea_context "forgejo.org/services/context"
"forgejo.org/services/mailer"
user_service "forgejo.org/services/user"
"forgejo.org/tests"
@ -696,9 +694,3 @@ func GetHTMLTitle(t testing.TB, session *TestSession, urlStr string) string {
doc := NewHTMLParser(t, resp.Body)
return doc.Find("head title").Text()
}
func SortMailerMessages(msgs []*mailer.Message) {
slices.SortFunc(msgs, func(a, b *mailer.Message) int {
return strings.Compare(b.To, a.To)
})
}

View file

@ -680,7 +680,6 @@ func TestPullRequestReplyMail(t *testing.T) {
called := false
defer test.MockVariableValue(&mailer.SendAsync, func(msgs ...*mailer.Message) {
assert.Len(t, msgs, 2)
SortMailerMessages(msgs)
assert.Equal(t, "user1@example.com", msgs[0].To)
assert.Equal(t, "Re: [user2/repo1] issue2 (PR #2)", msgs[0].Subject)
assert.Contains(t, msgs[0].Body, "Notification time!")
@ -709,7 +708,6 @@ func TestPullRequestReplyMail(t *testing.T) {
called := false
defer test.MockVariableValue(&mailer.SendAsync, func(msgs ...*mailer.Message) {
assert.Len(t, msgs, 2)
SortMailerMessages(msgs)
assert.Equal(t, "user1@example.com", msgs[0].To)
assert.Equal(t, "Re: [user2/repo1] issue2 (PR #2)", msgs[0].Subject)
assert.Contains(t, msgs[0].Body, "Notification time 2!")

View file

@ -1453,34 +1453,51 @@ func TestInitInstructions(t *testing.T) {
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
session := loginUser(t, user.Name)
forEachObjectFormat(t, func(t *testing.T, objectFormat git.ObjectFormat) {
sha256Repo, _, f := tests.CreateDeclarativeRepoWithOptions(t, user, tests.DeclarativeRepoOptions{
Name: optional.Some("sha256-instruction"),
AutoInit: optional.Some(false),
EnabledUnits: optional.Some([]unit_model.Type{unit_model.TypeCode}),
ObjectFormat: optional.Some("sha256"),
})
defer f()
sha1Repo, _, f := tests.CreateDeclarativeRepoWithOptions(t, user, tests.DeclarativeRepoOptions{
Name: optional.Some("sha1-instruction"),
AutoInit: optional.Some(false),
EnabledUnits: optional.Some([]unit_model.Type{unit_model.TypeCode}),
ObjectFormat: optional.Some("sha1"),
})
defer f()
portMatcher := regexp.MustCompile(`localhost:\d+`)
t.Run("sha256", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
name := objectFormat.Name()
var init string
if name == "sha1" {
init = "git init"
} else {
init = fmt.Sprintf("git init --object-format=%s", name)
}
repo, _, f := tests.CreateDeclarativeRepoWithOptions(t, user, tests.DeclarativeRepoOptions{
Name: optional.Some(name + "-instruction"),
AutoInit: optional.Some(false),
EnabledUnits: optional.Some([]unit_model.Type{unit_model.TypeCode}),
ObjectFormat: optional.Some(name),
})
defer f()
portMatcher := regexp.MustCompile(`localhost:\d+`)
resp := session.MakeRequest(t, NewRequest(t, "GET", "/"+repo.FullName()), http.StatusOK)
resp := session.MakeRequest(t, NewRequest(t, "GET", "/"+sha256Repo.FullName()), http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body)
assert.Equal(t, fmt.Sprintf(`touch README.md
%s
assert.Equal(t, `touch README.md
git init --object-format=sha256
git switch -c main
git add README.md
git commit -m "first commit"
git remote add origin http://localhost/user2/%s-instruction.git
git push -u origin main`, init, name), portMatcher.ReplaceAllString(htmlDoc.Find(".empty-repo-guide code").First().Text(), "localhost"))
git remote add origin http://localhost/user2/sha256-instruction.git
git push -u origin main`, portMatcher.ReplaceAllString(htmlDoc.Find(".empty-repo-guide code").First().Text(), "localhost"))
})
t.Run("sha1", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
resp := session.MakeRequest(t, NewRequest(t, "GET", "/"+sha1Repo.FullName()), http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body)
assert.Equal(t, `touch README.md
git init
git switch -c main
git add README.md
git commit -m "first commit"
git remote add origin http://localhost/user2/sha1-instruction.git
git push -u origin main`, portMatcher.ReplaceAllString(htmlDoc.Find(".empty-repo-guide code").First().Text(), "localhost"))
})
}

View file

@ -411,7 +411,7 @@ export default sfc; // activate the IDE's Vue plugin
<svg-icon name="octicon-archive" :size="16"/>
</div>
</a>
<a class="tw-flex tw-items-center" v-if="repo.latest_commit_status" :href="repo.latest_commit_status.TargetURL || null" :data-tooltip-content="repo.locale_latest_commit_status">
<a class="tw-flex tw-items-center" v-if="repo.latest_commit_status" :href="repo.latest_commit_status.TargetURL" :data-tooltip-content="repo.locale_latest_commit_status">
<!-- the commit status icon logic is taken from templates/repo/commit_status.tmpl -->
<svg-icon :name="statusIcon(repo.latest_commit_status.State)" :class="'tw-ml-2 commit-status icon text ' + statusColor(repo.latest_commit_status.State)" :size="16"/>
</a>

View file

@ -587,7 +587,9 @@ class ComboMarkdownEditor {
// Split the newline and prefix addition in two, so that it's two separate undo entries in Firefox
// Chrome seems to bundle everything together more aggressively, even with prior text input.
if (document.execCommand('insertText', false, '\n')) {
document.execCommand('insertText', false, text);
setTimeout(() => {
document.execCommand('insertText', false, text);
}, 1);
} else {
this.textarea.setRangeText(`\n${text}`);
}