mirror of
https://github.com/gitlabhq/gitlab-recipes.git
synced 2026-04-23 03:00:32 -04:00
94 lines
2.7 KiB
Ruby
Executable File
94 lines
2.7 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require 'json'
|
|
require 'net/http'
|
|
|
|
################################################################
|
|
## Modify the following global variables to match yout setup. ##
|
|
################################################################
|
|
## GitLab host without the 'http(s)://' prefix. This is your FQDN.
|
|
@host="host"
|
|
@base_url="https://#{@host}/"
|
|
|
|
def gitlab_key(email,password)
|
|
uri = URI("#{@base_url}/api/v3/session")
|
|
res = Net::HTTP.post_form(uri, 'email' => email, 'password' => password)
|
|
JSON.parse(res.body)['private_token']
|
|
end
|
|
|
|
## Add your credentials here
|
|
@token=gitlab_key('user','password')
|
|
|
|
## Note the %2F to separate namespace and project.
|
|
## For example if your project will be named https://example.com/foo/bar,
|
|
## replace below with 'foo%2Fbar'.
|
|
@project='namespace%2Fproject'
|
|
|
|
## Change to 80 if you are not going to use ssl (although you should).
|
|
@http = Net::HTTP.new("#{@host}",443)
|
|
|
|
## Set to false if you are not going to use ssl (although you should).
|
|
@http.use_ssl=true
|
|
|
|
#########################
|
|
## Kick off the import ##
|
|
#########################
|
|
|
|
def load_bitbucket()
|
|
JSON.parse(IO.read('db-1.0.json'))
|
|
end
|
|
|
|
def post_issue(title,description)
|
|
uri = URI("#{@base_url}/api/v3/projects/#{@project}/issues")
|
|
res = Net::HTTP.post_form(uri, 'title' => title, 'description' => description, 'private_token' => @token, 'labels' => ['bitbucket2gitlab'])
|
|
created=JSON.parse(res.body)
|
|
puts created.to_json
|
|
created['id']
|
|
end
|
|
|
|
def close_issue(id)
|
|
|
|
# uri = URI("#{@base_url}/api/v3/projects/#{@project}/issues")
|
|
|
|
request = Net::HTTP::Put.new("/api/v3/projects/#{@project}/issues/#{id}")
|
|
|
|
request.set_form_data({'private_token' => @token,'state_event'=>'close'})
|
|
response=@http.request(request)
|
|
puts response.inspect
|
|
puts response.body
|
|
end
|
|
|
|
def post_comment(id,content)
|
|
uri = URI("#{@base_url}/api/v3/projects/#{@project}/issues/#{id}/notes")
|
|
res = Net::HTTP.post_form(uri, 'body' => content,'private_token' => @token)
|
|
created=JSON.parse(res.body)
|
|
puts created.to_json
|
|
end
|
|
|
|
def import(bitbucket_json)
|
|
id_map={}
|
|
bitbucket_json['issues'].each do |issue|
|
|
issue_id=issue['id']
|
|
gitlab_id=post_issue(issue['title'],issue['content'])
|
|
id_map[issue_id]=gitlab_id
|
|
if('resolved' == issue['status'])
|
|
close_issue(gitlab_id)
|
|
end
|
|
end
|
|
bitbucket_json['comments'].each do |comment|
|
|
if comment['content']
|
|
post_comment(id_map[comment['issue']],"#{comment['content']}\n\n#{comment['user']} - #{comment['created_on']}")
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
import(load_bitbucket())
|
|
|
|
def get_issues()
|
|
request = Net::HTTP::Get.new("/api/v3/projects/#{@project}/issues?private_token=#{@token}")
|
|
response=@http.request(request)
|
|
puts response.inspect
|
|
puts response.body
|
|
end
|