Skip to content
Snippets Groups Projects

fix: read error from upload artifacts execution.

Merged Paul 🐻 requested to merge paulrbr/gitlab-runner:fix-artifact-upload-errors into master
All threads resolved!
Files
2
+ 15
31
@@ -9,7 +9,6 @@ import (
"path"
"strconv"
"strings"
"sync"
"time"
"github.com/Sirupsen/logrus"
@@ -174,48 +173,26 @@ func (b *Build) executeStage(ctx context.Context, buildStage BuildStage, executo
}
func (b *Build) executeUploadArtifacts(ctx context.Context, state error, executor Executor) (err error) {
jobState := state
var uploadError error
err = b.executeUploadArtifactsParallel(ctx, state, executor)
// Use job's error if set
if jobState != nil {
err = jobState
}
return
}
func (b *Build) executeUploadArtifactsParallel(ctx context.Context, state error, executor Executor) (err error) {
var wait sync.WaitGroup
var uploadErrors []error
for _, artifact := range b.Artifacts {
for _, artifact := range b.JobResponse.Artifacts {
when := artifact.When
if state == nil {
// Previous stages were successful
if when == "" || when == ArtifactWhenOnSuccess || when == ArtifactWhenAlways {
wait.Add(1)
go func() {
uploadErrors = append(uploadErrors, b.executeStage(ctx, BuildStageUploadArtifacts, executor))
wait.Done()
}()
uploadError = b.executeStage(ctx, BuildStageUploadArtifacts, executor)
}
} else {
// Previous stage did fail
if when == ArtifactWhenOnFailure || when == ArtifactWhenAlways {
wait.Add(1)
go func() {
uploadErrors = append(uploadErrors, b.executeStage(ctx, BuildStageUploadArtifacts, executor))
wait.Done()
}()
uploadError = b.executeStage(ctx, BuildStageUploadArtifacts, executor)
}
}
if uploadError != nil {
err = uploadError
}
}
wait.Wait()
if uploadErrors != nil {
err = uploadErrors[0]
}
return
}
@@ -248,7 +225,14 @@ func (b *Build) executeScript(ctx context.Context, executor Executor) error {
if err == nil {
err = b.executeStage(ctx, BuildStageArchiveCache, executor)
}
err = b.executeUploadArtifacts(ctx, err, executor)
jobState := err
err = b.executeUploadArtifacts(ctx, jobState, executor)
// Use job's error if set
if jobState != nil {
err = jobState
}
return err
}
Loading