feat: support ARTIFACT_ROOT_URL

This commit is contained in:
Jason Song 2024-05-07 11:10:00 +08:00
parent 9c08637eae
commit 719360c4d9
No known key found for this signature in database
GPG Key ID: 8402EEEE4511A8B5
6 changed files with 60 additions and 4 deletions

View File

@ -2593,6 +2593,9 @@ LEVEL = Info
;DEFAULT_ACTIONS_URL = github
;; Default artifact retention time in days. Artifacts could have their own retention periods by setting the `retention-days` option in `actions/upload-artifact` step.
;ARTIFACT_RETENTION_DAYS = 90
;; The root URL to generate links for uploading and downloading artifacts.
;; If not set, ROOT_URL will be used.
;ARTIFACT_ROOT_URL =
;; Timeout to stop the task which have running status, but haven't been updated for a long time
;ZOMBIE_TASK_TIMEOUT = 10m
;; Timeout to stop the tasks which have running status and continuous updates, but don't end for a long time

View File

@ -1399,6 +1399,7 @@ PROXY_HOSTS = *.github.com
- `STORAGE_TYPE`: **local**: Storage type for actions logs, `local` for local disk or `minio` for s3 compatible object storage service, default is `local` or other name defined with `[storage.xxx]`
- `MINIO_BASE_PATH`: **actions_log/**: Minio base path on the bucket only available when STORAGE_TYPE is `minio`
- `ARTIFACT_RETENTION_DAYS`: **90**: Default number of days to keep artifacts. Artifacts could have their own retention periods by setting the `retention-days` option in `actions/upload-artifact` step.
- `ARTIFACT_ROOT_URL`: **_empty_**: The root URL to generate links for uploading and downloading artifacts. If not set, `ROOT_URL` will be used.
- `ZOMBIE_TASK_TIMEOUT`: **10m**: Timeout to stop the task which have running status, but haven't been updated for a long time
- `ENDLESS_TASK_TIMEOUT`: **3h**: Timeout to stop the tasks which have running status and continuous updates, but don't end for a long time
- `ABANDONED_JOB_TIMEOUT`: **24h**: Timeout to cancel the jobs which have waiting status, but haven't been picked by a runner for a long time

View File

@ -1325,6 +1325,12 @@ PROXY_HOSTS = *.github.com
- `DEFAULT_ACTIONS_URL`: **github**:获取操作插件的默认平台,`github`表示`https://github.com``self`表示当前的 Gitea 实例。
- `STORAGE_TYPE`: **local**:用于操作日志的存储类型,`local`表示本地磁盘,`minio`表示与S3兼容的对象存储服务默认为`local`,或者使用定义为`[storage.xxx]`的其他名称。
- `MINIO_BASE_PATH`: **actions_log/**Minio存储桶上的基本路径仅在`STORAGE_TYPE`为`minio`时可用。
- `ARTIFACT_RETENTION_DAYS`: **90**: 默认保留工件的天数。Artifacts 可以通过在`actions/upload-artifact`步骤中设置`retention-days`选项来设置自己的保留期。
- `ARTIFACT_ROOT_URL`: **_empty_**: 生成上传和下载工件链接的根 URL。如果未设置将使用`ROOT_URL`。
- `ZOMBIE_TASK_TIMEOUT`: **10m**: 僵尸任务超时时间,用于停止处于运行状态但状态长时间未更新的任务。
- `ENDLESS_TASK_TIMEOUT`: **3h**: 无尽任务超时时间,用于停止处于运行状态且持续更新,但长时间未结束的任务。
- `ABANDONED_JOB_TIMEOUT`: **24h**: 未认领作业超时时间,用于取消处于等待状态但长时间未被运行器选择的作业。
- `SKIP_WORKFLOW_STRINGS`: **[skip ci],[ci skip],[no ci],[skip actions],[actions skip]**: 提交者可以在提交消息或 PR 标题中放置的字符串,以跳过执行相应的操作工作流。
`DEFAULT_ACTIONS_URL` 指示 Gitea 操作运行程序应该在哪里找到带有相对路径的操作。
例如,`uses: actions/checkout@v4` 表示 `https://github.com/actions/checkout@v4`,因为 `DEFAULT_ACTIONS_URL` 的值为 `github`

View File

@ -14,11 +14,12 @@ import (
// Actions settings
var (
Actions = struct {
LogStorage *Storage // how the created logs should be stored
ArtifactStorage *Storage // how the created artifacts should be stored
ArtifactRetentionDays int64 `ini:"ARTIFACT_RETENTION_DAYS"`
Enabled bool
DefaultActionsURL defaultActionsURL `ini:"DEFAULT_ACTIONS_URL"`
LogStorage *Storage // how the created logs should be stored
ArtifactStorage *Storage // how the created artifacts should be stored
ArtifactRetentionDays int64 `ini:"ARTIFACT_RETENTION_DAYS"`
ArtifactRootURL string `ini:"ARTIFACT_ROOT_URL"`
ZombieTaskTimeout time.Duration `ini:"ZOMBIE_TASK_TIMEOUT"`
EndlessTaskTimeout time.Duration `ini:"ENDLESS_TASK_TIMEOUT"`
AbandonedJobTimeout time.Duration `ini:"ABANDONED_JOB_TIMEOUT"`

View File

@ -185,7 +185,11 @@ type artifactRoutes struct {
}
func (ar artifactRoutes) buildArtifactURL(runID int64, artifactHash, suffix string) string {
uploadURL := strings.TrimSuffix(setting.AppURL, "/") + strings.TrimSuffix(ar.prefix, "/") +
rootUrl := setting.AppURL
if setting.Actions.ArtifactRootURL != "" {
rootUrl = setting.Actions.ArtifactRootURL
}
uploadURL := strings.TrimSuffix(rootUrl, "/") + strings.TrimSuffix(ar.prefix, "/") +
strings.ReplaceAll(artifactRouteBase, "{run_id}", strconv.FormatInt(runID, 10)) +
"/" + artifactHash + "/" + suffix
return uploadURL

View File

@ -0,0 +1,41 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package actions
import (
"crypto/md5"
"fmt"
"testing"
"code.gitea.io/gitea/modules/setting"
"github.com/stretchr/testify/assert"
)
func Test_artifactRoutes_buildArtifactURL(t *testing.T) {
oldAppURL := setting.AppURL
oldArtifactRootURL := setting.Actions.ArtifactRootURL
defer func() {
setting.AppURL = oldAppURL
setting.Actions.ArtifactRootURL = oldArtifactRootURL
}()
routes := artifactRoutes{
prefix: "/api/actions_pipeline",
}
{
setting.AppURL = "https://gitea.com"
setting.Actions.ArtifactRootURL = ""
u := routes.buildArtifactURL(100, fmt.Sprintf("%x", md5.Sum([]byte("test"))), "download_url")
assert.Equal(t, "https://gitea.com/api/actions_pipeline/_apis/pipelines/workflows/100/artifacts/098f6bcd4621d373cade4e832627b4f6/download_url", u)
}
{
setting.AppURL = "https://gitea.com"
setting.Actions.ArtifactRootURL = "http://gitea:3000"
u := routes.buildArtifactURL(100, fmt.Sprintf("%x", md5.Sum([]byte("test"))), "download_url")
assert.Equal(t, "http://gitea:3000/api/actions_pipeline/_apis/pipelines/workflows/100/artifacts/098f6bcd4621d373cade4e832627b4f6/download_url", u)
}
}