Skip to content

Commit 88b86f9

Browse files
committed
Merge branch 'improve-error-messages-inputs' into 'main'
Introduce better job inputs interpolation error See merge request https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/6014 Merged-by: Timo Furrer <tfurrer@gitlab.com> Approved-by: Arran Walker <ajwalker@gitlab.com>
2 parents 59ec06c + bcac323 commit 88b86f9

5 files changed

Lines changed: 62 additions & 11 deletions

File tree

common/build.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1162,7 +1162,7 @@ func (b *Build) Run(globalConfig *Config, trace JobTrace) (err error) {
11621162

11631163
err = b.expandInputs()
11641164
if err != nil {
1165-
return fmt.Errorf("failed to expand inputs: %w", err)
1165+
return &BuildError{FailureReason: ConfigurationError, Inner: err}
11661166
}
11671167

11681168
b.logUsedImages()

common/build_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3551,6 +3551,38 @@ func TestExpandingInputs(t *testing.T) {
35513551
return build
35523552
}
35533553

3554+
t.Run("fail to expand inputs", func(t *testing.T) {
3555+
job := JobResponse{
3556+
Inputs: inputs,
3557+
Steps: Steps{
3558+
{
3559+
Name: StepNameScript,
3560+
Script: StepScript{"echo 'Input is: ${{ job.inputs.any_input + }}'"},
3561+
When: StepWhenAlways,
3562+
},
3563+
},
3564+
}
3565+
3566+
build, err := NewBuild(
3567+
job,
3568+
&RunnerConfig{RunnerSettings: RunnerSettings{
3569+
Executor: t.Name(),
3570+
FeatureFlags: map[string]bool{featureflags.EnableJobInputsInterpolation: true},
3571+
}},
3572+
nil,
3573+
nil,
3574+
)
3575+
require.NoError(t, err)
3576+
3577+
err = build.Run(&Config{}, &Trace{Writer: os.Stdout})
3578+
3579+
et := &BuildError{}
3580+
require.ErrorAs(t, err, &et)
3581+
assert.Equal(t, ConfigurationError, et.FailureReason)
3582+
etInner := &InputInterpolationError{}
3583+
assert.ErrorAs(t, et.Inner, &etInner)
3584+
})
3585+
35543586
t.Run("expand inputs in step script", func(t *testing.T) {
35553587
setup(t)
35563588

common/inputs.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ type InputExpander interface {
3636
Expand(*JobInputs) error
3737
}
3838

39+
type InputInterpolationError struct {
40+
err error
41+
}
42+
43+
func (e *InputInterpolationError) Error() string {
44+
return fmt.Sprintf("failed to interpolate job inputs: %s", e.err.Error())
45+
}
46+
3947
const (
4048
JobInputContentTypeNameString JobInputContentTypeName = "string"
4149
JobInputContentTypeNameNumber JobInputContentTypeName = "number"
@@ -211,12 +219,12 @@ func (i *JobInputs) Expand(text string) (string, error) {
211219

212220
expr, err := moa.ParseTemplate(text)
213221
if err != nil {
214-
return "", err
222+
return "", &InputInterpolationError{err: err}
215223
}
216224

217-
result, err := i.evaluator.Eval(expr)
225+
result, err := i.evaluator.Eval(text, expr)
218226
if err != nil {
219-
return "", err
227+
return "", &InputInterpolationError{err: err}
220228
}
221229

222230
if result.HasMarks(expression.Sensitive) {
@@ -234,7 +242,18 @@ func ExpandInputs(inputs *JobInputs, v any) error {
234242
if rv.Kind() != reflect.Struct {
235243
return fmt.Errorf("expected struct, got %s", rv.Kind())
236244
}
237-
return processStruct(inputs, rv)
245+
246+
err := processStruct(inputs, rv)
247+
if err != nil {
248+
e := &InputInterpolationError{}
249+
if errors.As(err, &e) {
250+
return e
251+
}
252+
253+
return err
254+
}
255+
256+
return nil
238257
}
239258

240259
//nolint:gocognit

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ require (
7979
gitlab.com/gitlab-org/gitlab-terminal v0.0.0-20230425133101-519a58790bfd
8080
gitlab.com/gitlab-org/golang-cli-helpers v0.0.0-20210929155855-70bef318ae0a
8181
gitlab.com/gitlab-org/labkit v1.28.1
82-
gitlab.com/gitlab-org/moa v0.0.0-20251111105317-872458e08dae
83-
gitlab.com/gitlab-org/step-runner v0.20.0
82+
gitlab.com/gitlab-org/moa v0.0.0-20251209091627-66342f721c88
83+
gitlab.com/gitlab-org/step-runner v0.22.0
8484
go.uber.org/automaxprocs v1.5.2
8585
gocloud.dev v0.40.0
8686
golang.org/x/crypto v0.46.0

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -623,10 +623,10 @@ gitlab.com/gitlab-org/golang-cli-helpers v0.0.0-20210929155855-70bef318ae0a h1:Y
623623
gitlab.com/gitlab-org/golang-cli-helpers v0.0.0-20210929155855-70bef318ae0a/go.mod h1:pKFT8nwdU5KuJYosKMGgMATMrV4AP6p9jRu4HobZaBA=
624624
gitlab.com/gitlab-org/labkit v1.28.1 h1:Is8PSG84PBgftYqielbIeij+XKABTtJHskT9mMGPSv8=
625625
gitlab.com/gitlab-org/labkit v1.28.1/go.mod h1:ZHOQIOVQKeOEKvQ/GhGBjUNbV3zWsx8nty6D/SRCyd4=
626-
gitlab.com/gitlab-org/moa v0.0.0-20251111105317-872458e08dae h1:5ey5ZuBQbcvGxRGt4H6tgIpDWiGoCiqCPJZxGevnKEc=
627-
gitlab.com/gitlab-org/moa v0.0.0-20251111105317-872458e08dae/go.mod h1:024490ksS75/Bi9UoJTu59qY44JuFBAfi5bzGsLIhtY=
628-
gitlab.com/gitlab-org/step-runner v0.20.0 h1:YD/mTdIE8YaPFwXnFdyE0Xv4uLDxMVb7XkRHrulPlEQ=
629-
gitlab.com/gitlab-org/step-runner v0.20.0/go.mod h1:gHiL+JwJuMdhNeElm+4kCwaK2vlcI5dq84W5aBDSs8Q=
626+
gitlab.com/gitlab-org/moa v0.0.0-20251209091627-66342f721c88 h1:GVlo8Pr4wfXI/6UF+Rmi0Yv2l7lwVgFiNBeImgWVeko=
627+
gitlab.com/gitlab-org/moa v0.0.0-20251209091627-66342f721c88/go.mod h1:024490ksS75/Bi9UoJTu59qY44JuFBAfi5bzGsLIhtY=
628+
gitlab.com/gitlab-org/step-runner v0.22.0 h1:eBrjtt6uDwXTu7vQ1erZ2J4SOn/af3fQUCMUC/TVUeg=
629+
gitlab.com/gitlab-org/step-runner v0.22.0/go.mod h1:vmmCQHUHUHlaqNmeLwaWxtpT0A6ORSFrX3ct7OCSiHE=
630630
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
631631
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
632632
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=

0 commit comments

Comments
 (0)