gitlab-runner artifacts-uploader does not fail if artifact file to upload does not exist

Summary

gitlab-runner artifacts-uploader does not fail if artifact file to upload does not exist.

This leads to pipeline working and lets subsequent pipelines fail or worse lets falsy data get to production.

This relates to gitlab#22711 as well

Steps to reproduce

Version of gitlab-runner: 11.8.0

Issue the following command:

/usr/bin/gitlab-runner artifacts-uploader \
   --url <url to gitlab ci> \
   --token <access token> \
   --id <id> \
   --path <path to NON existing file> \
   --artifact-format zip \
   --artifact-type archive

The return value will be 0

echo $?
0

What is the current bug behavior?

The output of the command is:

Runtime platform                                    arch=amd64 os=linux pid=21534 revision=4745a6f3 version=11.8.0
WARNING: <path to NON existing file>: no matching files               
ERROR: No files to upload 

But the exit code is 0.

What is the expected correct behavior?

The output should remain but the exit code should become 1.

Possible fixes

The problem exists in line 94 of commands/helpers/artifacts_uploader.go.

return nil

should be probably changed to

return errors.New("No files to upload")

or createReadStream should return an error.

Edited by James Heimbuck