Merge pull request #238 from abf/rosa-build:231-increase-time-of-build-for-Cooker-ARM-packages
#231, #230: Add extra settings for main platforms
This commit is contained in:
commit
8117bd1561
|
@ -21,6 +21,7 @@ $(document).ready(function() {
|
|||
extra_repos.show();
|
||||
} else {
|
||||
all_repositories.attr('disabled', 'disabled');
|
||||
updatedDefaultArches(selected_option);
|
||||
extra_repos.hide();
|
||||
var parent = build_platform.parent();
|
||||
parent.find('input').removeAttr('disabled');
|
||||
|
@ -77,6 +78,13 @@ $(document).ready(function() {
|
|||
});
|
||||
});
|
||||
|
||||
function updatedDefaultArches(selected_option) {
|
||||
$('input[name="arches[]"]').removeAttr('checked');
|
||||
_.each(selected_option.attr('default_arches').split(' '), function(id){
|
||||
$('#arches_' + id).attr('checked', 'checked');
|
||||
});
|
||||
}
|
||||
|
||||
function updateExtraReposAndBuildLists(save_to_platform_id) {
|
||||
$.each($('.autocomplete-form'), function() {
|
||||
var form = $(this);
|
||||
|
|
|
@ -42,11 +42,11 @@ class Platforms::PlatformsController < Platforms::BaseController
|
|||
@admin_id = params[:admin_id]
|
||||
@admin_uname = params[:admin_uname]
|
||||
|
||||
if @platform.update_attributes(
|
||||
:owner => @admin_id.blank? ? get_owner : User.find(@admin_id),
|
||||
:description => params[:platform][:description],
|
||||
:released => (params[:platform][:released] || @platform.released)
|
||||
)
|
||||
platform_params = params[:platform] || {}
|
||||
platform_params = platform_params.slice(:description, :platform_arch_settings_attributes, :released)
|
||||
platform_params[:owner] = User.find(@admin_id) if @admin_id.present?
|
||||
|
||||
if @platform.update_attributes(platform_params)
|
||||
flash[:notice] = I18n.t("flash.platform.saved")
|
||||
redirect_to @platform
|
||||
else
|
||||
|
|
|
@ -19,6 +19,20 @@ module BuildListsHelper
|
|||
.joins(:repositories).uniq
|
||||
end
|
||||
|
||||
def save_to_repositories(project)
|
||||
project.repositories.collect do |r|
|
||||
[
|
||||
"#{r.platform.name}/#{r.name}",
|
||||
r.id,
|
||||
{
|
||||
:publish_without_qa => r.publish_without_qa? ? 1 : 0,
|
||||
:platform_id => r.platform.id,
|
||||
:default_arches => r.platform.platform_arch_settings.by_default.pluck(:arch_id).join(' ')
|
||||
}
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
def mass_build_options(selected_id)
|
||||
options_from_collection_for_select(
|
||||
MassBuild.recent.limit(15),
|
||||
|
|
|
@ -10,4 +10,15 @@ module PlatformsHelper
|
|||
platform.released? ? "#{platform.name} #{I18n.t("layout.platforms.released_suffix")}" : platform.name
|
||||
end
|
||||
|
||||
def platform_arch_settings(platform)
|
||||
settings = platform.platform_arch_settings
|
||||
settings |= Arch.where('id not in (?)', settings.pluck(:arch_id)).map do |arch|
|
||||
platform.platform_arch_settings.build(
|
||||
:arch_id => arch.id,
|
||||
:time_living => PlatformArchSetting::DEFAULT_TIME_LIVING
|
||||
)
|
||||
end
|
||||
settings.sort_by{ |s| s.arch.name }
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -413,7 +413,7 @@ class BuildList < ActiveRecord::Base
|
|||
{
|
||||
:id => id,
|
||||
:arch => arch.name,
|
||||
:time_living => 43200, # 12 hours
|
||||
:time_living => (build_for_platform.platform_arch_settings.by_arch(arch).first.try(:time_living) || PlatformArchSetting::DEFAULT_TIME_LIVING),
|
||||
:distrib_type => build_for_platform.distrib_type,
|
||||
:git_project_address => git_project_address,
|
||||
:commit_hash => commit_hash,
|
||||
|
|
|
@ -9,6 +9,7 @@ class Platform < ActiveRecord::Base
|
|||
has_many :repositories, :dependent => :destroy
|
||||
has_many :products, :dependent => :destroy
|
||||
has_many :tokens, :as => :subject, :dependent => :destroy
|
||||
has_many :platform_arch_settings, :dependent => :destroy
|
||||
|
||||
has_many :relations, :as => :target, :dependent => :destroy
|
||||
has_many :actors, :as => :target, :class_name => 'Relation', :dependent => :destroy
|
||||
|
@ -53,7 +54,8 @@ class Platform < ActiveRecord::Base
|
|||
scope :main, by_type('main')
|
||||
scope :personal, by_type('personal')
|
||||
|
||||
attr_accessible :name, :distrib_type, :parent_platform_id, :platform_type, :owner, :visibility, :description, :released
|
||||
accepts_nested_attributes_for :platform_arch_settings, :allow_destroy => true
|
||||
attr_accessible :name, :distrib_type, :parent_platform_id, :platform_type, :owner, :visibility, :description, :released, :platform_arch_settings_attributes
|
||||
attr_readonly :name, :distrib_type, :parent_platform_id, :platform_type
|
||||
|
||||
include Modules::Models::Owner
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# -*- encoding : utf-8 -*-
|
||||
class PlatformArchSetting < ActiveRecord::Base
|
||||
DEFAULT_TIME_LIVING = 43200 # seconds, 12 hours
|
||||
MIN_TIME_LIVING = 600 # seconds, 10 minutes
|
||||
MAX_TIME_LIVING = 172800 # seconds, 48 hours
|
||||
include Modules::Models::TimeLiving
|
||||
|
||||
belongs_to :arch
|
||||
belongs_to :platform
|
||||
|
||||
validates :arch_id, :platform_id, :presence => true
|
||||
validates :platform_id, :uniqueness => {:scope => :arch_id}
|
||||
|
||||
scope :by_arch, lambda {|arch| where(:arch_id => arch) if arch.present?}
|
||||
scope :by_default, where(:default => true)
|
||||
|
||||
attr_accessible :arch_id, :platform_id, :default
|
||||
|
||||
end
|
|
@ -26,10 +26,26 @@
|
|||
= hidden_field_tag 'admin_id', @admin_id, :id => 'admin_id_field'
|
||||
.both
|
||||
|
||||
%h3= t('layout.platform_arch_settings.extra_settings')
|
||||
|
||||
%table.tablesorter{:cellpadding => "0", :cellspacing => "0"}
|
||||
%thead
|
||||
%tr
|
||||
%th.lpadding16= t("activerecord.models.arch")
|
||||
%th.lpadding16= t("activerecord.attributes.platform_arch_setting.default")
|
||||
%th.lpadding16= t("activerecord.attributes.platform_arch_setting.time_living")
|
||||
%tbody
|
||||
- platform_arch_settings(@platform).each do |setting|
|
||||
%tr{:class => cycle("odd", "even")}
|
||||
= f.fields_for :platform_arch_settings, setting do |s_form|
|
||||
%td
|
||||
= setting.arch.name
|
||||
= s_form.hidden_field :arch_id
|
||||
%td.center= s_form.check_box :default, :class => 'check_box'
|
||||
%td.right= s_form.text_field :time_living, :value => setting.time_living / 60, :class => 'text_field', :size => 10
|
||||
.both
|
||||
|
||||
.button_block
|
||||
= submit_tag t('layout.save'), :data => {'disable-with' => t('layout.saving')}
|
||||
-#%input.button{:type => "submit", :class => "button"}
|
||||
-#= image_tag("choose.png", :alt => t("layout.save"))
|
||||
-#= t("layout.clone")
|
||||
= f.submit t('layout.save'), :data => {'disable-with' => t('layout.saving')}
|
||||
%span.text_button_padding= t("layout.or")
|
||||
= link_to t("layout.cancel"), @platform.new_record? ? root_path : platform_path(@platform), :class => "button"
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
.offset25= render 'include_repos', :platform => pl
|
||||
%section.right
|
||||
%h3= t("activerecord.attributes.build_list.save_to_repository")
|
||||
.lineForm= f.select :save_to_repository_id, @project.repositories.collect{|r| ["#{r.platform.name}/#{r.name}", r.id, {:publish_without_qa => r.publish_without_qa? ? 1 : 0, :platform_id => r.platform.id}]}
|
||||
.lineForm= f.select :save_to_repository_id, save_to_repositories(@project)
|
||||
%h3= t("activerecord.attributes.build_list.project_version")
|
||||
.lineForm= f.select :project_version, versions_for_group_select(@project), :selected => params[:build_list].try(:fetch, :project_version) || @project.default_branch
|
||||
%h3= t("activerecord.attributes.build_list.arch")
|
||||
|
|
|
@ -79,6 +79,8 @@ en:
|
|||
models:
|
||||
platform: Platform
|
||||
attributes:
|
||||
platform/platform_arch_settings:
|
||||
time_living: Max time build (in minutes)
|
||||
platform:
|
||||
name: Name
|
||||
description: Description
|
||||
|
|
|
@ -79,6 +79,8 @@ ru:
|
|||
models:
|
||||
platform: Платформа
|
||||
attributes:
|
||||
platform/platform_arch_settings:
|
||||
time_living: Максимальное время сборки (в минутах)
|
||||
platform:
|
||||
name: Название
|
||||
description: Описание
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
en:
|
||||
layout:
|
||||
platform_arch_settings:
|
||||
extra_settings: Extra settings
|
||||
|
||||
flash:
|
||||
platform_arch_settings:
|
||||
|
||||
activerecord:
|
||||
attributes:
|
||||
platform_arch_setting:
|
||||
default: Use by default at build
|
||||
time_living: Max time build (in minutes)
|
|
@ -0,0 +1,13 @@
|
|||
ru:
|
||||
layout:
|
||||
platform_arch_settings:
|
||||
extra_settings: Дополнительные настройки
|
||||
|
||||
flash:
|
||||
platform_arch_settings:
|
||||
|
||||
activerecord:
|
||||
attributes:
|
||||
platform_arch_setting:
|
||||
default: Использовать по умолчанию при сборке
|
||||
time_living: Максимальное время сборки (в минутах)
|
|
@ -1,4 +1,4 @@
|
|||
en:
|
||||
flash:
|
||||
time_living:
|
||||
numericality_error: must be 2 to 720 minutes
|
||||
numericality_error: must be %{min} to %{max} minutes
|
|
@ -1,4 +1,4 @@
|
|||
ru:
|
||||
flash:
|
||||
time_living:
|
||||
numericality_error: должно быть от 2 до 720 минут
|
||||
numericality_error: должно быть от %{min} до %{max} минут
|
|
@ -0,0 +1,29 @@
|
|||
class CreatePlatformArchSettings < ActiveRecord::Migration
|
||||
|
||||
def up
|
||||
create_table :platform_arch_settings do |t|
|
||||
t.integer :platform_id, :null => false
|
||||
t.integer :arch_id, :null => false
|
||||
t.integer :time_living, :null => false
|
||||
t.boolean :default
|
||||
t.timestamps
|
||||
end
|
||||
add_index :platform_arch_settings, [:platform_id, :arch_id], :unique => true
|
||||
|
||||
arch_ids = Arch.where(:name => %w(i586 x86_64)).pluck(:id)
|
||||
Platform.main.each do |platform|
|
||||
arch_ids.each do |arch_id|
|
||||
platform.platform_arch_settings.create(
|
||||
:arch_id => arch_id,
|
||||
:default => true,
|
||||
:time_living => PlatformArchSetting::DEFAULT_TIME_LIVING / 60
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def down
|
||||
drop_table :platform_arch_settings
|
||||
end
|
||||
end
|
13
db/schema.rb
13
db/schema.rb
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20130717112337) do
|
||||
ActiveRecord::Schema.define(:version => 20130724105821) do
|
||||
|
||||
create_table "activity_feeds", :force => true do |t|
|
||||
t.integer "user_id", :null => false
|
||||
|
@ -294,6 +294,17 @@ ActiveRecord::Schema.define(:version => 20130717112337) do
|
|||
t.text "extra_build_lists"
|
||||
end
|
||||
|
||||
create_table "platform_arch_settings", :force => true do |t|
|
||||
t.integer "platform_id", :null => false
|
||||
t.integer "arch_id", :null => false
|
||||
t.integer "time_living", :null => false
|
||||
t.boolean "default"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
end
|
||||
|
||||
add_index "platform_arch_settings", ["platform_id", "arch_id"], :name => "index_platform_arch_settings_on_platform_id_and_arch_id", :unique => true
|
||||
|
||||
create_table "platforms", :force => true do |t|
|
||||
t.string "description"
|
||||
t.string "name", :null => false
|
||||
|
|
|
@ -11,9 +11,16 @@ module Modules
|
|||
}, :presence => true
|
||||
|
||||
validate lambda {
|
||||
# MIN_TIME_LIVING <= time_living <= MAX_TIME_LIVING or
|
||||
# 2 min <= time_living <= 12 hours
|
||||
if 120 > time_living.to_i || time_living.to_i > 43200
|
||||
errors.add(:time_living, I18n.t('flash.time_living.numericality_error'))
|
||||
# time_living in seconds
|
||||
min = self.class.const_defined?(:MIN_TIME_LIVING) ? self.class::MIN_TIME_LIVING : 120
|
||||
max = self.class.const_defined?(:MAX_TIME_LIVING) ? self.class::MAX_TIME_LIVING : 43200
|
||||
if min > time_living.to_i || time_living.to_i > max
|
||||
errors.add :time_living, I18n.t('flash.time_living.numericality_error',
|
||||
:min => (min / 60),
|
||||
:max => (max / 60)
|
||||
)
|
||||
end
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue