You've already forked woodpecker
mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-06-03 16:35:37 +02:00
Resolve built-in variables for global when filter (#1790)
addresses https://codeberg.org/Epsilon_02/todo-checker/commit/bd461477bd074ad4a572cdda03c0c3ad119235ec close #1244, close #1580 --------- Co-authored-by: Anbraten <anton@ju60.de>
This commit is contained in:
@@ -63,7 +63,7 @@ func Create(ctx context.Context, _store store.Store, repo *model.Repo, pipeline
|
||||
configFetcher := forge.NewConfigFetcher(server.Config.Services.Forge, server.Config.Services.Timeout, server.Config.Services.ConfigService, repoUser, repo, pipeline)
|
||||
forgeYamlConfigs, configFetchErr = configFetcher.Fetch(ctx)
|
||||
if configFetchErr == nil {
|
||||
filtered, parseErr = checkIfFiltered(pipeline, forgeYamlConfigs)
|
||||
filtered, parseErr = checkIfFiltered(repo, pipeline, forgeYamlConfigs)
|
||||
if parseErr == nil {
|
||||
if filtered {
|
||||
err := ErrFiltered{Msg: "branch does not match restrictions defined in yaml"}
|
||||
|
||||
+12
-17
@@ -22,6 +22,7 @@ import (
|
||||
"github.com/woodpecker-ci/woodpecker/pipeline"
|
||||
"github.com/woodpecker-ci/woodpecker/pipeline/frontend"
|
||||
"github.com/woodpecker-ci/woodpecker/pipeline/frontend/yaml"
|
||||
"github.com/woodpecker-ci/woodpecker/server"
|
||||
forge_types "github.com/woodpecker-ci/woodpecker/server/forge/types"
|
||||
"github.com/woodpecker-ci/woodpecker/server/model"
|
||||
)
|
||||
@@ -36,6 +37,7 @@ func zeroSteps(currentPipeline *model.Pipeline, forgeYamlConfigs []*forge_types.
|
||||
Regs: []*model.Registry{},
|
||||
Link: "",
|
||||
Yamls: forgeYamlConfigs,
|
||||
Forge: server.Config.Services.Forge,
|
||||
}
|
||||
|
||||
pipelineItems, err := b.Build()
|
||||
@@ -51,22 +53,20 @@ func zeroSteps(currentPipeline *model.Pipeline, forgeYamlConfigs []*forge_types.
|
||||
|
||||
// TODO: parse yaml once and not for each filter function
|
||||
// Check if at least one pipeline step will be execute otherwise we will just ignore this webhook
|
||||
func checkIfFiltered(pipeline *model.Pipeline, forgeYamlConfigs []*forge_types.FileMeta) (bool, error) {
|
||||
log.Trace().Msgf("hook.branchFiltered(): pipeline branch: '%s' pipeline event: '%s' config count: %d", pipeline.Branch, pipeline.Event, len(forgeYamlConfigs))
|
||||
func checkIfFiltered(repo *model.Repo, p *model.Pipeline, forgeYamlConfigs []*forge_types.FileMeta) (bool, error) {
|
||||
log.Trace().Msgf("hook.branchFiltered(): pipeline branch: '%s' pipeline event: '%s' config count: %d", p.Branch, p.Event, len(forgeYamlConfigs))
|
||||
|
||||
matchMetadata := frontend.Metadata{
|
||||
Curr: frontend.Pipeline{
|
||||
Event: string(pipeline.Event),
|
||||
Commit: frontend.Commit{
|
||||
Branch: pipeline.Branch,
|
||||
},
|
||||
},
|
||||
}
|
||||
matchMetadata := frontend.MetadataFromStruct(server.Config.Services.Forge, repo, p, nil, nil, "")
|
||||
|
||||
for _, forgeYamlConfig := range forgeYamlConfigs {
|
||||
parsedPipelineConfig, err := yaml.ParseBytes(forgeYamlConfig.Data)
|
||||
substitutedConfigData, err := frontend.EnvVarSubst(string(forgeYamlConfig.Data), matchMetadata.Environ())
|
||||
if err != nil {
|
||||
log.Trace().Msgf("parse config '%s': %s", forgeYamlConfig.Name, err)
|
||||
log.Trace().Err(err).Msgf("failed to substitute config '%s'", forgeYamlConfig.Name)
|
||||
return false, err
|
||||
}
|
||||
parsedPipelineConfig, err := yaml.ParseString(substitutedConfigData)
|
||||
if err != nil {
|
||||
log.Trace().Err(err).Msgf("failed to parse config '%s'", forgeYamlConfig.Name)
|
||||
return false, err
|
||||
}
|
||||
log.Trace().Msgf("config '%s': %#v", forgeYamlConfig.Name, parsedPipelineConfig)
|
||||
@@ -78,11 +78,6 @@ func checkIfFiltered(pipeline *model.Pipeline, forgeYamlConfigs []*forge_types.F
|
||||
return false, err
|
||||
}
|
||||
|
||||
// ignore if the pipeline was filtered by the branch (legacy)
|
||||
if !parsedPipelineConfig.Branches.Match(pipeline.Branch) {
|
||||
continue
|
||||
}
|
||||
|
||||
// at least one config yielded in a valid run.
|
||||
return false, nil
|
||||
}
|
||||
|
||||
@@ -77,6 +77,7 @@ func createPipelineItems(c context.Context, store store.Store,
|
||||
Envs: envs,
|
||||
Link: server.Config.Server.Host,
|
||||
Yamls: yamls,
|
||||
Forge: server.Config.Services.Forge,
|
||||
}
|
||||
pipelineItems, err := b.Build()
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user