@@ -30,6 +30,9 @@ import (
3030 "gitlab.com/gitlab-org/gitlab-runner/session"
3131 "gitlab.com/gitlab-org/gitlab-runner/session/proxy"
3232 "gitlab.com/gitlab-org/gitlab-runner/session/terminal"
33+ "gitlab.com/gitlab-org/gitlab-runner/steps"
34+ "gitlab.com/gitlab-org/step-runner/pkg/api/client"
35+ "gitlab.com/gitlab-org/step-runner/schema/v1"
3336)
3437
3538type BuildRuntimeState string
@@ -159,8 +162,6 @@ type Build struct {
159162 Referees []referees.Referee
160163 ArtifactUploader func (config JobCredentials , bodyProvider ContentProvider , options ArtifactsOptions ) (UploadState , string )
161164
162- ExecuteStepFn func (ctx context.Context , connector Connector , build * Build , trace JobTrace ) error
163-
164165 urlHelper urlHelper
165166
166167 OnBuildStageStartFn OnBuildStageFn
@@ -407,7 +408,7 @@ func (b *Build) StartBuild(
407408 return nil
408409}
409410
410- func (b * Build ) executeStepStage (ctx context.Context , connector Connector , buildStage BuildStage , trace JobTrace ) error {
411+ func (b * Build ) executeStepStage (ctx context.Context , connector steps. Connector , buildStage BuildStage , req []schema. Step ) error {
411412 if ctx .Err () != nil {
412413 return ctx .Err ()
413414 }
@@ -430,14 +431,53 @@ func (b *Build) executeStepStage(ctx context.Context, connector Connector, build
430431 )
431432 b .logger .Println (msg )
432433
433- return b .ExecuteStepFn (ctx , connector , b , trace )
434+ // todo: step-runner should eventually:
435+ // - format its own logs to the Runner log spec
436+ // - provides its own timestamps and mask its own secrets
437+ // for now though, we wrap its logs providing this, and treat everything as stdout
438+ stdout := b .logger .Stream (buildlogger .StreamWorkLevel , buildlogger .Stdout )
439+
440+ info := steps.JobInfo {
441+ ID : b .ID ,
442+ ProjectDir : b .FullProjectDir (),
443+ Variables : b .GetAllVariables (),
444+ }
445+
446+ err := steps .Execute (ctx , connector , info , req , stdout )
447+ if err != nil {
448+ berr := & BuildError {Inner : err }
449+
450+ var cserr * steps.ClientStatusError
451+ if errors .As (err , & cserr ) {
452+ switch cserr .Status .State {
453+ case client .StateUnspecified :
454+ berr .FailureReason = UnknownFailure
455+ case client .StateFailure :
456+ berr .FailureReason = ScriptFailure
457+ }
458+ }
459+
460+ return berr
461+ }
462+
463+ return err
434464 },
435465 }
436466
437467 return section .Execute (& b .logger )
438468}
439469
470+ //nolint:gocognit
440471func (b * Build ) executeStage (ctx context.Context , buildStage BuildStage , executor Executor ) error {
472+ if b .UseNativeSteps () {
473+ connector , ok := executor .(steps.Connector )
474+ if ok {
475+ if handled , steps := stepDispatch (b , executor , buildStage ); handled {
476+ return b .executeStepStage (ctx , connector , buildStage , steps )
477+ }
478+ }
479+ }
480+
441481 if ctx .Err () != nil {
442482 return ctx .Err ()
443483 }
@@ -585,13 +625,11 @@ func (b *Build) executeScript(ctx context.Context, trace JobTrace, executor Exec
585625 // execute user provided scripts
586626 //nolint:nestif
587627 if err == nil {
588- if b .UseNativeSteps () && b .ExecuteStepFn != nil {
589- connector , ok := executor .(Connector )
590- if ok {
591- err = b .executeStepStage (ctx , connector , BuildStage ("step_" + spec .StepNameRun ), trace )
592- } else {
628+ if b .UseNativeSteps () && len (b .Job .Run ) > 0 {
629+ if _ , ok := executor .(steps.Connector ); ! ok {
593630 return ExecutorStepRunnerConnectNotSupported
594631 }
632+ err = b .executeStage (ctx , stepRunBuildStage , executor )
595633 } else {
596634 err = b .executeUserScripts (ctx , trace , executor )
597635 }
0 commit comments