diff --git a/lib/github/build/action.rb b/lib/github/build/action.rb index fe61f2a..9b9d0d4 100644 --- a/lib/github/build/action.rb +++ b/lib/github/build/action.rb @@ -37,6 +37,7 @@ def create_summary(rerun: false) logger(Logger::INFO, "@jobs - #{@jobs.inspect}") create_jobs(rerun) + create_timeout_worker end private @@ -60,6 +61,16 @@ def create_jobs(rerun) end end + def create_timeout_worker + Delayed::Job.where('handler LIKE ?', "%TimeoutExecution%args%-%#{@check_suite.id}%").delete_all + + logger(Logger::INFO, "CiJobStatus::Update: TimeoutExecution for '#{@check_suite.id}'") + + TimeoutExecution + .delay(run_at: 30.minute.from_now.utc, queue: 'timeout_execution') + .timeout(@check_suite.id) + end + def stage_with_start_in_progress(ci_job) return unless !ci_job.stage.nil? and ci_job.stage.configuration.start_in_progress? diff --git a/workers/timeout_execution.rb b/workers/timeout_execution.rb index 82119f0..aa78596 100644 --- a/workers/timeout_execution.rb +++ b/workers/timeout_execution.rb @@ -19,28 +19,28 @@ def timeout(check_suite_id) @logger.info("Timeout execution for check_suite_id: #{check_suite_id} -> finished? #{check_suite.finished?}") return false if check_suite.finished? - return rescheduling([], check_suite_id) if check_suite.last_job_updated_at_timer > 2.hour.ago.utc + return rescheduling(check_suite_id) if check_suite.last_job_updated_at_timer < 2.hour.ago.utc @logger.info("Calling Github::PlanExecution::Finished.new(#{check_suite.bamboo_ci_ref}).finished") - rescheduling(finished(check_suite), check_suite_id) + return false if finished?(check_suite) == [200, 'Finished'] + + rescheduling(check_suite_id) end - def finished(check_suite) + def finished?(check_suite) Github::PlanExecution::Finished .new({ 'bamboo_ref' => check_suite.bamboo_ci_ref, hanged: true }) .finished end - def rescheduling(resp, check_suite_id) - return true if resp == [200, 'Finished'] - + def rescheduling(check_suite_id) @logger.info("Rescheduling check_suite_id: #{check_suite_id}") Delayed::Job.where('handler LIKE ?', "%TimeoutExecution%args%-%#{check_suite_id}%").delete_all TimeoutExecution - .delay(run_at: 2.hours.from_now.utc, queue: 'timeout_execution') + .delay(run_at: 30.minute.from_now.utc, queue: 'timeout_execution') .timeout(check_suite_id) false