Commit b2bb6152 authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch '238986-add-zip-vfs-to-pages-api-using-artifacts-zip-archive' into 'master'

Use latest pages build artifact as source for pages

See merge request gitlab-org/gitlab!40361
parents eb3d943b 3d0bdacf
......@@ -22,10 +22,11 @@ module Pages
end
def source
{
type: 'file',
path: File.join(project.full_path, 'public/')
}
if artifacts_archive && !artifacts_archive.file_storage?
zip_source
else
file_source
end
end
def prefix
......@@ -39,5 +40,28 @@ module Pages
private
attr_reader :project, :trim_prefix, :domain
def artifacts_archive
return unless Feature.enabled?(:pages_artifacts_archive, project)
# Using build artifacts is temporary solution for quick test
# in production environment, we'll replace this with proper
# `pages_deployments` later
project.pages_metadatum.artifacts_archive&.file
end
def zip_source
{
type: 'zip',
path: artifacts_archive.url(expire_at: 1.day.from_now)
}
end
def file_source
{
type: 'file',
path: File.join(project.full_path, 'public/')
}
end
end
end
---
name: pages_artifacts_archive
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40361
rollout_issue_url:
group: group::release management
type: development
default_enabled: false
\ No newline at end of file
......@@ -3,20 +3,20 @@
require 'spec_helper'
RSpec.describe Pages::LookupPath do
let(:project) do
instance_double(Project,
id: 12345,
private_pages?: true,
pages_https_only?: true,
full_path: 'the/full/path'
)
let_it_be(:project) do
create(:project, :pages_private, pages_https_only: true)
end
subject(:lookup_path) { described_class.new(project) }
before do
stub_pages_setting(access_control: true, external_https: ["1.1.1.1:443"])
stub_artifacts_object_storage
end
describe '#project_id' do
it 'delegates to Project#id' do
expect(lookup_path.project_id).to eq(12345)
expect(lookup_path.project_id).to eq(project.id)
end
end
......@@ -47,12 +47,49 @@ RSpec.describe Pages::LookupPath do
end
describe '#source' do
it 'sets the source type to "file"' do
expect(lookup_path.source[:type]).to eq('file')
shared_examples 'uses disk storage' do
it 'sets the source type to "file"' do
expect(lookup_path.source[:type]).to eq('file')
end
it 'sets the source path to the project full path suffixed with "public/' do
expect(lookup_path.source[:path]).to eq(project.full_path + "/public/")
end
end
it 'sets the source path to the project full path suffixed with "public/' do
expect(lookup_path.source[:path]).to eq('the/full/path/public/')
include_examples 'uses disk storage'
context 'when artifact_id from build job is present in pages metadata' do
let(:artifacts_archive) { create(:ci_job_artifact, :zip, :remote_store, project: project) }
before do
project.mark_pages_as_deployed(artifacts_archive: artifacts_archive)
end
it 'sets the source type to "zip"' do
expect(lookup_path.source[:type]).to eq('zip')
end
it 'sets the source path to the artifacts archive URL' do
Timecop.freeze do
expect(lookup_path.source[:path]).to eq(artifacts_archive.file.url(expire_at: 1.day.from_now))
expect(lookup_path.source[:path]).to include("Expires=86400")
end
end
context 'when artifact is not uploaded to object storage' do
let(:artifacts_archive) { create(:ci_job_artifact, :zip) }
include_examples 'uses disk storage'
end
context 'when feature flag is disabled' do
before do
stub_feature_flags(pages_artifacts_archive: false)
end
include_examples 'uses disk storage'
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