diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-01-06 20:20:09 +0200 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-01-06 20:20:09 +0200 |
commit | 05c6f9fbdb59ed2bbd87a834d5a07590cb3db5d1 (patch) | |
tree | 3cde8fbff2d48ddea8ec9038c1c21e44e7c18b4d | |
parent | 874a71ecd8b8799632ff002b1ab9b146d95076e0 (diff) | |
download | gitlab-ci-05c6f9fbdb59ed2bbd87a834d5a07590cb3db5d1.tar.gz |
Polising after schedule
-rw-r--r-- | Procfile | 3 | ||||
-rw-r--r-- | app/models/project.rb | 33 | ||||
-rw-r--r-- | app/views/projects/_form.html.haml | 20 | ||||
-rw-r--r-- | config/initializers/2_resque.rb | 1 | ||||
-rw-r--r-- | db/migrate/20121224092350_add_schedule_to_projects.rb | 4 | ||||
-rw-r--r-- | db/schema.rb | 16 | ||||
-rw-r--r-- | lib/tasks/resque.rake | 2 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 8 |
8 files changed, 51 insertions, 36 deletions
@@ -1,2 +1,3 @@ web: bundle exec rails s -p $PORT -worker: bundle exec rake environment resque:work QUEUE=runner VVERBOSE=1 +worker: bundle exec rake environment resque:work QUEUE=runner,scheduler_task VVERBOSE=1 +schedule: bundle exec rake environment resque:scheduler VVERBOSE=1 RAILS_ENV=development diff --git a/app/models/project.rb b/app/models/project.rb index 1693d34..58bdb43 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,16 +1,21 @@ class Project < ActiveRecord::Base - attr_accessible :name, :path, :scripts, :timeout, :token, :default_ref, :gitlab_url, :always_build, :polling_interval - - validates_presence_of :name, :path, :scripts, :timeout, :token, :default_ref - - validates :polling_interval, :format => { :with => /^[1-9]\d{0,7}[s|m|d]$/ }, :unless => Proc.new{|project| project.polling_interval.blank?} + attr_accessible :name, :path, :scripts, :timeout, :token, + :default_ref, :gitlab_url, :always_build, :polling_interval has_many :builds, dependent: :destroy - validate :repo_present? + # + # Validations + # + validates_presence_of :name, :path, :scripts, :timeout, :token, :default_ref + validate :repo_present? validates_uniqueness_of :name + validates :polling_interval, + format: { with: /^[1-9]\d{0,7}[s|m|d]$/ }, + if: ->(project) { project.polling_interval.present? } + before_validation :set_default_values after_save :set_scheduler @@ -119,17 +124,21 @@ class Project < ActiveRecord::Base def set_scheduler if self.polling_interval.present? - Resque.set_schedule(self.token, { + Resque.set_schedule(self.schedule_id, { :class => 'SchedulerJob', - :every => self.polling_interval, - :queue => 'scheduler_task', - :args => [:run, self.id], - :description => self.name + every: self.polling_interval, + queue: 'scheduler_task', + args: [:run, self.id], + description: self.name }) else - Resque.remove_schedule(self.token) + Resque.remove_schedule(self.schedule_id) end end + + def schedule_id + "project-#{id}" + end end diff --git a/app/views/projects/_form.html.haml b/app/views/projects/_form.html.haml index c401aa8..0ef27b2 100644 --- a/app/views/projects/_form.html.haml +++ b/app/views/projects/_form.html.haml @@ -17,12 +17,6 @@ .field = f.label :token, "Token (Leave empty to generate random token)" = f.text_field :token, class: 'input-xlarge', placeholder: 'xEeFCaDAB89' - .field - = f.label :always_build, "Always_build" - = f.check_box :always_build - .field - = f.label :polling_interval, "Polling_interval" - = f.text_field :polling_interval %fieldset %legend Git @@ -49,8 +43,20 @@ = f.number_field :timeout, class: 'input-xlarge' .field = f.label :scripts - = f.text_area :scripts, class: 'input-xxlarge', rows: 18, placeholder: "bundle exec rake spec" + = f.text_area :scripts, class: 'input-xxlarge', rows: 11, placeholder: "bundle exec rake spec" + + %fieldset + %legend Build Schedule + .field + = f.label :always_build do + = f.check_box :always_build + %span Enable automatic build on schedule + %br + .field + = f.label :polling_interval, "Build interval" + = f.text_field :polling_interval, placeholder: '30m' + %small Ex. 30m means every 30 minutes and 2d - every two days .form-actions = f.submit 'Save', class: 'btn btn-primary' = link_to 'Cancel', projects_path, class: 'btn' diff --git a/config/initializers/2_resque.rb b/config/initializers/2_resque.rb index 9e450a3..de13b7c 100644 --- a/config/initializers/2_resque.rb +++ b/config/initializers/2_resque.rb @@ -1,5 +1,4 @@ require Rails.root.join('lib', 'runner') -#require Rails.root.join('lib', 'scheduler_job') require 'scheduler_job' # Custom Redis configuration diff --git a/db/migrate/20121224092350_add_schedule_to_projects.rb b/db/migrate/20121224092350_add_schedule_to_projects.rb index 0ffa014..fb3155f 100644 --- a/db/migrate/20121224092350_add_schedule_to_projects.rb +++ b/db/migrate/20121224092350_add_schedule_to_projects.rb @@ -1,6 +1,6 @@ class AddScheduleToProjects < ActiveRecord::Migration def change - add_column :projects, :always_build, :boolean, :default => true - add_column :projects, :polling_interval, :string + add_column :projects, :always_build, :boolean, default: false, null: false + add_column :projects, :polling_interval, :string, null: true end end diff --git a/db/schema.rb b/db/schema.rb index cc21cfd..2caae38 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20121116144312) do +ActiveRecord::Schema.define(:version => 20121224092350) do create_table "builds", :force => true do |t| t.integer "project_id" @@ -28,15 +28,17 @@ ActiveRecord::Schema.define(:version => 20121116144312) do end create_table "projects", :force => true do |t| - t.string "name", :null => false - t.string "path", :null => false - t.integer "timeout", :default => 1800, :null => false - t.text "scripts", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.string "name", :null => false + t.string "path", :null => false + t.integer "timeout", :default => 1800, :null => false + t.text "scripts", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "token" t.string "default_ref" t.string "gitlab_url" + t.boolean "always_build", :default => true + t.string "polling_interval" end create_table "users", :force => true do |t| diff --git a/lib/tasks/resque.rake b/lib/tasks/resque.rake index 8963b08..2e26680 100644 --- a/lib/tasks/resque.rake +++ b/lib/tasks/resque.rake @@ -5,8 +5,6 @@ namespace :resque do task :setup => :environment do require 'resque' require 'resque_scheduler' - #require 'resque_scheduler/server' - #require 'resque/scheduler' # you probably already have this somewhere #Resque.redis = 'localhost:6379' diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index d6756f7..93b22e3 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -26,13 +26,13 @@ describe Project do it 'should not set schedule if polling_interval is blank' do project = FactoryGirl.create :project project.update_attribute(:polling_interval, nil) - Resque.get_schedule(project.token).should be_nil + Resque.get_schedule(project.schedule_id).should be_nil end it 'should set schedule if polling_interval is set' do project = FactoryGirl.create :project project.update_attribute(:polling_interval, '3m') - Resque.get_schedule(project.token).should.to_s == { + Resque.get_schedule(project.schedule_id).should.to_s == { :class => 'SchedulerJob', :every => project.polling_interval, :args => [:run, project.id], @@ -43,9 +43,9 @@ describe Project do it 'should cancel schedule if clear polling_interval' do project = FactoryGirl.create :project project.update_attribute(:polling_interval, '3m') - Resque.get_schedule(project.token).should_not be_nil + Resque.get_schedule(project.schedule_id).should_not be_nil project.update_attribute(:polling_interval, nil) - Resque.get_schedule(project.token).should be_nil + Resque.get_schedule(project.schedule_id).should be_nil end end |