feat: support env & concat

This commit is contained in:
engigu
2026-03-06 10:00:40 +08:00
parent 7061cabd82
commit beae79f448
3 changed files with 33 additions and 174 deletions
+28 -4
View File
@@ -118,20 +118,44 @@ func (es *EnvService) DeleteEnvVar(id string, force bool) (bool, []models.Task)
}
// GetEnvVarsByIDs 根据逗号分隔的ID字符串获取环境变量列表,返回 NAME=VALUE 格式
// 如果存在重名变量,会类似青龙面板一样使用 & 拼接
func (es *EnvService) GetEnvVarsByIDs(envIDs string) []string {
if envIDs == "" {
return nil
}
var envVars []string
ids := splitEnvIDs(envIDs)
type mergedEnv struct {
name string
values []string
}
var mergedList []mergedEnv
nameToIndex := make(map[string]int)
for _, id := range ids {
env := es.GetEnvVarByID(id)
if env != nil {
envVars = append(envVars, env.Name+"="+env.Value)
if env == nil {
continue
}
if idx, ok := nameToIndex[env.Name]; ok {
mergedList[idx].values = append(mergedList[idx].values, env.Value)
} else {
nameToIndex[env.Name] = len(mergedList)
mergedList = append(mergedList, mergedEnv{
name: env.Name,
values: []string{env.Value},
})
}
}
return envVars
var result []string
for _, item := range mergedList {
// 多个值使用 & 拼接
val := strings.Join(item.values, "&")
result = append(result, item.name+"="+val)
}
return result
}
// splitEnvIDs 解析逗号分隔的ID字符串
+5 -9
View File
@@ -936,19 +936,15 @@ func (es *ExecutorService) BuildRepoCommand(task *models.Task) (string, string)
return exePath + " " + strings.Join(args, " "), filepath.Dir(exePath)
}
// loadEnvVars 加载环境变量
// loadEnvVars 加载环境变量(支持重名合并)
func (es *ExecutorService) loadEnvVars(envIDs string) []string {
if envIDs == "" {
return nil
}
var envVars []models.EnvironmentVariable
ids := strings.Split(envIDs, ",")
database.DB.Where("id IN ?", ids).Find(&envVars)
result := make([]string, 0, len(envVars))
for _, env := range envVars {
result = append(result, fmt.Sprintf("%s=%s", env.Name, env.Value))
if es.envService != nil {
return es.envService.GetEnvVarsByIDs(envIDs)
}
return result
return nil
}