2020-07-08 08:09:33 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
FactoryBot.define do
|
|
|
|
factory :go_module_commit, class: 'Commit' do
|
|
|
|
skip_create
|
|
|
|
|
|
|
|
transient do
|
|
|
|
files { { 'foo.txt' => 'content' } }
|
|
|
|
message { 'Message' }
|
2021-03-08 13:09:12 -05:00
|
|
|
# rubocop: disable FactoryBot/InlineAssociation
|
|
|
|
# We need a persisted project so we can create commits and tags
|
|
|
|
# in `commit` otherwise linting this factory with `build` strategy
|
|
|
|
# will fail.
|
2020-07-08 08:09:33 -04:00
|
|
|
project { create(:project, :repository) }
|
2021-03-08 13:09:12 -05:00
|
|
|
# rubocop: enable FactoryBot/InlineAssociation
|
2020-07-08 08:09:33 -04:00
|
|
|
|
|
|
|
service do
|
|
|
|
Files::MultiService.new(
|
|
|
|
project,
|
2022-01-21 16:16:35 -05:00
|
|
|
project.first_owner,
|
2020-07-08 08:09:33 -04:00
|
|
|
commit_message: message,
|
|
|
|
start_branch: project.repository.root_ref || 'master',
|
|
|
|
branch_name: project.repository.root_ref || 'master',
|
|
|
|
actions: files.map do |path, content|
|
|
|
|
{ action: :create, file_path: path, content: content }
|
|
|
|
end
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
tag { nil }
|
|
|
|
tag_message { nil }
|
|
|
|
|
|
|
|
commit do
|
|
|
|
r = service.execute
|
|
|
|
|
|
|
|
raise "operation failed: #{r}" unless r[:status] == :success
|
|
|
|
|
|
|
|
commit = project.repository.commit_by(oid: r[:result])
|
|
|
|
|
|
|
|
if tag
|
2022-01-21 16:16:35 -05:00
|
|
|
r = Tags::CreateService.new(project, project.first_owner).execute(tag, commit.sha, tag_message)
|
2020-07-08 08:09:33 -04:00
|
|
|
|
|
|
|
raise "operation failed: #{r}" unless r[:status] == :success
|
|
|
|
end
|
|
|
|
|
|
|
|
commit
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
trait :files do
|
|
|
|
transient do
|
|
|
|
message { 'Add files' }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
trait :package do
|
|
|
|
transient do
|
2021-03-08 13:09:12 -05:00
|
|
|
path { 'pkg' }
|
2020-07-08 08:09:33 -04:00
|
|
|
message { 'Add package' }
|
|
|
|
files { { "#{path}/b.go" => "package b\nfunc Bye() { println(\"Goodbye world!\") }\n" } }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
trait :module do
|
|
|
|
transient do
|
|
|
|
name { nil }
|
|
|
|
message { 'Add module' }
|
|
|
|
host_prefix { "#{::Gitlab.config.gitlab.host}/#{project.path_with_namespace}" }
|
|
|
|
|
|
|
|
url { name ? "#{host_prefix}/#{name}" : host_prefix }
|
2021-03-08 13:09:12 -05:00
|
|
|
path { "#{name}/" }
|
2020-07-08 08:09:33 -04:00
|
|
|
|
|
|
|
files do
|
|
|
|
{
|
|
|
|
"#{path}go.mod" => "module #{url}\n",
|
|
|
|
"#{path}a.go" => "package a\nfunc Hi() { println(\"Hello world!\") }\n"
|
|
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
initialize_with do
|
|
|
|
commit
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|