Compare commits
1 Commits
master
...
te-faraday
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1b1611a74e |
|
@ -1,2 +1,3 @@
|
||||||
https://github.com/heroku/heroku-buildpack-ruby.git
|
https://github.com/heroku/heroku-buildpack-ruby.git
|
||||||
|
https://github.com/drogus/last-commit-sha-buildpack.git
|
||||||
https://github.com/ryandotsmith/nginx-buildpack.git
|
https://github.com/ryandotsmith/nginx-buildpack.git
|
||||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -4,9 +4,11 @@ config/nginx.conf
|
||||||
config/skylight.yml
|
config/skylight.yml
|
||||||
|
|
||||||
tmp/
|
tmp/
|
||||||
|
log/
|
||||||
logs/
|
logs/
|
||||||
|
|
||||||
|
vendor
|
||||||
|
|
||||||
.yardoc
|
.yardoc
|
||||||
.coverage
|
.coverage
|
||||||
*.env
|
*.env
|
||||||
.ruby-gemset
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
2.2.3
|
2.1.5
|
||||||
|
|
|
@ -2,7 +2,7 @@ language: ruby
|
||||||
|
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
rvm: 2.2.3
|
rvm: 2.1.5
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
|
@ -19,3 +19,6 @@ services:
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- 'RAILS_ENV=test bundle exec rake db:create --trace'
|
- 'RAILS_ENV=test bundle exec rake db:create --trace'
|
||||||
|
|
||||||
|
script:
|
||||||
|
- bundle exec rspec spec
|
||||||
|
|
18
Gemfile
18
Gemfile
|
@ -1,15 +1,17 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
gemspec
|
gemspec
|
||||||
|
|
||||||
|
ruby '2.1.7' if ENV.key?('DYNO')
|
||||||
|
|
||||||
gem 's3', github: 'travis-ci/s3'
|
gem 's3', github: 'travis-ci/s3'
|
||||||
|
|
||||||
|
gem 'travis-core', github: 'travis-ci/travis-core'
|
||||||
gem 'travis-support', github: 'travis-ci/travis-support'
|
gem 'travis-support', github: 'travis-ci/travis-support'
|
||||||
gem 'travis-amqp', github: 'travis-ci/travis-amqp'
|
gem 'travis-amqp', github: 'travis-ci/travis-amqp'
|
||||||
gem 'travis-config', '~> 0.1.0'
|
gem 'travis-config', '~> 0.1.0'
|
||||||
gem 'travis-settings', github: 'travis-ci/travis-settings'
|
gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil
|
||||||
gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs'
|
|
||||||
|
|
||||||
gem 'travis-yaml', github: 'travis-ci/travis-yaml'
|
gem 'travis-yaml', github: 'travis-ci/travis-yaml'
|
||||||
|
gem 'travis-migrations', github: 'travis-ci/travis-migrations'
|
||||||
gem 'mustermann', github: 'rkh/mustermann'
|
gem 'mustermann', github: 'rkh/mustermann'
|
||||||
gem 'sinatra'
|
gem 'sinatra'
|
||||||
gem 'sinatra-contrib', require: nil #github: 'sinatra/sinatra-contrib', require: nil
|
gem 'sinatra-contrib', require: nil #github: 'sinatra/sinatra-contrib', require: nil
|
||||||
|
@ -18,9 +20,9 @@ gem 'active_model_serializers'
|
||||||
gem 'unicorn'
|
gem 'unicorn'
|
||||||
gem 'sentry-raven'
|
gem 'sentry-raven'
|
||||||
gem 'yard-sinatra', github: 'rkh/yard-sinatra'
|
gem 'yard-sinatra', github: 'rkh/yard-sinatra'
|
||||||
gem 'rack-contrib'
|
gem 'rack-contrib', github: 'rack/rack-contrib'
|
||||||
gem 'rack-cache', github: 'rtomayko/rack-cache'
|
gem 'rack-cache', github: 'rtomayko/rack-cache'
|
||||||
gem 'rack-attack', '5.0.0.beta1'
|
gem 'rack-attack'
|
||||||
gem 'gh'
|
gem 'gh'
|
||||||
gem 'bunny', '~> 0.8.0'
|
gem 'bunny', '~> 0.8.0'
|
||||||
gem 'dalli'
|
gem 'dalli'
|
||||||
|
@ -31,22 +33,16 @@ gem 'micro_migrations'
|
||||||
gem 'simplecov'
|
gem 'simplecov'
|
||||||
gem 'skylight', '~> 0.6.0.beta.1'
|
gem 'skylight', '~> 0.6.0.beta.1'
|
||||||
gem 'stackprof'
|
gem 'stackprof'
|
||||||
gem 'netaddr'
|
|
||||||
|
|
||||||
gem 'jemalloc'
|
gem 'jemalloc'
|
||||||
gem 'customerio'
|
gem 'customerio'
|
||||||
|
|
||||||
group :development, :test do
|
|
||||||
gem 'travis-migrations', github: 'travis-ci/travis-migrations'
|
|
||||||
end
|
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'rspec', '~> 2.13'
|
gem 'rspec', '~> 2.13'
|
||||||
gem 'rspec-its'
|
gem 'rspec-its'
|
||||||
gem 'factory_girl', '~> 2.4.0'
|
gem 'factory_girl', '~> 2.4.0'
|
||||||
gem 'mocha', '~> 0.12'
|
gem 'mocha', '~> 0.12'
|
||||||
gem 'database_cleaner', '~> 0.8.0'
|
gem 'database_cleaner', '~> 0.8.0'
|
||||||
gem 'timecop', '~> 0.8.0'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
|
|
234
Gemfile.lock
234
Gemfile.lock
|
@ -1,13 +1,20 @@
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/eric/metriks-librato_metrics.git
|
remote: git://github.com/eric/metriks-librato_metrics.git
|
||||||
revision: 2c124f024fd2e34378260cd24b0e8687ff9bd196
|
revision: ccbeb751ec5fc4edfe446d8a67a423b96ebe86c7
|
||||||
specs:
|
specs:
|
||||||
metriks-librato_metrics (1.0.5)
|
metriks-librato_metrics (1.0.2)
|
||||||
metriks (>= 0.9.9.6)
|
metriks (>= 0.9.9.6)
|
||||||
|
|
||||||
|
GIT
|
||||||
|
remote: git://github.com/rack/rack-contrib.git
|
||||||
|
revision: 1b11346d729efd88b274cd7f704e0bca9eb3de7a
|
||||||
|
specs:
|
||||||
|
rack-contrib (1.2.0)
|
||||||
|
rack (>= 0.9.1)
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/rkh/mustermann.git
|
remote: git://github.com/rkh/mustermann.git
|
||||||
revision: 9611951c5c789ad8227a740ae142c157a8bf7401
|
revision: fa22e2cf4cfdb57f452c366eac66f241827b7e9c
|
||||||
specs:
|
specs:
|
||||||
mustermann (0.4.0)
|
mustermann (0.4.0)
|
||||||
tool (~> 0.2)
|
tool (~> 0.2)
|
||||||
|
@ -35,30 +42,45 @@ GIT
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/travis-ci/travis-amqp.git
|
remote: git://github.com/travis-ci/travis-amqp.git
|
||||||
revision: 3966b3651adfd1c544f53d49d5986ac16cd9c4bc
|
revision: c388299757b7eda2cc0e33cdc7d90113cf283e6a
|
||||||
specs:
|
specs:
|
||||||
travis-amqp (0.0.1)
|
travis-amqp (0.0.1)
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/travis-ci/travis-migrations.git
|
remote: git://github.com/travis-ci/travis-core.git
|
||||||
revision: dc432e45354287c617c3ae07a72e9e3c4be012cd
|
revision: f7b3a76b3f39c28bb5cf7b9dc24acec13908a11a
|
||||||
specs:
|
specs:
|
||||||
travis-migrations (0.0.2)
|
travis-core (0.0.1)
|
||||||
|
actionmailer (~> 3.2.19)
|
||||||
|
activerecord (~> 3.2.19)
|
||||||
|
coder (~> 0.4.0)
|
||||||
|
data_migrations (~> 0.0.1)
|
||||||
|
gh
|
||||||
|
hashr (~> 0.0.19)
|
||||||
|
metriks (~> 0.9.7)
|
||||||
|
multi_json
|
||||||
|
pusher (~> 0.14.0)
|
||||||
|
railties (~> 3.2.19)
|
||||||
|
rake
|
||||||
|
redis (~> 3.0)
|
||||||
|
rollout (~> 1.1.0)
|
||||||
|
s3 (~> 0.3)
|
||||||
|
simple_states (~> 1.0.0)
|
||||||
|
thor (~> 0.14.6)
|
||||||
|
travis-config (~> 0.1.0)
|
||||||
|
virtus (~> 1.0.0)
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/travis-ci/travis-settings.git
|
remote: git://github.com/travis-ci/travis-migrations.git
|
||||||
revision: d510e63b6c6f059cccae141c265e7a0c7236d1fd
|
revision: fcf6eea3e3122a7cbb857826db835de69974c54d
|
||||||
specs:
|
specs:
|
||||||
travis-settings (0.0.1)
|
travis-migrations (0.0.1)
|
||||||
activemodel
|
|
||||||
virtus
|
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: git://github.com/travis-ci/travis-sidekiqs.git
|
remote: git://github.com/travis-ci/travis-sidekiqs.git
|
||||||
revision: c5d4a4abc6c3737f9c43d3333efb94daa18b9fbb
|
revision: 21a2fee158e25252dd78f5fa31e81b4f6583be23
|
||||||
specs:
|
specs:
|
||||||
travis-sidekiqs (0.0.1)
|
travis-sidekiqs (0.0.1)
|
||||||
redis-namespace
|
|
||||||
sidekiq
|
sidekiq
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
|
@ -77,33 +99,25 @@ PATH
|
||||||
remote: .
|
remote: .
|
||||||
specs:
|
specs:
|
||||||
travis-api (0.0.1)
|
travis-api (0.0.1)
|
||||||
activerecord (~> 3.2.19)
|
|
||||||
coder (~> 0.4.0)
|
|
||||||
composite_primary_keys (~> 5.0)
|
composite_primary_keys (~> 5.0)
|
||||||
google-api-client (~> 0.9.4)
|
|
||||||
hashr
|
|
||||||
memcachier
|
memcachier
|
||||||
multi_json
|
|
||||||
mustermann (~> 0.4)
|
mustermann (~> 0.4)
|
||||||
pg
|
pg
|
||||||
pusher (~> 0.14.0)
|
|
||||||
rack-contrib (~> 1.1)
|
rack-contrib (~> 1.1)
|
||||||
rack-ssl (~> 1.3, >= 1.3.3)
|
rack-ssl (~> 1.3, >= 1.3.3)
|
||||||
railties (~> 3.2.19)
|
|
||||||
redcarpet (~> 2.1)
|
redcarpet (~> 2.1)
|
||||||
redis (~> 3.0)
|
|
||||||
rollout (~> 1.1.0)
|
|
||||||
simple_states (~> 1.0.0)
|
|
||||||
sinatra (~> 1.3)
|
sinatra (~> 1.3)
|
||||||
sinatra-contrib (~> 1.3)
|
sinatra-contrib (~> 1.3)
|
||||||
tool
|
travis-core
|
||||||
travis-support
|
travis-support
|
||||||
useragent
|
useragent
|
||||||
virtus (~> 1.0.0)
|
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
|
actionmailer (3.2.22.2)
|
||||||
|
actionpack (= 3.2.22.2)
|
||||||
|
mail (~> 2.5.4)
|
||||||
actionpack (3.2.22.2)
|
actionpack (3.2.22.2)
|
||||||
activemodel (= 3.2.22.2)
|
activemodel (= 3.2.22.2)
|
||||||
activesupport (= 3.2.22.2)
|
activesupport (= 3.2.22.2)
|
||||||
|
@ -114,7 +128,7 @@ GEM
|
||||||
rack-cache (~> 1.2)
|
rack-cache (~> 1.2)
|
||||||
rack-test (~> 0.6.1)
|
rack-test (~> 0.6.1)
|
||||||
sprockets (~> 2.2.1)
|
sprockets (~> 2.2.1)
|
||||||
active_model_serializers (0.9.5)
|
active_model_serializers (0.9.0)
|
||||||
activemodel (>= 3.2)
|
activemodel (>= 3.2)
|
||||||
activemodel (3.2.22.2)
|
activemodel (3.2.22.2)
|
||||||
activesupport (= 3.2.22.2)
|
activesupport (= 3.2.22.2)
|
||||||
|
@ -138,31 +152,38 @@ GEM
|
||||||
backports (3.6.8)
|
backports (3.6.8)
|
||||||
builder (3.0.4)
|
builder (3.0.4)
|
||||||
bunny (0.8.0)
|
bunny (0.8.0)
|
||||||
|
celluloid (0.16.0)
|
||||||
|
timers (~> 4.0.0)
|
||||||
coder (0.4.0)
|
coder (0.4.0)
|
||||||
coderay (1.1.1)
|
coderay (1.1.0)
|
||||||
coercible (1.0.0)
|
coercible (1.0.0)
|
||||||
descendants_tracker (~> 0.0.1)
|
descendants_tracker (~> 0.0.1)
|
||||||
composite_primary_keys (5.0.14)
|
composite_primary_keys (5.0.14)
|
||||||
activerecord (~> 3.2.0, >= 3.2.9)
|
activerecord (~> 3.2.0, >= 3.2.9)
|
||||||
concurrent-ruby (1.0.2)
|
connection_pool (2.1.1)
|
||||||
connection_pool (2.2.0)
|
customerio (0.6.1)
|
||||||
customerio (1.0.0)
|
httparty (>= 0.5, < 0.12)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
dalli (2.7.6)
|
dalli (2.7.2)
|
||||||
|
data_migrations (0.0.1)
|
||||||
|
activerecord
|
||||||
|
rake
|
||||||
database_cleaner (0.8.0)
|
database_cleaner (0.8.0)
|
||||||
descendants_tracker (0.0.4)
|
descendants_tracker (0.0.4)
|
||||||
thread_safe (~> 0.3, >= 0.3.1)
|
thread_safe (~> 0.3, >= 0.3.1)
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.2.5)
|
||||||
docile (1.1.5)
|
docile (1.1.5)
|
||||||
|
dotenv (0.7.0)
|
||||||
equalizer (0.0.11)
|
equalizer (0.0.11)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
factory_girl (2.4.2)
|
factory_girl (2.4.2)
|
||||||
activesupport
|
activesupport
|
||||||
faraday (0.9.2)
|
faraday (0.9.2)
|
||||||
multipart-post (>= 1.2, < 3)
|
multipart-post (>= 1.2, < 3)
|
||||||
ffi (1.9.10)
|
ffi (1.9.6)
|
||||||
foreman (0.82.0)
|
foreman (0.64.0)
|
||||||
thor (~> 0.19.1)
|
dotenv (~> 0.7.0)
|
||||||
|
thor (>= 0.13.6)
|
||||||
gh (0.14.0)
|
gh (0.14.0)
|
||||||
addressable
|
addressable
|
||||||
backports
|
backports
|
||||||
|
@ -170,47 +191,27 @@ GEM
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
net-http-persistent (>= 2.7)
|
net-http-persistent (>= 2.7)
|
||||||
net-http-pipeline
|
net-http-pipeline
|
||||||
git-version-bump (0.15.1)
|
|
||||||
google-api-client (0.9.8)
|
|
||||||
addressable (~> 2.3)
|
|
||||||
googleauth (~> 0.5)
|
|
||||||
httpclient (~> 2.7)
|
|
||||||
hurley (~> 0.1)
|
|
||||||
memoist (~> 0.11)
|
|
||||||
mime-types (>= 1.6)
|
|
||||||
representable (~> 2.3.0)
|
|
||||||
retriable (~> 2.0)
|
|
||||||
thor (~> 0.19)
|
|
||||||
googleauth (0.5.1)
|
|
||||||
faraday (~> 0.9)
|
|
||||||
jwt (~> 1.4)
|
|
||||||
logging (~> 2.0)
|
|
||||||
memoist (~> 0.12)
|
|
||||||
multi_json (~> 1.11)
|
|
||||||
os (~> 0.9)
|
|
||||||
signet (~> 0.7)
|
|
||||||
hashr (0.0.22)
|
hashr (0.0.22)
|
||||||
hike (1.2.3)
|
hike (1.2.3)
|
||||||
hitimes (1.2.4)
|
hitimes (1.2.3)
|
||||||
httpclient (2.8.0)
|
httparty (0.11.0)
|
||||||
hurley (0.2)
|
multi_json (~> 1.0)
|
||||||
|
multi_xml (>= 0.5.2)
|
||||||
|
httpclient (2.7.1)
|
||||||
i18n (0.7.0)
|
i18n (0.7.0)
|
||||||
ice_nine (0.11.2)
|
ice_nine (0.11.2)
|
||||||
jemalloc (1.0.1)
|
jemalloc (1.0.1)
|
||||||
journey (1.0.4)
|
journey (1.0.4)
|
||||||
json (1.8.3)
|
json (1.8.3)
|
||||||
jwt (1.5.4)
|
kgio (2.9.2)
|
||||||
kgio (2.10.0)
|
listen (1.0.3)
|
||||||
listen (3.1.5)
|
rb-fsevent (>= 0.9.3)
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
rb-inotify (>= 0.9)
|
||||||
rb-inotify (~> 0.9, >= 0.9.7)
|
rb-kqueue (>= 0.2)
|
||||||
ruby_dep (~> 1.2)
|
mail (2.5.4)
|
||||||
little-plugger (1.1.4)
|
mime-types (~> 1.16)
|
||||||
logging (2.1.0)
|
treetop (~> 1.4.8)
|
||||||
little-plugger (~> 1.1)
|
|
||||||
multi_json (~> 1.10)
|
|
||||||
memcachier (0.0.2)
|
memcachier (0.0.2)
|
||||||
memoist (0.14.0)
|
|
||||||
metaclass (0.0.4)
|
metaclass (0.0.4)
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
metriks (0.9.9.6)
|
metriks (0.9.9.6)
|
||||||
|
@ -223,15 +224,15 @@ GEM
|
||||||
mime-types (1.25.1)
|
mime-types (1.25.1)
|
||||||
mocha (0.14.0)
|
mocha (0.14.0)
|
||||||
metaclass (~> 0.0.1)
|
metaclass (~> 0.0.1)
|
||||||
multi_json (1.12.1)
|
multi_json (1.11.2)
|
||||||
|
multi_xml (0.5.5)
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.0.0)
|
||||||
net-http-persistent (2.9.4)
|
net-http-persistent (2.9.4)
|
||||||
net-http-pipeline (1.0.1)
|
net-http-pipeline (1.0.1)
|
||||||
netaddr (1.5.1)
|
pg (0.18.2)
|
||||||
os (0.9.6)
|
polyglot (0.3.5)
|
||||||
pg (0.18.4)
|
|
||||||
proxies (0.2.1)
|
proxies (0.2.1)
|
||||||
pry (0.10.3)
|
pry (0.10.1)
|
||||||
coderay (~> 1.1.0)
|
coderay (~> 1.1.0)
|
||||||
method_source (~> 0.8.1)
|
method_source (~> 0.8.1)
|
||||||
slop (~> 3.4)
|
slop (~> 3.4)
|
||||||
|
@ -241,11 +242,8 @@ GEM
|
||||||
pusher-signature (~> 0.1.8)
|
pusher-signature (~> 0.1.8)
|
||||||
pusher-signature (0.1.8)
|
pusher-signature (0.1.8)
|
||||||
rack (1.4.7)
|
rack (1.4.7)
|
||||||
rack-attack (5.0.0.beta1)
|
rack-attack (4.2.0)
|
||||||
rack
|
rack
|
||||||
rack-contrib (1.4.0)
|
|
||||||
git-version-bump (~> 0.15)
|
|
||||||
rack (~> 1.4)
|
|
||||||
rack-protection (1.5.3)
|
rack-protection (1.5.3)
|
||||||
rack
|
rack
|
||||||
rack-ssl (1.3.4)
|
rack-ssl (1.3.4)
|
||||||
|
@ -259,22 +257,21 @@ GEM
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
rdoc (~> 3.4)
|
rdoc (~> 3.4)
|
||||||
thor (>= 0.14.6, < 2.0)
|
thor (>= 0.14.6, < 2.0)
|
||||||
raindrops (0.16.0)
|
raindrops (0.13.0)
|
||||||
rake (0.9.6)
|
rake (0.9.6)
|
||||||
rb-fsevent (0.9.7)
|
rb-fsevent (0.9.4)
|
||||||
rb-inotify (0.9.7)
|
rb-inotify (0.9.5)
|
||||||
|
ffi (>= 0.5.0)
|
||||||
|
rb-kqueue (0.2.3)
|
||||||
ffi (>= 0.5.0)
|
ffi (>= 0.5.0)
|
||||||
rdoc (3.12.2)
|
rdoc (3.12.2)
|
||||||
json (~> 1.4)
|
json (~> 1.4)
|
||||||
redcarpet (2.3.0)
|
redcarpet (2.3.0)
|
||||||
redis (3.3.0)
|
redis (3.2.2)
|
||||||
redis-namespace (1.5.2)
|
redis-namespace (1.5.1)
|
||||||
redis (~> 3.0, >= 3.0.4)
|
redis (~> 3.0, >= 3.0.4)
|
||||||
representable (2.3.0)
|
rerun (0.8.2)
|
||||||
uber (~> 0.0.7)
|
listen (~> 1.0.3)
|
||||||
rerun (0.11.0)
|
|
||||||
listen (~> 3.0)
|
|
||||||
retriable (2.1.0)
|
|
||||||
rollout (1.1.0)
|
rollout (1.1.0)
|
||||||
rspec (2.99.0)
|
rspec (2.99.0)
|
||||||
rspec-core (~> 2.99.0)
|
rspec-core (~> 2.99.0)
|
||||||
|
@ -286,39 +283,35 @@ GEM
|
||||||
rspec-its (1.0.1)
|
rspec-its (1.0.1)
|
||||||
rspec-core (>= 2.99.0.beta1)
|
rspec-core (>= 2.99.0.beta1)
|
||||||
rspec-expectations (>= 2.99.0.beta1)
|
rspec-expectations (>= 2.99.0.beta1)
|
||||||
rspec-mocks (2.99.4)
|
rspec-mocks (2.99.2)
|
||||||
ruby_dep (1.3.1)
|
sentry-raven (0.15.3)
|
||||||
sentry-raven (1.0.0)
|
|
||||||
faraday (>= 0.7.6)
|
faraday (>= 0.7.6)
|
||||||
sidekiq (4.1.2)
|
sidekiq (3.3.0)
|
||||||
concurrent-ruby (~> 1.0)
|
celluloid (>= 0.16.0)
|
||||||
connection_pool (~> 2.2, >= 2.2.0)
|
connection_pool (>= 2.0.0)
|
||||||
redis (~> 3.2, >= 3.2.1)
|
json
|
||||||
signet (0.7.2)
|
redis (>= 3.0.6)
|
||||||
addressable (~> 2.3)
|
redis-namespace (>= 1.3.1)
|
||||||
faraday (~> 0.9)
|
|
||||||
jwt (~> 1.5)
|
|
||||||
multi_json (~> 1.10)
|
|
||||||
simple_states (1.0.1)
|
simple_states (1.0.1)
|
||||||
activesupport
|
activesupport
|
||||||
hashr (~> 0.0.10)
|
hashr (~> 0.0.10)
|
||||||
simplecov (0.11.2)
|
simplecov (0.9.1)
|
||||||
docile (~> 1.1.0)
|
docile (~> 1.1.0)
|
||||||
json (~> 1.8)
|
multi_json (~> 1.0)
|
||||||
simplecov-html (~> 0.10.0)
|
simplecov-html (~> 0.8.0)
|
||||||
simplecov-html (0.10.0)
|
simplecov-html (0.8.0)
|
||||||
sinatra (1.4.6)
|
sinatra (1.4.6)
|
||||||
rack (~> 1.4)
|
rack (~> 1.4)
|
||||||
rack-protection (~> 1.4)
|
rack-protection (~> 1.4)
|
||||||
tilt (>= 1.3, < 3)
|
tilt (>= 1.3, < 3)
|
||||||
sinatra-contrib (1.4.7)
|
sinatra-contrib (1.4.2)
|
||||||
backports (>= 2.0)
|
backports (>= 2.0)
|
||||||
multi_json
|
multi_json
|
||||||
rack-protection
|
rack-protection
|
||||||
rack-test
|
rack-test
|
||||||
sinatra (~> 1.4.0)
|
sinatra (~> 1.4.0)
|
||||||
tilt (>= 1.3, < 3)
|
tilt (~> 1.3)
|
||||||
skylight (0.6.2.beta.2)
|
skylight (0.6.0.beta.1)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
slop (3.6.0)
|
slop (3.6.0)
|
||||||
sprockets (2.2.3)
|
sprockets (2.2.3)
|
||||||
|
@ -326,20 +319,24 @@ GEM
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
rack (~> 1.0)
|
rack (~> 1.0)
|
||||||
tilt (~> 1.1, != 1.3.0)
|
tilt (~> 1.1, != 1.3.0)
|
||||||
stackprof (0.2.9)
|
stackprof (0.2.7)
|
||||||
thor (0.19.1)
|
thor (0.14.6)
|
||||||
thread_safe (0.3.5)
|
thread_safe (0.3.5)
|
||||||
tilt (1.4.1)
|
tilt (1.4.1)
|
||||||
timecop (0.8.1)
|
timers (4.0.1)
|
||||||
|
hitimes
|
||||||
tool (0.2.3)
|
tool (0.2.3)
|
||||||
travis-config (0.1.4)
|
travis-config (0.1.4)
|
||||||
hashr (~> 0.0)
|
hashr (~> 0.0)
|
||||||
tzinfo (0.3.49)
|
treetop (1.4.15)
|
||||||
uber (0.0.15)
|
polyglot
|
||||||
unicorn (5.1.0)
|
polyglot (>= 0.3.1)
|
||||||
|
tzinfo (0.3.47)
|
||||||
|
unicorn (4.8.3)
|
||||||
kgio (~> 2.6)
|
kgio (~> 2.6)
|
||||||
|
rack
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
useragent (0.16.7)
|
useragent (0.13.3)
|
||||||
virtus (1.0.5)
|
virtus (1.0.5)
|
||||||
axiom-types (~> 0.1)
|
axiom-types (~> 0.1)
|
||||||
coercible (~> 1.0)
|
coercible (~> 1.0)
|
||||||
|
@ -365,11 +362,10 @@ DEPENDENCIES
|
||||||
micro_migrations
|
micro_migrations
|
||||||
mocha (~> 0.12)
|
mocha (~> 0.12)
|
||||||
mustermann!
|
mustermann!
|
||||||
netaddr
|
|
||||||
pry
|
pry
|
||||||
rack-attack (= 5.0.0.beta1)
|
rack-attack
|
||||||
rack-cache!
|
rack-cache!
|
||||||
rack-contrib
|
rack-contrib!
|
||||||
rake (~> 0.9.2)
|
rake (~> 0.9.2)
|
||||||
rb-fsevent (~> 0.9.1)
|
rb-fsevent (~> 0.9.1)
|
||||||
rerun
|
rerun
|
||||||
|
@ -382,17 +378,13 @@ DEPENDENCIES
|
||||||
sinatra-contrib
|
sinatra-contrib
|
||||||
skylight (~> 0.6.0.beta.1)
|
skylight (~> 0.6.0.beta.1)
|
||||||
stackprof
|
stackprof
|
||||||
timecop (~> 0.8.0)
|
|
||||||
travis-amqp!
|
travis-amqp!
|
||||||
travis-api!
|
travis-api!
|
||||||
travis-config (~> 0.1.0)
|
travis-config (~> 0.1.0)
|
||||||
|
travis-core!
|
||||||
travis-migrations!
|
travis-migrations!
|
||||||
travis-settings!
|
|
||||||
travis-sidekiqs!
|
travis-sidekiqs!
|
||||||
travis-support!
|
travis-support!
|
||||||
travis-yaml!
|
travis-yaml!
|
||||||
unicorn
|
unicorn
|
||||||
yard-sinatra!
|
yard-sinatra!
|
||||||
|
|
||||||
BUNDLED WITH
|
|
||||||
1.12.5
|
|
||||||
|
|
1
Procfile
1
Procfile
|
@ -1,4 +1,3 @@
|
||||||
web: ./script/server
|
web: ./script/server
|
||||||
console: bundle exec je ./script/console
|
console: bundle exec je ./script/console
|
||||||
sidekiq: bundle exec je sidekiq -c 4 -r ./lib/travis/sidekiq.rb -q build_cancellations, -q build_restarts, -q job_cancellations, -q job_restarts
|
sidekiq: bundle exec je sidekiq -c 4 -r ./lib/travis/sidekiq.rb -q build_cancellations, -q build_restarts, -q job_cancellations, -q job_restarts
|
||||||
start_crons: ./script/start_crons
|
|
||||||
|
|
78
README.md
78
README.md
|
@ -4,68 +4,51 @@ This is the app running on https://api.travis-ci.org/
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
You will need the following packages to get travis-api to work:
|
|
||||||
|
|
||||||
1. PostgreSQL 9.3 or higher
|
1. PostgreSQL 9.3 or higher
|
||||||
2. Bundler
|
1. Redis
|
||||||
3. Redis Server
|
1. RabbitMQ
|
||||||
4. *Optional:* RabbitMQ Server
|
1. Nginx *NB: If working on Ubuntu please install Nginx manually from source. [This guide](http://www.rackspace.com/knowledge_center/article/ubuntu-and-debian-installing-nginx-from-source) is helpful but make sure you install the [latest stable version](https://www.nginx.com/resources/wiki/start/topics/tutorials/install/#stable), include the user name on your ubuntu machine when compiling (add `--user=[yourusername]` as an option when running `./configure`), and don't follow any subsequent server configuration steps. Travis-api will start and configure its own nginx server when run locally.
|
||||||
5. Nginx -
|
|
||||||
*If working in Ubuntu please install nginx manually from source: Download and extract latest nginx version, open a terminal in extracted folder and then run the following:*
|
|
||||||
```sh-session
|
|
||||||
$ sudo apt-get install libpcre3 libpcre3-dev
|
|
||||||
$ auto/configure --user=$USER
|
|
||||||
$ make
|
|
||||||
$ sudo make install
|
|
||||||
$ sudo ln -s /usr/local/nginx/sbin/nginx /bin/nginx
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
```sh-session
|
|
||||||
$ bundle install
|
$ bundle install
|
||||||
```
|
|
||||||
### Database setup
|
### Database setup
|
||||||
|
|
||||||
*You might need to create a role first. For this you should run the following:*
|
NB detail for how `rake` sets up the database can be found in the `Rakefile`. In the `namespace :db` block you will see the database name for development is hardcoded to `travis-development`. If you are using a different configuration you will have to make your own adjustments.
|
||||||
|
|
||||||
|
1. `bundle exec rake db:create`
|
||||||
|
2. for testing 'RAILS_ENV=test bundle exec rake db:create --trace'
|
||||||
|
1. Clone `travis-logs` and copy the `logs` database (assume the PostgreSQL user is `postgres`):
|
||||||
```sh-session
|
```sh-session
|
||||||
$ sudo -u postgres psql -c "CREATE USER yourusername WITH SUPERUSER PASSWORD 'yourpassword'"
|
cd ..
|
||||||
|
git clone https://github.com/travis-ci/travis-logs.git
|
||||||
|
cd travis-logs
|
||||||
|
rvm jruby do bundle exec rake db:migrate # `travis-logs` requires JRuby
|
||||||
|
psql -c "DROP TABLE IF EXISTS logs CASCADE" -U postgres travis_development
|
||||||
|
pg_dump -t logs travis_logs_development | psql -U postgres travis_development
|
||||||
```
|
```
|
||||||
|
|
||||||
NB detail for how `rake` sets up the database can be found in the `Rakefile`. In the `namespace :db` block you will see the database name is configured using the environment variable RAILS_ENV. If you are using a different configuration you will have to make your own adjustments.
|
Repeat the database steps for `RAILS_ENV=test`.
|
||||||
```sh-session
|
```sh-session
|
||||||
$ RAILS_ENV=development bundle exec rake db:create
|
RAILS_ENV=test bundle exec rake db:create
|
||||||
$ RAILS_ENV=test bundle exec rake db:create
|
pushd ../travis-logs
|
||||||
```
|
RAILS_ENV=test rvm jruby do bundle exec rake db:migrate
|
||||||
#### Optional
|
psql -c "DROP TABLE IF EXISTS logs CASCADE" -U postgres travis_test
|
||||||
Clone `travis-logs` and copy the `logs` database (assume the PostgreSQL user is `postgres`):
|
pg_dump -t logs travis_logs_test | psql -U postgres travis_test
|
||||||
```sh-session
|
popd
|
||||||
$ cd ..
|
|
||||||
$ git clone https://github.com/travis-ci/travis-logs.git
|
|
||||||
$ cd travis-logs
|
|
||||||
$ rvm jruby do bundle exec rake db:migrate # `travis-logs` requires JRuby
|
|
||||||
$ psql -c "DROP TABLE IF EXISTS logs CASCADE" -U postgres travis_development
|
|
||||||
$ pg_dump -t logs travis_logs_development | psql -U postgres travis_development
|
|
||||||
|
|
||||||
$ RAILS_ENV=test bundle exec rake db:create
|
|
||||||
$ pushd ../travis-logs
|
|
||||||
$ RAILS_ENV=test rvm jruby do bundle exec rake db:migrate
|
|
||||||
$ psql -c "DROP TABLE IF EXISTS logs CASCADE" -U postgres travis_test
|
|
||||||
$ pg_dump -t logs travis_logs_test | psql -U postgres travis_test
|
|
||||||
$ popd
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Run tests
|
### Run tests
|
||||||
```sh-session
|
|
||||||
$ bundle exec rake
|
$ rake spec
|
||||||
```
|
|
||||||
### Run the server
|
### Run the server
|
||||||
```sh-session
|
|
||||||
$ bundle exec script/server
|
$ bundle exec script/server
|
||||||
```
|
|
||||||
If you have problems with Nginx because the websocket is already in use, try restarting your computer.
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
@ -77,4 +60,5 @@ If you have problems with Nginx because the websocket is already in use, try res
|
||||||
|
|
||||||
### API documentation
|
### API documentation
|
||||||
|
|
||||||
v3 documentation can be found at https://developer.travis-ci.org which is a repository that can be found at https://github.com/travis-pro/developer
|
We use source code comments to add documentation. If the server is running, you
|
||||||
|
can browse an HTML documenation at [`/docs`](http://localhost:5000/docs).
|
||||||
|
|
61
Rakefile
61
Rakefile
|
@ -1,34 +1,45 @@
|
||||||
|
require 'rake'
|
||||||
|
require 'travis/migrations'
|
||||||
|
|
||||||
|
task default: :spec
|
||||||
|
|
||||||
namespace :db do
|
namespace :db do
|
||||||
env = ENV["RAILS_ENV"]
|
if ENV["RAILS_ENV"] == 'test'
|
||||||
if env != 'production'
|
desc 'Create and migrate the test database'
|
||||||
desc "Create and migrate the #{env} database"
|
|
||||||
task :create do
|
task :create do
|
||||||
sh "createdb travis_#{env}" rescue nil
|
sh 'createdb travis_test' rescue nil
|
||||||
sh "psql -q travis_#{env} < #{Gem.loaded_specs['travis-migrations'].full_gem_path}/db/structure.sql"
|
sh "psql -q travis_test < #{Gem.loaded_specs['travis-migrations'].full_gem_path}/db/structure.sql"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
desc 'Create and migrate the development database'
|
||||||
|
task :create do
|
||||||
|
sh 'createdb travis_development' rescue nil
|
||||||
|
sh "psql -q travis_development < #{Gem.loaded_specs['travis-migrations'].full_gem_path}/db/structure.sql"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# begin
|
desc "generate gemspec"
|
||||||
# require 'rspec'
|
task 'travis-api.gemspec' do
|
||||||
# require 'rspec/core/rake_task'
|
content = File.read 'travis-api.gemspec'
|
||||||
# RSpec::Core::RakeTask.new(:spec)
|
|
||||||
#
|
|
||||||
# RSpec::Core::RakeTask.new(:spec_core) do |t|
|
|
||||||
# t.pattern = 'spec_core/**{,/*/**}/*_spec.rb'
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# task :default => [:spec]
|
|
||||||
# rescue LoadError => e
|
|
||||||
# puts e.inspect
|
|
||||||
# end
|
|
||||||
|
|
||||||
# not sure how else to include the spec_helper
|
fields = {
|
||||||
namespace :spec do
|
authors: `git shortlog -sn`.scan(/[^\d\s].*/),
|
||||||
desc 'Run all specs'
|
email: `git shortlog -sne`.scan(/[^<]+@[^>]+/),
|
||||||
task :all do
|
files: `git ls-files`.split("\n").reject { |f| f =~ /^(\.|Gemfile)/ }
|
||||||
sh 'bundle exec rspec -r spec_helper spec'
|
}
|
||||||
|
|
||||||
|
fields.each do |field, values|
|
||||||
|
updated = " s.#{field} = ["
|
||||||
|
updated << values.map { |v| "\n %p" % v }.join(',')
|
||||||
|
updated << "\n ]"
|
||||||
|
content.sub!(/ s\.#{field} = \[\n( .*\n)* \]/, updated)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
task :default => :'spec:all'
|
File.open('travis-api.gemspec', 'w') { |f| f << content }
|
||||||
|
end
|
||||||
|
|
||||||
|
task default: 'travis-api.gemspec'
|
||||||
|
|
||||||
|
tasks_path = File.expand_path('../lib/tasks/*.rake', __FILE__)
|
||||||
|
Dir.glob(tasks_path).each { |r| import r }
|
||||||
|
|
Binary file not shown.
|
@ -1,67 +0,0 @@
|
||||||
require 'pusher'
|
|
||||||
require 'travis/support'
|
|
||||||
require 'travis/support/database'
|
|
||||||
require 'travis/redis_pool'
|
|
||||||
require 'travis/errors'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
class << self
|
|
||||||
def services=(services)
|
|
||||||
@services = services
|
|
||||||
end
|
|
||||||
|
|
||||||
def services
|
|
||||||
@services ||= Travis::Services
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
require 'travis/model'
|
|
||||||
require 'travis/task'
|
|
||||||
require 'travis/event'
|
|
||||||
require 'travis/api/serialize'
|
|
||||||
require 'travis/config/defaults'
|
|
||||||
require 'travis/features'
|
|
||||||
require 'travis/github'
|
|
||||||
require 'travis/notification'
|
|
||||||
require 'travis/services'
|
|
||||||
|
|
||||||
class UnknownRepository < StandardError; end
|
|
||||||
class GithubApiError < StandardError; end
|
|
||||||
class AdminMissing < StandardError; end
|
|
||||||
class RepositoryMissing < StandardError; end
|
|
||||||
class LogAlreadyRemoved < StandardError; end
|
|
||||||
class AuthorizationDenied < StandardError; end
|
|
||||||
class JobUnfinished < StandardError; end
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def setup(options = {})
|
|
||||||
@config = Config.load(*options[:configs])
|
|
||||||
@redis = Travis::RedisPool.new(config.redis.to_h)
|
|
||||||
|
|
||||||
Travis.logger.info('Setting up Travis::Core')
|
|
||||||
|
|
||||||
Github.setup
|
|
||||||
Services.register
|
|
||||||
Github::Services.register
|
|
||||||
end
|
|
||||||
|
|
||||||
attr_accessor :redis, :config
|
|
||||||
|
|
||||||
def pusher
|
|
||||||
@pusher ||= ::Pusher.tap do |pusher|
|
|
||||||
pusher.app_id = config.pusher.app_id
|
|
||||||
pusher.key = config.pusher.key
|
|
||||||
pusher.secret = config.pusher.secret
|
|
||||||
pusher.scheme = config.pusher.scheme if config.pusher.scheme
|
|
||||||
pusher.host = config.pusher.host if config.pusher.host
|
|
||||||
pusher.port = config.pusher.port if config.pusher.port
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def states_cache
|
|
||||||
@states_cache ||= Travis::StatesCache.new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
setup
|
|
||||||
end
|
|
|
@ -26,15 +26,10 @@ require 'metriks/reporter/logger'
|
||||||
require 'metriks/librato_metrics_reporter'
|
require 'metriks/librato_metrics_reporter'
|
||||||
require 'travis/support/log_subscriber/active_record_metrics'
|
require 'travis/support/log_subscriber/active_record_metrics'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require 'securerandom'
|
|
||||||
|
|
||||||
module Travis::Api
|
|
||||||
end
|
|
||||||
|
|
||||||
require 'travis/api/app/endpoint'
|
require 'travis/api/app/endpoint'
|
||||||
require 'travis/api/app/middleware'
|
require 'travis/api/app/middleware'
|
||||||
require 'travis/api/instruments'
|
require 'travis/api/instruments'
|
||||||
require 'travis/api/serialize/v2'
|
require 'travis/api/v2/http'
|
||||||
require 'travis/api/v3'
|
require 'travis/api/v3'
|
||||||
require 'travis/api/app/stack_instrumentation'
|
require 'travis/api/app/stack_instrumentation'
|
||||||
require 'travis/api/app/error_handling'
|
require 'travis/api/app/error_handling'
|
||||||
|
@ -82,27 +77,32 @@ module Travis::Api
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.deploy_sha
|
def self.deploy_sha
|
||||||
@deploy_sha ||= ENV['HEROKU_SLUG_COMMIT'] || SecureRandom.hex(5)
|
@deploy_sha ||= File.exist?(deploy_sha_path) ? File.read(deploy_sha_path)[0..7] : 'deploy-sha'
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.deploy_sha_path
|
||||||
|
File.expand_path('../../../../.deploy-sha', __FILE__)
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_accessor :app
|
attr_accessor :app
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@app = Rack::Builder.app do
|
@app = Rack::Builder.app do
|
||||||
# if stackprof = ENV['STACKPROF']
|
|
||||||
# require 'stackprof'
|
if stackprof = ENV['STACKPROF']
|
||||||
# modes = ['wall', 'cpu', 'object', 'custom']
|
require 'stackprof'
|
||||||
# mode = modes.include?(stackprof) ? stackprof.to_sym : :cpu
|
modes = ['wall', 'cpu', 'object', 'custom']
|
||||||
# Travis.logger.info "Setting up profiler: #{mode}"
|
mode = modes.include?(stackprof) ? stackprof.to_sym : :cpu
|
||||||
# use StackProf::Middleware, enabled: true, save_every: 1, mode: mode
|
Travis.logger.info "Setting up profiler: #{mode}"
|
||||||
# end
|
use StackProf::Middleware, enabled: true, save_every: 1, mode: mode
|
||||||
|
end
|
||||||
|
|
||||||
extend StackInstrumentation
|
extend StackInstrumentation
|
||||||
use Travis::Api::App::Middleware::Skylight
|
use Travis::Api::App::Middleware::Skylight
|
||||||
use(Rack::Config) { |env| env['metriks.request.start'] ||= Time.now.utc }
|
use(Rack::Config) { |env| env['metriks.request.start'] ||= Time.now.utc }
|
||||||
|
|
||||||
use Travis::Api::App::Cors # if Travis.env == 'development' ???
|
use Travis::Api::App::Cors # if Travis.env == 'development' ???
|
||||||
use Raven::Rack if Travis::Api::App.use_monitoring?
|
use Raven::Rack if Travis.env == 'production' || Travis.env == 'staging'
|
||||||
use Rack::SSL if Endpoint.production?
|
use Rack::SSL if Endpoint.production?
|
||||||
use ActiveRecord::ConnectionAdapters::ConnectionManagement
|
use ActiveRecord::ConnectionAdapters::ConnectionManagement
|
||||||
use ActiveRecord::QueryCache
|
use ActiveRecord::QueryCache
|
||||||
|
@ -129,7 +129,7 @@ module Travis::Api
|
||||||
use Travis::Api::App::Middleware::UserAgentTracker
|
use Travis::Api::App::Middleware::UserAgentTracker
|
||||||
|
|
||||||
# make sure this is below ScopeCheck so we have the token
|
# make sure this is below ScopeCheck so we have the token
|
||||||
use Rack::Attack if Endpoint.production? and not Travis.config.enterprise
|
use Rack::Attack if Endpoint.production?
|
||||||
|
|
||||||
# if this is a v3 API request, ignore everything after
|
# if this is a v3 API request, ignore everything after
|
||||||
use Travis::API::V3::OptIn
|
use Travis::API::V3::OptIn
|
||||||
|
@ -192,7 +192,7 @@ module Travis::Api
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if use_monitoring? && !console?
|
if use_monitoring? and not console?
|
||||||
setup_monitoring
|
setup_monitoring
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,11 +15,6 @@ class Travis::Api::App
|
||||||
options // do
|
options // do
|
||||||
headers['Access-Control-Allow-Methods'] = "HEAD, GET, POST, PATCH, PUT, DELETE"
|
headers['Access-Control-Allow-Methods'] = "HEAD, GET, POST, PATCH, PUT, DELETE"
|
||||||
headers['Access-Control-Allow-Headers'] = "Content-Type, Authorization, Accept, If-None-Match, If-Modified-Since, X-User-Agent, Travis-API-Version"
|
headers['Access-Control-Allow-Headers'] = "Content-Type, Authorization, Accept, If-None-Match, If-Modified-Since, X-User-Agent, Travis-API-Version"
|
||||||
|
|
||||||
# cache OPTIONS for 24 hours to avoid excessive preflight requests and speed up access
|
|
||||||
# browsers might still limit this value to 10 minutes, see caveats
|
|
||||||
# http://stackoverflow.com/a/12021982
|
|
||||||
headers['Access-Control-Max-Age'] = "86400"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
|
require 'travis/api/app'
|
||||||
require 'addressable/uri'
|
require 'addressable/uri'
|
||||||
require 'faraday'
|
require 'faraday'
|
||||||
require 'securerandom'
|
require 'securerandom'
|
||||||
require 'customerio'
|
require 'customerio'
|
||||||
require 'travis/api/app'
|
|
||||||
require 'travis/github/education'
|
|
||||||
require 'travis/github/oauth'
|
|
||||||
|
|
||||||
class Travis::Api::App
|
class Travis::Api::App
|
||||||
class Endpoint
|
class Endpoint
|
||||||
|
@ -114,7 +112,7 @@ class Travis::Api::App
|
||||||
# access token and user payload to the parent window via postMessage.
|
# access token and user payload to the parent window via postMessage.
|
||||||
#
|
#
|
||||||
# However, the endpoint to send the payload to has to be explicitely
|
# However, the endpoint to send the payload to has to be explicitely
|
||||||
# safelisted in production, as this is endpoint is only meant to be used
|
# whitelisted in production, as this is endpoint is only meant to be used
|
||||||
# with the official Travis CI client at the moment.
|
# with the official Travis CI client at the moment.
|
||||||
#
|
#
|
||||||
# Example usage:
|
# Example usage:
|
||||||
|
@ -179,8 +177,7 @@ class Travis::Api::App
|
||||||
:created_at => user.created_at.to_i,
|
:created_at => user.created_at.to_i,
|
||||||
:github_id => user.github_id,
|
:github_id => user.github_id,
|
||||||
:education => user.education,
|
:education => user.education,
|
||||||
:first_logged_in_at => user.first_logged_in_at.to_i,
|
:first_logged_in_at => user.first_logged_in_at.to_i
|
||||||
:travis_domain => Travis.config.client_domain
|
|
||||||
}
|
}
|
||||||
|
|
||||||
customerio.identify(payload)
|
customerio.identify(payload)
|
||||||
|
@ -189,7 +186,7 @@ class Travis::Api::App
|
||||||
end
|
end
|
||||||
|
|
||||||
def serialize_user(user)
|
def serialize_user(user)
|
||||||
rendered = Travis::Api::Serialize.data(user, version: :v2)
|
rendered = Travis::Api.data(user, version: :v2)
|
||||||
rendered['user'].merge('token' => user.tokens.first.try(:token).to_s)
|
rendered['user'].merge('token' => user.tokens.first.try(:token).to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -290,11 +287,8 @@ class Travis::Api::App
|
||||||
user.update_attributes info
|
user.update_attributes info
|
||||||
else
|
else
|
||||||
self.user = ::User.create! info
|
self.user = ::User.create! info
|
||||||
Travis.run_service(:sync_user, user)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
Travis::Github::Oauth.update_scopes(user) # unless Travis.env == 'test'
|
|
||||||
|
|
||||||
nullify_logins(user.github_id, user.login)
|
nullify_logins(user.github_id, user.login)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -331,6 +325,8 @@ class Travis::Api::App
|
||||||
|
|
||||||
def get_token(endpoint, values)
|
def get_token(endpoint, values)
|
||||||
response = Faraday.new(ssl: Travis.config.github.ssl).post(endpoint, values)
|
response = Faraday.new(ssl: Travis.config.github.ssl).post(endpoint, values)
|
||||||
|
#Travis.logger.info
|
||||||
|
puts "Faraday Object: #{response.inspect}"
|
||||||
parameters = Addressable::URI.form_unencode(response.body)
|
parameters = Addressable::URI.form_unencode(response.body)
|
||||||
token_info = parameters.assoc("access_token")
|
token_info = parameters.assoc("access_token")
|
||||||
halt 401, 'could not resolve github token' unless token_info
|
halt 401, 'could not resolve github token' unless token_info
|
||||||
|
@ -346,7 +342,7 @@ class Travis::Api::App
|
||||||
end
|
end
|
||||||
|
|
||||||
def acceptable?(scopes, lossy = false)
|
def acceptable?(scopes, lossy = false)
|
||||||
Travis::Github::Oauth.wanted_scopes.all? do |scope|
|
User::Oauth.wanted_scopes.all? do |scope|
|
||||||
acceptable_scopes_for(scope, lossy).any? { |s| scopes.include? s }
|
acceptable_scopes_for(scope, lossy).any? { |s| scopes.include? s }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -409,7 +405,7 @@ __END__
|
||||||
|
|
||||||
@@ invalid_target
|
@@ invalid_target
|
||||||
<script>
|
<script>
|
||||||
console.log('refusing to send a token to <%= target_origin.inspect %>, not safelisted!');
|
console.log('refusing to send a token to <%= target_origin.inspect %>, not whitelisted!');
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ common
|
@@ common
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
require 'travis/api/app'
|
require 'travis/api/app'
|
||||||
require 'travis/api/workers/build_cancellation'
|
require 'travis/api/workers/build_cancellation'
|
||||||
require 'travis/api/workers/build_restart'
|
require 'travis/api/workers/build_restart'
|
||||||
require 'travis/api/enqueue/services/restart_model'
|
|
||||||
require 'travis/api/enqueue/services/cancel_model'
|
|
||||||
|
|
||||||
class Travis::Api::App
|
class Travis::Api::App
|
||||||
class Endpoint
|
class Endpoint
|
||||||
|
@ -22,8 +20,7 @@ class Travis::Api::App
|
||||||
post '/:id/cancel' do
|
post '/:id/cancel' do
|
||||||
Metriks.meter("api.request.cancel_build").mark
|
Metriks.meter("api.request.cancel_build").mark
|
||||||
|
|
||||||
service = Travis::Enqueue::Services::CancelModel.new(current_user, { build_id: params[:id] })
|
service = self.service(:cancel_build, params.merge(source: 'api'))
|
||||||
|
|
||||||
if !service.authorized?
|
if !service.authorized?
|
||||||
json = { error: {
|
json = { error: {
|
||||||
message: "You don't have access to cancel build(#{params[:id]})"
|
message: "You don't have access to cancel build(#{params[:id]})"
|
||||||
|
@ -42,9 +39,7 @@ class Travis::Api::App
|
||||||
status 422
|
status 422
|
||||||
respond_with json
|
respond_with json
|
||||||
else
|
else
|
||||||
payload = { id: params[:id], user_id: current_user.id, source: 'api' }
|
Travis::Sidekiq::BuildCancellation.perform_async(id: params[:id], user_id: current_user.id, source: 'api')
|
||||||
|
|
||||||
service.push("build:cancel", payload)
|
|
||||||
|
|
||||||
Metriks.meter("api.request.cancel_build.success").mark
|
Metriks.meter("api.request.cancel_build.success").mark
|
||||||
status 204
|
status 204
|
||||||
|
@ -53,18 +48,16 @@ class Travis::Api::App
|
||||||
|
|
||||||
post '/:id/restart' do
|
post '/:id/restart' do
|
||||||
Metriks.meter("api.request.restart_build").mark
|
Metriks.meter("api.request.restart_build").mark
|
||||||
service = Travis::Enqueue::Services::RestartModel.new(current_user, build_id: params[:id])
|
|
||||||
|
|
||||||
result = if !service.accept?
|
service = self.service(:reset_model, build_id: params[:id])
|
||||||
|
if !service.accept?
|
||||||
status 400
|
status 400
|
||||||
false
|
result = false
|
||||||
else
|
else
|
||||||
payload = { id: params[:id], user_id: current_user.id }
|
Travis::Sidekiq::BuildRestart.perform_async(id: params[:id], user_id: current_user.id)
|
||||||
service.push("build:restart", payload)
|
|
||||||
status 202
|
status 202
|
||||||
true
|
result = true
|
||||||
end
|
end
|
||||||
|
|
||||||
respond_with(result: result, flash: service.messages)
|
respond_with(result: result, flash: service.messages)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
require 'travis/api/app'
|
require 'travis/api/app'
|
||||||
require 'travis/api/workers/job_cancellation'
|
require 'travis/api/workers/job_cancellation'
|
||||||
require 'travis/api/workers/job_restart'
|
require 'travis/api/workers/job_restart'
|
||||||
require 'travis/api/enqueue/services/restart_model'
|
|
||||||
require 'travis/api/enqueue/services/cancel_model'
|
|
||||||
|
|
||||||
class Travis::Api::App
|
class Travis::Api::App
|
||||||
class Endpoint
|
class Endpoint
|
||||||
|
@ -29,8 +27,7 @@ class Travis::Api::App
|
||||||
post '/:id/cancel' do
|
post '/:id/cancel' do
|
||||||
Metriks.meter("api.request.cancel_job").mark
|
Metriks.meter("api.request.cancel_job").mark
|
||||||
|
|
||||||
service = Travis::Enqueue::Services::CancelModel.new(current_user, { job_id: params[:id] })
|
service = self.service(:cancel_job, params.merge(source: 'api'))
|
||||||
|
|
||||||
if !service.authorized?
|
if !service.authorized?
|
||||||
json = { error: {
|
json = { error: {
|
||||||
message: "You don't have access to cancel job(#{params[:id]})"
|
message: "You don't have access to cancel job(#{params[:id]})"
|
||||||
|
@ -49,8 +46,7 @@ class Travis::Api::App
|
||||||
status 422
|
status 422
|
||||||
respond_with json
|
respond_with json
|
||||||
else
|
else
|
||||||
payload = { id: params[:id], user_id: current_user.id, source: 'api' }
|
Travis::Sidekiq::JobCancellation.perform_async(id: params[:id], user_id: current_user.id, source: 'api')
|
||||||
service.push("job:cancel", payload)
|
|
||||||
|
|
||||||
Metriks.meter("api.request.cancel_job.success").mark
|
Metriks.meter("api.request.cancel_job.success").mark
|
||||||
status 204
|
status 204
|
||||||
|
@ -60,18 +56,15 @@ class Travis::Api::App
|
||||||
post '/:id/restart' do
|
post '/:id/restart' do
|
||||||
Metriks.meter("api.request.restart_job").mark
|
Metriks.meter("api.request.restart_job").mark
|
||||||
|
|
||||||
service = Travis::Enqueue::Services::RestartModel.new(current_user, { job_id: params[:id] })
|
service = self.service(:reset_model, job_id: params[:id])
|
||||||
|
if !service.accept?
|
||||||
result = if !service.accept?
|
|
||||||
status 400
|
status 400
|
||||||
false
|
result = false
|
||||||
else
|
else
|
||||||
payload = {id: params[:id], user_id: current_user.id}
|
Travis::Sidekiq::JobRestart.perform_async(id: params[:id], user_id: current_user.id)
|
||||||
service.push("job:restart", payload)
|
|
||||||
status 202
|
status 202
|
||||||
true
|
result = true
|
||||||
end
|
end
|
||||||
|
|
||||||
respond_with(result: result, flash: service.messages)
|
respond_with(result: result, flash: service.messages)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
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
|
||||||
|
@ -23,22 +22,11 @@ class Travis::Api::App
|
||||||
status 404
|
status 404
|
||||||
else
|
else
|
||||||
# DEPRECATED: this will be removed by 1st of December
|
# DEPRECATED: this will be removed by 1st of December
|
||||||
#
|
|
||||||
# TODO It seems this endpoint is still in use, quite a bit:
|
|
||||||
# https://metrics.librato.com/s/metrics/api.request.restart?duration=2419200&q=api.request.restart
|
|
||||||
#
|
|
||||||
# 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, params)
|
respond_with service(:reset_model, params)
|
||||||
params[:user_id] = service.target.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
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ class Travis::Api::App
|
||||||
Thread.new do
|
Thread.new do
|
||||||
loop do
|
loop do
|
||||||
begin
|
begin
|
||||||
Raven.send_event queue.pop
|
Raven.send queue.pop
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
puts e.message, e.backtrace
|
puts e.message, e.backtrace
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ module Travis::Api::App::Responders
|
||||||
<updated><%= ::DateTime.parse(build.updated_at.to_s).rfc3339 %></updated>
|
<updated><%= ::DateTime.parse(build.updated_at.to_s).rfc3339 %></updated>
|
||||||
<summary type="html">
|
<summary type="html">
|
||||||
<p>
|
<p>
|
||||||
<%= build.commit.message.encode(:xml => :text) if build.commit.message %> (<%= build.commit.committer_name %>)
|
<%= build.commit.message.encode(:xml => :text) %> (<%= build.commit.committer_name %>)
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
State: <%= build.state %>
|
State: <%= build.state %>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
require 'travis/api/serialize'
|
|
||||||
|
|
||||||
class Travis::Api::App
|
class Travis::Api::App
|
||||||
module Responders
|
module Responders
|
||||||
class Json < Base
|
class Json < Base
|
||||||
|
@ -48,7 +46,7 @@ class Travis::Api::App
|
||||||
if defined?(@builder)
|
if defined?(@builder)
|
||||||
@builder
|
@builder
|
||||||
else
|
else
|
||||||
@builder = Travis::Api::Serialize.builder(resource, { :version => version }.merge(options))
|
@builder = Travis::Api.builder(resource, { :version => version }.merge(options))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
require 'rack/attack'
|
require 'rack/attack'
|
||||||
require 'netaddr'
|
|
||||||
|
|
||||||
class Rack::Attack
|
class Rack::Attack
|
||||||
class Request
|
class Request
|
||||||
|
@ -26,44 +25,31 @@ class Rack::Attack
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
POST_SAFELIST = [
|
POST_WHITELISTED = [
|
||||||
"/auth/handshake",
|
"/auth/handshake",
|
||||||
"/auth/post_message",
|
"/auth/post_message",
|
||||||
"/auth/post_message/iframe"
|
"/auth/post_message/iframe"
|
||||||
]
|
]
|
||||||
|
|
||||||
GITHUB_CIDR = NetAddr::CIDR.create('192.30.252.0/22')
|
|
||||||
|
|
||||||
safelist('safelist build status images') do |request|
|
|
||||||
/\.(png|svg)$/.match(request.path)
|
|
||||||
end
|
|
||||||
|
|
||||||
# https://help.github.com/articles/what-ip-addresses-does-github-use-that-i-should-safelist/
|
|
||||||
safelist('safelist anything coming from github') do |request|
|
|
||||||
request.ip && GITHUB_CIDR.contains?(request.ip)
|
|
||||||
end
|
|
||||||
|
|
||||||
####
|
####
|
||||||
# Whitelisted IP addresses
|
# Whitelisted IP addresses
|
||||||
safelist('safelist client requesting from redis') do |request|
|
whitelist('whitelist client requesting from redis') do |request|
|
||||||
# TODO: deprecate :api_whitelisted_ips in favour of api_safelisted_ips
|
Travis.redis.sismember(:api_whitelisted_ips, request.ip)
|
||||||
Travis.redis.sismember(:api_whitelisted_ips, request.ip) || Travis.redis.sismember(:api_safelisted_ips, request.ip)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
####
|
####
|
||||||
# Ban based on: IP address
|
# Ban based on: IP address
|
||||||
# Ban time: indefinite
|
# Ban time: indefinite
|
||||||
# Ban after: manually banned
|
# Ban after: manually banned
|
||||||
blocklist('block client requesting from redis') do |request|
|
blacklist('block client requesting from redis') do |request|
|
||||||
# TODO: deprecate :api_blacklisted_ips in favour of api_blocklisted_ips
|
Travis.redis.sismember(:api_blacklisted_ips, request.ip)
|
||||||
Travis.redis.sismember(:api_blacklisted_ips, request.ip) || Travis.redis.sismember(:api_blocklisted_ips, request.ip)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
####
|
####
|
||||||
# Ban based on: IP address or access token
|
# Ban based on: IP address or access token
|
||||||
# Ban time: 5 hours
|
# Ban time: 5 hours
|
||||||
# Ban after: 10 POST requests within five minutes to /auth/github
|
# Ban after: 10 POST requests within five minutes to /auth/github
|
||||||
blocklist('hammering /auth/github') do |request|
|
blacklist('hammering /auth/github') do |request|
|
||||||
Rack::Attack::Allow2Ban.filter(request.identifier, maxretry: 2, findtime: 5.minutes, bantime: bantime(5.hours)) do
|
Rack::Attack::Allow2Ban.filter(request.identifier, maxretry: 2, findtime: 5.minutes, bantime: bantime(5.hours)) do
|
||||||
request.post? and request.path == '/auth/github'
|
request.post? and request.path == '/auth/github'
|
||||||
end
|
end
|
||||||
|
@ -73,9 +59,9 @@ class Rack::Attack
|
||||||
# Ban based on: IP address or access token
|
# Ban based on: IP address or access token
|
||||||
# Ban time: 1 hour
|
# Ban time: 1 hour
|
||||||
# Ban after: 10 POST requests within 30 seconds
|
# Ban after: 10 POST requests within 30 seconds
|
||||||
blocklist('spamming with POST requests') do |request|
|
blacklist('spamming with POST requests') do |request|
|
||||||
Rack::Attack::Allow2Ban.filter(request.identifier, maxretry: 10, findtime: 30.seconds, bantime: bantime(1.hour)) do
|
Rack::Attack::Allow2Ban.filter(request.identifier, maxretry: 10, findtime: 30.seconds, bantime: bantime(1.hour)) do
|
||||||
request.post? and not POST_SAFELIST.include? request.path
|
request.post? and not POST_WHITELISTED.include? request.path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Enqueue
|
|
||||||
module Services
|
|
||||||
|
|
||||||
class CancelModel
|
|
||||||
|
|
||||||
attr_reader :current_user, :target
|
|
||||||
|
|
||||||
def initialize(current_user, params)
|
|
||||||
@current_user = current_user
|
|
||||||
@params = params
|
|
||||||
target
|
|
||||||
end
|
|
||||||
|
|
||||||
def messages
|
|
||||||
messages = []
|
|
||||||
messages << { :notice => "The #{type} was successfully cancelled." } if can_cancel?
|
|
||||||
messages << { :error => "You are not authorized to cancel this #{type}." } unless authorized?
|
|
||||||
messages << { :error => "The #{type} could not be cancelled." } unless build.cancelable?
|
|
||||||
messages
|
|
||||||
end
|
|
||||||
|
|
||||||
def push(event, payload)
|
|
||||||
# target may have been retrieved with a :join query, so we need to reset the readonly status
|
|
||||||
if can_cancel?
|
|
||||||
::Sidekiq::Client.push(
|
|
||||||
'queue' => 'hub',
|
|
||||||
'class' => 'Travis::Hub::Sidekiq::Worker',
|
|
||||||
#'args' => ["#{type}:cancel", @params]
|
|
||||||
'args' => [event, payload]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def type
|
|
||||||
@type ||= @params[:build_id] ? :build : :job
|
|
||||||
end
|
|
||||||
|
|
||||||
def target
|
|
||||||
if type == :build
|
|
||||||
@target = Build.find(@params[:build_id])
|
|
||||||
else
|
|
||||||
@target = Job.find(@params[:job_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def can_cancel?
|
|
||||||
authorized? && target.cancelable?
|
|
||||||
end
|
|
||||||
|
|
||||||
# check on web
|
|
||||||
def authorized?
|
|
||||||
current_user.permission?(:pull, :repository_id => target.repository_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,64 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Enqueue
|
|
||||||
module Services
|
|
||||||
|
|
||||||
class RestartModel
|
|
||||||
attr_reader :current_user, :target
|
|
||||||
|
|
||||||
def initialize(current_user, params)
|
|
||||||
@current_user = current_user
|
|
||||||
@params = params
|
|
||||||
target
|
|
||||||
end
|
|
||||||
|
|
||||||
def push(event, payload)
|
|
||||||
if current_user && target && accept?
|
|
||||||
::Sidekiq::Client.push(
|
|
||||||
'queue' => 'hub',
|
|
||||||
'class' => 'Travis::Hub::Sidekiq::Worker',
|
|
||||||
'args' => [event, payload]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def accept?
|
|
||||||
current_user && permission? && resetable?
|
|
||||||
end
|
|
||||||
|
|
||||||
def messages
|
|
||||||
messages = []
|
|
||||||
messages << { notice: "The #{type} was successfully restarted." } if accept?
|
|
||||||
messages << { error: 'You do not seem to have sufficient permissions.' } unless permission?
|
|
||||||
messages << { error: "This #{type} currently can not be restarted." } unless resetable?
|
|
||||||
messages
|
|
||||||
end
|
|
||||||
|
|
||||||
def type
|
|
||||||
@type ||= @params[:build_id] ? :build : :job
|
|
||||||
end
|
|
||||||
|
|
||||||
def target
|
|
||||||
if type == :build
|
|
||||||
@target = Build.find(@params[:build_id])
|
|
||||||
else
|
|
||||||
@target = Job.find(@params[:job_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def permission?
|
|
||||||
current_user.permission?(required_role, repository_id: target.repository_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def resetable?
|
|
||||||
target.resetable?
|
|
||||||
end
|
|
||||||
|
|
||||||
def required_role
|
|
||||||
Travis.config.roles.reset_model
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,68 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
require 'travis/api/serialize/v0'
|
|
||||||
require 'travis/api/serialize/v1'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
DEFAULT_VERSION = 'v2'
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def data(resource, options = {})
|
|
||||||
new(resource, options).data
|
|
||||||
end
|
|
||||||
|
|
||||||
def builder(resource, options = {})
|
|
||||||
target = (options[:for] || 'http').to_s.camelize
|
|
||||||
version = (options[:version] || default_version(options)).to_s.camelize
|
|
||||||
type = (options[:type] || type_for(resource)).to_s.camelize.split('::')
|
|
||||||
([version, target] + type).inject(self) do |const, name|
|
|
||||||
begin
|
|
||||||
if const && const.const_defined?(name.to_s.camelize, false)
|
|
||||||
const.const_get(name, false)
|
|
||||||
else
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
rescue NameError
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def new(resource, options = {})
|
|
||||||
builder = builder(resource, options) || raise(ArgumentError, "cannot serialize #{resource.inspect}, options: #{options.inspect}")
|
|
||||||
builder.new(resource, options[:params] || {})
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def type_for(resource)
|
|
||||||
if arel_relation?(resource)
|
|
||||||
type = resource.klass.name.pluralize
|
|
||||||
else
|
|
||||||
type = resource.class
|
|
||||||
type = type.base_class if active_record?(type)
|
|
||||||
type = type.name
|
|
||||||
end
|
|
||||||
type.split('::').last
|
|
||||||
end
|
|
||||||
|
|
||||||
def arel_relation?(object)
|
|
||||||
object.respond_to?(:klass)
|
|
||||||
end
|
|
||||||
|
|
||||||
def active_record?(object)
|
|
||||||
object.respond_to?(:base_class)
|
|
||||||
end
|
|
||||||
|
|
||||||
def default_version(options)
|
|
||||||
if options[:for].to_s.downcase == "pusher"
|
|
||||||
"v0"
|
|
||||||
else
|
|
||||||
DEFAULT_VERSION
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,11 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module Formats
|
|
||||||
def format_date(date)
|
|
||||||
date && date.strftime('%Y-%m-%dT%H:%M:%SZ')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,25 +0,0 @@
|
||||||
require 'active_model_serializers'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
class ObjectSerializer < ActiveModel::Serializer
|
|
||||||
def data
|
|
||||||
as_json
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class ArraySerializer < ActiveModel::ArraySerializer
|
|
||||||
def data
|
|
||||||
as_json
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize(resource, options)
|
|
||||||
options[:each_serializer] ||= V2::Http.const_get(options[:root].to_s.singularize.camelize)
|
|
||||||
super(resource, options)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
# V0 is an internal api that we can change at any time
|
|
||||||
|
|
||||||
require 'travis/api/serialize/v0/event'
|
|
||||||
require 'travis/api/serialize/v0/notification'
|
|
||||||
require 'travis/api/serialize/v0/pusher'
|
|
||||||
require 'travis/api/serialize/v0/worker'
|
|
|
@ -1,2 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/event/build'
|
|
||||||
require 'travis/api/serialize/v0/event/job'
|
|
|
@ -1,96 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Event
|
|
||||||
class Build
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :build, :repository, :request, :commit, :options
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
@build = build
|
|
||||||
@repository = build.repository
|
|
||||||
@request = build.request
|
|
||||||
@commit = build.commit
|
|
||||||
# @options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data(extra = {})
|
|
||||||
{
|
|
||||||
'repository' => repository_data,
|
|
||||||
'request' => request_data,
|
|
||||||
'commit' => commit_data,
|
|
||||||
'build' => build_data,
|
|
||||||
'jobs' => build.matrix.map { |job| job_data(job) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def build_data
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'commit_id' => build.commit_id,
|
|
||||||
'number' => build.number,
|
|
||||||
'pull_request' => build.pull_request?,
|
|
||||||
'pull_request_number' => build.pull_request_number,
|
|
||||||
'config' => build.config.try(:except, :source_key),
|
|
||||||
'state' => build.state.to_s,
|
|
||||||
'previous_state' => build.previous_state.to_s,
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'job_ids' => build.matrix_ids
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository_data
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'key' => repository.key.try(:public_key),
|
|
||||||
'slug' => repository.slug,
|
|
||||||
'name' => repository.name,
|
|
||||||
'owner_email' => repository.owner_email,
|
|
||||||
'owner_avatar_url' => repository.owner.try(:avatar_url)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def request_data
|
|
||||||
{
|
|
||||||
'token' => request.token,
|
|
||||||
'head_commit' => (request.head_commit || '')
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def job_data(job)
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'number' => job.number,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'tags' => job.tags
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,37 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Event
|
|
||||||
class Job
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :job
|
|
||||||
|
|
||||||
def initialize(job, options = {})
|
|
||||||
@job = job
|
|
||||||
# @options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data(extra = {})
|
|
||||||
{
|
|
||||||
'job' => job_data,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def job_data
|
|
||||||
{
|
|
||||||
'queue' => job.queue,
|
|
||||||
'created_at' => job.created_at,
|
|
||||||
'started_at' => job.started_at,
|
|
||||||
'finished_at' => job.finished_at,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,3 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/notification/build'
|
|
||||||
require 'travis/api/serialize/v0/notification/repository'
|
|
||||||
require 'travis/api/serialize/v0/notification/user'
|
|
|
@ -1,29 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Notification
|
|
||||||
class Build
|
|
||||||
attr_reader :build
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
@build = build
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'build' => build_data
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_data
|
|
||||||
{
|
|
||||||
'id' => build.id
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,30 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Notification
|
|
||||||
class Repository
|
|
||||||
attr_reader :repository
|
|
||||||
|
|
||||||
def initialize(repository, options = {})
|
|
||||||
@repository = repository
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'repository' => repository_data
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository_data
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'slug' => repository.slug
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,30 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Notification
|
|
||||||
class User
|
|
||||||
attr_reader :user
|
|
||||||
|
|
||||||
def initialize(user, options = {})
|
|
||||||
@user = user
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'user' => user_data
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def user_data
|
|
||||||
{
|
|
||||||
'id' => user.id,
|
|
||||||
'login' => user.login
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,3 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/pusher/annotation'
|
|
||||||
require 'travis/api/serialize/v0/pusher/build'
|
|
||||||
require 'travis/api/serialize/v0/pusher/job'
|
|
|
@ -1,35 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/pusher/annotation/created'
|
|
||||||
require 'travis/api/serialize/v0/pusher/annotation/updated'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Annotation
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :annotation
|
|
||||||
|
|
||||||
def initialize(annotation, options = {})
|
|
||||||
@annotation = annotation
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
"annotation" => {
|
|
||||||
"id" => annotation.id,
|
|
||||||
"job_id" => annotation.job_id,
|
|
||||||
"description" => annotation.description,
|
|
||||||
"url" => annotation.url,
|
|
||||||
"status" => annotation.status,
|
|
||||||
"provider_name" => annotation.annotation_provider.name,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Annotation
|
|
||||||
class Created < Annotation
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Annotation
|
|
||||||
class Updated < Annotation
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,112 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/pusher/build/canceled'
|
|
||||||
require 'travis/api/serialize/v0/pusher/build/created'
|
|
||||||
require 'travis/api/serialize/v0/pusher/build/received'
|
|
||||||
require 'travis/api/serialize/v0/pusher/build/started'
|
|
||||||
require 'travis/api/serialize/v0/pusher/build/finished'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :build, :options
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
@build = build
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'build' => build_data(build),
|
|
||||||
'commit' => commit_data(build.commit),
|
|
||||||
'repository' => repository_data(build.repository)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def build_data(build)
|
|
||||||
commit = build.commit
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'commit_id' => build.commit_id,
|
|
||||||
'number' => build.number,
|
|
||||||
'pull_request' => build.pull_request?,
|
|
||||||
'pull_request_title' => build.pull_request_title,
|
|
||||||
'pull_request_number' => build.pull_request_number,
|
|
||||||
'state' => build.state.to_s,
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'job_ids' => build.matrix_ids,
|
|
||||||
'event_type' => build.event_type,
|
|
||||||
|
|
||||||
# this is a legacy thing, we should think about removing it
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository_data(repository)
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'slug' => repository.slug,
|
|
||||||
'description' => repository.description,
|
|
||||||
'private' => repository.private,
|
|
||||||
'last_build_id' => repository.last_build_id,
|
|
||||||
'last_build_number' => repository.last_build_number,
|
|
||||||
'last_build_state' => repository.last_build_state.to_s,
|
|
||||||
'last_build_duration' => repository.last_build_duration,
|
|
||||||
'last_build_language' => nil,
|
|
||||||
'last_build_started_at' => format_date(repository.last_build_started_at),
|
|
||||||
'last_build_finished_at' => format_date(repository.last_build_finished_at),
|
|
||||||
'github_language' => repository.github_language,
|
|
||||||
'default_branch' => {
|
|
||||||
'name' => repository.default_branch,
|
|
||||||
'last_build_id' => last_build_on_default_branch_id(repository)
|
|
||||||
},
|
|
||||||
'active' => repository.active,
|
|
||||||
'current_build_id' => repository.current_build_id
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def last_build_on_default_branch_id(repository)
|
|
||||||
default_branch = Branch.where(repository_id: repository.id, name: repository.default_branch).first
|
|
||||||
|
|
||||||
if default_branch
|
|
||||||
default_branch.last_build_id
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
class Canceled < Build
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
class Created < Build
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
class Finished < Build
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
class Received < Build
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,49 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
class Received < Build
|
|
||||||
class Job
|
|
||||||
include Formats, V1::Helpers::Legacy
|
|
||||||
|
|
||||||
attr_reader :job, :commit
|
|
||||||
|
|
||||||
def initialize(job)
|
|
||||||
@job = job
|
|
||||||
@commit = job.commit
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'repository_private' => repository.private,
|
|
||||||
'parent_id' => job.source_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'result' => legacy_job_result(job),
|
|
||||||
'config' => job.obfuscated_config,
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'allow_failure' => job.allow_failure
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
class Started < Build
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,49 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Build
|
|
||||||
class Started < Build
|
|
||||||
class Job
|
|
||||||
include Formats, V1::Helpers::Legacy
|
|
||||||
|
|
||||||
attr_reader :job, :commit
|
|
||||||
|
|
||||||
def initialize(job)
|
|
||||||
@job = job
|
|
||||||
@commit = job.commit
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'repository_private' => repository.private,
|
|
||||||
'parent_id' => job.source_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'result' => legacy_job_result(job),
|
|
||||||
'config' => job.obfuscated_config,
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'allow_failure' => job.allow_failure
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,69 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/pusher/job/canceled'
|
|
||||||
require 'travis/api/serialize/v0/pusher/job/created'
|
|
||||||
require 'travis/api/serialize/v0/pusher/job/log'
|
|
||||||
require 'travis/api/serialize/v0/pusher/job/received'
|
|
||||||
require 'travis/api/serialize/v0/pusher/job/started'
|
|
||||||
require 'travis/api/serialize/v0/pusher/job/finished'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Job
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :job, :options
|
|
||||||
|
|
||||||
def initialize(job, options = {})
|
|
||||||
@job = job
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
job_data(job).merge(
|
|
||||||
'commit' => commit_data(job.commit)
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def job_data(job)
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'repository_slug' => job.repository.slug,
|
|
||||||
'repository_private' => job.repository.private,
|
|
||||||
'build_id' => job.source_id,
|
|
||||||
'commit_id' => job.commit_id,
|
|
||||||
'log_id' => job.log_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'queue' => job.queue,
|
|
||||||
'allow_failure' => job.allow_failure,
|
|
||||||
'annotation_ids' => job.annotation_ids
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Job
|
|
||||||
class Canceled < Job
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Job
|
|
||||||
class Created < Job
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Job
|
|
||||||
class Finished < Job
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,32 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Job
|
|
||||||
class Log
|
|
||||||
attr_reader :job, :options
|
|
||||||
|
|
||||||
def initialize(job, options = {})
|
|
||||||
@job = job
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'build_id' => job.source_id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'repository_private' => repository.private,
|
|
||||||
'_log' => options[:_log],
|
|
||||||
'number' => options[:number],
|
|
||||||
'final' => options[:final]
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Job
|
|
||||||
class Received < Job
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Pusher
|
|
||||||
class Job
|
|
||||||
class Started < Job
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/worker/job'
|
|
|
@ -1,35 +0,0 @@
|
||||||
require 'travis/api/serialize/v0/worker/job/test'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Worker
|
|
||||||
class Job
|
|
||||||
attr_reader :job
|
|
||||||
|
|
||||||
def initialize(job, options = {})
|
|
||||||
@job = job
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit
|
|
||||||
job.commit
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository
|
|
||||||
job.repository
|
|
||||||
end
|
|
||||||
|
|
||||||
def request
|
|
||||||
build.request
|
|
||||||
end
|
|
||||||
|
|
||||||
def build
|
|
||||||
job.source
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,120 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V0
|
|
||||||
module Worker
|
|
||||||
class Job
|
|
||||||
class Test < Job
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'type' => 'test',
|
|
||||||
# TODO legacy. remove this once workers respond to a 'job' key
|
|
||||||
'build' => job_data,
|
|
||||||
'job' => job_data,
|
|
||||||
'source' => build_data,
|
|
||||||
'repository' => repository_data,
|
|
||||||
'pull_request' => commit.pull_request? ? pull_request_data : false,
|
|
||||||
'config' => job.decrypted_config,
|
|
||||||
'queue' => job.queue,
|
|
||||||
'uuid' => Travis.uuid,
|
|
||||||
'ssh_key' => ssh_key,
|
|
||||||
'env_vars' => env_vars,
|
|
||||||
'timeouts' => timeouts
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_data
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'number' => build.number
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def job_data
|
|
||||||
data = {
|
|
||||||
'id' => job.id,
|
|
||||||
'number' => job.number,
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'commit_range' => commit.range,
|
|
||||||
'commit_message' => commit.message,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'ref' => commit.pull_request? ? commit.ref : nil,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'secure_env_enabled' => job.secure_env_enabled?
|
|
||||||
}
|
|
||||||
data['tag'] = request.tag_name if include_tag_name?
|
|
||||||
data['pull_request'] = commit.pull_request? ? commit.pull_request_number : false
|
|
||||||
data
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository_data
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'slug' => repository.slug,
|
|
||||||
'github_id' => repository.github_id,
|
|
||||||
'source_url' => repository.source_url,
|
|
||||||
'api_url' => repository.api_url,
|
|
||||||
'last_build_id' => repository.last_build_id,
|
|
||||||
'last_build_number' => repository.last_build_number,
|
|
||||||
'last_build_started_at' => format_date(repository.last_build_started_at),
|
|
||||||
'last_build_finished_at' => format_date(repository.last_build_finished_at),
|
|
||||||
'last_build_duration' => repository.last_build_duration,
|
|
||||||
'last_build_state' => repository.last_build_state.to_s,
|
|
||||||
'description' => repository.description,
|
|
||||||
'default_branch' => repository.default_branch
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def pull_request_data
|
|
||||||
{
|
|
||||||
'number' => commit.pull_request_number,
|
|
||||||
'head_repo' => request.head_repo,
|
|
||||||
'base_repo' => request.base_repo,
|
|
||||||
'head_branch' => request.head_branch,
|
|
||||||
'base_branch' => request.base_branch
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def ssh_key
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def env_vars
|
|
||||||
vars = settings.env_vars
|
|
||||||
vars = vars.public unless job.secure_env_enabled?
|
|
||||||
|
|
||||||
vars.map do |var|
|
|
||||||
{
|
|
||||||
'name' => var.name,
|
|
||||||
'value' => var.value.decrypt,
|
|
||||||
'public' => var.public
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def timeouts
|
|
||||||
{ 'hard_limit' => timeout(:hard_limit), 'log_silence' => timeout(:log_silence) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def timeout(type)
|
|
||||||
timeout = settings.send(:"timeout_#{type}")
|
|
||||||
timeout = timeout * 60 if timeout # worker handles timeouts in seconds
|
|
||||||
timeout
|
|
||||||
end
|
|
||||||
|
|
||||||
def include_tag_name?
|
|
||||||
Travis.config.include_tag_name_in_worker_payload && request.tag_name.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def settings
|
|
||||||
repository.settings
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,4 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/archive'
|
|
||||||
require 'travis/api/serialize/v1/http'
|
|
||||||
require 'travis/api/serialize/v1/helpers'
|
|
||||||
require 'travis/api/serialize/v1/webhook'
|
|
|
@ -1 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/archive/build'
|
|
|
@ -1,52 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/archive/build/job'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Archive
|
|
||||||
class Build
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :build, :commit, :repository
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
@build = build
|
|
||||||
@commit = build.commit
|
|
||||||
@repository = build.repository
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'number' => build.number,
|
|
||||||
'config' => build.obfuscated_config.stringify_keys,
|
|
||||||
'result' => 0,
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'matrix' => build.matrix.map { |job| Job.new(job).data },
|
|
||||||
'repository' => repository_data
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository_data
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'slug' => repository.slug
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,33 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Archive
|
|
||||||
class Build
|
|
||||||
class Job
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :job, :commit
|
|
||||||
|
|
||||||
def initialize(job)
|
|
||||||
@job = job
|
|
||||||
@commit = job.commit
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'number' => job.number,
|
|
||||||
'config' => job.obfuscated_config,
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'log' => job.log_content
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/helpers/legacy'
|
|
|
@ -1,36 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Helpers
|
|
||||||
module Legacy
|
|
||||||
RESULTS = {
|
|
||||||
passed: 0,
|
|
||||||
failed: 1
|
|
||||||
}
|
|
||||||
|
|
||||||
def legacy_repository_last_build_result(repository)
|
|
||||||
RESULTS[repository.last_build_state.try(:to_sym)]
|
|
||||||
end
|
|
||||||
|
|
||||||
def legacy_build_state(build)
|
|
||||||
build.finished? ? 'finished' : build.state.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
def legacy_build_result(build)
|
|
||||||
RESULTS[build.state.try(:to_sym)]
|
|
||||||
end
|
|
||||||
|
|
||||||
def legacy_job_state(job)
|
|
||||||
job.finished? ? 'finished' : job.state.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
def legacy_job_result(job)
|
|
||||||
RESULTS[job.state.try(:to_sym)]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/http/branches'
|
|
||||||
require 'travis/api/serialize/v1/http/build'
|
|
||||||
require 'travis/api/serialize/v1/http/builds'
|
|
||||||
require 'travis/api/serialize/v1/http/hooks'
|
|
||||||
require 'travis/api/serialize/v1/http/job'
|
|
||||||
require 'travis/api/serialize/v1/http/jobs'
|
|
||||||
require 'travis/api/serialize/v1/http/repositories'
|
|
||||||
require 'travis/api/serialize/v1/http/repository'
|
|
||||||
require 'travis/api/serialize/v1/http/user'
|
|
|
@ -1,45 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/helpers/legacy'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Http
|
|
||||||
class Branches
|
|
||||||
include Formats, Helpers::Legacy
|
|
||||||
|
|
||||||
attr_reader :builds, :options
|
|
||||||
|
|
||||||
def initialize(builds, options = {})
|
|
||||||
builds = builds.last_finished_builds_by_branches if builds.is_a?(Repository) # TODO remove, bc
|
|
||||||
@builds = builds
|
|
||||||
end
|
|
||||||
|
|
||||||
def cache_key
|
|
||||||
"branches-#{builds.map(&:id).join('-')}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def updated_at
|
|
||||||
builds.compact.map(&:finished_at).compact.sort.first
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
builds.compact.map do |build|
|
|
||||||
{
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'build_id' => build.id,
|
|
||||||
'commit' => build.commit.commit,
|
|
||||||
'branch' => build.commit.branch,
|
|
||||||
'message' => build.commit.message,
|
|
||||||
'result' => legacy_build_result(build),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'started_at' => format_date(build.started_at)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,49 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/http/build/job'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Http
|
|
||||||
class Build
|
|
||||||
include Formats, Helpers::Legacy
|
|
||||||
|
|
||||||
attr_reader :build, :commit, :request
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
@build = build
|
|
||||||
@commit = build.commit
|
|
||||||
@request = build.request
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'number' => build.number,
|
|
||||||
'config' => build.obfuscated_config.stringify_keys,
|
|
||||||
'state' => legacy_build_state(build),
|
|
||||||
'result' => legacy_build_result(build),
|
|
||||||
'status' => legacy_build_result(build),
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'event_type' => build.event_type,
|
|
||||||
'matrix' => build.matrix.map { |job| Job.new(job).data },
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,34 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Http
|
|
||||||
class Build
|
|
||||||
class Job
|
|
||||||
include Formats, Helpers::Legacy
|
|
||||||
|
|
||||||
attr_reader :job
|
|
||||||
|
|
||||||
def initialize(job)
|
|
||||||
@job = job
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'config' => job.obfuscated_config.stringify_keys,
|
|
||||||
'result' => legacy_job_result(job),
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'allow_failure' => job.allow_failure
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,40 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Http
|
|
||||||
class Builds
|
|
||||||
include Formats, Helpers::Legacy
|
|
||||||
|
|
||||||
attr_reader :builds
|
|
||||||
|
|
||||||
def initialize(builds, options = {})
|
|
||||||
@builds = builds
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
builds.map { |build| build_data(build) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_data(build)
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'number' => build.number,
|
|
||||||
'state' => legacy_build_state(build),
|
|
||||||
'result' => legacy_build_result(build),
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'commit' => build.commit.commit,
|
|
||||||
'branch' => build.commit.branch,
|
|
||||||
'message' => build.commit.message,
|
|
||||||
'event_type' => build.event_type,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,36 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Http
|
|
||||||
class Hooks
|
|
||||||
attr_reader :repos, :options
|
|
||||||
|
|
||||||
def initialize(repos, options = {})
|
|
||||||
@repos = repos
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
repos.map { |repo| repo_data(repo) }
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def repo_data(repo)
|
|
||||||
{
|
|
||||||
'uid' => [repo.owner_name, repo.name].join(':'),
|
|
||||||
'url' => "https://github.com/#{repo.owner_name}/#{repo.name}",
|
|
||||||
'name' => repo.name,
|
|
||||||
'owner_name' => repo.owner_name,
|
|
||||||
'description' => repo.description,
|
|
||||||
'active' => repo.active,
|
|
||||||
'private' => repo.private
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,36 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Http
|
|
||||||
class Jobs
|
|
||||||
include Formats, Helpers::Legacy
|
|
||||||
|
|
||||||
attr_reader :jobs
|
|
||||||
|
|
||||||
def initialize(jobs, options = {})
|
|
||||||
@jobs = jobs
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
jobs.map { |job| job_data(job) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def job_data(job)
|
|
||||||
commit = job.commit
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'state' => legacy_job_state(job),
|
|
||||||
'queue' => job.queue,
|
|
||||||
'allow_failure' => job.allow_failure
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,33 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Http
|
|
||||||
class User
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :user, :options
|
|
||||||
|
|
||||||
def initialize(user, options = {})
|
|
||||||
@user = user
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'login' => user.login,
|
|
||||||
'name' => user.name,
|
|
||||||
'email' => user.email,
|
|
||||||
'gravatar_id' => user.gravatar_id,
|
|
||||||
'locale' => user.locale,
|
|
||||||
'is_syncing' => user.is_syncing,
|
|
||||||
'synced_at' => format_date(user.synced_at)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/webhook/build'
|
|
|
@ -1,29 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/webhook/build/finished'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Webhook
|
|
||||||
class Build
|
|
||||||
attr_reader :build, :commit, :request, :repository, :options
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
@build = build
|
|
||||||
@commit = build.commit
|
|
||||||
@request = build.request
|
|
||||||
@repository = build.repository
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def build_url
|
|
||||||
["https://#{Travis.config.host}", repository.slug, 'builds', build.id].join('/')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,72 +0,0 @@
|
||||||
require 'travis/api/serialize/v1/webhook/build/finished/job'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Webhook
|
|
||||||
class Build
|
|
||||||
class Finished < Build
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
def data
|
|
||||||
data = {
|
|
||||||
'id' => build.id,
|
|
||||||
'repository' => repository_data,
|
|
||||||
'number' => build.number,
|
|
||||||
'config' => build.obfuscated_config.stringify_keys,
|
|
||||||
'status' => build.result,
|
|
||||||
'result' => build.result,
|
|
||||||
'status_message' => result_message,
|
|
||||||
'result_message' => result_message,
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'build_url' => build_url,
|
|
||||||
'commit_id' => commit.id,
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'base_commit' => request.base_commit,
|
|
||||||
'head_commit' => request.head_commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'matrix' => build.matrix.map { |job| Job.new(job, options).data },
|
|
||||||
'type' => build.event_type,
|
|
||||||
'state' => build.state.to_s,
|
|
||||||
'pull_request' => build.pull_request?,
|
|
||||||
'pull_request_number' => build.pull_request_number,
|
|
||||||
'pull_request_title' => build.pull_request_title,
|
|
||||||
'tag' => request.tag_name
|
|
||||||
}
|
|
||||||
|
|
||||||
if commit.pull_request?
|
|
||||||
data['pull_request_number'] = commit.pull_request_number
|
|
||||||
end
|
|
||||||
|
|
||||||
data
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository_data
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'name' => repository.name,
|
|
||||||
'owner_name' => repository.owner_name,
|
|
||||||
'url' => repository.url
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def result_message
|
|
||||||
@result_message ||= ::Build::ResultMessage.new(build).short
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,52 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V1
|
|
||||||
module Webhook
|
|
||||||
class Build
|
|
||||||
class Finished < Build
|
|
||||||
class Job
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :job, :commit, :options
|
|
||||||
|
|
||||||
def initialize(job, options = {})
|
|
||||||
@job = job
|
|
||||||
@commit = job.commit
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
data = {
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'parent_id' => job.source_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'state' => job.finished? ? 'finished' : job.state.to_s,
|
|
||||||
'config' => job.obfuscated_config,
|
|
||||||
'status' => job.result,
|
|
||||||
'result' => job.result,
|
|
||||||
'commit' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'allow_failure' => job.allow_failure
|
|
||||||
}
|
|
||||||
data['log'] = job.log_content || '' if options[:include_logs]
|
|
||||||
data['started_at'] = format_date(job.started_at) if job.started?
|
|
||||||
data['finished_at'] = format_date(job.finished_at) if job.finished?
|
|
||||||
data
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
require 'travis/api/serialize/v2/http'
|
|
|
@ -1,24 +0,0 @@
|
||||||
require 'travis/api/serialize/serializer'
|
|
||||||
require 'travis/api/serialize/v2/http/accounts'
|
|
||||||
require 'travis/api/serialize/v2/http/annotations'
|
|
||||||
require 'travis/api/serialize/v2/http/broadcasts'
|
|
||||||
require 'travis/api/serialize/v2/http/branch'
|
|
||||||
require 'travis/api/serialize/v2/http/branches'
|
|
||||||
require 'travis/api/serialize/v2/http/build'
|
|
||||||
require 'travis/api/serialize/v2/http/builds'
|
|
||||||
require 'travis/api/serialize/v2/http/caches'
|
|
||||||
require 'travis/api/serialize/v2/http/hooks'
|
|
||||||
require 'travis/api/serialize/v2/http/job'
|
|
||||||
require 'travis/api/serialize/v2/http/jobs'
|
|
||||||
require 'travis/api/serialize/v2/http/log'
|
|
||||||
require 'travis/api/serialize/v2/http/permissions'
|
|
||||||
require 'travis/api/serialize/v2/http/repositories'
|
|
||||||
require 'travis/api/serialize/v2/http/repository'
|
|
||||||
require 'travis/api/serialize/v2/http/requests'
|
|
||||||
require 'travis/api/serialize/v2/http/request'
|
|
||||||
require 'travis/api/serialize/v2/http/ssl_key'
|
|
||||||
require 'travis/api/serialize/v2/http/env_var'
|
|
||||||
require 'travis/api/serialize/v2/http/env_vars'
|
|
||||||
require 'travis/api/serialize/v2/http/user'
|
|
||||||
require 'travis/api/serialize/v2/http/validation_error'
|
|
||||||
require 'travis/api/serialize/v2/http/ssh_key'
|
|
|
@ -1,44 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Accounts
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :accounts, :options
|
|
||||||
|
|
||||||
def initialize(accounts, options = {})
|
|
||||||
@accounts = accounts
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
:accounts => accounts.map { |account| account_data(account) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def account_data(account)
|
|
||||||
data = {
|
|
||||||
'id' => account.id,
|
|
||||||
'name' => account.name,
|
|
||||||
'login' => account.login,
|
|
||||||
'type' => account.type.underscore,
|
|
||||||
'repos_count' => account.repos_count
|
|
||||||
}
|
|
||||||
|
|
||||||
data['avatar_url'] = account.avatar_url if account.respond_to?(:avatar_url)
|
|
||||||
|
|
||||||
data
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,38 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Annotations
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
def initialize(annotations, options = {})
|
|
||||||
@annotations = annotations
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
"annotations" => @annotations.map { |annotation| build_annotation(annotation) },
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def build_annotation(annotation)
|
|
||||||
{
|
|
||||||
"id" => annotation.id,
|
|
||||||
"job_id" => annotation.job_id,
|
|
||||||
"description" => annotation.description,
|
|
||||||
"url" => annotation.url,
|
|
||||||
"status" => annotation.status,
|
|
||||||
"provider_name" => annotation.annotation_provider.name,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,31 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
require 'travis/api/serialize/v2/http/branches'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Branch < Branches
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :build, :commit, :options
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
@build = build
|
|
||||||
@commit = build.commit
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'branch' => build_data(build),
|
|
||||||
'commit' => commit_data(commit)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,64 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Branches
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :builds, :commits, :options
|
|
||||||
|
|
||||||
def initialize(builds, options = {})
|
|
||||||
builds = builds.last_finished_builds_by_branches if builds.is_a?(Repository) # TODO remove, bc
|
|
||||||
@builds = builds
|
|
||||||
@commits = builds.map(&:commit)
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'branches' => builds.map { |build| build_data(build) },
|
|
||||||
'commits' => commits.map { |commit| commit_data(commit) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def build_data(build)
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'commit_id' => build.commit_id,
|
|
||||||
'number' => build.number,
|
|
||||||
'config' => build.obfuscated_config.stringify_keys,
|
|
||||||
'state' => build.state.to_s,
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'job_ids' => build.matrix.map { |job| job.id },
|
|
||||||
'pull_request' => build.pull_request?
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,33 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Broadcasts
|
|
||||||
attr_reader :broadcasts, :options
|
|
||||||
|
|
||||||
def initialize(broadcasts, options = {})
|
|
||||||
@broadcasts = broadcasts
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'broadcasts' => broadcasts.map { |broadcast| broadcast_data(broadcast) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def broadcast_data(broadcast)
|
|
||||||
{
|
|
||||||
'id' => broadcast.id,
|
|
||||||
'message' => broadcast.message
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,97 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Build
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :build, :options
|
|
||||||
|
|
||||||
def initialize(build, options = {})
|
|
||||||
options[:include_jobs] = true unless options.key?(:include_jobs)
|
|
||||||
|
|
||||||
@build = build
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'build' => build_data(build),
|
|
||||||
'commit' => commit_data(build.commit, build.repository),
|
|
||||||
'jobs' => options[:include_jobs] ? build.matrix.map { |job| job_data(job) } : [],
|
|
||||||
'annotations' => options[:include_jobs] ? Annotations.new(annotations(build), @options).data["annotations"] : [],
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def build_data(build)
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'commit_id' => build.commit_id,
|
|
||||||
'number' => build.number,
|
|
||||||
'event_type' => build.event_type,
|
|
||||||
'pull_request' => build.pull_request?,
|
|
||||||
'pull_request_title' => build.pull_request_title,
|
|
||||||
'pull_request_number' => build.pull_request_number,
|
|
||||||
'config' => build.obfuscated_config.stringify_keys,
|
|
||||||
'state' => build.state.to_s,
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'job_ids' => build.matrix_ids
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit, repository)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'branch_is_default' => branch_is_default(commit, repository),
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def job_data(job)
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'build_id' => job.source_id,
|
|
||||||
'commit_id' => job.commit_id,
|
|
||||||
'log_id' => job.log_id,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'number' => job.number,
|
|
||||||
'config' => job.obfuscated_config.stringify_keys,
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'queue' => job.queue,
|
|
||||||
'allow_failure' => job.allow_failure,
|
|
||||||
'tags' => job.tags,
|
|
||||||
'annotation_ids' => job.annotation_ids,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def branch_is_default(commit, repository)
|
|
||||||
repository.default_branch == commit.branch
|
|
||||||
end
|
|
||||||
|
|
||||||
def annotations(build)
|
|
||||||
build.matrix.map(&:annotations).flatten
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,71 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Builds
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :builds, :commits, :options
|
|
||||||
|
|
||||||
def initialize(builds, options = {})
|
|
||||||
@builds = builds
|
|
||||||
@commits = builds.map(&:commit)
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'builds' => builds.map { |build| build_data(build) },
|
|
||||||
'commits' => commits.map { |commit| commit_data(commit) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def build_data(build)
|
|
||||||
{
|
|
||||||
'id' => build.id,
|
|
||||||
'repository_id' => build.repository_id,
|
|
||||||
'commit_id' => build.commit_id,
|
|
||||||
'number' => build.number,
|
|
||||||
'event_type' => build.event_type,
|
|
||||||
'pull_request' => build.pull_request?,
|
|
||||||
'pull_request_title' => build.pull_request_title,
|
|
||||||
'pull_request_number' => build.pull_request_number,
|
|
||||||
'config' => build.obfuscated_config.stringify_keys,
|
|
||||||
'state' => build.state.to_s,
|
|
||||||
'started_at' => format_date(build.started_at),
|
|
||||||
'finished_at' => format_date(build.finished_at),
|
|
||||||
'duration' => build.duration,
|
|
||||||
'job_ids' => matrix_ids(build)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def matrix_ids(build)
|
|
||||||
build.cached_matrix_ids || build.matrix_ids
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'pull_request_number' => commit.pull_request_number
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,37 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Caches
|
|
||||||
include Formats
|
|
||||||
attr_reader :caches, :options
|
|
||||||
|
|
||||||
def initialize(caches, options = {})
|
|
||||||
@caches = caches
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{ 'caches' => caches.map { |cache| cache_data(cache) } }
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def cache_data(cache)
|
|
||||||
{
|
|
||||||
'repository_id' => cache.repository.id,
|
|
||||||
'size' => cache.size,
|
|
||||||
'slug' => cache.slug,
|
|
||||||
'branch' => cache.branch,
|
|
||||||
'last_modified' => format_date(cache.last_modified)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,25 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class EnvVar < Travis::Api::Serialize::ObjectSerializer
|
|
||||||
attributes :id, :name, :value, :public, :repository_id
|
|
||||||
|
|
||||||
def value
|
|
||||||
if object.public?
|
|
||||||
object.value.decrypt
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def serializable_hash
|
|
||||||
hash = super
|
|
||||||
hash.delete :value unless object.public?
|
|
||||||
hash
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,2 +0,0 @@
|
||||||
class Travis::Api::Serialize::V2::Http::EnvVars < Travis::Api::Serialize::ArraySerializer
|
|
||||||
end
|
|
|
@ -1,38 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Hooks
|
|
||||||
attr_reader :hooks, :options
|
|
||||||
|
|
||||||
def initialize(hooks, options = {})
|
|
||||||
@hooks = hooks
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'hooks' => hooks.map { |hook| hook_data(hook) },
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def hook_data(hook)
|
|
||||||
{
|
|
||||||
'id' => hook.id,
|
|
||||||
'name' => hook.name,
|
|
||||||
'owner_name' => hook.owner_name,
|
|
||||||
'description' => hook.description,
|
|
||||||
'active' => hook.active,
|
|
||||||
'private' => hook.private,
|
|
||||||
'admin' => hook.admin?
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,72 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Job
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :job, :options
|
|
||||||
|
|
||||||
def initialize(job, options = {})
|
|
||||||
@job = job
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'job' => job_data(job),
|
|
||||||
'commit' => commit_data(job.commit, job.repository),
|
|
||||||
'annotations' => Annotations.new(job.annotations, @options).data["annotations"],
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def job_data(job)
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'repository_slug' => job.repository.slug,
|
|
||||||
'build_id' => job.source_id,
|
|
||||||
'commit_id' => job.commit_id,
|
|
||||||
'log_id' => job.log_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'config' => job.obfuscated_config.stringify_keys,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'queue' => job.queue,
|
|
||||||
'allow_failure' => job.allow_failure,
|
|
||||||
'tags' => job.tags,
|
|
||||||
'annotation_ids' => job.annotation_ids,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit, repository)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'branch_is_default' => branch_is_default(commit, repository),
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def branch_is_default(commit, repository)
|
|
||||||
repository.default_branch == commit.branch
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,65 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Jobs
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :jobs, :options
|
|
||||||
|
|
||||||
def initialize(jobs, options = {})
|
|
||||||
@jobs = jobs
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'jobs' => jobs.map { |job| job_data(job) },
|
|
||||||
'commits' => jobs.map { |job| commit_data(job.commit) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def job_data(job)
|
|
||||||
{
|
|
||||||
'id' => job.id,
|
|
||||||
'repository_id' => job.repository_id,
|
|
||||||
'repository_slug' => job.repository.slug,
|
|
||||||
'build_id' => job.source_id,
|
|
||||||
'commit_id' => job.commit_id,
|
|
||||||
'log_id' => job.log_id,
|
|
||||||
'number' => job.number,
|
|
||||||
'config' => job.obfuscated_config.stringify_keys,
|
|
||||||
'state' => job.state.to_s,
|
|
||||||
'started_at' => format_date(job.started_at),
|
|
||||||
'finished_at' => format_date(job.finished_at),
|
|
||||||
'queue' => job.queue,
|
|
||||||
'allow_failure' => job.allow_failure,
|
|
||||||
'tags' => job.tags
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,80 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Log
|
|
||||||
attr_reader :log, :options
|
|
||||||
|
|
||||||
def initialize(log, options = {})
|
|
||||||
@log = log
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
log_hash = options[:chunked] ? chunked_log_data : log_data
|
|
||||||
if log.removed_at
|
|
||||||
log_hash['removed_at'] = log.removed_at
|
|
||||||
log_hash['removed_by'] = log.removed_by.name || log.removed_by.login
|
|
||||||
end
|
|
||||||
|
|
||||||
{
|
|
||||||
'log' => log_hash,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def log_data
|
|
||||||
{
|
|
||||||
'id' => log.id,
|
|
||||||
'job_id' => log.job_id,
|
|
||||||
'type' => log.class.name.demodulize,
|
|
||||||
'body' => log.content
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def chunked_log_data
|
|
||||||
{
|
|
||||||
'id' => log.id,
|
|
||||||
'job_id' => log.job_id,
|
|
||||||
'type' => log.class.name.demodulize,
|
|
||||||
'parts' => log_parts
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_parts
|
|
||||||
if log.removed_at
|
|
||||||
# if log is removed we don't have actual parts
|
|
||||||
parts = [{ 'number' => 1, 'content' => log.content, 'final' => true }]
|
|
||||||
else
|
|
||||||
parts = log.parts
|
|
||||||
parts = parts.where(number: part_numbers) if part_numbers
|
|
||||||
parts = parts.where(["number > ?", after]) if after
|
|
||||||
parts.sort_by(&:number).map do |part|
|
|
||||||
{
|
|
||||||
'id' => part.id,
|
|
||||||
'number' => part.number,
|
|
||||||
'content' => part.content,
|
|
||||||
'final' => part.final
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def after
|
|
||||||
after = options['after'].to_i
|
|
||||||
after == 0 ? nil : after
|
|
||||||
end
|
|
||||||
|
|
||||||
def part_numbers
|
|
||||||
if numbers = options['part_numbers']
|
|
||||||
numbers.is_a?(String) ? numbers.split(',').map(&:to_i) : numbers
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,52 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Permissions
|
|
||||||
attr_reader :permissions, :options
|
|
||||||
|
|
||||||
def initialize(permissions, options = {})
|
|
||||||
@permissions = permissions
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'permissions' => repo_ids,
|
|
||||||
'admin' => admin_ids,
|
|
||||||
'pull' => pull_ids,
|
|
||||||
'push' => push_ids
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def filtered_ids(perm = nil)
|
|
||||||
if perm
|
|
||||||
permissions.find_all { |p| p.send("#{perm}?") }.map { |permission| permission.repository_id }
|
|
||||||
else
|
|
||||||
permissions.map { |permission| permission.repository_id }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def repo_ids
|
|
||||||
filtered_ids
|
|
||||||
end
|
|
||||||
|
|
||||||
def admin_ids
|
|
||||||
filtered_ids(:admin)
|
|
||||||
end
|
|
||||||
|
|
||||||
def pull_ids
|
|
||||||
filtered_ids(:pull)
|
|
||||||
end
|
|
||||||
|
|
||||||
def push_ids
|
|
||||||
filtered_ids(:push)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,47 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Repositories
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :repositories, :options
|
|
||||||
|
|
||||||
def initialize(repositories, options = {})
|
|
||||||
@repositories = repositories
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'repos' => repositories.map { |repository| repository_data(repository) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def repository_data(repository)
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'slug' => repository.slug,
|
|
||||||
'description' => repository.description,
|
|
||||||
'last_build_id' => repository.last_build_id,
|
|
||||||
'last_build_number' => repository.last_build_number,
|
|
||||||
'last_build_state' => repository.last_build_state.to_s,
|
|
||||||
'last_build_duration' => repository.last_build_duration,
|
|
||||||
'last_build_language' => nil,
|
|
||||||
'last_build_started_at' => format_date(repository.last_build_started_at),
|
|
||||||
'last_build_finished_at' => format_date(repository.last_build_finished_at),
|
|
||||||
'active' => repository.active,
|
|
||||||
'github_language' => repository.github_language
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,47 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Repository
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :repository, :options
|
|
||||||
|
|
||||||
def initialize(repository, options = {})
|
|
||||||
@repository = repository
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'repo' => repository_data(repository)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
# TODO why does this not include the last build? (i.e. 'builds' => { last build here })
|
|
||||||
def repository_data(repository)
|
|
||||||
{
|
|
||||||
'id' => repository.id,
|
|
||||||
'slug' => repository.slug,
|
|
||||||
'active' => repository.active,
|
|
||||||
'description' => repository.description,
|
|
||||||
'last_build_id' => repository.last_build_id,
|
|
||||||
'last_build_number' => repository.last_build_number,
|
|
||||||
'last_build_state' => repository.last_build_state.to_s,
|
|
||||||
'last_build_duration' => repository.last_build_duration,
|
|
||||||
'last_build_language' => nil,
|
|
||||||
'last_build_started_at' => format_date(repository.last_build_started_at),
|
|
||||||
'last_build_finished_at' => format_date(repository.last_build_finished_at),
|
|
||||||
'github_language' => repository.github_language
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,75 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Request
|
|
||||||
include Formats
|
|
||||||
attr_reader :request, :commit, :options
|
|
||||||
|
|
||||||
def initialize(request, options = {})
|
|
||||||
@request = request
|
|
||||||
@commit = request.commit
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
data = {
|
|
||||||
'request' => request_data
|
|
||||||
}
|
|
||||||
if commit
|
|
||||||
data['commit'] = commit_data
|
|
||||||
end
|
|
||||||
data
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def request_data
|
|
||||||
data = {
|
|
||||||
'id' => request.id,
|
|
||||||
'repository_id' => request.repository_id,
|
|
||||||
'commit_id' => request.commit_id,
|
|
||||||
'created_at' => format_date(request.created_at),
|
|
||||||
'owner_id' => request.owner_id,
|
|
||||||
'owner_type' => request.owner_type,
|
|
||||||
'event_type' => request.event_type,
|
|
||||||
'base_commit' => request.base_commit,
|
|
||||||
'head_commit' => request.head_commit,
|
|
||||||
'result' => request.result,
|
|
||||||
'message' => request.message,
|
|
||||||
'pull_request' => request.pull_request?,
|
|
||||||
'pull_request_number' => request.pull_request_number,
|
|
||||||
'pull_request_title' => request.pull_request_title,
|
|
||||||
'branch' => request.branch_name,
|
|
||||||
'tag' => request.tag_name
|
|
||||||
}
|
|
||||||
|
|
||||||
data['build_id'] = request.builds.first.id if request.builds.present?
|
|
||||||
|
|
||||||
data
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'pull_request_number' => commit.pull_request_number
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,72 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class Requests
|
|
||||||
include Formats
|
|
||||||
attr_reader :requests, :commits, :options
|
|
||||||
|
|
||||||
def initialize(requests, options = {})
|
|
||||||
@requests = requests
|
|
||||||
@commits = requests.map(&:commit)
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'requests' => requests.map { |request| request_data(request) },
|
|
||||||
'commits' => commits.compact.map { |commit| commit_data(commit) }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def request_data(request)
|
|
||||||
data = {
|
|
||||||
'id' => request.id,
|
|
||||||
'repository_id' => request.repository_id,
|
|
||||||
'commit_id' => request.commit_id,
|
|
||||||
'created_at' => format_date(request.created_at),
|
|
||||||
'owner_id' => request.owner_id,
|
|
||||||
'owner_type' => request.owner_type,
|
|
||||||
'event_type' => request.event_type,
|
|
||||||
'base_commit' => request.base_commit,
|
|
||||||
'head_commit' => request.head_commit,
|
|
||||||
'result' => request.result,
|
|
||||||
'message' => request.message,
|
|
||||||
'pull_request' => request.pull_request?,
|
|
||||||
'pull_request_number' => request.pull_request_number,
|
|
||||||
'pull_request_title' => request.pull_request_title,
|
|
||||||
'branch' => request.branch_name,
|
|
||||||
'tag' => request.tag_name
|
|
||||||
}
|
|
||||||
|
|
||||||
data['build_id'] = request.builds.first.id if request.builds.present?
|
|
||||||
|
|
||||||
data
|
|
||||||
end
|
|
||||||
|
|
||||||
def commit_data(commit)
|
|
||||||
{
|
|
||||||
'id' => commit.id,
|
|
||||||
'sha' => commit.commit,
|
|
||||||
'branch' => commit.branch,
|
|
||||||
'message' => commit.message,
|
|
||||||
'committed_at' => format_date(commit.committed_at),
|
|
||||||
'author_name' => commit.author_name,
|
|
||||||
'author_email' => commit.author_email,
|
|
||||||
'committer_name' => commit.committer_name,
|
|
||||||
'committer_email' => commit.committer_email,
|
|
||||||
'compare_url' => commit.compare_url,
|
|
||||||
'pull_request_number' => commit.pull_request_number
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,28 +0,0 @@
|
||||||
require 'openssl'
|
|
||||||
require 'travis/private_key'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class SshKey < Travis::Api::Serialize::ObjectSerializer
|
|
||||||
attributes :id, :description, :fingerprint
|
|
||||||
|
|
||||||
def id
|
|
||||||
object.repository_id
|
|
||||||
end
|
|
||||||
|
|
||||||
def fingerprint
|
|
||||||
value = object.value.decrypt
|
|
||||||
return unless value
|
|
||||||
PrivateKey.new(value).fingerprint
|
|
||||||
rescue OpenSSL::PKey::RSAError
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,28 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class SslKey
|
|
||||||
attr_reader :key
|
|
||||||
|
|
||||||
def initialize(key, options = {})
|
|
||||||
@key = key
|
|
||||||
end
|
|
||||||
|
|
||||||
def fingerprint
|
|
||||||
PrivateKey.new(key.private_key).fingerprint
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'key' => key.public_key,
|
|
||||||
'fingerprint' => fingerprint
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,51 +0,0 @@
|
||||||
require 'travis/api/serialize/formats'
|
|
||||||
require 'travis/github/oauth'
|
|
||||||
|
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class User
|
|
||||||
include Formats
|
|
||||||
|
|
||||||
attr_reader :user, :options
|
|
||||||
|
|
||||||
def initialize(user, options = {})
|
|
||||||
@user = user
|
|
||||||
@options = options
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
{
|
|
||||||
'user' => user_data,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def user_data
|
|
||||||
{
|
|
||||||
'id' => user.id,
|
|
||||||
'name' => user.name,
|
|
||||||
'login' => user.login,
|
|
||||||
'email' => user.email,
|
|
||||||
'gravatar_id' => user.email ? Digest::MD5.hexdigest(user.email) : "",
|
|
||||||
'locale' => user.locale,
|
|
||||||
'is_syncing' => user.syncing?,
|
|
||||||
'synced_at' => format_date(user.synced_at),
|
|
||||||
'correct_scopes' => Github::Oauth.correct_scopes?(user),
|
|
||||||
'created_at' => format_date(user.created_at),
|
|
||||||
'channels' => channels
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def channels
|
|
||||||
["user-#{user.id}"] + user.repository_ids.map { |id| "repo-#{id}" }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,40 +0,0 @@
|
||||||
module Travis
|
|
||||||
module Api
|
|
||||||
module Serialize
|
|
||||||
module V2
|
|
||||||
module Http
|
|
||||||
class ValidationError
|
|
||||||
attr_reader :resource
|
|
||||||
|
|
||||||
def initialize(resource, options = {})
|
|
||||||
@resource = resource
|
|
||||||
end
|
|
||||||
|
|
||||||
def data
|
|
||||||
response = {
|
|
||||||
message: 'Validation failed'
|
|
||||||
}
|
|
||||||
resource.errors.to_hash.each do |name, errors|
|
|
||||||
response['errors'] ||= []
|
|
||||||
errors.each do |error_code|
|
|
||||||
response['errors'] << { field: name, code: code(error_code) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
response
|
|
||||||
end
|
|
||||||
|
|
||||||
def code(error_code)
|
|
||||||
case error_code
|
|
||||||
when :blank
|
|
||||||
'missing_field'
|
|
||||||
else
|
|
||||||
error_code.to_s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user