Skip to content

Commit 8d13110

Browse files
authored
Allow posting multiple configs, pass through merge_mode and sha (#1081)
* reformat request/create_spec * allow passing merge_mode and sha * allow posting multiple configs
1 parent c6ea05e commit 8d13110

File tree

10 files changed

+329
-343
lines changed

10 files changed

+329
-343
lines changed

lib/travis/api/v3/queries/request.rb

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Travis::API::V3
22
class Queries::Request < Query
3-
params :id, :message, :branch, :config, :token, prefix: :request
3+
params :id, :message, :branch, :sha, :merge_mode, :config, :token, prefix: :request
44

55
def find
66
raise WrongParams, 'missing request.id'.freeze unless id
@@ -19,9 +19,9 @@ def messages(request)
1919

2020
def schedule(repository, user)
2121
raise ServerError, 'repository does not have a provider id'.freeze unless repository.vcs_id || repository.github_id
22-
raise WrongParams, 'missing user'.freeze unless user and user.id
22+
raise WrongParams, 'missing user'.freeze unless user and user.id
2323

24-
record = create_request(repository)
24+
request = create_request(repository)
2525

2626
payload = {
2727
repository: {
@@ -30,11 +30,15 @@ def schedule(repository, user)
3030
owner_name: repository.owner_name,
3131
name: repository.name ,
3232
},
33-
user: { id: user.id },
34-
id: record.id,
35-
message: message,
36-
branch: branch || repository.default_branch_name,
37-
config: config || {}
33+
user: {
34+
id: user.id
35+
},
36+
id: request.id,
37+
message: message,
38+
branch: branch,
39+
sha: sha,
40+
merge_mode: merge_mode,
41+
config: config
3842
}
3943

4044
::Travis::API::Sidekiq.gatekeeper(
@@ -47,14 +51,14 @@ def schedule(repository, user)
4751

4852
private
4953

50-
def create_request(repository)
51-
Models::Request.create!(
52-
event_type: :api,
53-
state: :pending,
54-
repository: repository,
55-
owner: repository.owner,
56-
private: repository.private
57-
)
58-
end
54+
def create_request(repository)
55+
Models::Request.create!(
56+
event_type: :api,
57+
state: :pending,
58+
repository: repository,
59+
owner: repository.owner,
60+
private: repository.private
61+
)
62+
end
5963
end
6064
end

lib/travis/api/v3/queries/request_config.rb renamed to lib/travis/api/v3/queries/request_configs.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
require 'faraday'
33

44
module Travis::API::V3
5-
class Queries::RequestConfig < Query
5+
class Queries::RequestConfigs < Query
66
attr_reader :user, :repo
77

88
def expand(user, repo)
@@ -73,7 +73,7 @@ def handle_errors(resp)
7373
end
7474

7575
def params
76-
only(super.deep_symbolize_keys, :ref, :config, :mode, :data)
76+
only(super.deep_symbolize_keys, :ref, :configs, :data)
7777
end
7878

7979
def only(hash, *keys)

lib/travis/api/v3/routes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ module Routes
174174
resource :request do
175175
route '/request/{request.id}'
176176
get :find
177-
post :config
177+
post :configs
178178

179179
resource :messages do
180180
route '/messages'

lib/travis/api/v3/services/request/config.rb

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module Travis::API::V3
2+
class Services::Request::Configs < Service
3+
result_type :request_configs
4+
params :ref, :configs, :data
5+
params :config, :mode # BC
6+
7+
def run
8+
repository = check_login_and_find(:repository)
9+
access_control.permissions(repository).create_request!
10+
user = access_control.user
11+
result query(:request_configs).expand(user, repo)
12+
end
13+
14+
private
15+
16+
def params
17+
@params = super.tap do |params|
18+
params['configs'] = [{ config: params['config'], mode: params['mode'] }] if params['config'] # BC
19+
end
20+
end
21+
22+
def repo
23+
@repo ||= find(:repository)
24+
end
25+
end
26+
end

lib/travis/api/v3/services/requests/create.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class Services::Requests::Create < Service
55
private_constant :TIME_FRAME, :LIMIT
66

77
result_type :request
8-
params "request", "user", :config, :message, :branch, :token
8+
params "request", "user", :merge_mode, :config, :message, :branch, :sha, :token
99

1010
def run
1111
repository = check_login_and_find(:repository)
@@ -14,9 +14,9 @@ def run
1414

1515
raise RepositoryInactive, repository: repository unless repository.active?
1616

17-
user = find(:user) if access_control.full_access? and params_for? 'user'.freeze
18-
user ||= access_control.user
19-
max = limit(repository)
17+
user = find(:user) if access_control.full_access? and params_for? 'user'.freeze
18+
user ||= access_control.user
19+
max = limit(repository)
2020
remaining = remaining_requests(max, repository)
2121

2222
raise RequestLimitReached, repository: repository, max_requests: max, per_seconds: TIME_FRAME.to_i if remaining == 0

spec/spec_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
require 'multi_json'
1818
require 'pry'
1919
require 'stackprof'
20+
require 'sidekiq/testing'
2021
require 'webmock/rspec'
2122

2223
require 'active_record'

spec/v3/service_index_spec.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,14 @@ module Routes
7474
"@type"=>"template",
7575
"request_method"=>"POST",
7676
"uri_template"=>"#{path}repo/{repository.id}/requests",
77-
"accepted_params" => ["request.config", "request.message", "request.branch", "request.token"]
77+
"accepted_params" => %w(
78+
request.merge_mode
79+
request.config
80+
request.message
81+
request.branch
82+
request.sha
83+
request.token
84+
)
7885
)
7986
end
8087
end

spec/v3/services/request/config_spec.rb renamed to spec/v3/services/request/configs_spec.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
describe Travis::API::V3::Services::Request::Config, set_app: true do
1+
describe Travis::API::V3::Services::Request::Configs, set_app: true do
22
let(:repo) { FactoryBot.create(:repository_without_last_build, owner_name: 'svenfuchs', name: 'minimal') }
33
let(:request) { Travis::API::V3::Models::Request.last }
44
let(:env_var) { { id: nil, name: 'ONE', value: Travis::Settings::EncryptedValue.new('one'), public: true, branch: 'foo', repository_id: repo.id } }
@@ -36,7 +36,7 @@ def parse(str)
3636
end
3737

3838
describe 'authenticated' do
39-
let(:params) { { ref: 'master', config: '', mode: :deep_merge } }
39+
let(:params) { { ref: 'master', configs: [config: '', mode: :deep_merge] } }
4040
let(:token) { Travis::Api::App::AccessToken.create(user: repo.owner, app_id: 1) }
4141
let(:headers) { { 'HTTP_AUTHORIZATION' => "token #{token}" } }
4242

@@ -106,8 +106,10 @@ def parse(str)
106106
private_key: nil
107107
},
108108
ref: 'master',
109-
config: '',
110-
mode: 'deep_merge',
109+
configs: [
110+
config: '',
111+
mode: 'deep_merge',
112+
],
111113
data: {
112114
repo: repo.slug,
113115
fork: false,

0 commit comments

Comments
 (0)