Skip to content
Snippets Groups Projects
Verified Commit 352d2d69 authored by David Fernandez's avatar David Fernandez :palm_tree: Committed by GitLab
Browse files

Merge branch '333033-get-endpoint-revision-recipe-file' into 'master'

parents 2b884000 e8507d22
No related branches found
No related tags found
3 merge requests!181325Fix ambiguous `created_at` in project.rb,!180727Resolve "Extend job archival mechanism to the whole pipeline",!176600Add the download endpoint for Conan v2 recipe files
Pipeline #1668149032 passed
Showing
with 301 additions and 110 deletions
......@@ -8,6 +8,7 @@ class PackageFileFinder < ::Packages::PackageFileFinder
def package_files
files = super
files = by_conan_file_type(files)
files = by_recipe_revision(files)
by_conan_package_reference(files)
end
......@@ -22,6 +23,16 @@ def by_conan_package_reference(files)
files.with_conan_package_reference(params[:conan_package_reference])
end
def by_recipe_revision(files)
return files unless params[:recipe_revision]
if params[:recipe_revision] == Packages::Conan::FileMetadatum::DEFAULT_REVISION
files.without_conan_recipe_revision
else
files.with_conan_recipe_revision(params[:recipe_revision])
end
end
end
end
end
......@@ -14,8 +14,7 @@ class Packages::Conan::FileMetadatum < ApplicationRecord
validates :package_reference, absence: true, if: :recipe_file?
validates :package_reference, presence: true, if: :package_file?, on: :create
validate :conan_package_type
# recipe_revision and package_revision are not supported yet
validates :recipe_revision, absence: true
# package_revision is not supported yet
validates :package_revision, absence: true
enum conan_file_type: { recipe_file: 1, package_file: 2 }
......@@ -26,7 +25,7 @@ class Packages::Conan::FileMetadatum < ApplicationRecord
CONAN_MANIFEST = 'conanmanifest.txt'
def recipe_revision_value
DEFAULT_REVISION
recipe_revision&.revision || DEFAULT_REVISION
end
def package_revision_value
......
......@@ -99,6 +99,16 @@ class Packages::PackageFile < ApplicationRecord
.where(packages_conan_file_metadata: { conan_package_reference: conan_package_reference })
end
scope :with_conan_recipe_revision, ->(recipe_revision) do
joins(conan_file_metadatum: :recipe_revision)
.where(packages_conan_recipe_revisions: { revision: recipe_revision })
end
scope :without_conan_recipe_revision, -> do
joins(:conan_file_metadatum)
.where(packages_conan_file_metadata: { recipe_revision_id: nil })
end
def self.most_recent!
recent.first!
end
......
# frozen_string_literal: true
class AddIdxPkgsConanMetadataOnPkgFileIdWhenNullRecRev < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '17.9'
INDEX_NAME = 'idx_pkgs_conan_metadata_on_pkg_file_id_when_null_rec_rev'
def up
add_concurrent_index(
:packages_conan_file_metadata,
:package_file_id,
where: 'recipe_revision_id IS NULL',
name: INDEX_NAME
)
end
def down
remove_concurrent_index_by_name(:packages_conan_file_metadata, INDEX_NAME)
end
end
# frozen_string_literal: true
class AddIdxPkgsConanRecipeRevOnIdAndRevision < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '17.9'
INDEX_NAME = 'idx_pkgs_conan_recipe_rev_on_id_and_revision'
def up
add_concurrent_index(
:packages_conan_recipe_revisions,
[:id, :revision],
name: INDEX_NAME
)
end
def down
remove_concurrent_index_by_name(:packages_conan_recipe_revisions, INDEX_NAME)
end
end
0f1c02788064a0d3500787af973b0c0a26103115915ddd495cbd6c449cd29ee5
\ No newline at end of file
cadce898a4a6407aea39f9462e18e6753e2f4a2d08117365ac70761b70b52d81
\ No newline at end of file
......@@ -31110,6 +31110,10 @@ CREATE INDEX idx_pipeline_execution_schedules_security_policy_id_and_id ON secur
 
CREATE INDEX idx_pkgs_conan_file_metadata_on_pkg_file_id_when_recipe_file ON packages_conan_file_metadata USING btree (package_file_id) WHERE (conan_file_type = 1);
 
CREATE INDEX idx_pkgs_conan_metadata_on_pkg_file_id_when_null_rec_rev ON packages_conan_file_metadata USING btree (package_file_id) WHERE (recipe_revision_id IS NULL);
CREATE INDEX idx_pkgs_conan_recipe_rev_on_id_and_revision ON packages_conan_recipe_revisions USING btree (id, revision);
CREATE INDEX idx_pkgs_debian_group_distribution_keys_on_distribution_id ON packages_debian_group_distribution_keys USING btree (distribution_id);
 
CREATE INDEX idx_pkgs_debian_project_distribution_keys_on_distribution_id ON packages_debian_project_distribution_keys USING btree (distribution_id);
......@@ -8,7 +8,7 @@
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group, maintainers: user) }
let_it_be(:project) { create(:project, group: group) }
let_it_be(:package) { create(:conan_package, project: project) }
let_it_be(:package) { create(:conan_package, project: project, without_recipe_revisions: true) }
let_it_be(:personal_access_token) { create(:personal_access_token, user: user) }
let_it_be(:package_file) { package.package_files.find_by(file_name: 'conaninfo.txt') }
let_it_be(:metadata) { package_file.conan_file_metadatum }
......
......@@ -6,7 +6,7 @@ module V2
class ProjectPackages < ::API::Base
before do
if Feature.disabled?(:conan_package_revisions_support, Feature.current_request)
render_api_error!("'conan_package_revisions_support' feature flag is disabled", :not_found)
not_found!("'conan_package_revisions_support' feature flag is disabled")
end
end
......@@ -35,35 +35,37 @@ class ProjectPackages < ::API::Base
check_username_channel
end
desc 'Download recipe files' do
detail 'This feature was introduced in GitLab 17.8'
success code: 200
failure [
{ code: 400, message: 'Bad Request' },
{ code: 401, message: 'Unauthorized' },
{ code: 403, message: 'Forbidden' },
{ code: 404, message: 'Not Found' }
]
tags %w[conan_packages]
hidden true
end
params do
with(type: String) do
requires :recipe_revision, regexp: Gitlab::Regex.conan_revision_regex_v2,
namespace 'revisions' do
params do
requires :recipe_revision, type: String, regexp: Gitlab::Regex.conan_revision_regex_v2,
desc: 'Recipe revision', documentation: { example: 'df28fd816be3a119de5ce4d374436b25' }
requires :file_name, type: String, desc: 'Package file name', values: CONAN_FILES,
documentation: { example: 'conanfile.py' }
end
end
route_setting :authentication, job_token_allowed: true, basic_auth_personal_access_token: true
route_setting :authorization, job_token_policies: :read_packages
get 'revisions/:recipe_revision/files/:file_name', requirements: FILE_NAME_REQUIREMENTS do
authorize_job_token_policies!(project)
render_api_error!('Not supported', :not_found)
namespace ':recipe_revision' do
namespace 'files' do
params do
requires :file_name, type: String, desc: 'Package file name', values: CONAN_FILES,
documentation: { example: 'conanfile.py' }
end
namespace ':file_name', requirements: FILE_NAME_REQUIREMENTS do
desc 'Download recipe files' do
detail 'This feature was introduced in GitLab 17.8'
success code: 200
failure [
{ code: 400, message: 'Bad Request' },
{ code: 401, message: 'Unauthorized' },
{ code: 403, message: 'Forbidden' },
{ code: 404, message: 'Not Found' }
]
tags %w[conan_packages]
end
route_setting :authentication, job_token_allowed: true, basic_auth_personal_access_token: true
route_setting :authorization, job_token_policies: :read_packages
get urgency: :low do
download_package_file(:recipe_file)
end
end
end
end
end
end
end
......
......@@ -29,7 +29,7 @@ def present_download_urls(entity)
package,
current_user,
project,
conan_package_reference: params[:conan_package_reference],
conan_package_reference: declared(params)[:conan_package_reference],
id: params[:id]
)
......@@ -68,7 +68,7 @@ def package_file?(file_name)
def build_package_file_upload_url(file_name)
options = url_options(file_name).merge(
conan_package_reference: params[:conan_package_reference],
conan_package_reference: declared(params)[:conan_package_reference],
package_revision: ::Packages::Conan::FileMetadatum::DEFAULT_REVISION
)
......@@ -162,12 +162,15 @@ def token
def download_package_file(file_type)
authorize_read_package!(project)
not_found!('Package') unless package
package_file = ::Packages::Conan::PackageFileFinder
.new(
package,
params[:file_name].to_s,
conan_file_type: file_type,
conan_package_reference: params[:conan_package_reference]
conan_package_reference: declared(params)[:conan_package_reference],
recipe_revision: params[:recipe_revision]
).execute!
track_package_event('pull_package', :conan, category: 'API::ConanPackages', project: project, namespace: project.namespace) if params[:file_name] == ::Packages::Conan::FileMetadatum::PACKAGE_BINARY
......
......@@ -10,14 +10,17 @@
transient do
without_package_files { false }
package_references { ['1234567890abcdef1234567890abcdef12345678'] }
without_recipe_revisions { false }
end
conan_recipe_revisions do
next [] if without_recipe_revisions
[association(:conan_recipe_revision, package: instance)]
end
conan_package_references do
package_references.map do |ref|
association(:conan_package_reference,
reference: ref, package: instance)
end
[association(:conan_package_reference, package: instance, recipe_revision: instance.conan_recipe_revisions.first)]
end
after :build do |package|
......@@ -28,16 +31,16 @@
after :create do |package, evaluator|
unless evaluator.without_package_files
%i[conan_recipe_file conan_recipe_manifest].each do |file|
create :conan_package_file, file, package: package
end
recipe_files = %i[conan_recipe_file conan_recipe_manifest]
package_file_traits = %i[conan_package_info conan_package_manifest conan_package]
package.conan_package_references.each do |reference|
package_file_traits.each do |file|
create :conan_package_file, file, package: package,
conan_package_reference: reference
end
recipe_files.each do |file|
create :conan_package_file, file, package: package,
conan_recipe_revision: package.conan_recipe_revisions.first
end
package_file_traits.each do |file|
create :conan_package_file, file, package: package,
conan_package_reference: package.conan_package_references.first,
conan_recipe_revision: package.conan_recipe_revisions.first
end
end
end
......
......@@ -26,12 +26,14 @@
transient do
without_loaded_metadatum { false }
conan_package_reference { package.conan_package_references.first }
conan_recipe_revision { package.conan_recipe_revisions.first }
end
trait(:conan_recipe_file) do
after :create do |package_file, evaluator|
unless evaluator.without_loaded_metadatum
create :conan_file_metadatum, :recipe_file, package_file: package_file
create :conan_file_metadatum, :recipe_file,
{ package_file: package_file, recipe_revision: evaluator.conan_recipe_revision }.compact
end
end
......@@ -45,7 +47,8 @@
trait(:conan_recipe_manifest) do
after :create do |package_file, evaluator|
unless evaluator.without_loaded_metadatum
create :conan_file_metadatum, :recipe_file, package_file: package_file
create :conan_file_metadatum, :recipe_file,
{ package_file: package_file, recipe_revision: evaluator.conan_recipe_revision }.compact
end
end
......@@ -60,7 +63,8 @@
after :create do |package_file, evaluator|
unless evaluator.without_loaded_metadatum
create :conan_file_metadatum, :package_file,
{ package_file: package_file, package_reference: evaluator.conan_package_reference }.compact
{ package_file: package_file, package_reference: evaluator.conan_package_reference,
recipe_revision: evaluator.conan_recipe_revision }.compact
end
end
......@@ -75,7 +79,8 @@
after :create do |package_file, evaluator|
unless evaluator.without_loaded_metadatum
create :conan_file_metadatum, :package_file,
{ package_file: package_file, package_reference: evaluator.conan_package_reference }.compact
{ package_file: package_file, package_reference: evaluator.conan_package_reference,
recipe_revision: evaluator.conan_recipe_revision }.compact
end
end
......@@ -90,7 +95,8 @@
after :create do |package_file, evaluator|
unless evaluator.without_loaded_metadatum
create :conan_file_metadatum, :package_file,
{ package_file: package_file, package_reference: evaluator.conan_package_reference }.compact
{ package_file: package_file, package_reference: evaluator.conan_package_reference,
recipe_revision: evaluator.conan_recipe_revision }.compact
end
end
......
......@@ -20,10 +20,6 @@
end
context 'with conan_package_reference' do
let_it_be(:other_package) { create(:conan_package) }
let_it_be(:package_file_name) { 'conan_package.tgz' }
let_it_be(:package_file) { package.package_files.find_by(file_name: package_file_name) }
let(:params) do
{ conan_package_reference: package_file.conan_file_metadatum.conan_package_reference }
end
......@@ -37,6 +33,30 @@
it { is_expected.to eq(package_file) }
end
context 'with recipe_revision' do
let(:params) { { recipe_revision: recipe_revision_value } }
context 'with default revision' do
let(:recipe_revision_value) { Packages::Conan::FileMetadatum::DEFAULT_REVISION }
let_it_be(:package_file_without_revision) do
create(:conan_package_file, :conan_recipe_file,
package: package, conan_recipe_revision: nil)
end
it 'returns package files without recipe revision' do
expect(subject).to eq(package_file_without_revision)
end
end
context 'with specific revision' do
let(:recipe_revision_value) { package_file.conan_file_metadatum.recipe_revision_value }
it 'returns package files with matching recipe revision' do
expect(subject).to eq(package_file)
end
end
end
end
shared_examples 'not returning pending_destruction package files' do
......
......@@ -26,7 +26,6 @@
describe 'validations' do
it { is_expected.to validate_presence_of(:package_file) }
it { is_expected.to validate_absence_of(:recipe_revision) }
it { is_expected.to validate_absence_of(:package_revision) }
describe '#conan_package_reference' do
......@@ -138,11 +137,24 @@
end
describe '#recipe_revision_value' do
let(:conan_file_metadatum) { build(:conan_file_metadatum, :recipe_file, package_file: package_file) }
context 'when recipe_revision is present' do
let(:revision) { 'some-revision-value' }
it 'returns the default recipe revision value' do
expect(conan_file_metadatum.recipe_revision_value).to eq(
Packages::Conan::FileMetadatum::DEFAULT_REVISION)
let(:file_metadatum) do
build(:conan_file_metadatum, recipe_revision: build(:conan_recipe_revision, revision: revision))
end
it 'returns the revision value' do
expect(file_metadatum.recipe_revision_value).to eq(revision)
end
end
context 'when recipe_revision is nil' do
let(:file_metadatum) { build(:conan_file_metadatum) }
it 'returns DEFAULT_REVISION' do
expect(file_metadatum.recipe_revision_value).to eq(described_class::DEFAULT_REVISION)
end
end
end
......
......@@ -35,7 +35,7 @@
describe 'uniqueness of reference' do
let_it_be(:conan_package) { create(:conan_package, without_package_files: true) }
let_it_be(:existing_reference) { create(:conan_package_reference, package: conan_package) }
let_it_be(:existing_reference) { conan_package.conan_package_references.first }
context 'when recipe_revision_id is not nil' do
it 'validates uniqueness scoped to package_id and recipe_revision_id', :aggregate_failures do
......
......@@ -129,17 +129,6 @@
end
end
describe '.with_conan_package_reference' do
let_it_be(:non_matching_package_file) { create(:package_file, :nuget) }
let_it_be(:metadatum) { create(:conan_file_metadatum, :package_file) }
let_it_be(:reference) { metadatum.conan_package_reference }
it 'returns matching packages' do
expect(described_class.with_conan_package_reference(reference))
.to eq([metadatum.package_file])
end
end
describe '.for_rubygem_with_file_name' do
let_it_be(:non_ruby_package) { create(:nuget_package, project: project, package_type: :nuget) }
let_it_be(:ruby_package) { create(:rubygems_package, project: project, package_type: :rubygems) }
......@@ -154,6 +143,95 @@
end
end
context 'Conan scopes' do
let_it_be(:package) { create(:conan_package, without_package_files: true) }
describe '.with_conan_package_reference' do
let_it_be(:package_reference) { create(:conan_package_reference, package: package) }
let_it_be(:other_package_reference) { create(:conan_package_reference, package: package) }
let_it_be(:matching_package_file) do
create(:conan_package_file, :conan_package,
package: package,
conan_package_reference: package_reference)
end
let_it_be(:package_file_with_other_reference) do
create(:conan_package_file, :conan_package,
package: package,
conan_package_reference: other_package_reference)
end
subject { described_class.with_conan_package_reference(reference) }
context 'with existing reference' do
let(:reference) { matching_package_file.conan_file_metadatum.conan_package_reference }
it 'returns package files with matching reference' do
expect(subject).to contain_exactly(matching_package_file)
end
end
context 'when reference does not exist' do
let(:reference) { non_existing_record_id.to_s }
it 'returns empty relation' do
expect(subject).to be_empty
end
end
end
context 'recipe revision scopes' do
let_it_be(:recipe_revision) { package.conan_recipe_revisions.first }
let_it_be(:other_revision) { create(:conan_recipe_revision, package: package) }
let_it_be(:package_file_with_revision) do
create(:conan_package_file, :conan_recipe_file,
package: package,
conan_recipe_revision: recipe_revision)
end
let_it_be(:package_file_with_other_revision) do
create(:conan_package_file, :conan_recipe_file,
package: package,
conan_recipe_revision: other_revision)
end
let_it_be(:package_file_without_revision) do
create(:conan_package_file, :conan_recipe_file,
package: package, conan_recipe_revision: nil)
end
describe '.with_conan_recipe_revision' do
subject { described_class.with_conan_recipe_revision(revision) }
context 'with existing revision' do
let(:revision) { recipe_revision.revision }
it 'returns package files with matching recipe revision' do
expect(subject).to contain_exactly(package_file_with_revision)
end
end
context 'when revision does not exist' do
let(:revision) { 'nonexistent' }
it 'returns empty relation' do
expect(subject).to be_empty
end
end
end
describe '.without_conan_recipe_revision' do
subject { described_class.without_conan_recipe_revision }
it 'returns only package files without recipe revision' do
expect(subject).to contain_exactly(package_file_without_revision)
end
end
end
end
context 'Debian scopes' do
let_it_be(:debian_changes) { debian_package.package_files.last }
let_it_be(:debian_deb) { create(:debian_package_file, package: debian_package) }
......
......@@ -4,15 +4,22 @@
RSpec.describe ::Packages::Conan::PackagePresenter, feature_category: :package_registry do
let_it_be(:user) { create(:user) }
let_it_be(:conan_package_reference) { '1234567890abcdef1234567890abcdef12345678' }
let_it_be(:alternative_reference) { '1111111111111111111111111111111111111111' }
let_it_be(:package) { create(:conan_package, package_references: [conan_package_reference, alternative_reference]) }
let_it_be(:package) { create(:conan_package, without_recipe_revisions: true) }
let_it_be(:conan_package_reference) { package.conan_package_references.first }
let_it_be(:alternative_reference) { create(:conan_package_reference, package: package, recipe_revision: nil) }
let_it_be(:project) { package.project }
let_it_be(:package_file_pending_destruction) { create(:package_file, :pending_destruction, package: package) }
let(:params) { { package_scope: :instance } }
let(:presenter) { described_class.new(package, user, project, params) }
before_all do
%i[conan_package_info conan_package_manifest conan_package].each do |file|
create(:conan_package_file, file, package: package,
conan_package_reference: alternative_reference, conan_recipe_revision: nil)
end
end
shared_examples 'no existing package' do
context 'when package does not exist' do
let(:package) { nil }
......@@ -94,7 +101,7 @@
end
describe '#package_urls' do
let(:reference) { conan_package_reference }
let(:reference) { conan_package_reference.reference }
let(:params) do
{
......@@ -115,9 +122,9 @@
context 'existing package' do
let(:expected_result) do
{
"conaninfo.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conaninfo.txt",
"conanmanifest.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conanmanifest.txt",
"conan_package.tgz" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conan_package.tgz"
"conaninfo.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conaninfo.txt",
"conanmanifest.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conanmanifest.txt",
"conan_package.tgz" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conan_package.tgz"
}
end
......@@ -134,9 +141,9 @@
let(:expected_result) do
{
"conaninfo.txt" => "#{Settings.build_base_gitlab_url}/api/v4/projects/#{project.id}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conaninfo.txt",
"conanmanifest.txt" => "#{Settings.build_base_gitlab_url}/api/v4/projects/#{project.id}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conanmanifest.txt",
"conan_package.tgz" => "#{Settings.build_base_gitlab_url}/api/v4/projects/#{project.id}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{conan_package_reference}/0/conan_package.tgz"
"conaninfo.txt" => "#{Settings.build_base_gitlab_url}/api/v4/projects/#{project.id}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conaninfo.txt",
"conanmanifest.txt" => "#{Settings.build_base_gitlab_url}/api/v4/projects/#{project.id}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conanmanifest.txt",
"conan_package.tgz" => "#{Settings.build_base_gitlab_url}/api/v4/projects/#{project.id}/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conan_package.tgz"
}
end
......@@ -147,13 +154,13 @@
it { is_expected.to eq(expected_result) }
context 'requesting the alternative reference' do
let(:reference) { alternative_reference }
let(:reference) { alternative_reference.reference }
let(:expected_result) do
{
"conaninfo.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{alternative_reference}/0/conaninfo.txt",
"conanmanifest.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{alternative_reference}/0/conanmanifest.txt",
"conan_package.tgz" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{alternative_reference}/0/conan_package.tgz"
"conaninfo.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conaninfo.txt",
"conanmanifest.txt" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conanmanifest.txt",
"conan_package.tgz" => "#{Settings.build_base_gitlab_url}/api/v4/packages/conan/v1/files/#{package.conan_recipe_path}/0/package/#{reference}/0/conan_package.tgz"
}
end
......@@ -172,7 +179,7 @@
end
describe '#package_snapshot' do
let(:reference) { conan_package_reference }
let(:reference) { conan_package_reference.reference }
let(:params) { { conan_package_reference: reference } }
subject { presenter.package_snapshot }
......
......@@ -3,12 +3,13 @@
require 'spec_helper'
RSpec.describe API::Conan::V1::InstancePackages, feature_category: :package_registry do
include_context 'conan api setup'
let_it_be_with_reload(:package) { create(:conan_package, project: project, without_recipe_revisions: true) }
let(:snowplow_gitlab_standard_context) do
{ user: user, project: project, namespace: project.namespace, property: 'i_package_conan_user' }
end
include_context 'conan api setup'
describe 'GET /api/v4/packages/conan/v1/ping' do
let_it_be(:url) { '/packages/conan/v1/ping' }
......@@ -130,7 +131,7 @@
describe 'GET /api/v4/packages/conan/v1/files/:package_name/:package_version/:package_username/:package_channel' \
'/:recipe_revision/export/:file_name' do
subject(:request) do
get api("/packages/conan/v1/files/#{recipe_path}/#{metadata.recipe_revision_value}/export/" \
get api("/packages/conan/v1/files/#{recipe_path}/#{recipe_file_metadata.recipe_revision_value}/export/" \
"#{recipe_file.file_name}"),
headers: headers
end
......@@ -142,8 +143,9 @@
describe 'GET /api/v4/packages/conan/v1/files/:package_name/:package_version/:package_username/:package_channel' \
'/:recipe_revision/package/:conan_package_reference/:package_revision/:file_name' do
subject(:request) do
get api("/packages/conan/v1/files/#{recipe_path}/#{metadata.recipe_revision_value}/package" \
"/#{metadata.conan_package_reference}/#{metadata.package_revision_value}/#{package_file.file_name}"),
get api("/packages/conan/v1/files/#{recipe_path}/#{package_file_metadata.recipe_revision_value}/package" \
"/#{package_file_metadata.conan_package_reference}/#{package_file_metadata.package_revision_value}" \
"/#{package_file.file_name}"),
headers: headers
end
......
......@@ -5,19 +5,9 @@
RSpec.describe API::Conan::V1::ProjectPackages, feature_category: :package_registry do
include_context 'conan api setup'
let_it_be_with_reload(:package) { create(:conan_package, project: project, without_recipe_revisions: true) }
let(:project_id) { project.id }
shared_examples 'accept get request on private project with access to package registry for everyone' do
subject { get api(url) }
before do
project.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
project.project_feature.update!(package_registry_access_level: ProjectFeature::PUBLIC)
end
it_behaves_like 'returning response status', :ok
end
describe 'GET /api/v4/projects/:id/packages/conan/v1/ping' do
let(:url) { "/projects/#{project.id}/packages/conan/v1/ping" }
......@@ -167,7 +157,7 @@
describe 'GET /api/v4/projects/:id/packages/conan/v1/files/:package_name/:package_version/:package_username' \
'/:package_channel/:recipe_revision/export/:file_name' do
let(:url) do
"/projects/#{project_id}/packages/conan/v1/files/#{recipe_path}/#{metadata.recipe_revision_value}" \
"/projects/#{project_id}/packages/conan/v1/files/#{recipe_path}/#{recipe_file_metadata.recipe_revision_value}" \
"/export/#{recipe_file.file_name}"
end
......@@ -179,8 +169,9 @@
describe 'GET /api/v4/projects/:id/packages/conan/v1/files/:package_name/:package_version/:package_username' \
'/:package_channel/:recipe_revision/package/:conan_package_reference/:package_revision/:file_name' do
let(:url) do
"/projects/#{project_id}/packages/conan/v1/files/#{recipe_path}/#{metadata.recipe_revision_value}/package" \
"/#{metadata.conan_package_reference}/#{metadata.package_revision_value}/#{package_file.file_name}"
"/projects/#{project_id}/packages/conan/v1/files/#{recipe_path}" \
"/#{package_file_metadata.recipe_revision_value}/package/#{package_file_metadata.conan_package_reference}" \
"/#{package_file_metadata.package_revision_value}/#{package_file.file_name}"
end
it_behaves_like 'package file download endpoint'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment