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'
|
||||||
require 'travis/api/app/services/schedule_request'
|
require 'travis/api/app/services/schedule_request'
|
||||||
|
require 'travis/api/enqueue/services/restart_model'
|
||||||
|
|
||||||
class Travis::Api::App
|
class Travis::Api::App
|
||||||
class Endpoint
|
class Endpoint
|
||||||
|
@ -29,16 +30,18 @@ class Travis::Api::App
|
||||||
# I think we need to properly deprecate this by publishing a blog post.
|
# I think we need to properly deprecate this by publishing a blog post.
|
||||||
Metriks.meter("api.request.restart").mark
|
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
|
repository_owner = service.target.repository.owner
|
||||||
|
|
||||||
if !Travis::Features.enabled_for_all?(:enqueue_to_hub) && !Travis::Features.owner_active?(:enqueue_to_hub, 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)
|
respond_with service(:reset_model, params)
|
||||||
elsif service.respond_to?(:push)
|
elsif service.respond_to?(:push)
|
||||||
payload = {id: params[:build_id], user_id: current_user.id}
|
params[:user_id] = repository_owner.id
|
||||||
service.push("job:restart", payload)
|
type ||= params[:build_id] ? 'build' : 'job'
|
||||||
status 202
|
params[:id] = params[:build_id] || params[:job_id]
|
||||||
true
|
|
||||||
|
service.push("#{type}:restart", params)
|
||||||
|
respond_with(result: true, flash: service.messages)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -49,5 +49,15 @@ module Travis::API::V3
|
||||||
gh.post(hooks_url, payload)
|
gh.post(hooks_url, payload)
|
||||||
end
|
end
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,6 +12,7 @@ module Travis::API::V3
|
||||||
belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze
|
belongs_to :last_build, class_name: 'Travis::API::V3::Models::Build'.freeze
|
||||||
belongs_to :current_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,
|
has_one :default_branch,
|
||||||
foreign_key: [:repository_id, :name],
|
foreign_key: [:repository_id, :name],
|
||||||
primary_key: [:id, :default_branch],
|
primary_key: [:id, :default_branch],
|
||||||
|
|
|
@ -1,5 +1,29 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Models::SSLKey < Model
|
class Models::SSLKey < Model
|
||||||
belongs_to :repository
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,14 @@
|
||||||
module Travis::API::V3
|
module Travis::API::V3
|
||||||
class Services::Repository::Enable < Services::Repository::Disable
|
class Services::Repository::Enable < Services::Repository::Disable
|
||||||
def run!
|
def run!
|
||||||
super(true)
|
repository = super(true)
|
||||||
|
|
||||||
|
if repository.private?
|
||||||
|
admin = access_control.admin_for(repository)
|
||||||
|
github(admin).upload_key(repository)
|
||||||
|
end
|
||||||
|
|
||||||
|
repository
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_access(repository)
|
def check_access(repository)
|
||||||
|
|
|
@ -33,11 +33,18 @@ describe 'Requests', set_app: true do
|
||||||
response.status.should be(200)
|
response.status.should be(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'triggers a build request using Hub' do
|
describe 'enqueues for Hub' do
|
||||||
Travis::Features.activate_owner(:enqueue_to_hub, repo.owner)
|
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
|
it 'triggers a job request' do
|
||||||
response.status.should be(202)
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user