From 4cc05ee586638e5969555aaa3c134b0c9b77c03f Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Sun, 2 Aug 2026 11:18:13 +0200 Subject: [PATCH] Support repo metadata field as Repository external link All software updater services now read an optional repo field from the game metadata and upsert it as a "Repository" external link, keyed by (software_id, label) so re-deploys update the existing link instead of creating duplicates. Co-Authored-By: Claude Fable 5 --- apps/api/app/services/software_updater/base_service.rb | 2 +- apps/api/app/services/software_updater/bevy_service.rb | 2 ++ apps/api/app/services/software_updater/c64_service.rb | 2 ++ apps/api/app/services/software_updater/ebitengine_service.rb | 2 ++ apps/api/app/services/software_updater/godot_service.rb | 2 ++ apps/api/app/services/software_updater/love_service.rb | 2 ++ apps/api/app/services/software_updater/phaser_service.rb | 2 ++ apps/api/app/services/software_updater/tic80_service.rb | 4 +++- 8 files changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/api/app/services/software_updater/base_service.rb b/apps/api/app/services/software_updater/base_service.rb index 2f18f21..05da284 100644 --- a/apps/api/app/services/software_updater/base_service.rb +++ b/apps/api/app/services/software_updater/base_service.rb @@ -45,7 +45,7 @@ module SoftwareUpdater def parse_json_metadata(path) raw = JSON.parse(File.read(path), symbolize_names: true) - raw.slice(:name, :title, :author, :desc, :site, :license) + raw.slice(:name, :title, :author, :desc, :site, :repo, :license) end def update_or_create_software(attrs) diff --git a/apps/api/app/services/software_updater/bevy_service.rb b/apps/api/app/services/software_updater/bevy_service.rb index f43ed5c..dab92d0 100644 --- a/apps/api/app/services/software_updater/bevy_service.rb +++ b/apps/api/app/services/software_updater/bevy_service.rb @@ -6,10 +6,12 @@ module SoftwareUpdater metadata = parse_json_metadata(full_path("#{versioned}.metadata.json")) site_url = metadata.delete(:site) + repo_url = metadata.delete(:repo) ActiveRecord::Base.transaction do software = update_or_create_software(metadata.merge(platform: "bevy")) upsert_external_link(software.id, "Source Code", site_url) if site_url.present? + upsert_external_link(software.id, "Repository", repo_url) if repo_url.present? create_release_if_not_exists( software_id: software.id, diff --git a/apps/api/app/services/software_updater/c64_service.rb b/apps/api/app/services/software_updater/c64_service.rb index 3d159c9..43894c0 100644 --- a/apps/api/app/services/software_updater/c64_service.rb +++ b/apps/api/app/services/software_updater/c64_service.rb @@ -5,10 +5,12 @@ module SoftwareUpdater metadata = parse_json_metadata(full_path("#{versioned}.metadata.json")) site_url = metadata.delete(:site) + repo_url = metadata.delete(:repo) ActiveRecord::Base.transaction do software = update_or_create_software(metadata.merge(platform: "c64")) upsert_external_link(software.id, "Source Code", site_url) if site_url.present? + upsert_external_link(software.id, "Repository", repo_url) if repo_url.present? create_release_if_not_exists( software_id: software.id, diff --git a/apps/api/app/services/software_updater/ebitengine_service.rb b/apps/api/app/services/software_updater/ebitengine_service.rb index 3a4364d..168bb94 100644 --- a/apps/api/app/services/software_updater/ebitengine_service.rb +++ b/apps/api/app/services/software_updater/ebitengine_service.rb @@ -6,10 +6,12 @@ module SoftwareUpdater metadata = parse_json_metadata(full_path("#{versioned}.metadata.json")) site_url = metadata.delete(:site) + repo_url = metadata.delete(:repo) ActiveRecord::Base.transaction do software = update_or_create_software(metadata.merge(platform: "ebitengine")) upsert_external_link(software.id, "Source Code", site_url) if site_url.present? + upsert_external_link(software.id, "Repository", repo_url) if repo_url.present? create_release_if_not_exists( software_id: software.id, diff --git a/apps/api/app/services/software_updater/godot_service.rb b/apps/api/app/services/software_updater/godot_service.rb index ce4882c..a4c83f7 100644 --- a/apps/api/app/services/software_updater/godot_service.rb +++ b/apps/api/app/services/software_updater/godot_service.rb @@ -6,10 +6,12 @@ module SoftwareUpdater metadata = parse_json_metadata(full_path("#{versioned}.metadata.json")) site_url = metadata.delete(:site) + repo_url = metadata.delete(:repo) ActiveRecord::Base.transaction do software = update_or_create_software(metadata.merge(platform: "godot")) upsert_external_link(software.id, "Source Code", site_url) if site_url.present? + upsert_external_link(software.id, "Repository", repo_url) if repo_url.present? create_release_if_not_exists( software_id: software.id, diff --git a/apps/api/app/services/software_updater/love_service.rb b/apps/api/app/services/software_updater/love_service.rb index 2e7580b..26e00ab 100644 --- a/apps/api/app/services/software_updater/love_service.rb +++ b/apps/api/app/services/software_updater/love_service.rb @@ -6,10 +6,12 @@ module SoftwareUpdater metadata = parse_json_metadata(full_path("#{versioned}.metadata.json")) site_url = metadata.delete(:site) + repo_url = metadata.delete(:repo) ActiveRecord::Base.transaction do software = update_or_create_software(metadata.merge(platform: "love")) upsert_external_link(software.id, "Source Code", site_url) if site_url.present? + upsert_external_link(software.id, "Repository", repo_url) if repo_url.present? create_release_if_not_exists( software_id: software.id, diff --git a/apps/api/app/services/software_updater/phaser_service.rb b/apps/api/app/services/software_updater/phaser_service.rb index f72d3f9..7d66192 100644 --- a/apps/api/app/services/software_updater/phaser_service.rb +++ b/apps/api/app/services/software_updater/phaser_service.rb @@ -6,10 +6,12 @@ module SoftwareUpdater metadata = parse_json_metadata(full_path("#{versioned}.metadata.json")) site_url = metadata.delete(:site) + repo_url = metadata.delete(:repo) ActiveRecord::Base.transaction do software = update_or_create_software(metadata.merge(platform: "phaser")) upsert_external_link(software.id, "Source Code", site_url) if site_url.present? + upsert_external_link(software.id, "Repository", repo_url) if repo_url.present? create_release_if_not_exists( software_id: software.id, diff --git a/apps/api/app/services/software_updater/tic80_service.rb b/apps/api/app/services/software_updater/tic80_service.rb index f90ee30..7d90b61 100644 --- a/apps/api/app/services/software_updater/tic80_service.rb +++ b/apps/api/app/services/software_updater/tic80_service.rb @@ -9,10 +9,12 @@ module SoftwareUpdater metadata = parse_lua_metadata(full_path("#{versioned}.lua")) site_url = metadata.delete(:site) + repo_url = metadata.delete(:repo) ActiveRecord::Base.transaction do software = update_or_create_software(metadata.merge(platform: "tic80")) upsert_external_link(software.id, "Source Code", site_url) if site_url.present? + upsert_external_link(software.id, "Repository", repo_url) if repo_url.present? create_release_if_not_exists( software_id: software.id, @@ -37,7 +39,7 @@ module SoftwareUpdater value = parts[1].strip metadata[key] = value end - metadata.slice(:name, :title, :author, :desc, :site, :license) + metadata.slice(:name, :title, :author, :desc, :site, :repo, :license) end end end