Commit ef3eb2d9 authored by Nick Thomas's avatar Nick Thomas Committed by Winnie Hellmann

Fix the external URLs generated for online view of HTML artifacts

parent 5e93320e
...@@ -2,7 +2,7 @@ module Ci ...@@ -2,7 +2,7 @@ module Ci
class ArtifactBlob class ArtifactBlob
include BlobLike include BlobLike
EXTENTIONS_SERVED_BY_PAGES = %w[.html .htm .txt .json].freeze EXTENSIONS_SERVED_BY_PAGES = %w[.html .htm .txt .json].freeze
attr_reader :entry attr_reader :entry
...@@ -36,17 +36,22 @@ module Ci ...@@ -36,17 +36,22 @@ module Ci
def external_url(project, job) def external_url(project, job)
return unless external_link?(job) return unless external_link?(job)
components = project.full_path_components full_path_parts = project.full_path_components
components << "-/jobs/#{job.id}/artifacts/file/#{path}" top_level_group = full_path_parts.shift
artifact_path = components[1..-1].join('/')
"#{pages_config.protocol}://#{components[0]}.#{pages_config.host}/#{artifact_path}" artifact_path = [
'-', *full_path_parts, '-',
'jobs', job.id,
'artifacts', path
].join('/')
"#{pages_config.protocol}://#{top_level_group}.#{pages_config.host}/#{artifact_path}"
end end
def external_link?(job) def external_link?(job)
pages_config.enabled && pages_config.enabled &&
pages_config.artifacts_server && pages_config.artifacts_server &&
EXTENTIONS_SERVED_BY_PAGES.include?(File.extname(name)) && EXTENSIONS_SERVED_BY_PAGES.include?(File.extname(name)) &&
job.project.public? job.project.public?
end end
......
---
title: Fix the external URLs generated for online view of HTML artifacts
merge_request: 14977
author:
type: fixed
...@@ -56,15 +56,14 @@ describe Ci::ArtifactBlob do ...@@ -56,15 +56,14 @@ describe Ci::ArtifactBlob do
end end
context 'txt extensions' do context 'txt extensions' do
let(:entry) { build.artifacts_metadata_entry('other_artifacts_0.1.2/doc_sample.txt') } let(:path) { 'other_artifacts_0.1.2/doc_sample.txt' }
let(:entry) { build.artifacts_metadata_entry(path) }
it 'returns a URL' do it 'returns a URL' do
url = subject.external_url(build.project, build) url = subject.external_url(build.project, build)
expect(url).not_to be_nil expect(url).not_to be_nil
expect(url).to start_with("http") expect(url).to eq("http://#{project.namespace.path}.#{Gitlab.config.pages.host}/-/#{project.path}/-/jobs/#{build.id}/artifacts/#{path}")
expect(url).to match Gitlab.config.pages.host
expect(url).to end_with(entry.path)
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment