From 74caa828e87f94b82017032b12fe1797ac8c1632 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Tue, 10 Jun 2025 08:56:20 +0200 Subject: [PATCH 1/4] feat(ruby): implement autoyast conversion for add-ons --- service/lib/agama/autoyast/software_reader.rb | 24 ++++++++++++++--- .../agama/autoyast/software_reader_test.rb | 27 +++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/service/lib/agama/autoyast/software_reader.rb b/service/lib/agama/autoyast/software_reader.rb index c0699614f9..3ae7b56298 100755 --- a/service/lib/agama/autoyast/software_reader.rb +++ b/service/lib/agama/autoyast/software_reader.rb @@ -37,12 +37,17 @@ def initialize(profile) # # @return [Hash] Agama "software" section def read - return {} if profile["software"].nil? software = {} - software["patterns"] = profile["software"].fetch_as_array("patterns") - software["packages"] = profile["software"].fetch_as_array("packages") + if profile["software"] + software["patterns"] = profile["software"].fetch_as_array("patterns") + software["packages"] = profile["software"].fetch_as_array("packages") + end + if profile["add-on"] + repos = process_repos + software["extraRepositories"] = repos unless repos.empty? + end return {} if software.empty? { "software" => software } @@ -51,6 +56,19 @@ def read private attr_reader :profile + + def process_repos + repos = profile["add-on"].fetch_as_array("add_on_products") + profile["add-on"].fetch_as_array("add_on_others") + repos.each_with_index.map do |repo, index| + res = {} + res["url"] = repo["media_url"] + res["alias"] = repo["alias"] || "autoyast_#{index}" # alias is mandatory to craft one if needed + res["priority"] = repo["priority"] if repo["priority"] + res["name"] = repo["name"] if repo["name"] + res["productDir"] = repo["product_dir"] if repo["product_dir"] + res + end + end end end end diff --git a/service/test/agama/autoyast/software_reader_test.rb b/service/test/agama/autoyast/software_reader_test.rb index fec65a5d48..674feb799a 100644 --- a/service/test/agama/autoyast/software_reader_test.rb +++ b/service/test/agama/autoyast/software_reader_test.rb @@ -32,6 +32,20 @@ "products" => ["SLE"], "patterns" => ["base", "gnome"], "packages" => ["vim"] + }, + "add-on" => { + "add_on_others" => [ + { + "media_url" => "https://test.com" + }, + { + "media_url" => "https://test2.com", + "product_dir" => "/prod", + "alias" => "prod2", + "priority" => 20, + "name" => "prod 2" + } + ] } } end @@ -62,5 +76,18 @@ expect(patterns).to eq(["vim"]) end end + + context "when a list of add-ons are provided" do + it "includes the list of repositoriess under 'software.extraRepositories'" do + repos = subject.read.dig("software", "extraRepositories") + expect(repos).to_not be_empty + end + + it "generates alias if it is not provided" do + repos = subject.read.dig("software", "extraRepositories") + repo = repos.find { |r| r["url"] == "https://test.com" } + expect(repo["alias"]).to_not be_empty + end + end end end From ab12ce2a391e1c0e8d73ec7c9c428676b2fdd500 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Tue, 10 Jun 2025 09:43:20 +0200 Subject: [PATCH 2/4] update autoyast-compat --- service/share/autoyast-compat.json | 32 +++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/service/share/autoyast-compat.json b/service/share/autoyast-compat.json index a447cd2d50..14e793e5b9 100644 --- a/service/share/autoyast-compat.json +++ b/service/share/autoyast-compat.json @@ -1,5 +1,35 @@ [ - { "key": "add-on", "support": "planned" }, + { + "key": "add-on", + "children": [ + { + "key": "add_on_products", + "children": [ + { "key": "media_url", "support": "yes", "agama": "url" }, + { "key": "product_dir", "support": "yes", "agama": "productDir" }, + { "key": "product", "support": "no" }, + { "key": "alias", "support": "yes" }, + { "key": "priority", "support": "yes" }, + { "key": "ask_on_error", "support": "no" }, + { "key": "confirm_license", "support": "no" }, + { "key": "name", "support": "yes" } + ] + }, + { + "key": "add_on_others", + "children": [ + { "key": "media_url", "support": "yes", "agama": "url" }, + { "key": "product_dir", "support": "yes", "agama": "productDir" }, + { "key": "product", "support": "no" }, + { "key": "alias", "support": "yes" }, + { "key": "priority", "support": "yes" }, + { "key": "ask_on_error", "support": "no" }, + { "key": "confirm_license", "support": "no" }, + { "key": "name", "support": "yes" } + ] + } + ] + }, { "key": "audit-laf", "support": "no" }, { "key": "auth-client", "support": "no" }, { From f89721fe1664471d1f85d85a17ab7aff26192451 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Tue, 10 Jun 2025 09:46:14 +0200 Subject: [PATCH 3/4] make rubocop happy --- service/lib/agama/autoyast/software_reader.rb | 7 ++++--- service/test/agama/autoyast/software_reader_test.rb | 10 +++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/service/lib/agama/autoyast/software_reader.rb b/service/lib/agama/autoyast/software_reader.rb index 3ae7b56298..6dea219309 100755 --- a/service/lib/agama/autoyast/software_reader.rb +++ b/service/lib/agama/autoyast/software_reader.rb @@ -37,7 +37,6 @@ def initialize(profile) # # @return [Hash] Agama "software" section def read - software = {} if profile["software"] @@ -58,11 +57,13 @@ def read attr_reader :profile def process_repos - repos = profile["add-on"].fetch_as_array("add_on_products") + profile["add-on"].fetch_as_array("add_on_others") + repos = profile["add-on"].fetch_as_array("add_on_products") + + profile["add-on"].fetch_as_array("add_on_others") repos.each_with_index.map do |repo, index| res = {} res["url"] = repo["media_url"] - res["alias"] = repo["alias"] || "autoyast_#{index}" # alias is mandatory to craft one if needed + # alias is mandatory to craft one if needed + res["alias"] = repo["alias"] || "autoyast_#{index}" res["priority"] = repo["priority"] if repo["priority"] res["name"] = repo["name"] if repo["name"] res["productDir"] = repo["product_dir"] if repo["product_dir"] diff --git a/service/test/agama/autoyast/software_reader_test.rb b/service/test/agama/autoyast/software_reader_test.rb index 674feb799a..517dd3df6a 100644 --- a/service/test/agama/autoyast/software_reader_test.rb +++ b/service/test/agama/autoyast/software_reader_test.rb @@ -33,17 +33,17 @@ "patterns" => ["base", "gnome"], "packages" => ["vim"] }, - "add-on" => { + "add-on" => { "add_on_others" => [ { "media_url" => "https://test.com" }, { - "media_url" => "https://test2.com", + "media_url" => "https://test2.com", "product_dir" => "/prod", - "alias" => "prod2", - "priority" => 20, - "name" => "prod 2" + "alias" => "prod2", + "priority" => 20, + "name" => "prod 2" } ] } From 30ef5bb156014f7d568ca34e02f7f2417985b3c5 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Tue, 10 Jun 2025 14:09:49 +0200 Subject: [PATCH 4/4] changes from review --- service/package/rubygem-agama-yast.changes | 6 ++++++ service/test/agama/autoyast/software_reader_test.rb | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/service/package/rubygem-agama-yast.changes b/service/package/rubygem-agama-yast.changes index 5439261715..a5e3b407af 100644 --- a/service/package/rubygem-agama-yast.changes +++ b/service/package/rubygem-agama-yast.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Jun 10 12:08:44 UTC 2025 - Josef Reidinger + +- AutoYaST support: add support for add-on elements + (gh#agama-project/agama#2458) + ------------------------------------------------------------------- Fri Jun 6 10:22:36 UTC 2025 - Knut Anderssen diff --git a/service/test/agama/autoyast/software_reader_test.rb b/service/test/agama/autoyast/software_reader_test.rb index 517dd3df6a..33eff2c5ec 100644 --- a/service/test/agama/autoyast/software_reader_test.rb +++ b/service/test/agama/autoyast/software_reader_test.rb @@ -78,7 +78,7 @@ end context "when a list of add-ons are provided" do - it "includes the list of repositoriess under 'software.extraRepositories'" do + it "includes the list of repositories under 'software.extraRepositories'" do repos = subject.read.dig("software", "extraRepositories") expect(repos).to_not be_empty end