- Добавлена поддержка ожидания сборки

- Изменен порядок сортировки новых пакетов в repoview
This commit is contained in:
Alexey Berezhok
2025-11-15 22:54:56 +03:00
parent d50ee1a708
commit 89f92d265a
14 changed files with 147 additions and 51 deletions

View File

@@ -71,6 +71,14 @@ class IniConfig
end
end
def get_build_lock_path()
unless @config["build"]["path"].nil?
@config["build"]["path"].to_s
else
"locks/build"
end
end
def get_items_per_page()
unless @config["pages"]["items_per_page"].nil?
res = @config["pages"]["items_per_page"].to_i

View File

@@ -249,6 +249,10 @@ class DBase
BuildTask.where(id: build_id.to_i).update(result: status.to_i)
end
def get_build_task_status(build_id)
BuildTask.where(id: build_id.to_i).first
end
def update_build_task_error_log(build_id, path)
BuildTask.where(id: build_id.to_i).update(errlogpath: path)
end
@@ -384,4 +388,8 @@ class DBase
def delete_git_by_id(id)
Repos.where(id: id.to_i).delete
end
def cancel_hang_builds()
BuildTask.where(result: [0, 3]).update(result: 4)
end
end

View File

@@ -267,7 +267,7 @@ class MockManager
end
end
def build_task()
def build_task(build_lock)
@error = false
@db.before_fork
spock = Spork.spork(:logger => log) do
@@ -275,33 +275,48 @@ class MockManager
old_stdout = $stdout.dup
$stdout = File.open(@process_log, "w")
@log = Logger.new($stdout)
if @spec == ""
@error = true
@log.error("Не могу найти spec файл")
end
begin
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
save_logs
save_rpms if @error == false
rescue => e
@error = true
puts e
end
$stdout = old_stdout
@log.close
save_prg_log
clean_build
if @error
@db.update_build_task_status(@build_id, 1)
else
@db.update_build_task_status(@build_id, 2)
File.open(build_lock,"wb") do |global_lock|
global_lock.flock(File::LOCK_EX)
global_lock.rewind
build_info = @db.get_build_task_status(build_id)
unless build_info.nil?
if build_info[:result].to_i == 4
return
end
end
@db.update_build_task_status(@build_id, 0)
if @spec == ""
@error = true
@log.error("Не могу найти spec файл")
end
begin
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
save_logs
save_rpms if @error == false
rescue => e
@error = true
puts e
end
$stdout = old_stdout
@log.close
save_prg_log
clean_build
if @error
@db.update_build_task_status(@build_id, 1)
else
@db.update_build_task_status(@build_id, 2)
end
global_lock.flock(File::LOCK_UN)
end
end
@db.after_fork
spock
end
end

View File

@@ -269,7 +269,7 @@ class ProjectsActions
spec_file
end
def build_projects_git(prj_id, git_id, counter_file)
def build_projects_git(prj_id, git_id, counter_file, build_lock)
bld_id = 0
build_ok = true
proj_path = get_project_path(prj_id)
@@ -283,20 +283,16 @@ class ProjectsActions
File.open(lockf_path, File::RDWR | File::CREAT) do |f|
result = f.flock(File::LOCK_EX | File::LOCK_NB)
if result == false
#Файл заблокирован считать id и вывести сведения о сборке
# Файл заблокирован считать id и вывести сведения о сборке
build_ok = false
build_id = f.gets
unless build_id.nil?
build_id = build_id.strip.to_i
end
if build_id > 0
build_id = build_id.strip.to_i unless build_id.nil?
if build_id.positive?
build_info = @db.get_build_task_process_log(build_id)
unless build_info.nil?
bld_id = build_info[:id]
end
bld_id = build_info[:id] unless build_info.nil?
end
else
#Сборка завершилась, но каталог не подчистился
# Сборка завершилась, но каталог не подчистился
FileUtils.rm_rf(prepare_path)
f.flock(File::LOCK_UN)
build_ok = true
@@ -306,17 +302,17 @@ class ProjectsActions
#Верная ситуация
if build_ok
build_path = File.join(proj_path, PROJECTS_STRUCTURE[:LOGS], git_name[:reponame])
Dir.mkdir(prepare_path)
lockf_path = File.join(prepare_path, "lock")
File.open(lockf_path, File::RDWR | File::CREAT) do |f|
f.flock(File::LOCK_EX)
f.rewind
#Начинаем сборку
build_path = File.join(proj_path, PROJECTS_STRUCTURE[:LOGS], git_name[:reponame])
#Начинаем сборку
@db.create_build_task(prj_id, git_id, build_path)
build_id = @db.last_id
repo_path = File.join(proj_path, PROJECTS_STRUCTURE[:REPO])
git_source = File.join(proj_path, PROJECTS_STRUCTURE[:SRC], git_name[:reponame])
@db.create_build_task(prj_id, git_id, build_path)
build_id = @db.last_id
f.puts(build_id)
f.flush
proj_info = get_project(prj_id)
@@ -325,7 +321,8 @@ class ProjectsActions
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)
bld_id = build_id
@db.update_build_task_error_log(build_id, mock.get_build_process_log)
mock.build_task
@db.update_build_task_status(build_id, 3)
mock.build_task(build_lock)
end
end
bld_id

View File

@@ -142,9 +142,9 @@ class RepoManager
if nresult.key?("SRPMS")
last_update_src = nresult["SRPMS"].map do |record|
{ fname: record[:fname], stat: record[:stat] }
end.sort_by! do |item|
[item[:stat], -item[:fname].downcase.ord]
end.map do |record|
end.sort_by do |item|
[item[:stat], item[:fname].downcase.ord]
end.reverse.map do |record|
if record[:stat].nil?
["нет даты", record[:fname]]
else