Compare commits

..

No commits in common. "24a215e317103471aeb864f365089a36076efc1d" and "ae8e8f055e9edfe258e641df8752a070ffdd6823" have entirely different histories.

10 changed files with 39 additions and 44 deletions

View File

@ -91,6 +91,12 @@ As a workaround, you can use [go-hashfiles](https://gitea.com/actions/go-hashfil
## Missing features ## Missing features
### Variables
See [Variables](https://docs.github.com/en/actions/learn-github-actions/variables).
It's under development.
### Problem Matchers ### Problem Matchers
Problem Matchers are a way to scan the output of actions for a specified regex pattern and surface that information prominently in the UI. Problem Matchers are a way to scan the output of actions for a specified regex pattern and surface that information prominently in the UI.
@ -114,17 +120,15 @@ Pre and Post steps don't have their own section in the job log user interface.
### Downloading actions ### Downloading actions
Previously (Pre 1.21.0), `[actions].DEFAULT_ACTIONS_URL` defaulted to `https://gitea.com`. Gitea Actions doesn't download actions from GitHub by default.
We have since restricted this option to only allow two values (`github` and `self`). "By default" means that you don't specify the host in the `uses` field, like `uses: actions/checkout@v3`.
When set to `github`, the new default, Gitea will download non-fully-qualified actions from <https://github.com>. As a contrast, `uses: https://github.com/actions/checkout@v3` has specified host.
For example, if you use `uses: actions/checkout@v3`, it will download the checkout repository from <https://github.com/actions/checkout.git>.
If you want to download an action from another git hoster, you can use an absolute URL, e.g. `uses: https://gitea.com/actions/checkout@v3`. The missing host will be filled with `https://gitea.com` if you don't configure it.
That means `uses: actions/checkout@v3` will download the action from [gitea.com/actions/checkout](https://gitea.com/actions/checkout), instead of [github.com/actions/checkout](https://github.com/actions/checkout).
If your Gitea instance is in an intranet or a restricted area, you can set the URL to `self` to only download actions from your own instance by default. As mentioned, it's configurable.
Of course, you can still use absolute URLs in workflows. If you want your runners to download actions from GitHub or your own Gitea instance by default, you can configure it by setting `[actions].DEFAULT_ACTIONS_URL`. See [Configuration Cheat Sheet](administration/config-cheat-sheet.md#actions-actions).
More details about the `[actions].DEFAULT_ACTIONS_URL` configuration can be found in the [Configuration Cheat Sheet](administration/config-cheat-sheet.md#actions-actions)。
### Context availability ### Context availability

View File

@ -120,13 +120,15 @@ Gitea Actions目前不支持此功能。
### 下载Actions ### 下载Actions
`[actions].DEFAULT_ACTIONS_URL` 保持默认值为 `github`Gitea将会从 https://github.com 下载相对路径的actions。比如 Gitea Actions默认不从GitHub下载Actions。
如果你使用 `uses: actions/checkout@v3`Gitea将会从 https://github.com/actions/checkout.git 下载这个 actions 项目 "默认" 意味着您在`uses` 字段中不指定主机,如`uses: actions/checkout@v3`
如果你想要从另外一个 Git服务下载actions你只需要使用绝对URL `uses: https://gitea.com/actions/checkout@v3` 来下载 相反,`uses: https://github.com/actions/checkout@v3`是有指定主机的
如果你的 Gitea 实例是部署在一个互联网限制的网络中,有可以使用绝对地址来下载 actions。你也可以讲配置项修改为 `[actions].DEFAULT_ACTIONS_URL = self`。这样所有的相对路径的actions引用将不再会从 github.com 去下载,而会从这个 Gitea 实例自己的仓库中去下载。例如: `uses: actions/checkout@v3` 将会从 `[server].ROOT_URL`/actions/checkout.git 这个地址去下载 actions。 如果您不进行配置,缺失的主机将填充为`https://gitea.com`
这意味着`uses: actions/checkout@v3`将从[gitea.com/actions/checkout](https://gitea.com/actions/checkout)下载该Action而不是[github.com/actions/checkout](https://github.com/actions/checkout)。
设置`[actions].DEFAULT_ACTIONS_URL`进行配置。请参阅[配置备忘单](administration/config-cheat-sheet.md#actions-actions)。 正如前面提到的,这是可配置的。
如果您希望您的运行程序默认从GitHub或您自己的Gitea实例下载动作您可以通过设置`[actions].DEFAULT_ACTIONS_URL`进行配置。请参阅[配置备忘单](administration/config-cheat-sheet.md#actions-actions)。
### 上下文可用性 ### 上下文可用性

View File

@ -77,9 +77,8 @@ func userProfile(ctx *context.Context) {
func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileGitRepo *git.Repository, profileReadme *git.Blob) { func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileGitRepo *git.Repository, profileReadme *git.Blob) {
// if there is a profile readme, default to "overview" page, otherwise, default to "repositories" page // if there is a profile readme, default to "overview" page, otherwise, default to "repositories" page
// if there is not a profile readme, the overview tab should be treated as the repositories tab
tab := ctx.FormString("tab") tab := ctx.FormString("tab")
if tab == "" || tab == "overview" { if tab == "" {
if profileReadme != nil { if profileReadme != nil {
tab = "overview" tab = "overview"
} else { } else {
@ -158,10 +157,10 @@ func prepareUserProfileTabData(ctx *context.Context, showPrivate bool, profileGi
switch tab { switch tab {
case "followers": case "followers":
ctx.Data["Cards"] = followers ctx.Data["Cards"] = followers
total = int(numFollowers) total = int(count)
case "following": case "following":
ctx.Data["Cards"] = following ctx.Data["Cards"] = following
total = int(numFollowing) total = int(count)
case "activity": case "activity":
date := ctx.FormString("date") date := ctx.FormString("date")
pagingNum = setting.UI.FeedPagingNum pagingNum = setting.UI.FeedPagingNum

View File

@ -22,7 +22,7 @@ import (
type Provider interface { type Provider interface {
Name() string Name() string
DisplayName() string DisplayName() string
IconHTML(size int) template.HTML IconHTML() template.HTML
CustomURLSettings() *CustomURLSettings CustomURLSettings() *CustomURLSettings
} }
@ -54,16 +54,14 @@ func (p *AuthSourceProvider) DisplayName() string {
return p.sourceName return p.sourceName
} }
func (p *AuthSourceProvider) IconHTML(size int) template.HTML { func (p *AuthSourceProvider) IconHTML() template.HTML {
if p.iconURL != "" { if p.iconURL != "" {
img := fmt.Sprintf(`<img class="gt-object-contain gt-mr-3" width="%d" height="%d" src="%s" alt="%s">`, img := fmt.Sprintf(`<img class="gt-object-contain gt-mr-3" width="20" height="20" src="%s" alt="%s">`,
size,
size,
html.EscapeString(p.iconURL), html.EscapeString(p.DisplayName()), html.EscapeString(p.iconURL), html.EscapeString(p.DisplayName()),
) )
return template.HTML(img) return template.HTML(img)
} }
return p.GothProvider.IconHTML(size) return p.GothProvider.IconHTML()
} }
// Providers contains the map of registered OAuth2 providers in Gitea (based on goth) // Providers contains the map of registered OAuth2 providers in Gitea (based on goth)

View File

@ -27,7 +27,7 @@ func (b *BaseProvider) DisplayName() string {
} }
// IconHTML returns icon HTML for this provider // IconHTML returns icon HTML for this provider
func (b *BaseProvider) IconHTML(size int) template.HTML { func (b *BaseProvider) IconHTML() template.HTML {
svgName := "gitea-" + b.name svgName := "gitea-" + b.name
switch b.name { switch b.name {
case "gplus": case "gplus":
@ -35,10 +35,10 @@ func (b *BaseProvider) IconHTML(size int) template.HTML {
case "github": case "github":
svgName = "octicon-mark-github" svgName = "octicon-mark-github"
} }
svgHTML := svg.RenderHTML(svgName, size, "gt-mr-3") svgHTML := svg.RenderHTML(svgName, 20, "gt-mr-3")
if svgHTML == "" { if svgHTML == "" {
log.Error("No SVG icon for oauth2 provider %q", b.name) log.Error("No SVG icon for oauth2 provider %q", b.name)
svgHTML = svg.RenderHTML("gitea-openid", size, "gt-mr-3") svgHTML = svg.RenderHTML("gitea-openid", 20, "gt-mr-3")
} }
return svgHTML return svgHTML
} }

View File

@ -28,8 +28,8 @@ func (o *OpenIDProvider) DisplayName() string {
} }
// IconHTML returns icon HTML for this provider // IconHTML returns icon HTML for this provider
func (o *OpenIDProvider) IconHTML(size int) template.HTML { func (o *OpenIDProvider) IconHTML() template.HTML {
return svg.RenderHTML("gitea-openid", size, "gt-mr-3") return svg.RenderHTML("gitea-openid", 20, "gt-mr-3")
} }
// CreateGothProvider creates a GothProvider from this Provider // CreateGothProvider creates a GothProvider from this Provider

View File

@ -168,9 +168,7 @@ func TestRepository_AddWikiPage(t *testing.T) {
assert.NoError(t, AddWikiPage(git.DefaultContext, doer, repo, webPath, wikiContent, commitMsg)) assert.NoError(t, AddWikiPage(git.DefaultContext, doer, repo, webPath, wikiContent, commitMsg))
// Now need to show that the page has been added: // Now need to show that the page has been added:
gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath()) gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())
if !assert.NoError(t, err) { assert.NoError(t, err)
return
}
defer gitRepo.Close() defer gitRepo.Close()
masterTree, err := gitRepo.GetTree(DefaultBranch) masterTree, err := gitRepo.GetTree(DefaultBranch)
assert.NoError(t, err) assert.NoError(t, err)
@ -240,9 +238,7 @@ func TestRepository_DeleteWikiPage(t *testing.T) {
// Now need to show that the page has been added: // Now need to show that the page has been added:
gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath()) gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())
if !assert.NoError(t, err) { assert.NoError(t, err)
return
}
defer gitRepo.Close() defer gitRepo.Close()
masterTree, err := gitRepo.GetTree(DefaultBranch) masterTree, err := gitRepo.GetTree(DefaultBranch)
assert.NoError(t, err) assert.NoError(t, err)
@ -255,10 +251,8 @@ func TestPrepareWikiFileName(t *testing.T) {
unittest.PrepareTestEnv(t) unittest.PrepareTestEnv(t)
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath()) gitRepo, err := git.OpenRepository(git.DefaultContext, repo.WikiPath())
if !assert.NoError(t, err) {
return
}
defer gitRepo.Close() defer gitRepo.Close()
assert.NoError(t, err)
tests := []struct { tests := []struct {
name string name string
@ -309,10 +303,8 @@ func TestPrepareWikiFileName_FirstPage(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
gitRepo, err := git.OpenRepository(git.DefaultContext, tmpDir) gitRepo, err := git.OpenRepository(git.DefaultContext, tmpDir)
if !assert.NoError(t, err) {
return
}
defer gitRepo.Close() defer gitRepo.Close()
assert.NoError(t, err)
existence, newWikiPath, err := prepareGitPath(gitRepo, "Home") existence, newWikiPath, err := prepareGitPath(gitRepo, "Home")
assert.False(t, existence) assert.False(t, existence)

View File

@ -62,7 +62,7 @@
{{range $key := .OrderedOAuth2Names}} {{range $key := .OrderedOAuth2Names}}
{{$provider := index $.OAuth2Providers $key}} {{$provider := index $.OAuth2Providers $key}}
<a class="{{$provider.Name}} ui button gt-df gt-ac gt-jc gt-py-3 oauth-login-link" href="{{AppSubUrl}}/user/oauth2/{{$key}}"> <a class="{{$provider.Name}} ui button gt-df gt-ac gt-jc gt-py-3 oauth-login-link" href="{{AppSubUrl}}/user/oauth2/{{$key}}">
{{$provider.IconHTML 28}} {{$provider.IconHTML}}
{{$.locale.Tr "sign_in_with_provider" $provider.DisplayName}} {{$.locale.Tr "sign_in_with_provider" $provider.DisplayName}}
</a> </a>
{{end}} {{end}}

View File

@ -66,7 +66,7 @@
{{range $key := .OrderedOAuth2Names}} {{range $key := .OrderedOAuth2Names}}
{{$provider := index $.OAuth2Providers $key}} {{$provider := index $.OAuth2Providers $key}}
<a class="{{$provider.Name}} ui button gt-df gt-ac gt-jc gt-py-3 oauth-login-link" href="{{AppSubUrl}}/user/oauth2/{{$key}}"> <a class="{{$provider.Name}} ui button gt-df gt-ac gt-jc gt-py-3 oauth-login-link" href="{{AppSubUrl}}/user/oauth2/{{$key}}">
{{$provider.IconHTML 28}} {{$provider.IconHTML}}
{{$.locale.Tr "sign_in_with_provider" $provider.DisplayName}} {{$.locale.Tr "sign_in_with_provider" $provider.DisplayName}}
</a> </a>
{{end}} {{end}}

View File

@ -10,7 +10,7 @@
{{range $key := .OrderedOAuth2Names}} {{range $key := .OrderedOAuth2Names}}
{{$provider := index $.OAuth2Providers $key}} {{$provider := index $.OAuth2Providers $key}}
<a class="item" href="{{AppSubUrl}}/user/oauth2/{{$key}}"> <a class="item" href="{{AppSubUrl}}/user/oauth2/{{$key}}">
{{$provider.IconHTML 20}} {{$provider.IconHTML}}
{{$provider.DisplayName}} {{$provider.DisplayName}}
</a> </a>
{{end}} {{end}}