From 7977a20bb4b095781f0328aff2e5e90f22cf6699 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Fri, 19 Oct 2018 16:16:30 +0200 Subject: Extend error message in case of HTTP errors in `include` --- lib/gitlab/ci/config/external/file/base.rb | 14 +++++++----- lib/gitlab/ci/config/external/file/local.rb | 2 -- lib/gitlab/ci/config/external/file/remote.rb | 32 +++++++++++++++++----------- 3 files changed, 28 insertions(+), 20 deletions(-) (limited to 'lib/gitlab/ci') diff --git a/lib/gitlab/ci/config/external/file/base.rb b/lib/gitlab/ci/config/external/file/base.rb index 390db997c0b..d02dac66f93 100644 --- a/lib/gitlab/ci/config/external/file/base.rb +++ b/lib/gitlab/ci/config/external/file/base.rb @@ -17,9 +17,7 @@ module Gitlab @opts = opts @errors = [] - validate_location! - validate_content! - validate_hash! + validate! end def invalid_extension? @@ -46,6 +44,12 @@ module Gitlab protected + def validate! + validate_location! + validate_content! if errors.none? + validate_hash! if errors.none? + end + def validate_location! if invalid_extension? errors.push("Included file `#{location}` does not have YAML extension!") @@ -53,13 +57,13 @@ module Gitlab end def validate_content! - if errors.none? && content.blank? + if content.blank? errors.push("Included file `#{location}` is empty or does not exist!") end end def validate_hash! - if errors.none? && to_hash.blank? + if to_hash.blank? errors.push("Included file `#{location}` does not have valid YAML syntax!") end end diff --git a/lib/gitlab/ci/config/external/file/local.rb b/lib/gitlab/ci/config/external/file/local.rb index acf4201a672..2a256aff65c 100644 --- a/lib/gitlab/ci/config/external/file/local.rb +++ b/lib/gitlab/ci/config/external/file/local.rb @@ -24,8 +24,6 @@ module Gitlab private def validate_content! - return if errors.any? - if content.nil? errors.push("Local file `#{location}` does not exist!") elsif content.blank? diff --git a/lib/gitlab/ci/config/external/file/remote.rb b/lib/gitlab/ci/config/external/file/remote.rb index b1ba37a3959..23dfc5d9d44 100644 --- a/lib/gitlab/ci/config/external/file/remote.rb +++ b/lib/gitlab/ci/config/external/file/remote.rb @@ -23,19 +23,25 @@ module Gitlab end def fetch_remote_content - Gitlab::HTTP.get(location) - rescue SocketError - errors.push("Remote file `#{location}` could not be fetched because of a socket error!") - nil - rescue Timeout::Error - errors.push("Remote file `#{location}` could not be fetched because of a timeout error!") - nil - rescue Gitlab::HTTP::Error - errors.push("Remote file `#{location}` could not be fetched because of a HTTP error!") - nil - rescue Gitlab::HTTP::BlockedUrlError - errors.push("Remote file `#{location}` could not be fetched because the URL is blocked!") - nil + begin + response = Gitlab::HTTP.get(location) + rescue SocketError + errors.push("Remote file `#{location}` could not be fetched because of a socket error!") + rescue Timeout::Error + errors.push("Remote file `#{location}` could not be fetched because of a timeout error!") + rescue Gitlab::HTTP::Error + errors.push("Remote file `#{location}` could not be fetched because of HTTP error!") + rescue Gitlab::HTTP::BlockedUrlError + errors.push("Remote file `#{location}` could not be fetched because the URL is blocked!") + end + + if response&.code.to_i >= 400 + errors.push <<~ERROR + Remote file `#{location}` could not be fetched because of HTTP code `#{response.code}` error! + ERROR + end + + response.to_s if errors.none? end end end -- cgit v1.2.1