#312: updated UI, models, added migrations
This commit is contained in:
parent
7be0129361
commit
0dc1b63623
|
@ -6,24 +6,26 @@ class Api::V1::JobsController < Api::V1::BaseController
|
|||
before_filter :authenticate_user!
|
||||
|
||||
def shift
|
||||
ActiveRecord::Base.transaction do
|
||||
build_lists = BuildList.for_status(BuildList::BUILD_PENDING).oldest.order(:create_at)
|
||||
if current_user.system?
|
||||
queues = params[:worker_queues].split(',')
|
||||
build_list = build_lists.not_owned_external_nodes.first
|
||||
else
|
||||
queues = BuildList.queues_for current_user
|
||||
build_list = build_lists.external_nodes(:owned).for_user(current_user).first
|
||||
build_list ||= build_lists.external_nodes(:everything).
|
||||
accessible_by(current_ability, :everything).first
|
||||
end
|
||||
build_list.touch if build_list
|
||||
end
|
||||
|
||||
if queue = queues.find{ |q| job = Resque.redis.lpop "queue:#{q}" }
|
||||
job = JSON.parse job
|
||||
render :json => {
|
||||
:job => {
|
||||
:worker_queue => queue,
|
||||
:worker_class => job['class'],
|
||||
:worker_args => job['args']
|
||||
if build_list
|
||||
job = {
|
||||
:worker_queue => build_list.worker_queue_with_priority,
|
||||
:worker_class => build_list.worker_queue_class,
|
||||
:worker_args => [build_list.abf_worker_args]
|
||||
}
|
||||
}.to_json
|
||||
else
|
||||
render :nothing => true
|
||||
end
|
||||
render :json => { :job => job }.to_json
|
||||
end
|
||||
|
||||
def status
|
||||
|
|
|
@ -35,6 +35,12 @@ module BuildListsHelper
|
|||
end.sort_by { |col| col[0] }
|
||||
end
|
||||
|
||||
def external_nodes
|
||||
BuildList::EXTERNAL_NODES.map do |type|
|
||||
[I18n.t("layout.build_lists.external_nodes.#{type}"), type]
|
||||
end
|
||||
end
|
||||
|
||||
def mass_build_options
|
||||
options_from_collection_for_select(
|
||||
MassBuild.recent.limit(15),
|
||||
|
|
|
@ -11,6 +11,7 @@ class BuildList < ActiveRecord::Base
|
|||
belongs_to :save_to_repository, :class_name => 'Repository'
|
||||
belongs_to :build_for_platform, :class_name => 'Platform'
|
||||
belongs_to :user
|
||||
belongs_to :builder, :class_name => 'User'
|
||||
belongs_to :publisher, :class_name => 'User'
|
||||
belongs_to :advisory
|
||||
belongs_to :mass_build, :counter_cache => true
|
||||
|
@ -21,10 +22,12 @@ class BuildList < ActiveRecord::Base
|
|||
UPDATE_TYPES = %w[bugfix security enhancement recommended newpackage]
|
||||
RELEASE_UPDATE_TYPES = %w[bugfix security]
|
||||
EXTRA_PARAMS = %w[cfg_options build_src_rpm build_rpm]
|
||||
EXTERNAL_NODES = %w[owned everything]
|
||||
|
||||
validates :project_id, :project_version, :arch, :include_repos,
|
||||
:build_for_platform_id, :save_to_platform_id, :save_to_repository_id, :presence => true
|
||||
validates_numericality_of :priority, :greater_than_or_equal_to => 0
|
||||
validates :external_nodes, :inclusion => {:in => EXTERNAL_NODES}, :allow_blank => true
|
||||
validates :update_type, :inclusion => UPDATE_TYPES,
|
||||
:unless => Proc.new { |b| b.advisory.present? }
|
||||
validates :update_type, :inclusion => {:in => RELEASE_UPDATE_TYPES, :message => I18n.t('flash.build_list.frozen_platform')},
|
||||
|
@ -48,11 +51,12 @@ class BuildList < ActiveRecord::Base
|
|||
before_validation :prepare_extra_repositories, :on => :create
|
||||
before_validation :prepare_extra_build_lists, :on => :create
|
||||
before_validation :prepare_extra_params, :on => :create
|
||||
before_validation lambda { self.auto_publish = false if external_nodes.present?; true }, :on => :create
|
||||
|
||||
attr_accessible :include_repos, :auto_publish, :build_for_platform_id, :commit_hash,
|
||||
:arch_id, :project_id, :save_to_repository_id, :update_type,
|
||||
:save_to_platform_id, :project_version, :auto_create_container,
|
||||
:extra_repositories, :extra_build_lists, :extra_params
|
||||
:extra_repositories, :extra_build_lists, :extra_params, :external_nodes
|
||||
LIVE_TIME = 4.week # for unpublished
|
||||
MAX_LIVE_TIME = 3.month # for published
|
||||
|
||||
|
@ -110,6 +114,9 @@ class BuildList < ActiveRecord::Base
|
|||
}
|
||||
scope :for_status, lambda {|status| where(:status => status) if status.present? }
|
||||
scope :for_user, lambda { |user| where(:user_id => user.id) }
|
||||
scope :not_owned_external_nodes, where("#{table_name}.external_nodes is null OR #{table_name}.external_nodes != ?", :owned)
|
||||
scope :external_nodes, lambda { |type| where("#{table_name}.external_nodes = ?", type) }
|
||||
scope :oldest, lambda { where("#{table_name}.updated_at < ?", Time.zone.now - 15.seconds) }
|
||||
scope :for_platform, lambda { |platform| where(:build_for_platform_id => platform) }
|
||||
scope :by_mass_build, lambda { |mass_build| where(:mass_build_id => mass_build) }
|
||||
scope :scoped_to_arch, lambda {|arch| where(:arch_id => arch) if arch.present? }
|
||||
|
@ -160,7 +167,8 @@ class BuildList < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
after_transition :on => :place_build, :do => :add_job_to_abf_worker_queue
|
||||
after_transition :on => :place_build, :do => :add_job_to_abf_worker_queue,
|
||||
:if => lambda { |build_list| build_list.external_nodes.present? }
|
||||
after_transition :on => :published,
|
||||
:do => [:set_version_and_tag, :actualize_packages]
|
||||
after_transition :on => :publish, :do => :set_publisher
|
||||
|
@ -453,7 +461,7 @@ class BuildList < ActiveRecord::Base
|
|||
end
|
||||
|
||||
git_project_address = project.git_project_address user
|
||||
# git_project_address.gsub!(/^http:\/\/(0\.0\.0\.0|localhost)\:[\d]+/, 'https://abf.rosalinux.ru') unless Rails.env.production?
|
||||
git_project_address.gsub!(/^http:\/\/(0\.0\.0\.0|localhost)\:[\d]+/, 'https://abf.rosalinux.ru') unless Rails.env.production?
|
||||
|
||||
cmd_params = {
|
||||
'GIT_PROJECT_ADDRESS' => git_project_address,
|
||||
|
|
|
@ -49,6 +49,11 @@
|
|||
= hidden_field_tag field, false, :id => nil
|
||||
= check_box_tag field, true, checked
|
||||
= f.label kind
|
||||
.both
|
||||
- selected = params[:build_list].try(:[], :external_nodes) ? {:selected => params[:build_list][:external_nodes]} : {}
|
||||
= f.select :external_nodes, external_nodes, selected.merge(:include_blank => true)
|
||||
= f.label :external_nodes
|
||||
.both
|
||||
|
||||
%br
|
||||
= hidden_field_tag :from_build_list_id, params[:build_list_id] if params[:build_list_id].present?
|
||||
|
|
|
@ -67,6 +67,14 @@
|
|||
.leftlist= t("activerecord.attributes.build_list.updated_at")
|
||||
.rightlist {{build_list.updated_at_utc}}
|
||||
.both
|
||||
- if @build_list.external_nodes.present?
|
||||
.leftlist= t("activerecord.attributes.build_list.external_nodes")
|
||||
.rightlist= I18n.t("layout.build_lists.external_nodes.#{@build_list.external_nodes}")
|
||||
.both
|
||||
.leftlist= t("activerecord.attributes.build_list.builder")
|
||||
.rightlist{'ng-show' => 'build_list.builder'}
|
||||
%a{'ng-href' => '{{build_list.builder.path}}' } {{build_list.builder.fullname}}
|
||||
.both
|
||||
.leftlist= t("activerecord.attributes.build_list.is_circle")
|
||||
.rightlist= t("layout.#{@build_list.is_circle?}_")
|
||||
.both
|
||||
|
|
|
@ -26,6 +26,11 @@ json.build_list do
|
|||
json.path user_path(@build_list.publisher)
|
||||
end if @build_list.publisher
|
||||
|
||||
json.builder do
|
||||
json.fullname @build_list.builder.try(:fullname)
|
||||
json.path user_path(@build_list.builder)
|
||||
end if @build_list.builder
|
||||
|
||||
json.advisory do
|
||||
json.(@build_list.advisory, :description, :advisory_id)
|
||||
json.path advisory_path(@build_list.advisory)
|
||||
|
|
|
@ -30,12 +30,14 @@ en:
|
|||
project_version: Version
|
||||
user: User
|
||||
publisher: Publisher
|
||||
builder: Builder
|
||||
preferences: Preferences
|
||||
started_at: Build started at
|
||||
duration: Build duration in seconds
|
||||
mass_build_id: Mass build
|
||||
commit_hash: Commit hash
|
||||
logs: Logs
|
||||
external_nodes: External nodes
|
||||
|
||||
extra_params:
|
||||
label: Extra params
|
||||
|
@ -103,6 +105,10 @@ en:
|
|||
related: Related
|
||||
everything: All
|
||||
|
||||
external_nodes:
|
||||
owned: My
|
||||
everything: All
|
||||
|
||||
build_server_status:
|
||||
header: Build server status
|
||||
workers: '- amount'
|
||||
|
|
|
@ -30,11 +30,13 @@ ru:
|
|||
project_version: Версия
|
||||
user: Пользователь
|
||||
publisher: Публикатор
|
||||
builder: Сборщик
|
||||
preferences: Настройки
|
||||
duration: Длительность билда в секундах
|
||||
mass_build_id: Массовая сборка
|
||||
commit_hash: Хэш коммита
|
||||
logs: Логи
|
||||
external_nodes: Дополнительные ноды
|
||||
|
||||
extra_params:
|
||||
label: Дополнительные параметры
|
||||
|
@ -102,6 +104,10 @@ ru:
|
|||
related: Связанные
|
||||
everything: Все
|
||||
|
||||
external_nodes:
|
||||
owned: Мои
|
||||
everything: Все
|
||||
|
||||
build_server_status:
|
||||
header: Статус сборочного сервера
|
||||
workers: '- количество'
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class AddExternalNodesIntoBuildList < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :build_lists, :external_nodes, :string
|
||||
end
|
||||
end
|
|
@ -0,0 +1,5 @@
|
|||
class AddBuilderIntoBuildList < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :build_lists, :builder_id, :integer
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20130920133720) do
|
||||
ActiveRecord::Schema.define(:version => 20131017171426) do
|
||||
|
||||
create_table "activity_feeds", :force => true do |t|
|
||||
t.integer "user_id", :null => false
|
||||
|
@ -139,6 +139,8 @@ ActiveRecord::Schema.define(:version => 20130920133720) do
|
|||
t.integer "publisher_id"
|
||||
t.integer "group_id"
|
||||
t.text "extra_params"
|
||||
t.string "external_nodes"
|
||||
t.integer "builder_id"
|
||||
end
|
||||
|
||||
add_index "build_lists", ["advisory_id"], :name => "index_build_lists_on_advisory_id"
|
||||
|
|
Loading…
Reference in New Issue