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 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 11:18:13 +02:00
co-authored by Claude Fable 5
parent a275b5e72a
commit 4cc05ee586
8 changed files with 16 additions and 2 deletions
@@ -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)
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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