Merge branch 'master' into jc-v3-env-vars
This commit is contained in:
commit
8cdbca925b
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user