Skip to content

Commit

Permalink
feat: Add support for uninitialized custom params
Browse files Browse the repository at this point in the history
  • Loading branch information
aThorp96 committed Jan 30, 2025
1 parent 4a0d7a8 commit 63c9279
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 9 deletions.
1 change: 1 addition & 0 deletions pkg/apis/pipelinesascode/v1alpha1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ type Params struct {
Value string `json:"value,omitempty"`
SecretRef *Secret `json:"secret_ref,omitempty"`
Filter string `json:"filter,omitempty"`
Required bool `json:"required,omitempty"`
}

type Incoming struct {
Expand Down
28 changes: 19 additions & 9 deletions pkg/customparams/customparams.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (p *CustomParams) applyIncomingParams(ret map[string]string) map[string]str
// matched true.
func (p *CustomParams) GetParams(ctx context.Context) (map[string]string, map[string]interface{}, error) {
stdParams, changedFiles := p.makeStandardParamsFromEvent(ctx)
ret, mapFilters, parsedFromComment := map[string]string{}, map[string]string{}, map[string]string{}
resolvedParams, mapFilters, parsedFromComment := map[string]string{}, map[string]string{}, map[string]string{}
if p.event.TriggerComment != "" {
parsedFromComment = opscomments.ParseKeyValueArgs(p.event.TriggerComment)
for k, v := range parsedFromComment {
Expand Down Expand Up @@ -121,36 +121,46 @@ func (p *CustomParams) GetParams(ctx context.Context) (map[string]string, map[st
"ParamsFilterUsedValue",
fmt.Sprintf("repo %s, param name %s has a value and secretref, picking value", p.repo.GetName(), value.Name))
}
var resolvedValue string

if value.Value != "" {
ret[value.Name] = value.Value
resolvedValue = value.Value
} else if parsedValue, ok := parsedFromComment[value.Name]; ok && parsedValue != "" {
resolvedValue = parsedValue
} else if value.SecretRef != nil {
secretValue, err := p.k8int.GetSecret(ctx, sectypes.GetSecretOpt{
Namespace: p.repo.GetNamespace(),
Name: value.SecretRef.Name,
Key: value.SecretRef.Key,
})
if err != nil {
return ret, changedFiles, err
return resolvedParams, changedFiles, err
}
ret[value.Name] = secretValue
resolvedValue = secretValue
} else if value.Required {
return resolvedParams, changedFiles, fmt.Errorf("param %s is required but was not given any value", value.Name)
}

if resolvedValue != "" {
resolvedParams[value.Name] = resolvedValue
}
}

// TODO: Should we let the user override the standard params?
// we don't let them here
for k, v := range stdParams {
// check if not already there
if _, ok := ret[k]; !ok && v != "" {
ret[k] = v
if _, ok := resolvedParams[k]; !ok && v != "" {
resolvedParams[k] = v
}
}

// overwrite stdParams with parsed ones from the trigger comment
for k, v := range parsedFromComment {
if _, ok := ret[k]; ok && v != "" {
ret[k] = v
if _, ok := resolvedParams[k]; ok && v != "" {
resolvedParams[k] = v
}
}

return p.applyIncomingParams(ret), changedFiles, nil
return p.applyIncomingParams(resolvedParams), changedFiles, nil
}
43 changes: 43 additions & 0 deletions pkg/customparams/customparams_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,22 @@ func TestProcessTemplates(t *testing.T) {
},
},
},
{
name: "params/override params with no value via gitops arguments",
expected: map[string]string{
"event_type": "push",
"hello": `"yolo"`,
"trigger_comment": triggerCommentArgs,
},
event: &info.Event{EventType: "pull_request", TriggerComment: triggerCommentArgs},
repository: &v1alpha1.Repository{
Spec: v1alpha1.RepositorySpec{
Params: &[]v1alpha1.Params{
{Name: "hello"},
},
},
},
},
{
name: "params/skip with no name",
expectedLogSnippet: "no name has been set in params[0] of repo",
Expand All @@ -277,6 +293,33 @@ func TestProcessTemplates(t *testing.T) {
},
},
},
{
name: "params/skip with no value",
expected: map[string]string{},
repository: &v1alpha1.Repository{
Spec: v1alpha1.RepositorySpec{
Params: &[]v1alpha1.Params{
{
Name: "empty-param",
},
},
},
},
},
{
name: "params/missing required params",
expectedError: true,
repository: &v1alpha1.Repository{
Spec: v1alpha1.RepositorySpec{
Params: &[]v1alpha1.Params{
{
Name: "empty-param",
Required: true,
},
},
},
},
},
{
name: "params/pick value when value and secret set",
expected: map[string]string{"params": "batman"},
Expand Down

0 comments on commit 63c9279

Please sign in to comment.