Merge branch 'master' into jc-v3-env-vars

This commit is contained in:
Renée Hendricksen 2016-07-12 17:07:51 -04:00
commit 8cdbca925b
6 changed files with 62 additions and 10 deletions

View File

@ -1,5 +1,6 @@
require 'travis/api/app'
require 'travis/api/app/services/schedule_request'
require 'travis/api/enqueue/services/restart_model'
class Travis::Api::App
class Endpoint
@ -29,16 +30,18 @@ class Travis::Api::App
# I think we need to properly deprecate this by publishing a blog post.
Metriks.meter("api.request.restart").mark
service = Travis::Enqueue::Services::RestartModel.new(current_user, { build_id: params[:build_id] })
service = Travis::Enqueue::Services::RestartModel.new(current_user, params)
repository_owner = service.target.repository.owner
if !Travis::Features.enabled_for_all?(:enqueue_to_hub) && !Travis::Features.owner_active?(:enqueue_to_hub, repository_owner)
respond_with service(:reset_model, params)
elsif service.respond_to?(:push)
payload = {id: params[:build_id], user_id: current_user.id}
service.push("job:restart", payload)
status 202
true
params[:user_id] = repository_owner.id
type ||= params[:build_id] ? 'build' : 'job'
params[:id] = params[:build_id] || params[:job_id]
service.push("#{type}:restart", params)
respond_with(result: true, flash: service.messages)
end
end
end

View File

@ -49,5 +49,15 @@ module Travis::API::V3
gh.post(hooks_url, payload)
end
end
def upload_key(repository)
keys_path = "repos/#{repository.slug}/keys"
key = gh[keys_path].
detect { |e| e['key'] == repository.key.encoded_public_key }
unless key
gh.post keys_path, title: Travis.config.host.to_s, key: repository.key.encoded_public_key
end
end
end
end

View File

@ -12,6 +12,7 @@ module Travis::API::V3
belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze
belongs_to :current_build, class_name: 'Travis::API::V3::Models::Build'.freeze
has_one :key, class_name: 'Travis::API::V3::Models::SSLKey'.freeze
has_one :default_branch,
foreign_key: [:repository_id, :name],
primary_key: [:id, :default_branch],

View File

@ -1,5 +1,29 @@
module Travis::API::V3
class Models::SSLKey < Model
belongs_to :repository
serialize :private_key, Travis::API::V3::Extensions::EncryptedColumn.new
def encoded_public_key
key = build_key.public_key
['ssh-rsa ', "\0\0\0\assh-rsa#{sized_bytes(key.e)}#{sized_bytes(key.n)}"].pack('a*m').gsub("\n", '')
end
private
def build_key
@build_key ||= OpenSSL::PKey::RSA.new(private_key)
end
def sized_bytes(value)
bytes = to_byte_array(value.to_i)
[bytes.size, *bytes].pack('NC*')
end
def to_byte_array(num, *significant)
return significant if num.between?(-1, 0) and significant[0][7] == num[7]
to_byte_array(*num.divmod(256)) + significant
end
end
end

View File

@ -1,7 +1,14 @@
module Travis::API::V3
class Services::Repository::Enable < Services::Repository::Disable
def run!
super(true)
repository = super(true)
if repository.private?
admin = access_control.admin_for(repository)
github(admin).upload_key(repository)
end
repository
end
def check_access(repository)

View File

@ -33,11 +33,18 @@ describe 'Requests', set_app: true do
response.status.should be(200)
end
it 'triggers a build request using Hub' do
Travis::Features.activate_owner(:enqueue_to_hub, repo.owner)
describe 'enqueues for Hub' do
it 'triggers a build request' do
payload = { build_id: build.id, user_id: repo.owner.id }
response = post "/requests", payload, headers
response.status.should be(200)
end
response = post "/requests", { build_id: build.id }, headers
response.status.should be(202)
it 'triggers a job request' do
payload = { job_id: build.matrix.first.id, user_id: repo.owner.id }
response = post "/requests", payload, headers
response.status.should be(200)
end
end
end
end