mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-04-24 20:47:30 +00:00
[gitea] week 2025-15 cherry pick (gitea/main -> forgejo) (#7538)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7538 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Reviewed-by: Gusted <gusted@noreply.codeberg.org>
This commit is contained in:
commit
78e56ee2f7
7 changed files with 62 additions and 11 deletions
|
@ -2444,7 +2444,7 @@ LEVEL = Info
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Set the maximum number of characters in a mermaid source. (Set to -1 to disable limits)
|
;; Set the maximum number of characters in a mermaid source. (Set to -1 to disable limits)
|
||||||
;MERMAID_MAX_SOURCE_CHARACTERS = 5000
|
;MERMAID_MAX_SOURCE_CHARACTERS = 50000
|
||||||
;; Set the maximum number of lines allowed for a filepreview. (Set to -1 to disable limits; set to 0 to disable the feature)
|
;; Set the maximum number of lines allowed for a filepreview. (Set to -1 to disable limits; set to 0 to disable the feature)
|
||||||
;FILEPREVIEW_MAX_LINES = 50
|
;FILEPREVIEW_MAX_LINES = 50
|
||||||
|
|
||||||
|
|
|
@ -31,16 +31,19 @@ if [ -e /data/ssh/ssh_host_ecdsa_cert ]; then
|
||||||
SSH_ECDSA_CERT=${SSH_ECDSA_CERT:-"/data/ssh/ssh_host_ecdsa_cert"}
|
SSH_ECDSA_CERT=${SSH_ECDSA_CERT:-"/data/ssh/ssh_host_ecdsa_cert"}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e /data/ssh/ssh_host_ed25519-cert.pub ]; then
|
# In case someone wants to sign the `{keyname}.pub` key by `ssh-keygen -s ca -I identity ...` to
|
||||||
SSH_ED25519_CERT=${SSH_ED25519_CERT:-"/data/ssh/ssh_host_ed25519-cert.pub"}
|
# make use of the ssh-key certificate authority feature (see ssh-keygen CERTIFICATES section),
|
||||||
|
# the generated key file name is `{keyname}-cert.pub`
|
||||||
|
if [ -e /data/ssh/ssh_host_ed25519_key-cert.pub ]; then
|
||||||
|
SSH_ED25519_CERT=${SSH_ED25519_CERT:-"/data/ssh/ssh_host_ed25519_key-cert.pub"}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e /data/ssh/ssh_host_rsa-cert.pub ]; then
|
if [ -e /data/ssh/ssh_host_rsa_key-cert.pub ]; then
|
||||||
SSH_RSA_CERT=${SSH_RSA_CERT:-"/data/ssh/ssh_host_rsa-cert.pub"}
|
SSH_RSA_CERT=${SSH_RSA_CERT:-"/data/ssh/ssh_host_rsa_key-cert.pub"}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e /data/ssh/ssh_host_ecdsa-cert.pub ]; then
|
if [ -e /data/ssh/ssh_host_ecdsa_key-cert.pub ]; then
|
||||||
SSH_ECDSA_CERT=${SSH_ECDSA_CERT:-"/data/ssh/ssh_host_ecdsa-cert.pub"}
|
SSH_ECDSA_CERT=${SSH_ECDSA_CERT:-"/data/ssh/ssh_host_ecdsa_key-cert.pub"}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d /etc/ssh ]; then
|
if [ -d /etc/ssh ]; then
|
||||||
|
|
|
@ -91,7 +91,7 @@ func TestWebhook_EventsArray(t *testing.T) {
|
||||||
func TestCreateWebhook(t *testing.T) {
|
func TestCreateWebhook(t *testing.T) {
|
||||||
hook := &Webhook{
|
hook := &Webhook{
|
||||||
RepoID: 3,
|
RepoID: 3,
|
||||||
URL: "www.example.com/unit_test",
|
URL: "https://www.example.com/unit_test",
|
||||||
ContentType: ContentTypeJSON,
|
ContentType: ContentTypeJSON,
|
||||||
Events: `{"push_only":false,"send_everything":false,"choose_events":false,"events":{"create":false,"push":true,"pull_request":true}}`,
|
Events: `{"push_only":false,"send_everything":false,"choose_events":false,"events":{"create":false,"push":true,"pull_request":true}}`,
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ type MarkupSanitizerRule struct {
|
||||||
func loadMarkupFrom(rootCfg ConfigProvider) {
|
func loadMarkupFrom(rootCfg ConfigProvider) {
|
||||||
mustMapSetting(rootCfg, "markdown", &Markdown)
|
mustMapSetting(rootCfg, "markdown", &Markdown)
|
||||||
|
|
||||||
MermaidMaxSourceCharacters = rootCfg.Section("markup").Key("MERMAID_MAX_SOURCE_CHARACTERS").MustInt(5000)
|
MermaidMaxSourceCharacters = rootCfg.Section("markup").Key("MERMAID_MAX_SOURCE_CHARACTERS").MustInt(50000)
|
||||||
FilePreviewMaxLines = rootCfg.Section("markup").Key("FILEPREVIEW_MAX_LINES").MustInt(50)
|
FilePreviewMaxLines = rootCfg.Section("markup").Key("FILEPREVIEW_MAX_LINES").MustInt(50)
|
||||||
ExternalMarkupRenderers = make([]*MarkupRenderer, 0, 10)
|
ExternalMarkupRenderers = make([]*MarkupRenderer, 0, 10)
|
||||||
ExternalSanitizerRules = make([]MarkupSanitizerRule, 0, 10)
|
ExternalSanitizerRules = make([]MarkupSanitizerRule, 0, 10)
|
||||||
|
|
|
@ -140,7 +140,7 @@ func (g *GithubDownloaderV3) LogString() string {
|
||||||
func (g *GithubDownloaderV3) addClient(client *http.Client, baseURL string) {
|
func (g *GithubDownloaderV3) addClient(client *http.Client, baseURL string) {
|
||||||
githubClient := github.NewClient(client)
|
githubClient := github.NewClient(client)
|
||||||
if baseURL != "https://github.com" {
|
if baseURL != "https://github.com" {
|
||||||
githubClient, _ = github.NewClient(client).WithEnterpriseURLs(baseURL, baseURL)
|
githubClient, _ = githubClient.WithEnterpriseURLs(baseURL, baseURL)
|
||||||
}
|
}
|
||||||
g.clients = append(g.clients, githubClient)
|
g.clients = append(g.clients, githubClient)
|
||||||
g.rates = append(g.rates, nil)
|
g.rates = append(g.rates, nil)
|
||||||
|
@ -885,3 +885,18 @@ func (g *GithubDownloaderV3) GetReviews(reviewable base.Reviewable) ([]*base.Rev
|
||||||
}
|
}
|
||||||
return allReviews, nil
|
return allReviews, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FormatCloneURL add authentication into remote URLs
|
||||||
|
func (g *GithubDownloaderV3) FormatCloneURL(opts MigrateOptions, remoteAddr string) (string, error) {
|
||||||
|
u, err := url.Parse(remoteAddr)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
if len(opts.AuthToken) > 0 {
|
||||||
|
// "multiple tokens" are used to benefit more "API rate limit quota"
|
||||||
|
// git clone doesn't count for rate limits, so only use the first token.
|
||||||
|
// source: https://github.com/orgs/community/discussions/44515
|
||||||
|
u.User = url.UserPassword("oauth2", strings.Split(opts.AuthToken, ",")[0])
|
||||||
|
}
|
||||||
|
return u.String(), nil
|
||||||
|
}
|
||||||
|
|
|
@ -433,3 +433,36 @@ func TestGitHubDownloadRepo(t *testing.T) {
|
||||||
},
|
},
|
||||||
}, reviews)
|
}, reviews)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGithubMultiToken(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
desc string
|
||||||
|
token string
|
||||||
|
expectedCloneURL string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
desc: "Single Token",
|
||||||
|
token: "single_token",
|
||||||
|
expectedCloneURL: "https://oauth2:single_token@github.com",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Multi Token",
|
||||||
|
token: "token1,token2",
|
||||||
|
expectedCloneURL: "https://oauth2:token1@github.com",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
factory := GithubDownloaderV3Factory{}
|
||||||
|
|
||||||
|
for _, tC := range testCases {
|
||||||
|
t.Run(tC.desc, func(t *testing.T) {
|
||||||
|
opts := base.MigrateOptions{CloneAddr: "https://github.com/go-gitea/gitea", AuthToken: tC.token}
|
||||||
|
client, err := factory.New(t.Context(), opts)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
cloneURL, err := client.FormatCloneURL(opts, "https://github.com")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
assert.Equal(t, tC.expectedCloneURL, cloneURL)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -114,7 +114,7 @@
|
||||||
{{ctx.Locale.Tr "repo.milestones.closed" $closedDate}}
|
{{ctx.Locale.Tr "repo.milestones.closed" $closedDate}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{if .DeadlineString}}
|
{{if .DeadlineString}}
|
||||||
<span{{if .IsOverdue}} class="text red"{{end}}>
|
<span class="flex-text-inline {{if .IsOverdue}}text red{{end}}">
|
||||||
{{svg "octicon-calendar" 14}}
|
{{svg "octicon-calendar" 14}}
|
||||||
{{DateUtils.AbsoluteShort (.DeadlineString|DateUtils.ParseLegacy)}}
|
{{DateUtils.AbsoluteShort (.DeadlineString|DateUtils.ParseLegacy)}}
|
||||||
</span>
|
</span>
|
||||||
|
|
Loading…
Add table
Reference in a new issue