1
0
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:
6543
2023-06-05 00:15:07 +02:00
committed by GitHub
parent c919f32e0b
commit ea895baf83
25 changed files with 990 additions and 581 deletions
+1 -1
View File
@@ -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
View File
@@ -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
}
+1
View File
@@ -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 {