- Добавлена поддержка ожидания сборки
- Изменен порядок сортировки новых пакетов в repoview
This commit is contained in:
1
Gemfile
1
Gemfile
@@ -36,4 +36,3 @@ gem "ffi", "~> 1.17"
|
||||
gem "ptools", "~> 1.5"
|
||||
|
||||
gem "ostruct", "~> 0.6.1"
|
||||
|
||||
|
||||
4
VERSION
4
VERSION
@@ -1,3 +1,7 @@
|
||||
0.3-1
|
||||
* Добавлена возможность добавлять сборки в состоянии ожидания
|
||||
* Изменена сортировка пакетов в repoview
|
||||
|
||||
0.2-1
|
||||
* Добавлена поддержка проектов для тестовых сборок (версия меняется каждую сборку)
|
||||
* Доработан вывод repoview
|
||||
|
||||
15
app.rb
15
app.rb
@@ -38,6 +38,7 @@ end
|
||||
|
||||
cfg = IniConfig.new()
|
||||
db = DBase.new(cfg)
|
||||
db.cancel_hang_builds
|
||||
|
||||
set :bind, "0.0.0.0"
|
||||
set :port, cfg.get_port
|
||||
@@ -780,7 +781,7 @@ get "/gitbld/:id/:git_id" do
|
||||
@git_name = git_info[:reponame]
|
||||
@proj_id = params["id"]
|
||||
|
||||
@build_id = prj.build_projects_git(prj_info[:id], git_info[:id], cfg.get_counter_path)
|
||||
@build_id = prj.build_projects_git(prj_info[:id], git_info[:id], cfg.get_counter_path, cfg.get_build_lock_path)
|
||||
|
||||
if @build_id == 0
|
||||
print_error_page(503, "Ошибка создания или получения информации о сборке, возможно проблемы с файлом блокировки")
|
||||
@@ -963,6 +964,18 @@ get "/buildinfof/:build_id" do
|
||||
end
|
||||
end
|
||||
|
||||
get "/buildterm/:build_id" do
|
||||
build_info = db.get_build_info(params["build_id"])
|
||||
if build_info.nil?
|
||||
print_error_page(503, "Сборки не сущестует")
|
||||
else
|
||||
if build_info[:result] == 3
|
||||
db.update_build_task_status(params["build_id"], 4)
|
||||
end
|
||||
redirect back
|
||||
end
|
||||
end
|
||||
|
||||
get "/buildinfofraw" do
|
||||
if params["file"].nil? || !File.exist?(params["file"])
|
||||
print_error_page(503, "Файл не найден")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,6 +12,9 @@ old = 3
|
||||
[counter]
|
||||
path = "locks/counter"
|
||||
|
||||
[build]
|
||||
path = "locks/build"
|
||||
|
||||
[configs]
|
||||
hide=open,amazon,anolis,circle,custom,euro,fedora,mageia,navy,alma,rocky
|
||||
selected=msvsphere
|
||||
|
||||
@@ -8,7 +8,14 @@
|
||||
|
||||

|
||||
|
||||
Где можно увидеть вес файлы логов с ошибками и без, пакеты собранные при сборке и т.д.
|
||||
Где можно увидеть все файлы логов с ошибками и без, пакеты собранные при сборке и т.д.
|
||||
|
||||
Сборка может находится в таком состоянии:
|
||||
* Идет сборка - проект собирается
|
||||
* Ожидает сборки - одновременно может происходить только одна сборка, поэтому все проекты требующие сборки будут ожидать очереди. В этот момент сборку можно отменить
|
||||
* Отменена - сборка была запланирована, но потом отменена
|
||||
* Ошибка сборки - сборка завершилась с ошибкой
|
||||
* Сборка успешно завершена - успешная сборка с пакетами
|
||||
|
||||
Список сборок может быть:
|
||||
* общим
|
||||
|
||||
0
locks/build
Normal file
0
locks/build
Normal file
@@ -25,6 +25,12 @@
|
||||
when 2
|
||||
st = "Сборка успешно завершена"
|
||||
cl = "text-bg-success"
|
||||
when 3
|
||||
st = "Ожидает сборки"
|
||||
cl = "text-bg-secondary"
|
||||
when 4
|
||||
st = "Отменена"
|
||||
cl = "text-bg-light"
|
||||
else
|
||||
st = "Неизвестно"
|
||||
cl = "text-bg-light"
|
||||
@@ -39,7 +45,15 @@
|
||||
<td class="text-center <%= cl %>">
|
||||
<%= st %>
|
||||
</td>
|
||||
<td class="text-center"><a href="/buildinfof/<%= ERB::Util.url_encode(item[:buildid]) %>">Детальнее</a></td>
|
||||
<td class="text-center">
|
||||
<% if item[:state] == 3 %>
|
||||
<a href="/buildterm/<%= ERB::Util.url_encode(item[:buildid]) %>">Отменить</a>
|
||||
<% elsif item[:state] == 4 %>
|
||||
Нет информации
|
||||
<% else %>
|
||||
<a href="/buildinfof/<%= ERB::Util.url_encode(item[:buildid]) %>">Детальнее</a>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
|
||||
@@ -26,11 +26,17 @@
|
||||
when 2
|
||||
st = "Сборка успешно завершена"
|
||||
cl = "text-bg-success"
|
||||
when 3
|
||||
st = "Ожидает сборки"
|
||||
cl = "text-bg-secondary"
|
||||
when 4
|
||||
st = "Отменена"
|
||||
cl = "text-bg-light"
|
||||
else
|
||||
st = "Неизвестно"
|
||||
cl = "text-bg-light"
|
||||
end
|
||||
%>
|
||||
%> end
|
||||
<tr>
|
||||
<td scope="row"><%= item[:buildid] %></td>
|
||||
<td class="text-center"><a href="/prjedit/<%= ERB::Util.url_encode(item[:projid]) %>"><%= item[:prjname] %></a></td>
|
||||
@@ -40,7 +46,15 @@
|
||||
<td class="text-center <%= cl %>">
|
||||
<%= st %>
|
||||
</td>
|
||||
<td class="text-center"><a href="/buildinfof/<%= ERB::Util.url_encode(item[:buildid]) %>">Детальнее</a></td>
|
||||
<td class="text-center">
|
||||
<% if item[:state] == 3 %>
|
||||
<a href="/buildterm/<%= ERB::Util.url_encode(item[:buildid]) %>">Отменить</a>
|
||||
<% elsif item[:state] == 4 %>
|
||||
Нет информации
|
||||
<% else %>
|
||||
<a href="/buildinfof/<%= ERB::Util.url_encode(item[:buildid]) %>">Детальнее</a>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
when 2
|
||||
st = "Сборка успешно завершена"
|
||||
cl = "text-bg-success"
|
||||
when 3
|
||||
st = "Ожидает сборки"
|
||||
cl = "text-bg-secondary"
|
||||
when 4
|
||||
st = "Отменена"
|
||||
cl = "text-bg-light"
|
||||
else
|
||||
st = "Неизвестно"
|
||||
cl = "text-bg-light"
|
||||
@@ -40,7 +46,15 @@
|
||||
<td class="text-center <%= cl %>">
|
||||
<%= st %>
|
||||
</td>
|
||||
<td class="text-center"><a href="/buildinfof/<%= ERB::Util.url_encode(item[:buildid]) %>">Детальнее</a></td>
|
||||
<td class="text-center">
|
||||
<% if item[:state] == 3 %>
|
||||
<a href="/buildterm/<%= ERB::Util.url_encode(item[:buildid]) %>">Отменить</a>
|
||||
<% elsif item[:state] == 4 %>
|
||||
Нет информации
|
||||
<% else %>
|
||||
<a href="/buildinfof/<%= ERB::Util.url_encode(item[:buildid]) %>">Детальнее</a>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
|
||||
Reference in New Issue
Block a user