diff --git a/app/controllers/build_lists_controller.rb b/app/controllers/build_lists_controller.rb index 4f7479aa4..cfb84498c 100644 --- a/app/controllers/build_lists_controller.rb +++ b/app/controllers/build_lists_controller.rb @@ -1,18 +1,18 @@ class BuildListsController < ApplicationController - CALLBACK_ACTIONS = [:status_build, :pre_build, :post_build, :circle_build, :new_bbdt] + CALLBACK_ACTIONS = [:publish_build, :status_build, :pre_build, :post_build, :circle_build, :new_bbdt] NESTED_ACTIONS = [:index, :new, :create] before_filter :authenticate_user!, :except => CALLBACK_ACTIONS before_filter :authenticate_build_service!, :only => CALLBACK_ACTIONS before_filter :find_project, :only => NESTED_ACTIONS before_filter :find_build_list, :only => [:show, :publish, :cancel] - before_filter :find_build_list_by_bs, :only => [:status_build, :pre_build, :post_build] + before_filter :find_build_list_by_bs, :only => [:publish_build, :status_build, :pre_build, :post_build] load_and_authorize_resource :project, :only => NESTED_ACTIONS load_and_authorize_resource :through => :project, :only => NESTED_ACTIONS, :shallow => true load_and_authorize_resource :except => CALLBACK_ACTIONS.concat(NESTED_ACTIONS) - def index + def index filter_params = params[:filter] || {} if @project @action_url = project_build_lists_path(@project) @@ -21,17 +21,17 @@ class BuildListsController < ApplicationController end @filter = BuildList::Filter.new(@project, filter_params) - @build_lists = @filter.find.accessible_by(current_ability).recent.paginate :page => params[:page] + @build_lists = @filter.find.accessible_by(current_ability).recent.paginate :page => params[:page] @build_server_status = begin BuildServer.get_status rescue Exception # Timeout::Error {} end - end + end - def new - @build_list = BuildList.new + def new + @build_list = BuildList.new end def create @@ -59,91 +59,99 @@ class BuildListsController < ApplicationController end end - def show - @item_groups = @build_list.items.group_by_level - end + def show + @item_groups = @build_list.items.group_by_level + end - def publish - if @build_list.publish - redirect_to :back, :notice => t('layout.build_lists.publish_success') - else - redirect_to :back, :notice => t('layout.build_lists.publish_fail') - end - end + def publish + if @build_list.publish + redirect_to :back, :notice => t('layout.build_lists.publish_success') + else + redirect_to :back, :notice => t('layout.build_lists.publish_fail') + end + end - def cancel - if @build_list.cancel - redirect_to :back, :notice => t('layout.build_lists.cancel_success') - else - redirect_to :back, :notice => t('layout.build_lists.cancel_fail') - end - end + def cancel + if @build_list.cancel + redirect_to :back, :notice => t('layout.build_lists.cancel_success') + else + redirect_to :back, :notice => t('layout.build_lists.cancel_fail') + end + end - def status_build - @item = @build_list.items.find_by_name!(params[:package_name]) - @item.status = params[:status] - @item.save + def publish_build + @build_list.status = (params[:status].to_i == 0 ? BuildList::BUILD_PUBLISHED : BuildList::FAILED_PUBLISH) + @build_list.notified_at = Time.current + @build_list.save - @build_list.container_path = params[:container_path] - @build_list.notified_at = Time.current - @build_list.save + render :nothing => true, :status => 200 + 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 - def pre_build - @build_list.status = BuildServer::BUILD_STARTED - @build_list.notified_at = Time.current - @build_list.save + @build_list.container_path = params[:container_path] + @build_list.notified_at = Time.current + @build_list.save - render :nothing => true, :status => 200 - end + render :nothing => true, :status => 200 + end - def post_build - @build_list.status = params[:status] - @build_list.container_path = params[:container_path] - @build_list.notified_at = Time.current - @build_list.save + def pre_build + @build_list.status = BuildServer::BUILD_STARTED + @build_list.notified_at = Time.current + @build_list.save - render :nothing => true, :status => 200 - end + render :nothing => true, :status => 200 + end - def circle_build - @build_list.is_circle = true - @build_list.container_path = params[:container_path] - @build_list.notified_at = Time.current - @build_list.save + def post_build + @build_list.status = params[:status] + @build_list.container_path = params[:container_path] + @build_list.notified_at = Time.current + @build_list.save - render :nothing => true, :status => 200 - end + 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.notified_at = Time.current - @build_list.is_circle = (params[:is_circular] != "0") - @build_list.bs_id = params[:id] - params[:arch] - @build_list.save + def circle_build + @build_list.is_circle = true + @build_list.container_path = params[:container_path] + @build_list.notified_at = Time.current + @build_list.save - render :nothing => true, :status => 200 - end + render :nothing => true, :status => 200 + end - protected + 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.notified_at = Time.current + @build_list.is_circle = (params[:is_circular] != "0") + @build_list.bs_id = params[:id] + params[:arch] + @build_list.save - def find_project - @project = Project.find_by_id params[:project_id] - end + render :nothing => true, :status => 200 + end + + protected + + def find_project + @project = Project.find_by_id params[:project_id] + end 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 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'] diff --git a/app/models/build_list.rb b/app/models/build_list.rb index 94522d13d..58f6e0da5 100644 --- a/app/models/build_list.rb +++ b/app/models/build_list.rb @@ -21,11 +21,15 @@ class BuildList < ActiveRecord::Base WAITING_FOR_RESPONSE = 4000 BUILD_PENDING = 2000 BUILD_PUBLISHED = 6000 + BUILD_PUBLISH = 7000 + FAILED_PUBLISH = 8000 STATUSES = [ WAITING_FOR_RESPONSE, BUILD_CANCELED, BUILD_PENDING, BUILD_PUBLISHED, + BUILD_PUBLISH, + FAILED_PUBLISH, BuildServer::SUCCESS, BuildServer::BUILD_STARTED, BuildServer::BUILD_ERROR, @@ -40,6 +44,8 @@ class BuildList < ActiveRecord::Base BUILD_CANCELED => :build_canceled, BUILD_PENDING => :build_pending, BUILD_PUBLISHED => :build_published, + BUILD_PUBLISH => :build_publish, + FAILED_PUBLISH => :failed_publish, BuildServer::BUILD_ERROR => :build_error, BuildServer::BUILD_STARTED => :build_started, BuildServer::SUCCESS => :success, @@ -106,13 +112,13 @@ class BuildList < ActiveRecord::Base def publish has_published = BuildServer.publish_container bs_id - update_attribute(:status, BUILD_PUBLISHED) if has_published == 0 + update_attribute(:status, BUILD_PUBLISH) if has_published == 0 return has_published == 0 end def can_publish? - self.status == BuildServer::SUCCESS + status == BuildServer::SUCCESS or status == FAILED_PUBLISH end def cancel @@ -124,7 +130,7 @@ class BuildList < ActiveRecord::Base #TODO: Share this checking on product owner. def can_cancel? - self.status == BUILD_PENDING && bs_id + status == BUILD_PENDING && bs_id end def event_log_message diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 2f0cb3bf4..6e3a6838f 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -294,7 +294,7 @@ ru: cancel_button: Отмена cancel_success: 'Сборка отменена.' cancel_fail: 'При отмене сборки произошла ошибка!' - publish_success: 'Сборка опубликована.' + publish_success: 'Сборка поставлена в очередь на публикацию.' publish_fail: 'При публикации сборки произошла ошибка!' build_server_status: @@ -314,6 +314,8 @@ ru: statuses: build_error: ошибка сборки build_published: опубликован + build_publish: публикуется + failed_publish: ошибка публикации dependencies_fail: зависимости не найдены waiting_for_response: ожидает ответа build_pending: ожидает сборку diff --git a/config/routes.rb b/config/routes.rb index a5918b82f..2877c44b9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -24,6 +24,7 @@ Rosa::Application.routes.draw do match '/private/:platform_name/*file_path' => 'privates#show' + 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"