# frozen_string_literal: true # Realiza el deploy de un sitio class DeployJob < ApplicationJob class DeployException < StandardError; end # rubocop:disable Metrics/MethodLength def perform(site) ActiveRecord::Base.connection_pool.with_connection do @site = Site.find(site) @site.update_attribute :status, 'building' # Asegurarse que DeployLocal sea el primero! @deployed = { deploy_local: deploy_locally } # No es opcional unless @deployed[:deploy_local] @site.update_attribute :status, 'waiting' notify_usuaries # Hacer fallar la tarea raise DeployException, deploy_local.build_stats.last.log end deploy_others notify_usuaries @site.update_attribute :status, 'waiting' end end # rubocop:enable Metrics/MethodLength private def deploy_local @deploy_local ||= @site.deploys.find_by(type: 'DeployLocal') end def deploy_locally deploy_local.deploy end def deploy_others @site.deploys.where.not(type: 'DeployLocal').find_each do |d| @deployed[d.type.underscore.to_sym] = d.deploy end end def notify_usuaries @site.roles.where(rol: 'usuarie', temporal: false).pluck(:usuarie_id).each do |usuarie| DeployMailer.with(usuarie: usuarie, site: @site.id) .deployed(@deployed) .deliver_now end end end