From 440dacece3360402fb643cb90e6def8bf5a8c7fa Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Mon, 3 Dec 2012 02:34:15 +0100 Subject: [PATCH 1/5] Add endpoints for key regeneration Enpoints are: POST /repos/:id/key and POST /repos/:owner/:name/key Both versions will replace current ssl key for given repo with the new one. --- Gemfile | 2 +- Gemfile.lock | 3 ++- lib/travis/api/app/endpoint/repos.rb | 8 ++++++ spec/integration/v2/repositories_spec.rb | 32 ++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 422b7178..1b50ed8b 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source :rubygems gemspec gem 'travis-support', github: 'travis-ci/travis-support' -gem 'travis-core', github: 'travis-ci/travis-core' +gem 'travis-core', github: 'travis-ci/travis-core', branch: 'regenerate-repo-key' gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil, ref: 'cde9741' gem 'unicorn' diff --git a/Gemfile.lock b/Gemfile.lock index f6c18546..22073b89 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -42,7 +42,8 @@ GIT GIT remote: git://github.com/travis-ci/travis-core.git - revision: e1034dc248883d30e21518a4a65665abe4523fe8 + revision: b9edfcd3de6a1cfcbe24747cbf2b0ee62847a4ab + branch: regenerate-repo-key specs: travis-core (0.0.1) actionmailer (~> 3.2.3) diff --git a/lib/travis/api/app/endpoint/repos.rb b/lib/travis/api/app/endpoint/repos.rb index 5c83498f..7e9eb3fe 100644 --- a/lib/travis/api/app/endpoint/repos.rb +++ b/lib/travis/api/app/endpoint/repos.rb @@ -24,6 +24,10 @@ class Travis::Api::App respond_with service(:find_repo_key, params), version: :v2 end + post '/:id/key' do + respond_with service(:regenerate_repo_key, params), version: :v2 + end + get '/:owner_name/:name' do respond_with service(:find_repo, params) end @@ -43,6 +47,10 @@ class Travis::Api::App get '/:owner_name/:name/key' do respond_with service(:find_repo_key, params), version: :v2 end + + post '/:owner_name/:name/key' do + respond_with service(:regenerate_repo_key, params), version: :v2 + end end end end diff --git a/spec/integration/v2/repositories_spec.rb b/spec/integration/v2/repositories_spec.rb index 1a0166e6..7c884240 100644 --- a/spec/integration/v2/repositories_spec.rb +++ b/spec/integration/v2/repositories_spec.rb @@ -6,6 +6,38 @@ describe 'Repos' do let(:repo) { Repository.by_slug('svenfuchs/minimal').first } let(:headers) { { 'HTTP_ACCEPT' => 'application/vnd.travis-ci.2+json' } } + describe 'with authenticated user' do + let(:user) { User.where(login: 'svenfuchs').first } + let(:token) { Travis::Api::App::AccessToken.create(user: user, app_id: -1) } + let(:headers) { { 'HTTP_ACCEPT' => 'application/vnd.travis-ci.2+json', 'HTTP_AUTHORIZATION' => "token #{token}" } } + + before { user.permissions.create!(:repository_id => repo.id, :push => true) } + + it 'POST /repos/:id/key' do + expect { + response = post "/repos/#{repo.id}/key", {}, headers + }.to change { repo.reload.key.private_key } + end + + it 'POST /repos/:owner/:name/key' do + expect { + response = post "/repos/#{repo.slug}/key", {}, headers + }.to change { repo.reload.key.private_key } + end + end + + describe 'without authenticated user' do + it 'POST /repos/:id/key' do + response = post "/repos/#{repo.id}/key", {}, headers + response.should be_not_found + end + + it 'POST /repos/:owner/:name/key' do + response = post "/repos/#{repo.id}/key", {}, headers + response.should be_not_found + end + end + it 'GET /repos/:id/key' do response = get "/repos/#{repo.id}/key", {}, headers response.should deliver_json_for(repo.key, version: 'v2') From ecd236a8ff76d83475fafc419de58e06c5988e23 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Thu, 8 Nov 2012 16:16:31 +0100 Subject: [PATCH 2/5] Add metriks. --- Gemfile | 1 + Gemfile.lock | 1 + lib/travis/api/app.rb | 3 +++ 3 files changed, 5 insertions(+) diff --git a/Gemfile b/Gemfile index 1b50ed8b..7188a4f7 100644 --- a/Gemfile +++ b/Gemfile @@ -16,6 +16,7 @@ gem 'gh', github: 'rkh/gh' gem 'bunny' gem 'dalli' gem 'pry' +gem 'metriks', '0.9.9.2' group :test do gem 'rspec', '~> 2.11' diff --git a/Gemfile.lock b/Gemfile.lock index 22073b89..7039abf1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -284,6 +284,7 @@ DEPENDENCIES factory_girl (~> 2.4.0) foreman gh! + metriks (= 0.9.9.2) micro_migrations! mocha (~> 0.12) pry diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb index ecb8d19c..6322f458 100644 --- a/lib/travis/api/app.rb +++ b/lib/travis/api/app.rb @@ -9,6 +9,7 @@ require 'redis' require 'gh' require 'raven' require 'sidekiq' +require 'metriks/reporter/logger' # Rack class implementing the HTTP API. # Instances respond to #call. @@ -112,6 +113,8 @@ module Travis::Api Raven.configure do |config| config.dsn = Travis.config.sentry.dsn end if Travis.config.sentry + + $metriks_reporter = Metriks::Reporter::Logger.new end def self.load_endpoints From 142fad9b810ebbfde50023407dd07d4fb25a7fe2 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Thu, 8 Nov 2012 16:26:58 +0100 Subject: [PATCH 3/5] Hook up activerecord metrics log subscriber. --- lib/travis/api/app.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/travis/api/app.rb b/lib/travis/api/app.rb index 6322f458..5911a4d0 100644 --- a/lib/travis/api/app.rb +++ b/lib/travis/api/app.rb @@ -10,6 +10,7 @@ require 'gh' require 'raven' require 'sidekiq' require 'metriks/reporter/logger' +require 'travis/support/log_subscriber/active_record_metrics' # Rack class implementing the HTTP API. # Instances respond to #call. @@ -114,6 +115,7 @@ module Travis::Api config.dsn = Travis.config.sentry.dsn end if Travis.config.sentry + Travis::LogSubscriber::ActiveRecordMetrics.attach $metriks_reporter = Metriks::Reporter::Logger.new end From 37e04c16ae3bf20917517a2bf9617d436c66f981 Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Wed, 5 Dec 2012 11:38:38 +0100 Subject: [PATCH 4/5] Bump travis-sidekiqs. --- Gemfile | 2 +- Gemfile.lock | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 7188a4f7..c3cefdca 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ gemspec gem 'travis-support', github: 'travis-ci/travis-support' gem 'travis-core', github: 'travis-ci/travis-core', branch: 'regenerate-repo-key' -gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil, ref: 'cde9741' +gem 'travis-sidekiqs', github: 'travis-ci/travis-sidekiqs', require: nil gem 'unicorn' gem "sentry-raven", github: 'getsentry/raven-ruby' diff --git a/Gemfile.lock b/Gemfile.lock index 7039abf1..b8c60815 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -64,8 +64,7 @@ GIT GIT remote: git://github.com/travis-ci/travis-sidekiqs.git - revision: cde9741f8e6811fe3929bdd0dd653b87289c5eef - ref: cde9741 + revision: af303f1d5e6454231668611451e7c67d52998026 specs: travis-sidekiqs (0.0.1) sidekiq (~> 2.5.0) From 47287014a1412834ea8ad7e123ebf8dd2d6829bb Mon Sep 17 00:00:00 2001 From: Mathias Meyer Date: Wed, 5 Dec 2012 18:19:23 +0100 Subject: [PATCH 5/5] Use unicorn.rb config, sans prefork for now. --- config/unicorn.rb | 21 +-------------------- script/server | 2 +- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/config/unicorn.rb b/config/unicorn.rb index 2c751a22..45bae390 100644 --- a/config/unicorn.rb +++ b/config/unicorn.rb @@ -1,23 +1,4 @@ # http://michaelvanrooijen.com/articles/2011/06/01-more-concurrency-on-a-single-heroku-dyno-with-the-new-celadon-cedar-stack/ -worker_processes 3 # amount of unicorn workers to spin up +worker_processes 4 # amount of unicorn workers to spin up timeout 30 # restarts workers that hang for 15 seconds - -preload_app true - -before_fork do |server, worker| - ActiveRecord::Base.connection.disconnect! if defined?(ActiveRecord::Base) -end - -after_fork do |server, worker| - require 'travis' - - Travis::Amqp.connect - - ActiveRecord::Base.establish_connection if defined?(ActiveRecord::Base) - - if $metriks_reporter - $metriks_reporter.stop - $metriks_reporter.start - end -end diff --git a/script/server b/script/server index 29326751..cf218d5f 100755 --- a/script/server +++ b/script/server @@ -3,6 +3,6 @@ cd "$(dirname "$0")/.." [ $PORT ] || PORT=3000 [ $RACK_ENV ] || RACK_ENV=development -cmd="ruby -I lib -S bundle exec ruby -I lib -S unicorn config.ru -p $PORT -E $RACK_ENV" +cmd="ruby -I lib -S bundle exec ruby -I lib -S unicorn config.ru -c config/unicorn.rb -p $PORT -E $RACK_ENV" [[ $RACK_ENV == "development" ]] && exec rerun "$cmd -l 127.0.0.1:$PORT" exec $cmd