Skip to content

Instantly share code, notes, and snippets.

@arvidj
Created July 31, 2015 11:16
Show Gist options
  • Save arvidj/a942a5264ece8aa631ba to your computer and use it in GitHub Desktop.
Save arvidj/a942a5264ece8aa631ba to your computer and use it in GitHub Desktop.
Add deploy key to all repositories in a bitbucket team
#!/usr/bin/ruby
require 'open-uri'
require 'uri'
require 'net/http'
require 'json'
@user = ''
@pass = ''
@team = ''
@key_file = ''
@key_name = ''
@api1_url = 'https://api.bitbucket.org/1.0'
@api2_url = 'https://api.bitbucket.org/2.0'
def get(api, uri)
uri = URI(api + uri)
req = Net::HTTP::Get.new(uri)
req.basic_auth @user, @pass
res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) {|http|
http.request(req)
}
return JSON.parse(res.body)
end
def post(api, uri, data)
uri = URI(api + uri)
req = Net::HTTP::Post.new(uri)
req.basic_auth @user, @pass
req.set_form_data(data)
res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) {|http|
http.request(req)
}
return JSON.parse(res.body)
end
def add_key(slug)
key = File.open(@key_file, 'rb').read
return post @api1_url, "/repositories/#{@team}/#{slug}/deploy-keys", {
'label' => @key_name,
'key' => key
}
end
def has_key(slug, label)
keys = get @api1_url, "/repositories/#{@team}/#{slug}/deploy-keys"
return keys.select {|k| k['label'] == label } .length > 0
end
page = 1
loop do
res = get @api2_url, "/repositories/#{@team}?page=#{page}"
res['values'].each do | v |
slug = v['full_name'].split('/')[1]
if not has_key slug, @key_name
puts "#{v['name']} - adding key"
add_key slug
else
puts "#{v['name']} - already has key"
end
end
page += 1
break if not res['next']
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment