From a33c957a51c5c3dbb0ba13e0d2c917ba4b62e564 Mon Sep 17 00:00:00 2001 From: Alexey Berezhok Date: Sun, 19 Apr 2026 20:09:14 +0300 Subject: [PATCH] Added custom build --- classes/mock.rb | 34 +++++++++++++++++++++++++++++++--- classes/projects.rb | 5 ++++- views/prjcustombld.erb | 2 ++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/classes/mock.rb b/classes/mock.rb index 2cc5c7e..9e5ea66 100644 --- a/classes/mock.rb +++ b/classes/mock.rb @@ -16,7 +16,9 @@ BUILD_STRUCTURE = { class MockManager attr :path, :config, :error, :last_status, :last_pid, :prep_dir, :db, :resultpath, :process_log, :repo_path, :git_path, :build_id, :log, :recips, :spec, :repo_lock, :git_id, :tmp_bld - def initialize(path, config, cfg_counter_path, db, result_path, repo_path, git_path, build_id, recips, spec_file, repo_lock, git_id, tmp_bld) + def initialize(path, config, cfg_counter_path, db, result_path, + repo_path, git_path, build_id, recips, spec_file, repo_lock, + git_id, tmp_bld, build_script) @error = nil unless File.exist? (path) Dir.mkdir(path) @@ -34,6 +36,7 @@ class MockManager @repo_lock = repo_lock @git_id = git_id @tmp_bld = tmp_bld + @build_script = build_script File.open(cfg_counter_path, "r+") do |f| f.flock(File::LOCK_EX) @@ -178,6 +181,27 @@ class MockManager end end + def build_custom() + @log.info("Начало сборки пакетов (сценарий кастомной сборки)") + result_dir = File.join(@prep_dir, BUILD_STRUCTURE[:RESULT]) + + + @log.info("Формируем скрипт кастомной сборки #{@build_script[:script_name]}") + rcp_name = "custom_#{@build_script[:script_name]}" + File.open(File.join(@tmp_src, rcp_name), "w") do |f| + f.write(@build_script[:content].gsub(/\r$/, "")) + end + Dir.chdir(@tmp_src) do + script = File.join(@tmp_src, rcp_name) + cmd_args = %Q(/usr/bin/bash -x "#{script}" "#{result_dir}") + @log.debug(cmd_args) + cmd = Runner.new(cmd_args, @log) + cmd.run_clean + @error = true if cmd.exit_status != 0 + @log.error("Ошибка операции") if @error + end + end + def save_logs() FileUtils.mkdir_p(File.join(@resultpath, "#{@build_id}")) src_result = File.join(@prep_dir, BUILD_STRUCTURE[:RESULT_SRPM]) @@ -304,8 +328,12 @@ class MockManager prepare_structure if @error == false prepare_src if @error == false prepare_source if @error == false - prepare_src_rpm if @error == false - build_rpm if @error == false + if @build_script[:script_name].nil? + prepare_src_rpm if @error == false + build_rpm if @error == false + else + build_custom if @error == false + end save_logs save_rpms if @error == false rescue => e diff --git a/classes/projects.rb b/classes/projects.rb index 6175225..72d71f8 100644 --- a/classes/projects.rb +++ b/classes/projects.rb @@ -324,7 +324,10 @@ class ProjectsActions proj_info = get_project(prj_id) tmp_bld = false tmp_bld = true if proj_info[:tmpstpbuild].to_i != 0 - mock = MockManager.new(prepare_path, get_project_config(prj_id), counter_file, @db, build_path, repo_path, git_source, build_id, prep_script, spec_file, repo_lock, git_id, tmp_bld) + build_script = get_project_custom_build(prj_id, git_id) + mock = MockManager.new(prepare_path, get_project_config(prj_id), counter_file, @db, build_path, repo_path, + git_source, build_id, prep_script, spec_file, repo_lock, + git_id, tmp_bld, build_script) bld_id = build_id @db.update_build_task_error_log(build_id, mock.get_build_process_log) @db.update_build_task_status(build_id, 3) diff --git a/views/prjcustombld.erb b/views/prjcustombld.erb index b448959..f0b3420 100644 --- a/views/prjcustombld.erb +++ b/views/prjcustombld.erb @@ -39,6 +39,8 @@ Так же после выполенения скрипта удалите и остановите все запущенные контейнеры, т.к скрипт сам должен контролировать это. Так же убедитесь, что все log файлы сборки и собранные пакеты положены в каталоги:. Скрипт выполняется из корня git проекта. + Первый параметр передаваемый в скрипт содержит каталог, куда еобходимо ложить rpm пакеты и log файлы. + У log файлов обязательно должно быть расширение .log, чтоб они попали в отчет сборки.