diff --git a/app/controllers/projects/build_lists_controller.rb b/app/controllers/projects/build_lists_controller.rb index 0da551cb9..d10efc2b5 100644 --- a/app/controllers/projects/build_lists_controller.rb +++ b/app/controllers/projects/build_lists_controller.rb @@ -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 diff --git a/app/helpers/build_lists_helper.rb b/app/helpers/build_lists_helper.rb index b6d0237b7..44b48cdb1 100644 --- a/app/helpers/build_lists_helper.rb +++ b/app/helpers/build_lists_helper.rb @@ -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 diff --git a/app/models/activity_feed_observer.rb b/app/models/activity_feed_observer.rb index 562251f57..881e16773 100644 --- a/app/models/activity_feed_observer.rb +++ b/app/models/activity_feed_observer.rb @@ -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( diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 7658e1778..80eac059c 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -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 diff --git a/app/models/build_list/item.rb b/app/models/build_list/item.rb index 540fa5a80..470fbf491 100644 --- a/app/models/build_list/item.rb +++ b/app/models/build_list/item.rb @@ -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 } diff --git a/app/models/build_list_observer.rb b/app/models/build_list_observer.rb index 251fcf301..6c2ddb8c8 100644 --- a/app/models/build_list_observer.rb +++ b/app/models/build_list_observer.rb @@ -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 ) diff --git a/app/models/mass_build.rb b/app/models/mass_build.rb index cf2bc0f95..7feb00fb9 100644 --- a/app/models/mass_build.rb +++ b/app/models/mass_build.rb @@ -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 diff --git a/app/models/platform.rb b/app/models/platform.rb index 721b3cb3d..b050363ca 100644 --- a/app/models/platform.rb +++ b/app/models/platform.rb @@ -1,5 +1,4 @@ # -*- encoding : utf-8 -*- -#require 'lib/build_server.rb' class Platform < ActiveRecord::Base VISIBILITIES = ['open', 'hidden'] diff --git a/app/models/product_build_list.rb b/app/models/product_build_list.rb index 0d2248097..cef83edae 100644 --- a/app/models/product_build_list.rb +++ b/app/models/product_build_list.rb @@ -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 diff --git a/app/models/project.rb b/app/models/project.rb index 7e0cba855..404347b00 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -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 diff --git a/app/views/activity_feeds/_sidebar.html.haml b/app/views/activity_feeds/_sidebar.html.haml index 6115f796f..013547142 100644 --- a/app/views/activity_feeds/_sidebar.html.haml +++ b/app/views/activity_feeds/_sidebar.html.haml @@ -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}) diff --git a/app/views/activity_feeds/partials/_build_list_notification.haml b/app/views/activity_feeds/partials/_build_list_notification.haml index c7cb4ce97..1870a63d6 100644 --- a/app/views/activity_feeds/partials/_build_list_notification.haml +++ b/app/views/activity_feeds/partials/_build_list_notification.haml @@ -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) diff --git a/config/deploy.rb b/config/deploy.rb index c2581e0a9..714deea2d 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -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" diff --git a/config/environments/development.rb b/config/environments/development.rb index 7b9d9f71a..98a9d21f5 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -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' \ No newline at end of file diff --git a/config/environments/production.rb b/config/environments/production.rb index 2ab9938fd..f3d908503 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -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' diff --git a/config/environments/test.rb b/config/environments/test.rb index fac0c5e29..42ea6abe2 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -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 diff --git a/config/locales/models/build_list.en.yml b/config/locales/models/build_list.en.yml index b407f814b..30c7f010e 100644 --- a/config/locales/models/build_list.en.yml +++ b/config/locales/models/build_list.en.yml @@ -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: diff --git a/config/locales/models/build_list.ru.yml b/config/locales/models/build_list.ru.yml index c18a7a057..b6ddd61a9 100644 --- a/config/locales/models/build_list.ru.yml +++ b/config/locales/models/build_list.ru.yml @@ -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: diff --git a/config/locales/models/event_log.en.yml b/config/locales/models/event_log.en.yml index 3a3b60cd4..b44100e0e 100644 --- a/config/locales/models/event_log.en.yml +++ b/config/locales/models/event_log.en.yml @@ -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: diff --git a/config/locales/models/event_log.ru.yml b/config/locales/models/event_log.ru.yml index 5e356c988..8d4458cdc 100644 --- a/config/locales/models/event_log.ru.yml +++ b/config/locales/models/event_log.ru.yml @@ -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: diff --git a/config/routes.rb b/config/routes.rb index ad2bb7eee..d9ac372b0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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 diff --git a/lib/abf_worker/rpm_worker_observer.rb b/lib/abf_worker/rpm_worker_observer.rb index f709f1233..bd08098b8 100644 --- a/lib/abf_worker/rpm_worker_observer.rb +++ b/lib/abf_worker/rpm_worker_observer.rb @@ -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 diff --git a/lib/build_server.rb b/lib/build_server.rb deleted file mode 100644 index 9edc6e15f..000000000 --- a/lib/build_server.rb +++ /dev/null @@ -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 diff --git a/lib/product_builder.rb b/lib/product_builder.rb deleted file mode 100644 index a845f2dda..000000000 --- a/lib/product_builder.rb +++ /dev/null @@ -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 diff --git a/lib/stub_xml_rpc.rb b/lib/stub_xml_rpc.rb deleted file mode 100644 index eeb4e7af8..000000000 --- a/lib/stub_xml_rpc.rb +++ /dev/null @@ -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 diff --git a/lib/tasks/new_core.rake b/lib/tasks/new_core.rake index 2ca6c92c8..bdaf4bab0 100644 --- a/lib/tasks/new_core.rake +++ b/lib/tasks/new_core.rake @@ -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 diff --git a/spec/controllers/api/v1/build_lists_controller_spec.rb b/spec/controllers/api/v1/build_lists_controller_spec.rb index 23af298ed..63c970f03 100644 --- a/spec/controllers/api/v1/build_lists_controller_spec.rb +++ b/spec/controllers/api/v1/build_lists_controller_spec.rb @@ -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 diff --git a/spec/controllers/projects/build_lists_controller_spec.rb b/spec/controllers/projects/build_lists_controller_spec.rb index 1f87374c3..557d49af9 100644 --- a/spec/controllers/projects/build_lists_controller_spec.rb +++ b/spec/controllers/projects/build_lists_controller_spec.rb @@ -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 diff --git a/spec/models/build_list_spec.rb b/spec/models/build_list_spec.rb index b66d0aa6e..9e6172c4d 100644 --- a/spec/models/build_list_spec.rb +++ b/spec/models/build_list_spec.rb @@ -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 = [] } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 139e9abd0..6fe491877 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -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