#354: added autostart_status into Project
This commit is contained in:
parent
cded4aaba3
commit
5bebb4d5a8
|
@ -1,26 +1,14 @@
|
|||
class Product < ActiveRecord::Base
|
||||
include Modules::Models::TimeLiving
|
||||
include Modules::Models::Autostart
|
||||
|
||||
belongs_to :platform
|
||||
belongs_to :project
|
||||
has_many :product_build_lists, dependent: :destroy
|
||||
|
||||
ONCE_A_12_HOURS = 0
|
||||
ONCE_A_DAY = 1
|
||||
ONCE_A_WEEK = 2
|
||||
|
||||
AUTOSTART_STATUSES = [ONCE_A_12_HOURS, ONCE_A_DAY, ONCE_A_WEEK]
|
||||
HUMAN_AUTOSTART_STATUSES = {
|
||||
ONCE_A_12_HOURS => :once_a_12_hours,
|
||||
ONCE_A_DAY => :once_a_day,
|
||||
ONCE_A_WEEK => :once_a_week
|
||||
}
|
||||
|
||||
validates :name, presence: true, uniqueness: {scope: :platform_id}
|
||||
validates :project_id, presence: true
|
||||
validates :main_script, :params, length: { maximum: 255 }
|
||||
validates :autostart_status, numericality: true,
|
||||
inclusion: {in: AUTOSTART_STATUSES}, allow_blank: true
|
||||
|
||||
scope :recent, order("#{table_name}.name ASC")
|
||||
|
||||
|
@ -30,7 +18,6 @@ class Product < ActiveRecord::Base
|
|||
:main_script,
|
||||
:params,
|
||||
:platform_id,
|
||||
:autostart_status,
|
||||
:project_version
|
||||
attr_readonly :platform_id
|
||||
|
||||
|
@ -44,16 +31,8 @@ class Product < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def human_autostart_status
|
||||
self.class.human_autostart_status(autostart_status)
|
||||
end
|
||||
|
||||
def self.human_autostart_status(autostart_status)
|
||||
I18n.t("layout.products.autostart_statuses.#{HUMAN_AUTOSTART_STATUSES[autostart_status]}")
|
||||
end
|
||||
|
||||
class << self
|
||||
HUMAN_AUTOSTART_STATUSES.each do |autostart_status, human_autostart_status|
|
||||
Modules::Models::Autostart::HUMAN_AUTOSTART_STATUSES.each do |autostart_status, human_autostart_status|
|
||||
define_method "autostart_iso_builds_#{human_autostart_status}" do
|
||||
autostart_iso_builds autostart_status
|
||||
end
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
class Project < ActiveRecord::Base
|
||||
include Modules::Models::Autostart
|
||||
|
||||
VISIBILITIES = ['open', 'hidden']
|
||||
MAX_OWN_PROJECTS = 32000
|
||||
NAME_REGEXP = /[\w\-\+\.]+/
|
||||
|
@ -50,6 +52,8 @@ class Project < ActiveRecord::Base
|
|||
:url, :srpms_list, :mass_import, :add_to_repository_id, :architecture_dependent
|
||||
attr_readonly :owner_id, :owner_type
|
||||
|
||||
serialize :default_platforms, Array
|
||||
|
||||
scope :recent, order("lower(#{table_name}.name) ASC")
|
||||
scope :search_order, order("CHAR_LENGTH(#{table_name}.name) ASC")
|
||||
scope :search, lambda {|q|
|
||||
|
@ -171,13 +175,7 @@ class Project < ActiveRecord::Base
|
|||
main_rep_id = build_for_platform.repositories.find_by_name(%w(main base)).try(:id)
|
||||
include_repos = ([main_rep_id] << (save_to_platform.main? ? repository_id : nil)).compact.uniq
|
||||
|
||||
project_version = if repo.commits("#{save_to_platform.name}").try(:first).try(:id)
|
||||
save_to_platform.name
|
||||
elsif repo.commits("#{build_for_platform.name}").try(:first).try(:id)
|
||||
build_for_platform.name
|
||||
else
|
||||
default_branch
|
||||
end
|
||||
project_version = project_version_for save_to_platform, build_for_platform
|
||||
|
||||
increase_release_tag(project_version, user, "MassBuild##{mass_build.id}: Increase release tag") if increase_rt
|
||||
|
||||
|
@ -199,6 +197,16 @@ class Project < ActiveRecord::Base
|
|||
build_list.save
|
||||
end
|
||||
|
||||
def project_version_for(save_to_platform, build_for_platform)
|
||||
if repo.commits("#{save_to_platform.name}").try(:first).try(:id)
|
||||
save_to_platform.name
|
||||
elsif repo.commits("#{build_for_platform.name}").try(:first).try(:id)
|
||||
build_for_platform.name
|
||||
else
|
||||
default_branch
|
||||
end
|
||||
end
|
||||
|
||||
def fork(new_owner, new_name = name)
|
||||
new_name = new_name.presence || name
|
||||
dup.tap do |c|
|
||||
|
@ -290,6 +298,34 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
class << self
|
||||
Modules::Models::Autostart::HUMAN_AUTOSTART_STATUSES.each do |autostart_status, human_autostart_status|
|
||||
define_method "autostart_build_lists_#{human_autostart_status}" do
|
||||
autostart_iso_builds autostart_status
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.autostart_build_lists(autostart_status)
|
||||
Project.where(autostart_status: autostart_status).find_each do |p|
|
||||
Platform.where(id: p.default_platforms).each do |platform|
|
||||
platform.platform_arch_settings.pluck(:arch_id).each do |arch_id|
|
||||
build_list = build_lists.build do |bl|
|
||||
bl.save_to_platform = platform
|
||||
bl.build_for_platform = platform
|
||||
bl.update_type = 'newpackage'
|
||||
bl.arch_id = arch_id
|
||||
bl.project_version = project_version_for(platform, platform)
|
||||
bl.user = p.owner.is_a?(Group) ? p.owner.owner : p.owner
|
||||
bl.auto_publish = true # TODO: ???
|
||||
bl.save_to_repository_id = p.repositories.where(platform_id: platform).first
|
||||
end
|
||||
build_list.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def increase_release_tag(project_version, user, message)
|
||||
|
|
|
@ -55,6 +55,17 @@
|
|||
autocomplete_maintainers_path(@project.owner, @project),
|
||||
id_element: '#project_maintainer_id',
|
||||
placeholder: @project.maintainer.fullname
|
||||
|
||||
%h3= t("layout.projects.build_schedule")
|
||||
= form_for @project, html: { class: :form, multipart: true } do |f|
|
||||
.leftlist= f.label :default_platforms
|
||||
.rightlist= f.select :default_platforms, Platform.main.map{ |p| [p.name, p.id] }, {include_blank: true}, multiple: true, size: 5
|
||||
.both
|
||||
|
||||
.leftlist= f.label :autostart_status
|
||||
.rightlist= f.select :autostart_status, Project::AUTOSTART_STATUSES.collect{|status| [Project.human_autostart_status(status), status]}, {include_blank: true, selected: @project.autostart_status}
|
||||
.both
|
||||
|
||||
- if [:new, :create].include? act
|
||||
.leftlist= f.label :srpm
|
||||
.rightlist= f.file_field :srpm, class: 'file_field'
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
en:
|
||||
layout:
|
||||
projects:
|
||||
build_schedule: Build schedule
|
||||
mass_import: Mass import
|
||||
branches: Branches
|
||||
delete_branch: Delete branch
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
ru:
|
||||
layout:
|
||||
projects:
|
||||
build_schedule: Расписание сборок
|
||||
mass_import: Массовый импорт
|
||||
branches: Ветки
|
||||
delete_branch: Удалить ветку
|
||||
|
|
|
@ -39,16 +39,20 @@ every 1.hour do
|
|||
end
|
||||
|
||||
every :day, at: '4am' do
|
||||
runner 'Product.autostart_iso_builds_once_a_12_hours', output: 'log/autostart_iso_builds.log'
|
||||
runner 'Product.autostart_iso_builds_once_a_day', output: 'log/autostart_iso_builds.log'
|
||||
runner 'Product.autostart_iso_builds_once_a_12_hours', output: 'log/autostart_iso_builds.log'
|
||||
runner 'Product.autostart_iso_builds_once_a_day', output: 'log/autostart_iso_builds.log'
|
||||
runner 'BuildList.autostart_build_lists_once_a_12_hours', output: 'log/autostart_build_lists.log'
|
||||
runner 'BuildList.autostart_build_lists_once_a_day', output: 'log/autostart_build_lists.log'
|
||||
end
|
||||
|
||||
every :day, at: '4pm' do
|
||||
runner 'Product.autostart_iso_builds_once_a_12_hours', output: 'log/autostart_iso_builds.log'
|
||||
runner 'Product.autostart_iso_builds_once_a_12_hours', output: 'log/autostart_iso_builds.log'
|
||||
runner 'BuildList.autostart_build_lists_once_a_12_hours', output: 'log/autostart_build_lists.log'
|
||||
end
|
||||
|
||||
every :sunday, at: '4am' do
|
||||
runner 'Product.autostart_iso_builds_once_a_week', output: 'log/autostart_iso_builds.log'
|
||||
runner 'Product.autostart_iso_builds_once_a_week', output: 'log/autostart_iso_builds.log'
|
||||
runner 'BuildList.autostart_build_lists_once_a_week', output: 'log/autostart_build_lists.log'
|
||||
end
|
||||
|
||||
every :day, at: '1am' do
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
class AddAutostartStatusToProjects < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :projects, :autostart_status, :integer
|
||||
add_column :projects, :default_platforms, :text
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20140211175858) do
|
||||
ActiveRecord::Schema.define(:version => 20140216203553) do
|
||||
|
||||
create_table "activity_feeds", :force => true do |t|
|
||||
t.integer "user_id", :null => false
|
||||
|
@ -441,6 +441,8 @@ ActiveRecord::Schema.define(:version => 20140211175858) do
|
|||
t.boolean "publish_i686_into_x86_64", :default => false
|
||||
t.string "owner_uname", :null => false
|
||||
t.boolean "architecture_dependent", :default => false, :null => false
|
||||
t.integer "autostart_status"
|
||||
t.text "default_platforms"
|
||||
end
|
||||
|
||||
add_index "projects", ["owner_id", "name", "owner_type"], :name => "index_projects_on_name_and_owner_id_and_owner_type", :unique => true, :case_sensitive => false
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
module Modules
|
||||
module Models
|
||||
module Autostart
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
ONCE_A_12_HOURS = 0
|
||||
ONCE_A_DAY = 1
|
||||
ONCE_A_WEEK = 2
|
||||
|
||||
AUTOSTART_STATUSES = [ONCE_A_12_HOURS, ONCE_A_DAY, ONCE_A_WEEK]
|
||||
HUMAN_AUTOSTART_STATUSES = {
|
||||
ONCE_A_12_HOURS => :once_a_12_hours,
|
||||
ONCE_A_DAY => :once_a_day,
|
||||
ONCE_A_WEEK => :once_a_week
|
||||
}
|
||||
|
||||
included do
|
||||
validates :autostart_status, numericality: true,
|
||||
inclusion: {in: AUTOSTART_STATUSES}, allow_blank: true
|
||||
|
||||
attr_accessible :autostart_status
|
||||
end
|
||||
|
||||
def human_autostart_status
|
||||
self.class.human_autostart_status(autostart_status)
|
||||
end
|
||||
|
||||
module ClassMethods
|
||||
def human_autostart_status(autostart_status)
|
||||
I18n.t("layout.products.autostart_statuses.#{HUMAN_AUTOSTART_STATUSES[autostart_status]}")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue