Merge pull request #849 from warpc/847-remove_old_code

[refs #847] Remove old core code
This commit is contained in:
Vladimir Sharshov 2013-01-25 03:31:52 -08:00
commit f380cd8399
30 changed files with 88 additions and 619 deletions

View File

@ -1,18 +1,15 @@
# -*- encoding : utf-8 -*-
class Projects::BuildListsController < Projects::BaseController
CALLBACK_ACTIONS = [:publish_build, :status_build, :pre_build, :post_build, :circle_build, :new_bbdt]
NESTED_ACTIONS = [:search, :index, :new, :create]
before_filter :authenticate_user!, :except => CALLBACK_ACTIONS
before_filter :authenticate_build_service!, :only => CALLBACK_ACTIONS
before_filter :authenticate_user!
skip_before_filter :authenticate_user!, :only => [:show, :index, :search, :log] if APP_CONFIG['anonymous_access']
before_filter :find_build_list, :only => [:show, :publish, :cancel, :update, :log]
before_filter :find_build_list_by_bs, :only => [:publish_build, :status_build, :pre_build, :post_build, :circle_build]
load_and_authorize_resource :project, :only => NESTED_ACTIONS
load_and_authorize_resource :build_list, :through => :project, :only => NESTED_ACTIONS, :shallow => true
load_and_authorize_resource :except => CALLBACK_ACTIONS.concat(NESTED_ACTIONS)
load_and_authorize_resource :except => NESTED_ACTIONS
def search
new_params = {:filter => {}}
@ -93,13 +90,11 @@ class Projects::BuildListsController < Projects::BaseController
end
def cancel
if @build_list.cancel
notice = @build_list.new_core? ?
t('layout.build_lists.will_be_canceled') :
t('layout.build_lists.cancel_success')
else
notice = t('layout.build_lists.cancel_fail')
end
notice = if @build_list.cancel
t('layout.build_lists.will_be_canceled')
else
t('layout.build_lists.cancel_fail')
end
redirect_to :back, :notice => notice
end
@ -110,87 +105,19 @@ class Projects::BuildListsController < Projects::BaseController
}
end
def publish_build
if params[:status].to_i == 0 # ok
@build_list.published
else
@build_list.fail_publish
end
render :nothing => true, :status => 200
end
def status_build
@item = @build_list.items.find_by_name!(params[:package_name])
@item.status = params[:status]
@item.save
@build_list.container_path = params[:container_path]
@build_list.save
@build_list.set_packages(ActiveSupport::JSON.decode(params[:pkg_info]), params[:package_name]) if params[:status].to_i == BuildServer::SUCCESS and params[:pkg_info].present?
render :nothing => true, :status => 200
end
def pre_build
@build_list.start_build
render :nothing => true, :status => 200
end
def post_build
params[:status].to_i == BuildServer::SUCCESS ? @build_list.build_success : @build_list.build_error
@build_list.container_path = params[:container_path]
@build_list.save
render :nothing => true, :status => 200
@build_list.publish if @build_list.auto_publish # && @build_list.can_publish? # later with resque
end
def circle_build
@build_list.is_circle = true
@build_list.container_path = params[:container_path]
@build_list.save
render :nothing => true, :status => 200
end
def new_bbdt
@build_list = BuildList.find_by_id!(params[:web_id])
@build_list.name = params[:name]
@build_list.additional_repos = ActiveSupport::JSON.decode(params[:additional_repos])
@build_list.set_items(ActiveSupport::JSON.decode(params[:items]))
@build_list.is_circle = (params[:is_circular].to_i != 0)
@build_list.bs_id = params[:id]
@build_list.save
render :nothing => true, :status => 200
end
protected
def find_build_list
@build_list = BuildList.find(params[:id])
end
def find_build_list_by_bs
@build_list = BuildList.find_by_bs_id!(params[:id])
end
def authenticate_build_service!
if request.remote_ip != APP_CONFIG['build_server_ip']
render :nothing => true, :status => 403
end
end
def publish
@build_list.update_type = params[:build_list][:update_type] if params[:build_list][:update_type].present?
if params[:attach_advisory].present? and params[:attach_advisory] != 'no' and !@build_list.advisory
unless @build_list.update_type.in? BuildList::RELEASE_UPDATE_TYPES
redirect_to :back, :notice => t('lyout.build_lists.publish_fail') and return
redirect_to :back, :notice => t('layout.build_lists.publish_fail') and return
end
if params[:attach_advisory] == 'new'
@ -222,5 +149,4 @@ class Projects::BuildListsController < Projects::BaseController
redirect_to :back, :notice => t('layout.build_lists.reject_publish_fail')
end
end
end

View File

@ -1,11 +1,10 @@
# -*- encoding : utf-8 -*-
module BuildListsHelper
def build_list_status_color(status)
if [BuildList::BUILD_PUBLISHED, BuildServer::SUCCESS].include? status
if [BuildList::BUILD_PUBLISHED, BuildList::SUCCESS].include? status
return 'success'
end
if [BuildServer::BUILD_ERROR, BuildServer::PLATFORM_NOT_FOUND,
BuildServer::PROJECT_NOT_FOUND, BuildServer::PROJECT_VERSION_NOT_FOUND,
if [BuildList::BUILD_ERROR, BuildList::PROJECT_VERSION_NOT_FOUND,
BuildList::FAILED_PUBLISH, BuildList::REJECTED_PUBLISH].include? status
return 'error'
end
@ -21,10 +20,10 @@ module BuildListsHelper
end
def build_list_item_status_color(status)
if BuildServer::SUCCESS == status
if BuildList::SUCCESS == status
return 'success'
end
if [BuildServer::DEPENDENCIES_ERROR, BuildServer::BUILD_ERROR, BuildList::Item::GIT_ERROR].include? status
if [BuildList::DEPENDENCIES_ERROR, BuildList::BUILD_ERROR, BuildList::Item::GIT_ERROR].include? status
return 'error'
end

View File

@ -130,8 +130,8 @@ class ActivityFeedObserver < ActiveRecord::Observer
end
when 'BuildList'
if [BuildList::BUILD_PUBLISHED, BuildServer::SUCCESS, BuildServer::BUILD_ERROR, BuildServer::PLATFORM_NOT_FOUND,
BuildServer::PROJECT_NOT_FOUND, BuildServer::PROJECT_VERSION_NOT_FOUND, BuildList::FAILED_PUBLISH].include? record.status or
if [BuildList::BUILD_PUBLISHED, BuildList::SUCCESS, BuildList::BUILD_ERROR,
BuildList::PROJECT_VERSION_NOT_FOUND, BuildList::FAILED_PUBLISH].include? record.status or
(record.status == BuildList::BUILD_PENDING && record.bs_id_changed?)
record.project.admins.each do |recipient|
ActivityFeed.create(

View File

@ -39,7 +39,6 @@ class BuildList < ActiveRecord::Base
errors.add(:save_to_repository, I18n.t('flash.build_list.wrong_include_repos')) unless build_for_platform.repository_ids.include? ir.to_i
}
}
validate lambda {
errors.add(:save_to_repository, I18n.t('flash.build_list.wrong_project')) unless save_to_repository.projects.exists?(project_id)
}
@ -50,15 +49,22 @@ class BuildList < ActiveRecord::Base
LIVE_TIME = 4.week # for unpublished
MAX_LIVE_TIME = 3.month # for published
# The kernel does not send these statuses directly
BUILD_CANCELED = 5000
WAITING_FOR_RESPONSE = 4000
BUILD_PENDING = 2000
BUILD_PUBLISHED = 6000
BUILD_PUBLISH = 7000
FAILED_PUBLISH = 8000
REJECTED_PUBLISH = 9000
BUILD_CANCELING = 10000
SUCCESS = 0
ERROR = 1
PROJECT_VERSION_NOT_FOUND = 4
PROJECT_SOURCE_ERROR = 6
DEPENDENCIES_ERROR = 555
BUILD_ERROR = 666
BUILD_STARTED = 3000
BUILD_CANCELED = 5000
WAITING_FOR_RESPONSE = 4000
BUILD_PENDING = 2000
BUILD_PUBLISHED = 6000
BUILD_PUBLISH = 7000
FAILED_PUBLISH = 8000
REJECTED_PUBLISH = 9000
BUILD_CANCELING = 10000
STATUSES = [ WAITING_FOR_RESPONSE,
BUILD_CANCELED,
@ -68,15 +74,10 @@ class BuildList < ActiveRecord::Base
BUILD_PUBLISH,
FAILED_PUBLISH,
REJECTED_PUBLISH,
BuildServer::SUCCESS,
BuildServer::BUILD_STARTED,
BuildServer::BUILD_ERROR,
BuildServer::PLATFORM_NOT_FOUND,
BuildServer::PLATFORM_PENDING,
BuildServer::PROJECT_NOT_FOUND,
BuildServer::PROJECT_VERSION_NOT_FOUND,
# BuildServer::BINARY_TEST_FAILED,
# BuildServer::DEPENDENCY_TEST_FAILED
SUCCESS,
BUILD_STARTED,
BUILD_ERROR,
PROJECT_VERSION_NOT_FOUND
]
HUMAN_STATUSES = { WAITING_FOR_RESPONSE => :waiting_for_response,
@ -87,15 +88,10 @@ class BuildList < ActiveRecord::Base
BUILD_PUBLISH => :build_publish,
FAILED_PUBLISH => :failed_publish,
REJECTED_PUBLISH => :rejected_publish,
BuildServer::BUILD_ERROR => :build_error,
BuildServer::BUILD_STARTED => :build_started,
BuildServer::SUCCESS => :success,
BuildServer::PLATFORM_NOT_FOUND => :platform_not_found,
BuildServer::PLATFORM_PENDING => :platform_pending,
BuildServer::PROJECT_NOT_FOUND => :project_not_found,
BuildServer::PROJECT_VERSION_NOT_FOUND => :project_version_not_found,
# BuildServer::DEPENDENCY_TEST_FAILED => :dependency_test_failed,
# BuildServer::BINARY_TEST_FAILED => :binary_test_failed
BUILD_ERROR => :build_error,
BUILD_STARTED => :build_started,
SUCCESS => :success,
PROJECT_VERSION_NOT_FOUND => :project_version_not_found,
}
scope :recent, order("#{table_name}.updated_at DESC")
@ -128,28 +124,26 @@ class BuildList < ActiveRecord::Base
serialize :results, Array
after_commit :place_build
after_destroy :delete_container
state_machine :status, :initial => :waiting_for_response do
# WTF? around_transition -> infinite loop
before_transition do |build_list, transition|
status = BuildList::HUMAN_STATUSES[build_list.status]
status = HUMAN_STATUSES[build_list.status]
if build_list.mass_build && MassBuild::COUNT_STATUSES.include?(status)
MassBuild.decrement_counter "#{status.to_s}_count", build_list.mass_build_id
end
end
after_transition do |build_list, transition|
status = BuildList::HUMAN_STATUSES[build_list.status]
status = HUMAN_STATUSES[build_list.status]
if build_list.mass_build && MassBuild::COUNT_STATUSES.include?(status)
MassBuild.increment_counter "#{status.to_s}_count", build_list.mass_build_id
end
end
after_transition :on => :published, :do => [:set_version_and_tag, :actualize_packages]
after_transition :on => :cancel, :do => [:cancel_job],
:if => lambda { |build_list| build_list.new_core? }
after_transition :on => :cancel, :do => :cancel_job
after_transition :on => [:published, :fail_publish, :build_error], :do => :notify_users
after_transition :on => :build_success, :do => :notify_users,
@ -157,15 +151,9 @@ class BuildList < ActiveRecord::Base
event :place_build do
transition :waiting_for_response => :build_pending, :if => lambda { |build_list|
build_list.add_to_queue == BuildServer::SUCCESS
build_list.add_to_queue == BuildList::SUCCESS
}
[
'BuildList::BUILD_PENDING',
'BuildServer::PLATFORM_PENDING',
'BuildServer::PLATFORM_NOT_FOUND',
'BuildServer::PROJECT_NOT_FOUND',
'BuildServer::PROJECT_VERSION_NOT_FOUND'
].each do |code|
%w[BUILD_PENDING PROJECT_VERSION_NOT_FOUND].each do |code|
transition :waiting_for_response => code.demodulize.downcase.to_sym, :if => lambda { |build_list|
build_list.add_to_queue == code.constantize
}
@ -173,28 +161,17 @@ class BuildList < ActiveRecord::Base
end
event :start_build do
transition [ :build_pending,
:platform_pending,
:platform_not_found,
:project_not_found,
:project_version_not_found ] => :build_started
transition [ :build_pending, :project_version_not_found ] => :build_started
end
event :cancel do
transition [:build_pending, :platform_pending] => :build_canceled, :if => lambda { |build_list|
!build_list.new_core? && build_list.can_cancel? && BuildServer.delete_build_list(build_list.bs_id) == BuildServer::SUCCESS
}
transition [:build_pending, :build_started] => :build_canceling, :if => lambda { |build_list|
build_list.new_core?
}
transition [:build_pending, :build_started] => :build_canceling
end
# :build_canceling => :build_canceled - canceling from UI
# :build_started => :build_canceled - canceling from worker by time-out (time_living has been expired)
event :build_canceled do
transition [:build_canceling, :build_started] => :build_canceled, :if => lambda { |build_list|
build_list.new_core?
}
transition [:build_canceling, :build_started] => :build_canceled
end
event :published do
@ -206,12 +183,7 @@ class BuildList < ActiveRecord::Base
end
event :publish do
transition [:success, :failed_publish] => :build_publish, :if => lambda { |build_list|
!build_list.new_core? && BuildServer.publish_container(build_list.bs_id) == BuildServer::SUCCESS
}
transition [:success, :failed_publish] => :build_publish, :if => lambda { |build_list|
build_list.new_core?
}
transition [:success, :failed_publish] => :build_publish
transition [:success, :failed_publish] => :failed_publish
end
@ -253,15 +225,11 @@ class BuildList < ActiveRecord::Base
#TODO: Share this checking on product owner.
def can_cancel?
if new_core?
build_started? || build_pending?
else
[BUILD_PENDING, BuildServer::PLATFORM_PENDING].include?(status) && bs_id
end
build_started? || build_pending?
end
def can_publish?
[BuildServer::SUCCESS, FAILED_PUBLISH].include? status
[SUCCESS, FAILED_PUBLISH].include? status
end
def can_reject_publish?
@ -269,41 +237,12 @@ class BuildList < ActiveRecord::Base
end
def add_to_queue
if new_core?
# TODO: Investigate: why 2 tasks will be created without checking @state
unless @status
add_job_to_abf_worker_queue
update_column(:bs_id, id)
end
@status ||= BUILD_PENDING
else
# XML-RPC params:
# - project_name
# - project_version
# - plname
# - arch
# - bplname
# - update_type
# - build_requires
# - id_web
# - include_repos
# - priority
# - git_project_address
@status ||= BuildServer.add_build_list(
project.name,
project_version,
save_to_platform.name,
arch.name,
(save_to_platform_id == build_for_platform_id ? '' : build_for_platform.name),
update_type,
false,
id,
include_repos,
priority,
project.git_project_address(user)
)
# TODO: Investigate: why 2 tasks will be created without checking @state
unless @status
add_job_to_abf_worker_queue
update_column(:bs_id, id)
end
@status
@status ||= BUILD_PENDING
end
def self.human_status(status)
@ -315,7 +254,7 @@ class BuildList < ActiveRecord::Base
end
def self.status_by_human(human)
BuildList::HUMAN_STATUSES.key human
HUMAN_STATUSES.key human
end
def set_items(items_hash)
@ -357,8 +296,8 @@ class BuildList < ActiveRecord::Base
end
def in_work?
status == BuildServer::BUILD_STARTED
#[WAITING_FOR_RESPONSE, BuildServer::BUILD_PENDING, BuildServer::BUILD_STARTED].include?(status)
status == BUILD_STARTED
#[WAITING_FOR_RESPONSE, BUILD_PENDING, BUILD_STARTED].include?(status)
end
def associate_and_create_advisory(params)
@ -459,14 +398,6 @@ class BuildList < ActiveRecord::Base
end
end # notify_users
def delete_container
if can_cancel?
BuildServer.delete_build_list bs_id
else
BuildServer.delete_container bs_id if bs_id # prevent error if bs_id does not set
end
end
def build_package(pkg_hash, package_type, prj)
packages.create(pkg_hash) do |p|
p.project = prj
@ -475,5 +406,4 @@ class BuildList < ActiveRecord::Base
yield p
end
end
end

View File

@ -7,14 +7,14 @@ class BuildList::Item < ActiveRecord::Base
GIT_ERROR = 5
STATUSES = [BuildServer::SUCCESS, BuildServer::DEPENDENCIES_ERROR, BuildServer::BUILD_ERROR, BuildServer::BUILD_STARTED, GIT_ERROR, BuildList::BUILD_CANCELED]
STATUSES = [BuildList::SUCCESS, BuildList::DEPENDENCIES_ERROR, BuildList::BUILD_ERROR, BuildList::BUILD_STARTED, GIT_ERROR, BuildList::BUILD_CANCELED]
HUMAN_STATUSES = {
nil => :unknown,
GIT_ERROR => :git_error,
BuildServer::DEPENDENCIES_ERROR => :dependencies_error,
BuildServer::SUCCESS => :success,
BuildServer::BUILD_STARTED => :build_started,
BuildServer::BUILD_ERROR => :build_error,
BuildList::DEPENDENCIES_ERROR => :dependencies_error,
BuildList::SUCCESS => :success,
BuildList::BUILD_STARTED => :build_started,
BuildList::BUILD_ERROR => :build_error,
BuildList::BUILD_CANCELED => :build_canceled
}

View File

@ -3,15 +3,15 @@ class BuildListObserver < ActiveRecord::Observer
def before_update(record)
if record.status_changed?
record.started_at = Time.now if record.status == BuildServer::BUILD_STARTED
if [BuildServer::BUILD_ERROR,
BuildServer::SUCCESS,
record.started_at = Time.now if record.status == BuildList::BUILD_STARTED
if [BuildList::BUILD_ERROR,
BuildList::SUCCESS,
BuildList::BUILD_CANCELING,
BuildList::BUILD_CANCELED].include? record.status
# stores time interval beetwin build start and finish in seconds
record.duration = record.current_duration if record.started_at
if record.status == BuildServer::SUCCESS
if record.status == BuildList::SUCCESS
# Update project average build time
build_count = record.project.build_count
new_av_time = ( record.project.average_build_time * build_count + record.duration ) / ( build_count + 1 )

View File

@ -54,7 +54,7 @@ class MassBuild < ActiveRecord::Base
def generate_failed_builds_list
report = ""
BuildList.where(:status => BuildServer::BUILD_ERROR, :mass_build_id => self.id).each do |build_list|
BuildList.where(:status => BuildList::BUILD_ERROR, :mass_build_id => self.id).each do |build_list|
report << "ID: #{build_list.id}; "
report << "PROJECT_NAME: #{build_list.project.name}\n"
end

View File

@ -1,5 +1,4 @@
# -*- encoding : utf-8 -*-
#require 'lib/build_server.rb'
class Platform < ActiveRecord::Base
VISIBILITIES = ['open', 'hidden']

View File

@ -64,7 +64,6 @@ class ProductBuildList < ActiveRecord::Base
after_create :add_job_to_abf_worker_queue
before_destroy :can_destroy?
after_destroy :xml_delete_iso_container
state_machine :status, :initial => :build_pending do
@ -75,7 +74,7 @@ class ProductBuildList < ActiveRecord::Base
event :cancel do
transition [:build_pending, :build_started] => :build_canceling
end
after_transition :on => :cancel, :do => [:cancel_job]
after_transition :on => :cancel, :do => :cancel_job
# :build_canceling => :build_canceled - canceling from UI
# :build_started => :build_canceled - canceling from worker by time-out (time_living has been expired)
@ -162,18 +161,4 @@ class ProductBuildList < ActiveRecord::Base
:user => {:uname => user.try(:uname), :email => user.try(:email)}
}
end
def xml_delete_iso_container
# TODO: write new worker for delete
if project
raise "Failed to destroy product_build_list #{id} inside platform #{product.platform.name} (Not Implemented)."
else
result = ProductBuilder.delete_iso_container self
if result == ProductBuilder::SUCCESS
return true
else
raise "Failed to destroy product_build_list #{id} inside platform #{product.platform.name} with code #{result}."
end
end
end
end

View File

@ -175,24 +175,6 @@ class Project < ActiveRecord::Base
"%02d:%02d" % [average_build_time / 3600, average_build_time % 3600 / 60]
end
def xml_rpc_create(repository)
result = BuildServer.create_project name, repository.platform.name, repository.name, path
if result == BuildServer::SUCCESS
return true
else
raise "Failed to create project #{name} (repo #{repository.name}) inside platform #{repository.platform.name} in path #{path} with code #{result}."
end
end
def xml_rpc_destroy(repository)
result = BuildServer.delete_project name, repository.platform.name
if result == BuildServer::SUCCESS
return true
else
raise "Failed to delete repository #{name} (repo main) inside platform #{owner.uname}_personal with code #{result}."
end
end
def destroy_project_from_repository(repository)
AbfWorker::BuildListsPublishTaskManager.destroy_project_from_repository self, repository
end

View File

@ -22,7 +22,7 @@
%h3= t("layout.activity_feed.my_builds_by_day")
%table{:cellpadding => "0", :cellspacing => "0"}
%tbody
- ['BuildList::BUILD_PUBLISHED', 'BuildServer::SUCCESS', 'BuildServer::BUILD_STARTED', 'BuildList::BUILD_PENDING', 'BuildServer::BUILD_ERROR'].each do |state|
- ['BuildList::BUILD_PUBLISHED', 'BuildList::SUCCESS', 'BuildList::BUILD_STARTED', 'BuildList::BUILD_PENDING', 'BuildList::BUILD_ERROR'].each do |state|
%tr
%td.first
= link_to t("layout.build_lists.statuses.#{state.demodulize.downcase}"), build_lists_path(:filter => {:status => state.constantize, :'updated_at_start(1i)' => midnight.year, :'updated_at_start(2i)' => midnight.month, :'updated_at_start(3i)' => midnight.day})

View File

@ -10,7 +10,7 @@
- ['pending', nil]
- when BuildList::BUILD_PUBLISHED
- ['published', nil]
- when BuildServer::SUCCESS
- when BuildList::SUCCESS
- ['success', nil]
- else ['failed', t("layout.build_lists.statuses.#{BuildList::HUMAN_STATUSES[status]}")]
= raw t("notifications.bodies.build_status.#{message}", :error => error)

View File

@ -40,13 +40,6 @@ set :workers_count, 4
require './lib/recipes/resque'
namespace :deploy do
task :stub_xml_rpc do
path = File.join(release_path, 'config', 'environment.rb')
code = %Q{\nrequire 'stub_xml_rpc'\n}
puts "Stub XML RPC"
run %Q{echo "#{code}" >> #{path}}
end
task :symlink_all, :roles => :app do
run "mkdir -p #{fetch :shared_path}/config"

View File

@ -41,5 +41,3 @@ Rosa::Application.configure do
# Log the query plan for queries taking more than this (works with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5
end
require 'stub_xml_rpc'

View File

@ -65,5 +65,3 @@ Rosa::Application.configure do
# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
config.assets.precompile += %w(login.css login.js reg_session.css tour.css tour.js gollum/editor/langs/*.js)
end
# require 'stub_xml_rpc'

View File

@ -42,5 +42,3 @@ Rosa::Application.configure do
# Allow pass debug_assets=true as a query parameter to load pages with unpackaged assets
config.assets.allow_debugging = true
end
require 'stub_xml_rpc' # TODO stub XML calls through stubbers

View File

@ -116,14 +116,10 @@ en:
waiting_for_response: Waiting for response
build_pending: Build pending
build_canceling: Build is canceling
dependency_test_failed: Dependency test failed
binary_test_failed: Binary test failed
build_canceled: Build canceled
success: Build complete
build_started: Build started
platform_not_found: Platform not found
platform_pending: Platform pending
project_not_found: Project not found
project_version_not_found: Project version not found
log:

View File

@ -112,15 +112,11 @@ ru:
dependencies_fail: зависимости не найдены
waiting_for_response: ожидает ответа
build_pending: ожидает сборку
dependency_test_failed: тестирование зависимостей не пройдено
binary_test_failed: тестирование бинарной совместимости не пройдено
build_canceled: сборка отменена
build_canceling: сборка отменяется
success: собран
build_started: собирается
platform_not_found: платформа не найдена
platform_pending: платформа в процессе создания
project_not_found: проект не найден
project_version_not_found: версия не найдена
log:

View File

@ -11,7 +11,6 @@ en:
'devise/sessions_controller': 'User Authentication'
'devise/passwords_controller': 'Password recovery'
'users/omniauth_callbacks_controller': 'External users authentication'
rpc_controller: 'XML RPC'
private_users_controller: 'access to private repositories'
personal_repositories_controller: 'Personal repositories management'
actions:

View File

@ -11,7 +11,6 @@ ru:
'devise/sessions_controller': 'Аутентификация пользователей'
'devise/passwords_controller': 'Восстановление пароля'
'users/omniauth_callbacks_controller': 'Внешняя аутентификация пользователей'
rpc_controller: 'XML RPC'
private_users_controller: 'Доступ к приватным репозиториям'
personal_repositories_controller: 'Управление персональными репозиториями'
actions:

View File

@ -207,14 +207,6 @@ Rosa::Application.routes.draw do
end
scope :module => 'projects' do
# Core callbacks
match 'build_lists/publish_build', :to => "build_lists#publish_build"
match 'build_lists/status_build', :to => "build_lists#status_build"
match 'build_lists/post_build', :to => "build_lists#post_build"
match 'build_lists/pre_build', :to => "build_lists#pre_build"
match 'build_lists/circle_build', :to => "build_lists#circle_build"
match 'build_lists/new_bbdt', :to => "build_lists#new_bbdt"
resources :build_lists, :only => [:index, :show, :update] do
member do
put :cancel

View File

@ -12,11 +12,11 @@ module AbfWorker
case status
when COMPLETED
bl.build_success
item.update_attributes({:status => BuildServer::SUCCESS})
item.update_attributes({:status => BuildList::SUCCESS})
bl.now_publish if bl.auto_publish?
when FAILED
bl.build_error
item.update_attributes({:status => BuildServer::BUILD_ERROR})
item.update_attributes({:status => BuildList::BUILD_ERROR})
when STARTED
bl.start_build
when CANCELED
@ -32,7 +32,7 @@ module AbfWorker
bl.items.first || bl.items.create({
:version => bl.commit_hash,
:name => bl.project.name,
:status => BuildServer::BUILD_STARTED,
:status => BuildList::BUILD_STARTED,
:level => 0
})
end

View File

@ -1,115 +0,0 @@
# -*- encoding : utf-8 -*-
require 'xmlrpc/client'
class BuildServer
SUCCESS = 0
ERROR = 1
PLATFORM_NOT_FOUND = 1
PLATFORM_PENDING = 2
PROJECT_NOT_FOUND = 3
PROJECT_VERSION_NOT_FOUND = 4
PROJECT_SOURCE_ERROR = 6
DEPENDENCY_TEST_FAILED = 21
BINARY_TEST_FAILED = 22
DEPENDENCIES_ERROR = 555
BUILD_ERROR = 666
BUILD_STARTED = 3000
def self.client
@@client ||= XMLRPC::Client.new3('host' => APP_CONFIG['build_server_ip'], 'port' => APP_CONFIG['build_server_port'], 'path' => APP_CONFIG['build_server_path'])
end
def self.add_platform name, platforms_root_folder, distrib_type, repos = {:src => [], :rpm => []}
self.client.call('add_platform', name, platforms_root_folder, repos, distrib_type)
end
def self.delete_platform name
self.client.call('delete_platform', name)
rescue Timeout::Error => e # TODO remove this when core will be ready
0
end
def self.clone_platform new_name, old_name, new_root_folder
self.client.call('clone_platform', new_name, old_name, new_root_folder)
rescue Timeout::Error => e # TODO remove this when core will be ready
0
end
def self.create_repo name, platform_name
self.client.call('create_repository', name, platform_name)
end
def self.delete_repo name, platform_name
self.client.call('delete_repository', name, platform_name)
rescue Timeout::Error => e # TODO remove this when core will be ready
0
end
def self.clone_repo new_name, old_name, new_platform_name
self.client.call('clone_repo', new_name, old_name, new_platform_name)
rescue Timeout::Error => e # TODO remove this when core will be ready
0
end
def self.publish_container container_id
self.client.call('publish_container', container_id)
end
def self.delete_container container_id
self.client.call('delete_container', container_id)
end
def self.create_project name, platform_name, repo_name, git_project_path
self.client.call('create_project', name, platform_name, repo_name, git_project_path)
end
def self.delete_project name, platform_name
self.client.call('delete_project', name, platform_name)
end
def self.add_to_repo name, repo_name
self.client.call('add_to_repo', name, repo_name)
end
def self.add_build_list project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web, include_repos, priority, git_project_path
include_repos_hash = {}.tap do |h|
include_repos.each do |r|
repo = Repository.find r
h[repo.name] = repo.platform.public_downloads_url(nil, arch, repo.name)
end
end
# raise include_repos_hash.inspect
self.client.call('add_build_list', project_name, project_version, plname, arch, bplname, update_type, build_requires, id_web, include_repos_hash, priority, git_project_path)
end
def self.delete_build_list idlist
self.client.call('delete_build_list', idlist)
end
def self.get_status
self.client.call('get_status')
end
def self.freeze platform_name
self.client.call('freeze_platform', platform_name)
end
# Repository key pair calls
def self.import_gpg_key_pair key_pub, key_secret
self.client.call('import_gpg_key_pair', key_pub, key_secret)
end
def self.set_repository_key platform, repository, key_id
self.client.call('set_repository_key', platform, repository, key_id)
end
def self.rm_repository_key platform, repository
self.client.call('rm_repository_key', platform, repository)
end
end

View File

@ -1,21 +0,0 @@
# -*- encoding : utf-8 -*-
require 'xmlrpc/client'
class ProductBuilder
SUCCESS = 0
ERROR = 1
def self.client(distrib_type)
@@client ||= XMLRPC::Client.new3(:host => APP_CONFIG['product_builder_ip'][distrib_type], :port => APP_CONFIG['product_builder_port'], :path => APP_CONFIG['product_builder_path'])
end
def self.create_product pbl # product_build_list
self.client(pbl.product.platform.distrib_type).
call('create_product', pbl.id.to_s, pbl.product.platform.name, pbl.product.ks, pbl.product.menu, pbl.product.build_script,
pbl.product.counter, [], pbl.product.tar.exists? ? "#{pbl.base_url}#{pbl.product.tar.url}" : '')
end
def self.delete_iso_container pbl # product_build_list
self.client(pbl.product.platform.distrib_type).call('delete_iso_container', pbl.product.platform.name, pbl.id.to_s)
end
end

View File

@ -1,14 +0,0 @@
# -*- encoding : utf-8 -*-
require 'xmlrpc/client'
module XMLRPC
class Client
def call(*args)
# raise args.inspect
case
when args.first == 'get_status'
{'client_count' => 1, 'count_new_task' => 2, 'count_build_task' => 3}
else; 0
end
end
end
end

View File

@ -23,7 +23,7 @@ namespace :new_core do
platform_repository_folder = "#{bl.save_to_platform.path}/repository"
BuildList.where(:mass_build_id => 73).
where(:status => [
BuildServer::SUCCESS,
BuildList::SUCCESS,
BuildList::FAILED_PUBLISH
]).
order(:id).
@ -61,7 +61,7 @@ namespace :new_core do
token = User.find_by_uname('rosa_system').authentication_token
BuildList.where(:new_core => true).
where(:status => [
BuildServer::SUCCESS,
BuildList::SUCCESS,
BuildList::FAILED_PUBLISH,
BuildList::BUILD_PUBLISHED,
BuildList::BUILD_PUBLISH

View File

@ -124,21 +124,21 @@ describe Api::V1::BuildListsController do
it "should cancel build list" do
@build_list.update_column(:status, BuildList::BUILD_PENDING)
do_cancel
@build_list.reload.status.should == BuildList::BUILD_CANCELED
@build_list.reload.status.should == BuildList::BUILD_CANCELING
end
end
context "if it has another status" do
it "should return correct json error message" do
@build_list.update_column(:status, BuildServer::PROJECT_NOT_FOUND)
@build_list.update_column(:status, BuildList::PROJECT_VERSION_NOT_FOUND)
do_cancel
response.body.should == {:is_canceled => false, :url => api_v1_build_list_path(@build_list, :format => :json), :message => incorrect_action_message}.to_json
end
it "should not cancel build list" do
@build_list.update_column(:status, BuildServer::PROJECT_NOT_FOUND)
@build_list.update_column(:status, BuildList::PROJECT_VERSION_NOT_FOUND)
do_cancel
@build_list.reload.status.should == BuildServer::PROJECT_NOT_FOUND
@build_list.reload.status.should == BuildList::PROJECT_VERSION_NOT_FOUND
end
end
end
@ -183,7 +183,7 @@ describe Api::V1::BuildListsController do
context "if it has another status" do
before(:each) do
@build_list.update_column(:status, BuildServer::PROJECT_NOT_FOUND)
@build_list.update_column(:status, BuildList::PROJECT_VERSION_NOT_FOUND)
do_publish
end
@ -192,7 +192,7 @@ describe Api::V1::BuildListsController do
end
it "should not cancel build list" do
@build_list.reload.status.should == BuildServer::PROJECT_NOT_FOUND
@build_list.reload.status.should == BuildList::PROJECT_VERSION_NOT_FOUND
end
end
end
@ -226,7 +226,7 @@ describe Api::V1::BuildListsController do
context 'if user is project owner' do
before(:each) do
http_login(@owner_user)
@build_list.update_column(:status, BuildServer::SUCCESS)
@build_list.update_column(:status, BuildList::SUCCESS)
@build_list.save_to_platform.update_column(:released, true)
do_reject_publish
end
@ -243,7 +243,7 @@ describe Api::V1::BuildListsController do
context "if it has another status" do
before(:each) do
@build_list.update_column(:status, BuildServer::PROJECT_NOT_FOUND)
@build_list.update_column(:status, BuildList::PROJECT_VERSION_NOT_FOUND)
do_reject_publish
end
@ -252,14 +252,14 @@ describe Api::V1::BuildListsController do
end
it "should not cancel build list" do
@build_list.reload.status.should == BuildServer::PROJECT_NOT_FOUND
@build_list.reload.status.should == BuildList::PROJECT_VERSION_NOT_FOUND
end
end
end
context 'if user is not project owner' do
before(:each) do
@build_list.update_column(:status, BuildServer::SUCCESS)
@build_list.update_column(:status, BuildList::SUCCESS)
@build_list.save_to_platform.update_column(:released, true)
do_reject_publish
end
@ -270,7 +270,7 @@ describe Api::V1::BuildListsController do
it "should not cancel build list" do
do_reject_publish
@build_list.reload.status.should == BuildServer::SUCCESS
@build_list.reload.status.should == BuildList::SUCCESS
end
end
end

View File

@ -321,176 +321,5 @@ describe Projects::BuildListsController do
end
end
context 'callbacks' do
let(:build_list) { FactoryGirl.create(:build_list_core) }
let(:build_list_package) { FactoryGirl.create(:build_list_package, :build_list_id => build_list.id, :platform_id => build_list.save_to_platform_id, :project_id => build_list.project_id, :version => "4.7.5.3", :release => 1) }
before(:each) do
mock(controller).authenticate_build_service! {true}
end
describe 'publish_build' do
before {
build_list.update_column(:commit_hash, build_list.project.repo.commits('master').last.id)
build_list.update_column(:status, BuildList::BUILD_PUBLISH)
build_list_package
}
def do_get(status)
get :publish_build, :id => build_list.bs_id, :status => status, :version => '4.7.5.3', :release => '1'
build_list.reload
end
it(:passes) {
build_list.update_column(:status, BuildServer::BUILD_STARTED)
do_get(BuildServer::SUCCESS)
response.should be_ok
}
it 'should create correct git tag for correct commit' do
do_get(BuildServer::SUCCESS)
build_list.project.repo.tags.last.name.should == build_list.package_version
build_list.project.repo.commits(build_list.package_version).last.id.should == build_list.commit_hash
end
it(:passes) { lambda{ do_get(BuildServer::SUCCESS) }.should change(build_list, :status).to(BuildList::BUILD_PUBLISHED) }
it(:passes) { lambda{ do_get(BuildServer::SUCCESS) }.should change(build_list, :package_version).to("#{ build_list_package.platform.name }-4.7.5.3-1") }
it { lambda{ do_get(BuildServer::ERROR) }.should change(build_list, :status).to(BuildList::FAILED_PUBLISH) }
it { lambda{ do_get(BuildServer::ERROR) }.should_not change(build_list, :package_version) }
it { lambda{ do_get(BuildServer::ERROR) }.should change(build_list, :updated_at) }
end
describe 'status_build' do
before do
@item = build_list.items.create(:name => build_list.project.name, :version => build_list.project_version, :level => 0)
repo = build_list.save_to_platform.repositories.first
@project2 = FactoryGirl.create(:project)
repo.projects << @project2
end
def do_get
get :status_build, :id => build_list.bs_id, :package_name => build_list.project.name, :status => BuildServer::SUCCESS, :container_path => '/path/to',
:pkg_info => ActiveSupport::JSON.encode({'srpm' => {'fullname' => 'srpm_filename.srpm',
'name' => build_list.project.name,
'version' => 'version1',
'release' => 'release1'},
'rpm' => [{'fullname' => 'filename1.rpm',
'name' => build_list.project.name,
'version' => 'version2',
'release' => 'release2'},
{'fullname' => 'filename2.rpm',
'name' => @project2.name,
'version' => 'version2',
'release' => 'release2'}]})
build_list.reload
@item.reload
end
it { do_get; response.should be_ok }
it { lambda{ do_get }.should change(@item, :status) }
it { lambda{ do_get }.should change(build_list, :container_path) }
it { lambda{ do_get }.should change(build_list, :updated_at) }
it('should create packages for build list') { lambda{ do_get }.should change(build_list.packages, :count).to(3) }
it 'should create correct packages for build list' do
do_get
package = build_list.packages.order('created_at ASC').first
package.fullname.should == 'srpm_filename.srpm'
package.name.should == build_list.project.name
package.version.should == 'version1'
package.release.should == 'release1'
package.package_type == 'source'
package.build_list.should == build_list
package.platform.should == build_list.save_to_platform
package.project.should == build_list.project
end
end
describe 'pre_build' do
before do
build_list.update_column :status, BuildList::BUILD_PENDING
end
def do_get
get :pre_build, :id => build_list.bs_id
build_list.reload
end
it { do_get; response.should be_ok }
it { lambda{ do_get }.should change(build_list, :status).to(BuildServer::BUILD_STARTED) }
it { lambda{ do_get }.should change(build_list, :updated_at) }
end
describe 'post_build' do
def do_get(status)
build_list.started_at = Time.now
build_list.save
get :post_build, :id => build_list.bs_id, :status => status, :container_path => '/path/to'
build_list.reload
end
it { do_get(BuildServer::SUCCESS); response.should be_ok }
it { lambda{ do_get(BuildServer::SUCCESS) }.should change(build_list, :container_path) }
it { lambda{ do_get(BuildServer::SUCCESS) }.should change(build_list, :updated_at) }
context 'with auto_publish' do
it(:passes) {
build_list.update_column(:started_at, (Time.now - 1.day))
build_list.update_column(:status, BuildServer::BUILD_STARTED)
build_list.reload
lambda{ do_get(BuildServer::SUCCESS) }.should change(build_list, :status).to(BuildList::BUILD_PUBLISH)
}
it(:passes) {
build_list.update_column(:started_at, (Time.now - 1.day))
build_list.update_column(:status, BuildServer::BUILD_STARTED)
lambda{ do_get(BuildServer::BUILD_ERROR) }.should change(build_list, :status).to(BuildServer::BUILD_ERROR)
}
end
context 'without auto_publish' do
before { build_list.update_column(:auto_publish, false) }
it(:passes) {
build_list.update_column(:started_at, (Time.now - 1.day))
build_list.update_column(:status, BuildServer::BUILD_STARTED)
lambda{ do_get(BuildServer::SUCCESS) }.should change(build_list, :status).to(BuildServer::SUCCESS)
}
it(:passes) {
build_list.update_column(:started_at, (Time.now - 1.day))
build_list.update_column(:status, BuildServer::BUILD_STARTED)
lambda{ do_get(BuildServer::BUILD_ERROR) }.should change(build_list, :status).to(BuildServer::BUILD_ERROR)
}
end
end
describe 'circle_build' do
def do_get
get :circle_build, :id => build_list.bs_id, :container_path => '/path/to'
build_list.reload
end
it { do_get; response.should be_ok }
it { lambda{ do_get }.should change(build_list, :is_circle).to(true) }
it { lambda{ do_get }.should change(build_list, :container_path) }
it { lambda{ do_get }.should change(build_list, :updated_at) }
end
describe 'new_bbdt' do
before { @items = build_list.items }
def do_get
get :new_bbdt, :id => 123, :web_id => build_list.id, :name => build_list.project.name, :is_circular => 1,
:additional_repos => ActiveSupport::JSON.encode([{:name => 'build_repos'}, {:name => 'main'}]),
:items => ActiveSupport::JSON.encode(0 => [{:name => build_list.project.name, :version => build_list.project_version}])
build_list.reload
@items.reload
end
it { do_get; response.should be_ok }
it { lambda{ do_get }.should change(build_list, :name).to(build_list.project.name) }
it { lambda{ do_get }.should change(build_list, :additional_repos) }
it { lambda{ do_get }.should change(@items, :first) }
it { lambda{ do_get }.should change(build_list, :is_circle).to(true) }
it { lambda{ do_get }.should change(build_list, :bs_id).to(123) }
it { lambda{ do_get }.should change(build_list, :updated_at) }
end
end
after(:all) {clean_projects_dir}
end

View File

@ -29,7 +29,7 @@ describe BuildList do
before(:all) { ActionMailer::Base.deliveries = [] }
before do
build_list.update_attributes({:commit_hash => build_list.project.repo.commits('master').last.id,
:status => BuildServer::BUILD_STARTED}, :without_protection => true)
:status => BuildList::BUILD_STARTED}, :without_protection => true)
end
after { ActionMailer::Base.deliveries = [] }

View File

@ -52,7 +52,7 @@ APP_CONFIG['git_path'] = "#{Rails.root}/tmp/test_root"
def init_test_root
clear_test_root
%x(mkdir -p #{APP_CONFIG['root_path']}/{platforms,tmp})
%x(bash -c 'mkdir -p #{APP_CONFIG['root_path']}/{platforms,tmp}')
end
def clear_test_root