diff --git a/Gemfile b/Gemfile index 6541ac4..759b7db 100644 --- a/Gemfile +++ b/Gemfile @@ -17,9 +17,7 @@ gem "inifile", "~> 3.0" gem "carrierwave", "~> 3.1" -gem "data_mapper", "~> 1.2" - -gem "json", "~> 1.8" +gem "json", "~> 2.5" gem "stringio", "~> 3.1" @@ -38,3 +36,4 @@ gem "ffi", "~> 1.17" gem "ptools", "~> 1.5" gem "ostruct", "~> 0.6.1" + diff --git a/Gemfile.lock b/Gemfile.lock index ca0fadf..ff4ba51 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,16 +1,16 @@ GEM remote: https://rubygems.org/ specs: - activemodel (8.0.1) - activesupport (= 8.0.1) - activesupport (8.0.1) + activemodel (8.1.1) + activesupport (= 8.1.1) + activesupport (8.1.1) base64 - benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + json logger (>= 1.4.2) minitest (>= 5.1) securerandom (>= 0.3) @@ -18,13 +18,9 @@ GEM uri (>= 0.13.1) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) - base64 (0.2.0) - bcrypt (3.1.20) - bcrypt-ruby (3.1.5) - bcrypt (>= 3.1.3) - benchmark (0.4.0) - bigdecimal (3.1.9) - carrierwave (3.1.1) + base64 (0.3.0) + bigdecimal (3.3.1) + carrierwave (3.1.2) activemodel (>= 6.0.0) activesupport (>= 6.0.0) addressable (~> 2.6) @@ -32,130 +28,82 @@ GEM marcel (~> 1.0.0) ssrf_filter (~> 1.0) concurrent-ruby (1.3.5) - connection_pool (2.5.0) - data_mapper (1.2.0) - dm-aggregates (~> 1.2.0) - dm-constraints (~> 1.2.0) - dm-core (~> 1.2.0) - dm-migrations (~> 1.2.0) - dm-serializer (~> 1.2.0) - dm-timestamps (~> 1.2.0) - dm-transactions (~> 1.2.0) - dm-types (~> 1.2.0) - dm-validations (~> 1.2.0) - dm-aggregates (1.2.0) - dm-core (~> 1.2.0) - dm-constraints (1.2.0) - dm-core (~> 1.2.0) - dm-core (1.2.1) - addressable (~> 2.3) - dm-migrations (1.2.0) - dm-core (~> 1.2.0) - dm-serializer (1.2.2) - dm-core (~> 1.2.0) - fastercsv (~> 1.5) - json (~> 1.6) - json_pure (~> 1.6) - multi_json (~> 1.0) - dm-timestamps (1.2.0) - dm-core (~> 1.2.0) - dm-transactions (1.2.0) - dm-core (~> 1.2.0) - dm-types (1.2.2) - bcrypt-ruby (~> 3.0) - dm-core (~> 1.2.0) - fastercsv (~> 1.5) - json (~> 1.6) - multi_json (~> 1.0) - stringex (~> 1.4) - uuidtools (~> 2.1) - dm-validations (1.2.0) - dm-core (~> 1.2.0) - drb (2.2.1) - fastercsv (1.5.5) - ffi (1.17.1) - ffi (1.17.1-aarch64-linux-gnu) - ffi (1.17.1-aarch64-linux-musl) - ffi (1.17.1-arm-linux-gnu) - ffi (1.17.1-arm-linux-musl) - ffi (1.17.1-arm64-darwin) - ffi (1.17.1-x86-linux-gnu) - ffi (1.17.1-x86-linux-musl) - ffi (1.17.1-x86_64-darwin) - ffi (1.17.1-x86_64-linux-gnu) - ffi (1.17.1-x86_64-linux-musl) + connection_pool (2.5.4) + drb (2.2.3) + ffi (1.17.2-aarch64-linux-gnu) + ffi (1.17.2-aarch64-linux-musl) + ffi (1.17.2-arm-linux-gnu) + ffi (1.17.2-arm-linux-musl) + ffi (1.17.2-arm64-darwin) + ffi (1.17.2-x86-linux-gnu) + ffi (1.17.2-x86-linux-musl) + ffi (1.17.2-x86_64-darwin) + ffi (1.17.2-x86_64-linux-gnu) + ffi (1.17.2-x86_64-linux-musl) i18n (1.14.7) concurrent-ruby (~> 1.0) image_processing (1.14.0) mini_magick (>= 4.9.5, < 6) ruby-vips (>= 2.0.17, < 3) inifile (3.0.0) - json (1.8.6) - json_pure (1.8.6) - logger (1.6.6) + json (2.15.2) + logger (1.7.0) marcel (1.0.4) - mini_magick (5.1.2) - benchmark + mini_magick (5.3.1) logger - mini_portile2 (2.8.8) - minitest (5.25.4) - multi_json (1.15.0) - mustermann (3.0.3) + minitest (5.26.0) + mustermann (3.0.4) ruby2_keywords (~> 0.0.1) - nio4r (2.7.4) - ostruct (0.6.1) + nio4r (2.7.5) + ostruct (0.6.3) ptools (1.5.0) - public_suffix (6.0.1) - puma (6.6.0) + public_suffix (6.0.2) + puma (6.6.1) nio4r (~> 2.0) - rack (3.1.10) - rack-protection (4.1.1) + rack (3.2.4) + rack-protection (4.2.1) base64 (>= 0.1.0) logger (>= 1.6.0) rack (>= 3.0.0, < 4) - rack-session (2.1.0) + rack-session (2.1.1) base64 (>= 0.1.0) rack (>= 3.0.0) rackup (2.2.1) rack (>= 3) - ruby-vips (2.2.3) + ruby-vips (2.2.5) ffi (~> 1.12) logger ruby2_keywords (0.0.5) rugged (1.9.0) securerandom (0.4.1) - sequel (5.89.0) + sequel (5.98.0) bigdecimal shotgun (0.9.2) rack (>= 1.0) - sinatra (4.1.1) + sinatra (4.2.1) logger (>= 1.6.0) mustermann (~> 3.0) rack (>= 3.0.0, < 4) - rack-protection (= 4.1.1) + rack-protection (= 4.2.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) sqlite (1.0.2) - sqlite3 (2.5.0) - mini_portile2 (~> 2.8.0) - sqlite3 (2.5.0-aarch64-linux-gnu) - sqlite3 (2.5.0-aarch64-linux-musl) - sqlite3 (2.5.0-arm-linux-gnu) - sqlite3 (2.5.0-arm-linux-musl) - sqlite3 (2.5.0-arm64-darwin) - sqlite3 (2.5.0-x86-linux-gnu) - sqlite3 (2.5.0-x86-linux-musl) - sqlite3 (2.5.0-x86_64-darwin) - sqlite3 (2.5.0-x86_64-linux-gnu) - sqlite3 (2.5.0-x86_64-linux-musl) - ssrf_filter (1.2.0) - stringex (1.5.1) - stringio (3.1.3) - tilt (2.6.0) + sqlite3 (2.7.4-aarch64-linux-gnu) + sqlite3 (2.7.4-aarch64-linux-musl) + sqlite3 (2.7.4-arm-linux-gnu) + sqlite3 (2.7.4-arm-linux-musl) + sqlite3 (2.7.4-arm64-darwin) + sqlite3 (2.7.4-x86-linux-gnu) + sqlite3 (2.7.4-x86-linux-musl) + sqlite3 (2.7.4-x86_64-darwin) + sqlite3 (2.7.4-x86_64-linux-gnu) + sqlite3 (2.7.4-x86_64-linux-musl) + ssrf_filter (1.3.0) + stringio (3.1.7) + tilt (2.6.1) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - uri (1.0.2) - uuidtools (2.2.0) + uri (1.1.1) PLATFORMS aarch64-linux-gnu @@ -163,7 +111,6 @@ PLATFORMS arm-linux-gnu arm-linux-musl arm64-darwin - ruby x86-linux-gnu x86-linux-musl x86_64-darwin @@ -172,10 +119,9 @@ PLATFORMS DEPENDENCIES carrierwave (~> 3.1) - data_mapper (~> 1.2) ffi (~> 1.17) inifile (~> 3.0) - json (~> 1.8) + json (~> 2.5) ostruct (~> 0.6.1) ptools (~> 1.5) puma (~> 6.6) @@ -189,4 +135,4 @@ DEPENDENCIES stringio (~> 3.1) BUNDLED WITH - 2.6.3 + 2.7.2 diff --git a/app.rb b/app.rb index 5abacca..130202e 100644 --- a/app.rb +++ b/app.rb @@ -343,6 +343,7 @@ get "/prjcreate" do @local_list = result[:local] @old_nopublic = session[:prj_old_nopublic] @error_data = session[:prjcreate_error] + @old_tmpbld = session[:prj_old_tmpbld] session[:prjcreate_error] = nil erb :prjcrt end @@ -352,12 +353,13 @@ post "/prjcreate" do session[:prj_old_description] = params["description"] session[:prj_old_list] = params["conflist"] session[:prj_old_nopublic] = params["nopublic"] + session[:prj_old_tmpbld] = params["tmpbld"] if params["projname"].nil? || params["description"].nil? || params["projname"].strip == "" || params["description"].strip == "" || params["conflist"].nil? || params["conflist"].strip == "" session[:rcpcreate_error] = "Имя проекта, описание и окружение сборки не должны быть пустыми" redirect "/prjcreate" else prj = ProjectsActions.new(cfg.get_projects_path, db) - result = prj.create_project(params["projname"], params["description"], params["conflist"], params["nopublic"]) + result = prj.create_project(params["projname"], params["description"], params["conflist"], params["nopublic"], params["tmpbld"]) if result != 0 session[:prjcreate_error] = prj.error redirect "/prjcreate" @@ -366,6 +368,7 @@ post "/prjcreate" do session[:prj_old_description] = nil session[:prj_old_list] = nil session[:prj_old_nopublic] = nil + session[:prj_old_tmpbld] = nil redirect "/projs" end end @@ -395,6 +398,7 @@ get "/prjedit/:id" do @proj_descr = prj_info[:descr] @proj_id = prj_info[:id] @proj_public = prj_info[:public] + @proj_tmpbuild = prj_info[:tmpstpbuild] repo_lst = repo.getrepos proj_repo_list = prj.get_project_gits(prj_info[:id], repo) @repo_list = repo_lst.reject do |item| diff --git a/classes/db.rb b/classes/db.rb index 0357bf1..0be51fb 100644 --- a/classes/db.rb +++ b/classes/db.rb @@ -146,7 +146,7 @@ class DBase Projects[id] end - def proj_create(proj_name, proj_descr, nopublic) + def proj_create(proj_name, proj_descr, nopublic, tmpbld) @error = nil data = Projects.where(projname: proj_name).first if data.nil? @@ -154,7 +154,11 @@ class DBase unless nopublic.nil? public_proj = 0 end - id = Projects.insert(projname: proj_name, descr: proj_descr, public: public_proj) + tmpbld_proj = 1 + if tmpbld.nil? + tmpbld_proj = 0 + end + id = Projects.insert(projname: proj_name, descr: proj_descr, public: public_proj, tmpstpbuild: tmpbld_proj) @last_id = id else @error = "Данный проект уже существует" diff --git a/classes/mock.rb b/classes/mock.rb index 475633a..0c31d42 100644 --- a/classes/mock.rb +++ b/classes/mock.rb @@ -4,6 +4,7 @@ require "fileutils" require "logger" require_relative "repomanage" require "digest" +require "date" BUILD_STRUCTURE = { :SRC => "src", @@ -13,9 +14,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 + 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) + 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) @error = nil unless File.exist? (path) Dir.mkdir(path) @@ -32,6 +33,7 @@ class MockManager @spec = spec_file @repo_lock = repo_lock @git_id = git_id + @tmp_bld = tmp_bld File.open(cfg_counter_path, "r+") do |f| f.flock(File::LOCK_EX) @@ -110,6 +112,31 @@ class MockManager @log.info("Подготовка SRCRPM") spec_file = File.join(@tmp_src, @spec) if File.exist?(spec_file) + if @tmp_bld + dt = DateTime.now + bld_id = @build_id.to_i + bld_str = "%010d" % bld_id + dt_str = dt.strftime("%Y%m%d_#{bld_str}") + cmd_args = %Q(/usr/bin/rpm -q --specfile #{spec_file} --queryformat "%{RELEASE}") + @log.debug(cmd_args) + cmd = Runner.new(cmd_args, @log) + cmd.run + if cmd.exit_status == 0 + res = "#{cmd.stdout}.#{dt_str}" + line_array = [] + File.readlines(spec_file).each do |line| + if line =~ /^[\t ]*[Rr]elease:/ + line = "Release: #{res}" + end + line_array << line + end + File.open(spec_file, "w") do |f| + line_array.each do |line| + f.puts(line) + end + end + end + end Dir.chdir(@tmp_src) do cmd_args = %Q(/usr/bin/mock -r "#{@config}" --buildsrpm --spec "#{spec_file}" --sources "#{@tmp_src}" --resultdir "#{File.join(@prep_dir, BUILD_STRUCTURE[:RESULT_SRPM])}" --isolation=simple --disable-plugin=ccache) @log.debug(cmd_args) diff --git a/classes/projects.rb b/classes/projects.rb index a625bbe..f7e6d31 100644 --- a/classes/projects.rb +++ b/classes/projects.rb @@ -145,7 +145,7 @@ class ProjectsActions generate_linked_repos(id, proj_path, proj_name, prj_incl_path) end - def create_project(name, description, configuration, nopublic) + def create_project(name, description, configuration, nopublic, tmpbld) @error = nil ret_val = 0 project_name = sanitize_rcptname(name) @@ -163,7 +163,7 @@ class ProjectsActions end if File.exist?(configuration) generate_config(nil, configuration, fname, project_name) - @error = @db.proj_create(project_name, description, nopublic) + @error = @db.proj_create(project_name, description, nopublic, tmpbld) if @error.nil? created = true end @@ -317,7 +317,10 @@ class ProjectsActions build_id = @db.last_id f.puts(build_id) f.flush - 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) + 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) bld_id = build_id @db.update_build_task_error_log(build_id, mock.get_build_process_log) mock.build_task diff --git a/db/migrations/202511040000000_aletrtables.rb b/db/migrations/202511040000000_aletrtables.rb new file mode 100644 index 0000000..71948eb --- /dev/null +++ b/db/migrations/202511040000000_aletrtables.rb @@ -0,0 +1,9 @@ +require "sequel" + +Sequel.migration do + change do + alter_table(:projects) do + add_column :tmpstpbuild, Integer, default: 0 + end + end +end diff --git a/views/prjcrt.erb b/views/prjcrt.erb index 88390a4..53eeec6 100644 --- a/views/prjcrt.erb +++ b/views/prjcrt.erb @@ -23,6 +23,14 @@ <% end %> +