gitlab-org--gitlab-foss/db/fixtures/development/30_composer_packages.rb

124 lines
3.1 KiB
Ruby

# frozen_string_literal: true
require './spec/support/sidekiq_middleware'
class Gitlab::Seeder::ComposerPackages
def group
@group ||= Group.find_by(path: 'composer')
unless @group
@group = Group.create!(
name: 'Composer',
path: 'composer',
description: FFaker::Lorem.sentence
)
@group.add_owner(user)
@group.create_namespace_settings
end
@group
end
def user
@user ||= User.first
end
def create_real_project!(url)
project_path = url.split('/').last
project_path.gsub!(".git", "")
project = group.projects.find_by(name: project_path.titleize)
return project if project.present?
params = {
import_url: url,
namespace_id: group.id,
name: project_path.titleize,
description: FFaker::Lorem.sentence,
visibility_level: Gitlab::VisibilityLevel.values.sample,
skip_disk_validation: true
}
Sidekiq::Worker.skipping_transaction_check do
project = ::Projects::CreateService.new(user, params).execute
# Seed-Fu runs this entire fixture in a transaction, so the `after_commit`
# hook won't run until after the fixture is loaded. That is too late
# since the Sidekiq::Testing block has already exited. Force clearing
# the `after_commit` queue to ensure the job is run now.
project.send(:_run_after_commit_queue)
project.import_state.send(:_run_after_commit_queue)
# Expire repository cache after import to ensure
# valid_repo? call below returns a correct answer
project.repository.expire_all_method_caches
end
if project.valid? && project.valid_repo?
print '.'
return project
else
puts project.errors.full_messages
print 'F'
return nil
end
end
end
COMPOSER_PACKAGES = {
'https://github.com/php-fig/log.git' => [
{ branch: 'master' },
{ tag: 'v1.5.2' }
],
'https://github.com/ryssbowh/craft-themes.git' => [
{ tag: '1.0.2' }
],
'https://github.com/php-fig/http-message.git' => [
{ tag: '1.0.1' }
],
'https://github.com/doctrine/instantiator.git' => [
{ branch: '1.4.x' }
]
}.freeze
Gitlab::Seeder.quiet do
flag = 'SEED_COMPOSER'
unless ENV[flag]
puts "Use the `#{flag}` environment variable to seed composer packages"
next
end
Sidekiq::Testing.inline! do
COMPOSER_PACKAGES.each do |path, versions|
project = Gitlab::Seeder::ComposerPackages.new.create_real_project!(path)
versions.each do |version|
params = {}
if version[:branch]
params[:branch] = project.repository.find_branch(version[:branch])
elsif version[:tag]
params[:tag] = project.repository.find_tag(version[:tag])
end
if params[:branch].nil? && params[:tag].nil?
puts "version #{version.inspect} not found"
next
end
Sidekiq::Worker.skipping_transaction_check do
::Packages::Composer::CreatePackageService
.new(project, project.owner, params)
.execute
end
puts "version #{version.inspect} created!"
end
end
end
end