161 lines
4.6 KiB
Ruby
161 lines
4.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Gitlab::Seeder::Packages
|
|
attr_reader :project
|
|
|
|
def initialize(project)
|
|
@project = project
|
|
end
|
|
|
|
def seed_packages(package_type)
|
|
send("seed_#{package_type}_packages")
|
|
end
|
|
|
|
def seed_npm_packages
|
|
5.times do |i|
|
|
name = "@#{@project.root_namespace.path}/npm_package_#{SecureRandom.hex}"
|
|
version = "1.12.#{i}"
|
|
|
|
params = Gitlab::Json.parse(read_fixture_file('npm', 'payload.json')
|
|
.gsub('@root/npm-test', name)
|
|
.gsub('1.0.1', version))
|
|
.with_indifferent_access
|
|
|
|
::Packages::Npm::CreatePackageService.new(project, project.creator, params).execute
|
|
|
|
print '.'
|
|
end
|
|
end
|
|
|
|
def seed_maven_packages
|
|
5.times do |i|
|
|
name = "my/company/app/maven-app-#{i}"
|
|
version = "1.0.#{i}-SNAPSHOT"
|
|
|
|
params = {
|
|
name: name,
|
|
version: version,
|
|
path: "#{name}/#{version}"
|
|
}
|
|
|
|
pkg = ::Packages::Maven::CreatePackageService.new(project, project.creator, params).execute
|
|
|
|
%w(maven-metadata.xml my-app-1.0-20180724.124855-1.pom my-app-1.0-20180724.124855-1.jar).each do |filename|
|
|
with_cloned_fixture_file('maven', filename) do |filepath|
|
|
file_params = {
|
|
file: UploadedFile.new(filepath, filename: filename),
|
|
file_name: filename,
|
|
file_sha1: '1234567890',
|
|
size: 100.kilobytes
|
|
}
|
|
::Packages::CreatePackageFileService.new(pkg, file_params).execute
|
|
end
|
|
end
|
|
|
|
print '.'
|
|
end
|
|
end
|
|
|
|
def seed_conan_packages
|
|
5.times do |i|
|
|
name = "my-conan-pkg-#{i}"
|
|
version = "2.0.#{i}"
|
|
|
|
params = {
|
|
package_name: name,
|
|
package_version: version,
|
|
package_username: ::Packages::Conan::Metadatum.package_username_from(full_path: project.full_path),
|
|
package_channel: 'stable'
|
|
}
|
|
|
|
pkg = ::Packages::Conan::CreatePackageService.new(project, project.creator, params).execute
|
|
|
|
fixtures = {
|
|
'recipe_files' => %w(conanfile.py conanmanifest.txt),
|
|
'package_files' => %w(conanmanifest.txt conaninfo.txt conan_package.tgz)
|
|
}
|
|
|
|
fixtures.each do |folder, filenames|
|
|
filenames.each do |filename|
|
|
with_cloned_fixture_file(File.join('conan', folder), filename) do |filepath|
|
|
file = UploadedFile.new(filepath, filename: filename)
|
|
file_params = {
|
|
file_name: filename,
|
|
'file.sha1': '1234567890',
|
|
'file.size': 100.kilobytes,
|
|
'file.md5': '12345',
|
|
recipe_revision: '0',
|
|
package_revision: '0',
|
|
conan_package_reference: '123456789',
|
|
conan_file_type: :package_file
|
|
}
|
|
::Packages::Conan::CreatePackageFileService.new(pkg, file, file_params).execute
|
|
end
|
|
end
|
|
end
|
|
|
|
print '.'
|
|
end
|
|
end
|
|
|
|
def seed_nuget_packages
|
|
5.times do |i|
|
|
name = "MyNugetApp.Package#{i}"
|
|
version = "4.2.#{i}"
|
|
|
|
pkg = ::Packages::CreateTemporaryPackageService.new(
|
|
project, project.creator, {}
|
|
).execute(:nuget, name: Packages::Nuget::TEMPORARY_PACKAGE_NAME)
|
|
# when using ::Packages::CreateTemporaryPackageService, packages have a fixed name and a fixed version.
|
|
pkg.update!(name: name, version: version)
|
|
|
|
filename = 'package.nupkg'
|
|
with_cloned_fixture_file('nuget', filename) do |filepath|
|
|
file_params = {
|
|
file: UploadedFile.new(filepath, filename: filename),
|
|
file_name: filename,
|
|
file_sha1: '1234567890',
|
|
size: 100.kilobytes
|
|
}
|
|
::Packages::CreatePackageFileService.new(pkg, file_params).execute
|
|
end
|
|
|
|
print '.'
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def read_fixture_file(package_type, file)
|
|
File.read(fixture_path(package_type, file))
|
|
end
|
|
|
|
def fixture_path(package_type, file)
|
|
Rails.root.join('spec', 'fixtures', 'packages', package_type, file)
|
|
end
|
|
|
|
def with_cloned_fixture_file(package_type, file)
|
|
Dir.mktmpdir do |dirpath|
|
|
cloned_path = File.join(dirpath, file)
|
|
FileUtils.cp(fixture_path(package_type, file), cloned_path)
|
|
yield cloned_path
|
|
end
|
|
end
|
|
end
|
|
|
|
Gitlab::Seeder.quiet do
|
|
flag = 'SEED_ALL_PACKAGE_TYPES'
|
|
|
|
puts "Use the `#{flag}` environment variable to seed packages of all types." unless ENV[flag]
|
|
|
|
package_types = ENV[flag] ? %i[npm maven conan nuget] : [:npm]
|
|
|
|
Project.not_mass_generated.sample(5).each do |project|
|
|
puts "\nSeeding packages for the '#{project.full_path}' project"
|
|
seeder = Gitlab::Seeder::Packages.new(project)
|
|
|
|
package_types.each do |package_type|
|
|
seeder.seed_packages(package_type)
|
|
end
|
|
end
|
|
end
|