summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-01-06 20:20:09 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-01-06 20:20:09 +0200
commit05c6f9fbdb59ed2bbd87a834d5a07590cb3db5d1 (patch)
tree3cde8fbff2d48ddea8ec9038c1c21e44e7c18b4d
parent874a71ecd8b8799632ff002b1ab9b146d95076e0 (diff)
downloadgitlab-ci-05c6f9fbdb59ed2bbd87a834d5a07590cb3db5d1.tar.gz
Polising after schedule
-rw-r--r--Procfile3
-rw-r--r--app/models/project.rb33
-rw-r--r--app/views/projects/_form.html.haml20
-rw-r--r--config/initializers/2_resque.rb1
-rw-r--r--db/migrate/20121224092350_add_schedule_to_projects.rb4
-rw-r--r--db/schema.rb16
-rw-r--r--lib/tasks/resque.rake2
-rw-r--r--spec/models/project_spec.rb8
8 files changed, 51 insertions, 36 deletions
diff --git a/Procfile b/Procfile
index d6b8898..5b0b8b7 100644
--- a/Procfile
+++ b/Procfile
@@ -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