Skip to content

Commit ae974c8

Browse files
committed
add settings
1 parent 0cce695 commit ae974c8

File tree

10 files changed

+196
-97
lines changed

10 files changed

+196
-97
lines changed

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ gem 'travis-rollout', git: 'https://github.com/travis-ci/travis-rollout', re
99
gem 'travis-exceptions', git: 'https://github.com/travis-ci/travis-exceptions'
1010
gem 'travis-logger', git: 'https://github.com/travis-ci/travis-logger'
1111
gem 'travis-settings', git: 'https://github.com/travis-ci/travis-settings'
12+
gem 'travis-encrypt', git: 'https://github.com/travis-ci/travis-encrypt'
13+
gem 'settings', git: 'https://github.com/travis-ci/settings'
1214
gem 'gh', git: 'https://github.com/travis-ci/gh'
1315
gem 'coder', git: 'https://github.com/rkh/coder'
1416

Gemfile.lock

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ GIT
1616
net-http-persistent (~> 2.9)
1717
net-http-pipeline
1818

19+
GIT
20+
remote: https://github.com/travis-ci/settings
21+
revision: b590df5c1f6d2e9f75e8b84cd8540e8b046318ce
22+
specs:
23+
settings (0.0.1)
24+
25+
GIT
26+
remote: https://github.com/travis-ci/travis-encrypt
27+
revision: b91fac2529202dcc4f638146efa88ce08c9f2432
28+
specs:
29+
travis-encrypt (0.0.5)
30+
1931
GIT
2032
remote: https://github.com/travis-ci/travis-exceptions
2133
revision: ab236981f810b820bc3ebfaf33f317bbaa9b3465
@@ -187,8 +199,10 @@ DEPENDENCIES
187199
rollout
188200
rspec
189201
sentry-raven
202+
settings!
190203
sidekiq-pro!
191204
travis-config (~> 1.1.3)
205+
travis-encrypt!
192206
travis-exceptions!
193207
travis-lock
194208
travis-logger!

lib/travis/owners/db.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ def owners
99
attrs.any? ? attrs.map { |(type, id)| find(type, id) } : [owner]
1010
end
1111

12+
def uuid
13+
OwnerGroup.where(owner: owner).pluck(:uuid).first
14+
end
15+
1216
private
1317

1418
def find(type, id)

lib/travis/owners/group.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'travis/owners/record'
2+
13
module Travis
24
module Owners
35
class Group < Struct.new(:all, :config)
@@ -11,8 +13,12 @@ def key
1113
logins.join(':')
1214
end
1315

16+
def id
17+
db.uuid
18+
end
19+
1420
def logins
15-
all.map(&:login)
21+
all.map(&:login).sort
1622
end
1723

1824
def max_jobs
@@ -46,6 +52,10 @@ def subscriptions
4652
@subscriptions ||= Subscriptions.new(self, plans)
4753
end
4854

55+
def db
56+
Db.new(all.first)
57+
end
58+
4959
def plans
5060
config && config[:plans] || {}
5161
end

lib/travis/scheduler/limit/by_queue.rb

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require 'travis/scheduler/helper/context'
22
require 'travis/scheduler/helper/logging'
3+
require 'travis/scheduler/model/settings'
34

45
module Travis
56
module Scheduler
@@ -8,7 +9,6 @@ class ByQueue < Struct.new(:context, :reports, :owners, :job, :selected, :state,
89
include Helper::Context
910

1011
def enqueue?
11-
return true unless enabled?
1212
return true unless queue == ENV['BY_QUEUE_NAME']
1313
result = current < max
1414
report(max) if result
@@ -17,39 +17,47 @@ def enqueue?
1717

1818
private
1919

20-
def enabled?
21-
config[owners.key] || ENV['BY_QUEUE_DEFAULT']
20+
def queue
21+
job.queue ||= Queue.new(job, context.config, nil).select
2222
end
2323

2424
def current
2525
state.running_by_queue(job.queue) + selected.select { |j| j.queue == queue }.size
2626
end
2727

2828
def max
29-
config.fetch(owners.key, default).to_i
29+
by_config || by_setting || default
3030
end
3131

32-
def queue
33-
job.queue ||= Queue.new(job, context.config, nil).select
32+
def by_config
33+
config[owners.key].to_i if config.key?(owners.key)
3434
end
3535

36-
def repo
37-
job.repository
36+
def by_setting
37+
# p settings[:by_queue_enabled].enabled?
38+
settings[:by_queue_enabled].enabled? && settings[:by_queue].value
3839
end
3940

40-
def report(value)
41-
reports << MSGS[:max] % [owners.to_s, "queue #{job.queue}", value]
42-
value
41+
def repo
42+
job.repository
4343
end
4444

4545
def default
46-
ENV['BY_QUEUE_DEFAULT'].to_i
46+
ENV.fetch('BY_QUEUE_DEFAULT', 2).to_i
4747
end
4848

49-
# TODO make this a repo setting at some point?
5049
def config
5150
@config ||= ENV['BY_QUEUE_LIMIT'].to_s.split(',').map { |pair| pair.split('=') }.to_h
5251
end
52+
53+
def settings
54+
@settings ||= Model::Settings.new(owners)
55+
end
56+
57+
def report(value)
58+
reports << MSGS[:max] % [owners.to_s, "queue #{job.queue}", value]
59+
value
60+
end
5361
end
5462
end
5563
end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
require 'settings'
2+
3+
# hmmm.
4+
Settings::Definition::OWNERS[:owners] = 'Travis::Owners::Group'
5+
6+
module Travis
7+
module Scheduler
8+
module Model
9+
class Settings < ::Settings::Group
10+
int :by_queue,
11+
owner: [:owners],
12+
scope: :repo,
13+
internal: true,
14+
requires: :by_queue_enabled
15+
16+
bool :by_queue_enabled,
17+
owner: [:owners],
18+
scope: :repo,
19+
internal: true
20+
end
21+
end
22+
end
23+
end

spec/spec_helper.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
RSpec.configure do |c|
2424
c.mock_with :mocha
25+
26+
c.include FactoryGirl::Syntax::Methods
2527
c.include Support::Env
2628
c.include Support::Features
2729
c.include Support::Logger

spec/support/env.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ def env(vars)
1212
end
1313

1414
def define_env(vars)
15-
vars.each { |key, value| ENV[key.to_s] = value.to_s }
15+
resolve = ->(v) { v.is_a?(Proc) ? instance_exec(&v) : v }
16+
vars.each { |key, value| ENV[key.to_s] = resolve.(value).to_s }
1617
end
1718

1819
def undefine_env(vars)

spec/support/factories.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'factory_girl'
2+
require 'settings'
23

34
FactoryGirl.define do
45
REPO_KEY = OpenSSL::PKey::RSA.generate(4096)
@@ -12,6 +13,8 @@
1213
login 'travis-ci'
1314
end
1415

16+
factory :owner_group
17+
1518
factory :subscription do
1619
valid_to Time.now + 24 * 3600
1720
end
@@ -75,5 +78,7 @@
7578
author_name 'Sven Fuchs'
7679
author_email '[email protected]'
7780
end
81+
82+
factory :setting, class: Settings::Record::Setting
7883
end
7984

0 commit comments

Comments
 (0)