Add publish white/black project lists to platforms
This commit is contained in:
parent
7b3d7d27a9
commit
82f35228c8
|
@ -12,6 +12,12 @@ module PlatformsHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def platform_project_list_type_options
|
||||||
|
%w(blacklist whitelist).map do |v|
|
||||||
|
[ I18n.t("activerecord.attributes.platform.project_list_types.#{v}"), Platform.const_get("PROJECT_LIST_TYPE_#{v.upcase}")]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def repository_name_postfix(platform)
|
def repository_name_postfix(platform)
|
||||||
return "" unless platform
|
return "" unless platform
|
||||||
return platform.released ? '/update' : '/release'
|
return platform.released ? '/update' : '/release'
|
||||||
|
|
|
@ -336,6 +336,16 @@ class BuildList < ActiveRecord::Base
|
||||||
[SUCCESS, BUILD_PUBLISH, FAILED_PUBLISH, BUILD_PUBLISHED, TESTS_FAILED, BUILD_PUBLISHED_INTO_TESTING, FAILED_PUBLISH_INTO_TESTING].include?(status) && [WAITING_FOR_RESPONSE, FAILED_PUBLISH].include?(container_status)
|
[SUCCESS, BUILD_PUBLISH, FAILED_PUBLISH, BUILD_PUBLISHED, TESTS_FAILED, BUILD_PUBLISHED_INTO_TESTING, FAILED_PUBLISH_INTO_TESTING].include?(status) && [WAITING_FOR_RESPONSE, FAILED_PUBLISH].include?(container_status)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def can_publish_into_platform?
|
||||||
|
return true unless save_to_platform.project_list_active
|
||||||
|
if save_to_platform.project_list_type == Platform::PROJECT_LIST_TYPE_BLACKLIST
|
||||||
|
return false if save_to_platform.project_list.split("\n").include?(project.name)
|
||||||
|
else
|
||||||
|
return false unless save_to_platform.project_list.split("\n").include?(project.name)
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
def can_publish_into_repository?
|
def can_publish_into_repository?
|
||||||
return true if !save_to_repository.synchronizing_publications? || save_to_platform.personal? || project.architecture_dependent?
|
return true if !save_to_repository.synchronizing_publications? || save_to_platform.personal? || project.architecture_dependent?
|
||||||
arch_ids = save_to_platform.platform_arch_settings.by_default.pluck(:arch_id)
|
arch_ids = save_to_platform.platform_arch_settings.by_default.pluck(:arch_id)
|
||||||
|
@ -381,6 +391,7 @@ class BuildList < ActiveRecord::Base
|
||||||
|
|
||||||
def can_publish?
|
def can_publish?
|
||||||
super &&
|
super &&
|
||||||
|
can_publish_into_platform? &&
|
||||||
valid_branch_for_publish? &&
|
valid_branch_for_publish? &&
|
||||||
extra_build_lists_published? &&
|
extra_build_lists_published? &&
|
||||||
save_to_repository.projects.exists?(id: project_id)
|
save_to_repository.projects.exists?(id: project_id)
|
||||||
|
|
|
@ -25,6 +25,11 @@ class Platform < ActiveRecord::Base
|
||||||
TYPE_MAIN = 'main'
|
TYPE_MAIN = 'main'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
PROJECT_LIST_TYPES = [
|
||||||
|
PROJECT_LIST_TYPE_BLACKLIST = 0,
|
||||||
|
PROJECT_LIST_TYPE_WHITELIST = 1
|
||||||
|
]
|
||||||
|
|
||||||
belongs_to :parent, class_name: 'Platform', foreign_key: 'parent_platform_id'
|
belongs_to :parent, class_name: 'Platform', foreign_key: 'parent_platform_id'
|
||||||
belongs_to :owner, polymorphic: true
|
belongs_to :owner, polymorphic: true
|
||||||
|
|
||||||
|
@ -74,6 +79,10 @@ class Platform < ActiveRecord::Base
|
||||||
presence: true,
|
presence: true,
|
||||||
inclusion: { in: APP_CONFIG['distr_types'] }
|
inclusion: { in: APP_CONFIG['distr_types'] }
|
||||||
|
|
||||||
|
validates :project_list_type,
|
||||||
|
presence: true,
|
||||||
|
inclusion: { in: PROJECT_LIST_TYPES }
|
||||||
|
|
||||||
validate -> {
|
validate -> {
|
||||||
if released_was && !released
|
if released_was && !released
|
||||||
errors.add(:released, I18n.t('flash.platform.released_status_can_not_be_changed'))
|
errors.add(:released, I18n.t('flash.platform.released_status_can_not_be_changed'))
|
||||||
|
@ -89,6 +98,7 @@ class Platform < ActiveRecord::Base
|
||||||
before_create :create_directory
|
before_create :create_directory
|
||||||
before_destroy :detele_directory
|
before_destroy :detele_directory
|
||||||
|
|
||||||
|
before_save :fix_project_list
|
||||||
after_update :freeze_platform_and_update_repos
|
after_update :freeze_platform_and_update_repos
|
||||||
after_update :update_owner_relation
|
after_update :update_owner_relation
|
||||||
|
|
||||||
|
@ -281,6 +291,11 @@ class Platform < ActiveRecord::Base
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def fix_project_list
|
||||||
|
existing = projects.where(name: self.project_list.split("\r\n")).pluck(:name)
|
||||||
|
self.project_list = existing.join("\n")
|
||||||
|
end
|
||||||
|
|
||||||
def create_directory
|
def create_directory
|
||||||
system("mkdir -p -m 0777 #{build_path([name, 'repository'])}")
|
system("mkdir -p -m 0777 #{build_path([name, 'repository'])}")
|
||||||
end
|
end
|
||||||
|
|
|
@ -78,6 +78,9 @@ class PlatformPolicy < ApplicationPolicy
|
||||||
released
|
released
|
||||||
term
|
term
|
||||||
visibility
|
visibility
|
||||||
|
project_list
|
||||||
|
project_list_type
|
||||||
|
project_list_active
|
||||||
) + [
|
) + [
|
||||||
platform_arch_settings_attributes: %i(id arch_id platform_id default time_living)
|
platform_arch_settings_attributes: %i(id arch_id platform_id default time_living)
|
||||||
]
|
]
|
||||||
|
|
|
@ -24,6 +24,13 @@
|
||||||
|
|
||||||
= f.input :default_branch
|
= f.input :default_branch
|
||||||
|
|
||||||
|
h3
|
||||||
|
= t('layout.platforms.publish_lists')
|
||||||
|
|
||||||
|
= f.input :project_list_active, as: :boolean
|
||||||
|
= f.input :project_list_type, collection: platform_project_list_type_options, include_blank: false
|
||||||
|
= f.input :project_list, as: :text, input_html: {rows: 10}
|
||||||
|
|
||||||
- if %w(edit update).include? controller.action_name
|
- if %w(edit update).include? controller.action_name
|
||||||
|
|
||||||
- unless @platform.personal?
|
- unless @platform.personal?
|
||||||
|
|
|
@ -51,6 +51,7 @@ en:
|
||||||
change_visibility_from_open: Change status to "Private"
|
change_visibility_from_open: Change status to "Private"
|
||||||
confirm_change_visibility: Are you sure you want to change visibility of this platform?
|
confirm_change_visibility: Are you sure you want to change visibility of this platform?
|
||||||
metadata: Metadata for Software Center
|
metadata: Metadata for Software Center
|
||||||
|
publish_lists: Publishing black/white project lists
|
||||||
|
|
||||||
flash:
|
flash:
|
||||||
platform:
|
platform:
|
||||||
|
@ -94,6 +95,9 @@ en:
|
||||||
visibility_types:
|
visibility_types:
|
||||||
open: Public
|
open: Public
|
||||||
hidden: Private
|
hidden: Private
|
||||||
|
project_list_types:
|
||||||
|
blacklist: Blacklist
|
||||||
|
whitelist: Whitelist
|
||||||
|
|
||||||
simple_form:
|
simple_form:
|
||||||
labels:
|
labels:
|
||||||
|
|
|
@ -52,7 +52,7 @@ ru:
|
||||||
change_visibility_from_open: Сменить статус на "Приватный"
|
change_visibility_from_open: Сменить статус на "Приватный"
|
||||||
confirm_change_visibility: Вы уверены, что хотите сменить статус этой платформы?
|
confirm_change_visibility: Вы уверены, что хотите сменить статус этой платформы?
|
||||||
metadata: Метаданные для Software Center
|
metadata: Метаданные для Software Center
|
||||||
|
publish_lists: Чёрные/белые списки публикации проектов
|
||||||
flash:
|
flash:
|
||||||
platform:
|
platform:
|
||||||
released_status_can_not_be_changed: Released статус платформы не может быть изменен, если платформа уже выпущена
|
released_status_can_not_be_changed: Released статус платформы не может быть изменен, если платформа уже выпущена
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
class AddBlackListsToPlatforms < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :platforms, :project_list, :string, default: ''
|
||||||
|
add_column :platforms, :project_list_type, :integer, default: 0
|
||||||
|
add_column :platforms, :project_list_active, :boolean, default: false
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20190210140249) do
|
ActiveRecord::Schema.define(version: 20190210143409) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -218,6 +218,9 @@ ActiveRecord::Schema.define(version: 20190210140249) do
|
||||||
t.string "last_regenerated_log_sha1"
|
t.string "last_regenerated_log_sha1"
|
||||||
t.string "automatic_metadata_regeneration"
|
t.string "automatic_metadata_regeneration"
|
||||||
t.string "default_branch", :null=>false
|
t.string "default_branch", :null=>false
|
||||||
|
t.string "project_list", :default=>""
|
||||||
|
t.integer "project_list_type", :default=>0
|
||||||
|
t.boolean "project_list_active", :default=>false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "product_build_lists", force: :cascade do |t|
|
create_table "product_build_lists", force: :cascade do |t|
|
||||||
|
|
Loading…
Reference in New Issue