diff --git a/app/controllers/warp_engine/build/publish_controller.rb b/app/controllers/warp_engine/build/publish_controller.rb index 3c108f9..cfb8915 100644 --- a/app/controllers/warp_engine/build/publish_controller.rb +++ b/app/controllers/warp_engine/build/publish_controller.rb @@ -29,13 +29,13 @@ module WarpEngine return render json: { error: "Forbidden" }, status: :forbidden end - input = WarpEngine::UpdateInputDto.new( + input = WarpEngine::PublishInputDto.new( platform: params[:platform], name: params[:name], version: params[:version] ) - WarpEngine::UpdateService.new.update(input) + WarpEngine::PublishService.new.publish(input) claim_software_ownership(params[:name]) render json: { published: true, name: params[:name], platform: params[:platform], version: params[:version] } diff --git a/app/dtos/warp_engine/update_input_dto.rb b/app/dtos/warp_engine/publish_input_dto.rb similarity index 54% rename from app/dtos/warp_engine/update_input_dto.rb rename to app/dtos/warp_engine/publish_input_dto.rb index 7f64251..b142a52 100644 --- a/app/dtos/warp_engine/update_input_dto.rb +++ b/app/dtos/warp_engine/publish_input_dto.rb @@ -1,5 +1,5 @@ module WarpEngine - UpdateInputDto = Struct.new(:platform, :name, :version, keyword_init: true) do + PublishInputDto = Struct.new(:platform, :name, :version, keyword_init: true) do def initialize(platform:, name:, version: nil) super end diff --git a/app/services/concerns/warp_engine/software_updater/archive_extraction.rb b/app/services/concerns/warp_engine/platforms/archive_extraction.rb similarity index 97% rename from app/services/concerns/warp_engine/software_updater/archive_extraction.rb rename to app/services/concerns/warp_engine/platforms/archive_extraction.rb index 1c8ec46..a286fd7 100644 --- a/app/services/concerns/warp_engine/software_updater/archive_extraction.rb +++ b/app/services/concerns/warp_engine/platforms/archive_extraction.rb @@ -2,7 +2,7 @@ require "zip" require "fileutils" module WarpEngine - module SoftwareUpdater + module Platforms module ArchiveExtraction private diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_cartridge.rb b/app/services/concerns/warp_engine/platforms/builds/build_cartridge.rb similarity index 95% rename from app/services/concerns/warp_engine/software_updater/builds/build_cartridge.rb rename to app/services/concerns/warp_engine/platforms/builds/build_cartridge.rb index ff4ada6..173fee6 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_cartridge.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_cartridge.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildCartridge extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_docs.rb b/app/services/concerns/warp_engine/platforms/builds/build_docs.rb similarity index 96% rename from app/services/concerns/warp_engine/software_updater/builds/build_docs.rb rename to app/services/concerns/warp_engine/platforms/builds/build_docs.rb index a9f42eb..267499b 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_docs.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_docs.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildDocs extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_linux_x64.rb b/app/services/concerns/warp_engine/platforms/builds/build_linux_x64.rb similarity index 94% rename from app/services/concerns/warp_engine/software_updater/builds/build_linux_x64.rb rename to app/services/concerns/warp_engine/platforms/builds/build_linux_x64.rb index f53406b..079fad1 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_linux_x64.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_linux_x64.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildLinuxX64 extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_mac_arm64.rb b/app/services/concerns/warp_engine/platforms/builds/build_mac_arm64.rb similarity index 94% rename from app/services/concerns/warp_engine/software_updater/builds/build_mac_arm64.rb rename to app/services/concerns/warp_engine/platforms/builds/build_mac_arm64.rb index 17d3c55..345bb15 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_mac_arm64.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_mac_arm64.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildMacArm64 extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_mac_universal.rb b/app/services/concerns/warp_engine/platforms/builds/build_mac_universal.rb similarity index 94% rename from app/services/concerns/warp_engine/software_updater/builds/build_mac_universal.rb rename to app/services/concerns/warp_engine/platforms/builds/build_mac_universal.rb index 003022a..463e56c 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_mac_universal.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_mac_universal.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildMacUniversal extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_mac_x64.rb b/app/services/concerns/warp_engine/platforms/builds/build_mac_x64.rb similarity index 93% rename from app/services/concerns/warp_engine/software_updater/builds/build_mac_x64.rb rename to app/services/concerns/warp_engine/platforms/builds/build_mac_x64.rb index eafa2bb..39cc9a2 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_mac_x64.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_mac_x64.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildMacX64 extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_source.rb b/app/services/concerns/warp_engine/platforms/builds/build_source.rb similarity index 95% rename from app/services/concerns/warp_engine/software_updater/builds/build_source.rb rename to app/services/concerns/warp_engine/platforms/builds/build_source.rb index 04c8b99..e29e2e8 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_source.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_source.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildSource extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_web.rb b/app/services/concerns/warp_engine/platforms/builds/build_web.rb similarity index 95% rename from app/services/concerns/warp_engine/software_updater/builds/build_web.rb rename to app/services/concerns/warp_engine/platforms/builds/build_web.rb index 185851c..2a3eca8 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_web.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_web.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildWeb extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_win_x64.rb b/app/services/concerns/warp_engine/platforms/builds/build_win_x64.rb similarity index 93% rename from app/services/concerns/warp_engine/software_updater/builds/build_win_x64.rb rename to app/services/concerns/warp_engine/platforms/builds/build_win_x64.rb index 7ffaeb8..eb3e7e7 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_win_x64.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_win_x64.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildWinX64 extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/builds/build_win_x86.rb b/app/services/concerns/warp_engine/platforms/builds/build_win_x86.rb similarity index 93% rename from app/services/concerns/warp_engine/software_updater/builds/build_win_x86.rb rename to app/services/concerns/warp_engine/platforms/builds/build_win_x86.rb index ab1750f..de6de68 100644 --- a/app/services/concerns/warp_engine/software_updater/builds/build_win_x86.rb +++ b/app/services/concerns/warp_engine/platforms/builds/build_win_x86.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Builds module BuildWinX86 extend ActiveSupport::Concern diff --git a/app/services/concerns/warp_engine/software_updater/metadata_parsing.rb b/app/services/concerns/warp_engine/platforms/metadata_parsing.rb similarity index 92% rename from app/services/concerns/warp_engine/software_updater/metadata_parsing.rb rename to app/services/concerns/warp_engine/platforms/metadata_parsing.rb index 805cc43..3d32e6c 100644 --- a/app/services/concerns/warp_engine/software_updater/metadata_parsing.rb +++ b/app/services/concerns/warp_engine/platforms/metadata_parsing.rb @@ -1,7 +1,7 @@ require "json" module WarpEngine - module SoftwareUpdater + module Platforms module MetadataParsing METADATA_KEYS = %i[name title author desc site repo license].freeze diff --git a/app/services/concerns/warp_engine/software_updater/software_persistence.rb b/app/services/concerns/warp_engine/platforms/software_persistence.rb similarity index 97% rename from app/services/concerns/warp_engine/software_updater/software_persistence.rb rename to app/services/concerns/warp_engine/platforms/software_persistence.rb index 5fc87e5..8ae1a18 100644 --- a/app/services/concerns/warp_engine/software_updater/software_persistence.rb +++ b/app/services/concerns/warp_engine/platforms/software_persistence.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module SoftwarePersistence private diff --git a/app/services/concerns/warp_engine/software_updater/updatable.rb b/app/services/concerns/warp_engine/platforms/updatable.rb similarity index 95% rename from app/services/concerns/warp_engine/software_updater/updatable.rb rename to app/services/concerns/warp_engine/platforms/updatable.rb index ce2646a..4088d57 100644 --- a/app/services/concerns/warp_engine/software_updater/updatable.rb +++ b/app/services/concerns/warp_engine/platforms/updatable.rb @@ -1,5 +1,5 @@ module WarpEngine - module SoftwareUpdater + module Platforms module Updatable extend ActiveSupport::Concern include ArchiveExtraction @@ -9,7 +9,7 @@ module WarpEngine class_methods do def platform(value = nil) @platform = value if value - @platform ||= name.demodulize.delete_suffix("Service").downcase + @platform ||= name.deconstantize.demodulize.downcase end def label(value = nil) diff --git a/app/services/warp_engine/builds_service.rb b/app/services/warp_engine/builds_service.rb index 270c41b..7ab9285 100644 --- a/app/services/warp_engine/builds_service.rb +++ b/app/services/warp_engine/builds_service.rb @@ -2,7 +2,7 @@ module WarpEngine class BuildsService def index platforms = WarpEngine::PlatformLink::SUPPORTED_PLATFORMS.each_with_object({}) do |platform, hash| - service_class = "WarpEngine::SoftwareUpdater::#{platform.camelize}Service".constantize + service_class = "WarpEngine::Platforms::#{platform.camelize}::Service".constantize hash[platform] = { label: service_class.label, kinds: service_class.expected_kinds @@ -16,7 +16,7 @@ module WarpEngine def show(name) software = WarpEngine::Software.find_by!(name: name) - service_class = "WarpEngine::SoftwareUpdater::#{software.platform.camelize}Service".constantize + service_class = "WarpEngine::Platforms::#{software.platform.camelize}::Service".constantize expected = service_class.expected_kinds releases = software.releases.includes(:release_assets).order(updated_at: :desc) diff --git a/app/services/warp_engine/ci_config_service.rb b/app/services/warp_engine/ci_config_service.rb index 0a8833a..5af3582 100644 --- a/app/services/warp_engine/ci_config_service.rb +++ b/app/services/warp_engine/ci_config_service.rb @@ -2,8 +2,8 @@ require "erb" module WarpEngine # Renders the /build/config platform templates: the pipeline logic lives in - # lib/warp_engine/ci_templates/.yaml.erb, the per-platform builder - # images come from WarpEngine.config.ci_platforms. + # app/services/warp_engine/platforms//pipeline.yaml.erb, the + # per-platform builder images come from WarpEngine.config.ci_platforms. class CiConfigService PLATFORM_FORMAT = /\A[a-z0-9_-]+\z/ @@ -15,7 +15,7 @@ module WarpEngine spec = platform_spec(platform) return nil if spec.nil? - path = templates_dir.join("#{platform}.yaml.erb") + path = templates_dir.join(platform, "pipeline.yaml.erb") return nil unless path.exist? ERB.new(path.read, trim_mode: "-").result_with_hash( @@ -34,7 +34,7 @@ module WarpEngine end def templates_dir - WarpEngine::Engine.root.join("lib", "warp_engine", "ci_templates") + WarpEngine::Engine.root.join("app", "services", "warp_engine", "platforms") end end end diff --git a/lib/warp_engine/ci_templates/bevy.yaml.erb b/app/services/warp_engine/platforms/bevy/pipeline.yaml.erb similarity index 100% rename from lib/warp_engine/ci_templates/bevy.yaml.erb rename to app/services/warp_engine/platforms/bevy/pipeline.yaml.erb diff --git a/app/services/warp_engine/platforms/bevy/service.rb b/app/services/warp_engine/platforms/bevy/service.rb new file mode 100644 index 0000000..01cf885 --- /dev/null +++ b/app/services/warp_engine/platforms/bevy/service.rb @@ -0,0 +1,14 @@ +module WarpEngine + module Platforms + module Bevy + class Service + include Updatable + include Builds::BuildWeb + include Builds::BuildWinX64 + include Builds::BuildLinuxX64 + + label "Bevy" + end + end + end +end diff --git a/lib/warp_engine/ci_templates/c64.yaml.erb b/app/services/warp_engine/platforms/c64/pipeline.yaml.erb similarity index 100% rename from lib/warp_engine/ci_templates/c64.yaml.erb rename to app/services/warp_engine/platforms/c64/pipeline.yaml.erb diff --git a/app/services/warp_engine/platforms/c64/service.rb b/app/services/warp_engine/platforms/c64/service.rb new file mode 100644 index 0000000..266b01c --- /dev/null +++ b/app/services/warp_engine/platforms/c64/service.rb @@ -0,0 +1,14 @@ +module WarpEngine + module Platforms + module C64 + class Service + include Updatable + include Builds::BuildCartridge + + label "C64" + + def cartridge_ext = ".prg" + end + end + end +end diff --git a/lib/warp_engine/ci_templates/ebitengine.yaml.erb b/app/services/warp_engine/platforms/ebitengine/pipeline.yaml.erb similarity index 100% rename from lib/warp_engine/ci_templates/ebitengine.yaml.erb rename to app/services/warp_engine/platforms/ebitengine/pipeline.yaml.erb diff --git a/app/services/warp_engine/platforms/ebitengine/service.rb b/app/services/warp_engine/platforms/ebitengine/service.rb new file mode 100644 index 0000000..e5cfa11 --- /dev/null +++ b/app/services/warp_engine/platforms/ebitengine/service.rb @@ -0,0 +1,17 @@ +module WarpEngine + module Platforms + module Ebitengine + class Service + include Updatable + include Builds::BuildWeb + include Builds::BuildWinX86 + include Builds::BuildWinX64 + include Builds::BuildLinuxX64 + include Builds::BuildMacX64 + include Builds::BuildMacArm64 + + label "Ebitengine" + end + end + end +end diff --git a/lib/warp_engine/ci_templates/godot.yaml.erb b/app/services/warp_engine/platforms/godot/pipeline.yaml.erb similarity index 100% rename from lib/warp_engine/ci_templates/godot.yaml.erb rename to app/services/warp_engine/platforms/godot/pipeline.yaml.erb diff --git a/app/services/warp_engine/platforms/godot/service.rb b/app/services/warp_engine/platforms/godot/service.rb new file mode 100644 index 0000000..ec1a940 --- /dev/null +++ b/app/services/warp_engine/platforms/godot/service.rb @@ -0,0 +1,16 @@ +module WarpEngine + module Platforms + module Godot + class Service + include Updatable + include Builds::BuildWeb + include Builds::BuildWinX86 + include Builds::BuildWinX64 + include Builds::BuildLinuxX64 + include Builds::BuildMacUniversal + + label "Godot" + end + end + end +end diff --git a/lib/warp_engine/ci_templates/love.yaml.erb b/app/services/warp_engine/platforms/love/pipeline.yaml.erb similarity index 100% rename from lib/warp_engine/ci_templates/love.yaml.erb rename to app/services/warp_engine/platforms/love/pipeline.yaml.erb diff --git a/app/services/warp_engine/platforms/love/service.rb b/app/services/warp_engine/platforms/love/service.rb new file mode 100644 index 0000000..daa65ff --- /dev/null +++ b/app/services/warp_engine/platforms/love/service.rb @@ -0,0 +1,15 @@ +module WarpEngine + module Platforms + module Love + class Service + include Updatable + include Builds::BuildWeb + include Builds::BuildWinX64 + include Builds::BuildLinuxX64 + include Builds::BuildMacUniversal + + label "LÖVE" + end + end + end +end diff --git a/lib/warp_engine/ci_templates/phaser.yaml.erb b/app/services/warp_engine/platforms/phaser/pipeline.yaml.erb similarity index 100% rename from lib/warp_engine/ci_templates/phaser.yaml.erb rename to app/services/warp_engine/platforms/phaser/pipeline.yaml.erb diff --git a/app/services/warp_engine/platforms/phaser/service.rb b/app/services/warp_engine/platforms/phaser/service.rb new file mode 100644 index 0000000..d1133c7 --- /dev/null +++ b/app/services/warp_engine/platforms/phaser/service.rb @@ -0,0 +1,12 @@ +module WarpEngine + module Platforms + module Phaser + class Service + include Updatable + include Builds::BuildWeb + + label "Phaser" + end + end + end +end diff --git a/lib/warp_engine/ci_templates/tic80.yaml.erb b/app/services/warp_engine/platforms/tic80/pipeline.yaml.erb similarity index 100% rename from lib/warp_engine/ci_templates/tic80.yaml.erb rename to app/services/warp_engine/platforms/tic80/pipeline.yaml.erb diff --git a/app/services/warp_engine/platforms/tic80/service.rb b/app/services/warp_engine/platforms/tic80/service.rb new file mode 100644 index 0000000..1de7d31 --- /dev/null +++ b/app/services/warp_engine/platforms/tic80/service.rb @@ -0,0 +1,40 @@ +module WarpEngine + module Platforms + module Tic80 + class Service + include Updatable + include Builds::BuildCartridge + include Builds::BuildSource + include Builds::BuildWeb + include Builds::BuildDocs + include Builds::BuildWinX64 + include Builds::BuildLinuxX64 + include Builds::BuildMacX64 + + label "TIC-80" + + def cartridge_ext = ".tic" + def source_ext = ".lua" + + private + + def parse_metadata(versioned) + parse_lua_metadata(full_path("#{versioned}.lua")) + end + + def parse_lua_metadata(source_path) + metadata = {} + File.foreach(source_path) do |line| + break unless line.start_with?("--") + parts = line[2..].split(":", 2) + next if parts.length != 2 + key = parts[0].strip.downcase.to_sym + value = parts[1].strip + metadata[key] = value + end + metadata.slice(*MetadataParsing::METADATA_KEYS) + end + end + end + end +end diff --git a/app/services/warp_engine/update_service.rb b/app/services/warp_engine/publish_service.rb similarity index 55% rename from app/services/warp_engine/update_service.rb rename to app/services/warp_engine/publish_service.rb index 5a498ec..d864647 100644 --- a/app/services/warp_engine/update_service.rb +++ b/app/services/warp_engine/publish_service.rb @@ -1,11 +1,11 @@ module WarpEngine - class UpdateService - def update(input) + class PublishService + def publish(input) unless WarpEngine::PlatformLink::SUPPORTED_PLATFORMS.include?(input.platform) raise ArgumentError, "Unsupported platform: #{input.platform}" end - "WarpEngine::SoftwareUpdater::#{input.platform.camelize}Service".constantize.new.update(input.name, input.version) + "WarpEngine::Platforms::#{input.platform.camelize}::Service".constantize.new.update(input.name, input.version) end end end diff --git a/app/services/warp_engine/software_updater/bevy_service.rb b/app/services/warp_engine/software_updater/bevy_service.rb deleted file mode 100644 index d6a6683..0000000 --- a/app/services/warp_engine/software_updater/bevy_service.rb +++ /dev/null @@ -1,12 +0,0 @@ -module WarpEngine - module SoftwareUpdater - class BevyService - include Updatable - include Builds::BuildWeb - include Builds::BuildWinX64 - include Builds::BuildLinuxX64 - - label "Bevy" - end - end -end diff --git a/app/services/warp_engine/software_updater/c64_service.rb b/app/services/warp_engine/software_updater/c64_service.rb deleted file mode 100644 index 978422a..0000000 --- a/app/services/warp_engine/software_updater/c64_service.rb +++ /dev/null @@ -1,12 +0,0 @@ -module WarpEngine - module SoftwareUpdater - class C64Service - include Updatable - include Builds::BuildCartridge - - label "C64" - - def cartridge_ext = ".prg" - end - end -end diff --git a/app/services/warp_engine/software_updater/ebitengine_service.rb b/app/services/warp_engine/software_updater/ebitengine_service.rb deleted file mode 100644 index 4109562..0000000 --- a/app/services/warp_engine/software_updater/ebitengine_service.rb +++ /dev/null @@ -1,15 +0,0 @@ -module WarpEngine - module SoftwareUpdater - class EbitengineService - include Updatable - include Builds::BuildWeb - include Builds::BuildWinX86 - include Builds::BuildWinX64 - include Builds::BuildLinuxX64 - include Builds::BuildMacX64 - include Builds::BuildMacArm64 - - label "Ebitengine" - end - end -end diff --git a/app/services/warp_engine/software_updater/godot_service.rb b/app/services/warp_engine/software_updater/godot_service.rb deleted file mode 100644 index 4a72a55..0000000 --- a/app/services/warp_engine/software_updater/godot_service.rb +++ /dev/null @@ -1,14 +0,0 @@ -module WarpEngine - module SoftwareUpdater - class GodotService - include Updatable - include Builds::BuildWeb - include Builds::BuildWinX86 - include Builds::BuildWinX64 - include Builds::BuildLinuxX64 - include Builds::BuildMacUniversal - - label "Godot" - end - end -end diff --git a/app/services/warp_engine/software_updater/love_service.rb b/app/services/warp_engine/software_updater/love_service.rb deleted file mode 100644 index 667ce4b..0000000 --- a/app/services/warp_engine/software_updater/love_service.rb +++ /dev/null @@ -1,13 +0,0 @@ -module WarpEngine - module SoftwareUpdater - class LoveService - include Updatable - include Builds::BuildWeb - include Builds::BuildWinX64 - include Builds::BuildLinuxX64 - include Builds::BuildMacUniversal - - label "LÖVE" - end - end -end diff --git a/app/services/warp_engine/software_updater/phaser_service.rb b/app/services/warp_engine/software_updater/phaser_service.rb deleted file mode 100644 index 3beb402..0000000 --- a/app/services/warp_engine/software_updater/phaser_service.rb +++ /dev/null @@ -1,10 +0,0 @@ -module WarpEngine - module SoftwareUpdater - class PhaserService - include Updatable - include Builds::BuildWeb - - label "Phaser" - end - end -end diff --git a/app/services/warp_engine/software_updater/tic80_service.rb b/app/services/warp_engine/software_updater/tic80_service.rb deleted file mode 100644 index 2eaa6f0..0000000 --- a/app/services/warp_engine/software_updater/tic80_service.rb +++ /dev/null @@ -1,38 +0,0 @@ -module WarpEngine - module SoftwareUpdater - class Tic80Service - include Updatable - include Builds::BuildCartridge - include Builds::BuildSource - include Builds::BuildWeb - include Builds::BuildDocs - include Builds::BuildWinX64 - include Builds::BuildLinuxX64 - include Builds::BuildMacX64 - - label "TIC-80" - - def cartridge_ext = ".tic" - def source_ext = ".lua" - - private - - def parse_metadata(versioned) - parse_lua_metadata(full_path("#{versioned}.lua")) - end - - def parse_lua_metadata(source_path) - metadata = {} - File.foreach(source_path) do |line| - break unless line.start_with?("--") - parts = line[2..].split(":", 2) - next if parts.length != 2 - key = parts[0].strip.downcase.to_sym - value = parts[1].strip - metadata[key] = value - end - metadata.slice(*MetadataParsing::METADATA_KEYS) - end - end - end -end diff --git a/spec/requests/build_configs_controller_spec.rb b/spec/requests/build_configs_controller_spec.rb index ac38105..ebd06d5 100644 --- a/spec/requests/build_configs_controller_spec.rb +++ b/spec/requests/build_configs_controller_spec.rb @@ -184,11 +184,11 @@ RSpec.describe "Build configs endpoint", type: :request do describe "shipped templates" do it "renders every template to valid YAML with non-empty steps" do - templates = Dir[WarpEngine::Engine.root.join("lib/warp_engine/ci_templates/*.yaml.erb")] + templates = Dir[WarpEngine::Engine.root.join("app/services/warp_engine/platforms/*/pipeline.yaml.erb")] expect(templates).not_to be_empty templates.each do |path| - platform = File.basename(path, ".yaml.erb") + platform = File.basename(File.dirname(path)) allow(WarpEngine.config).to receive(:ci_platforms).and_return( platform => { builder: "registry.example/builder:1", exporter: "registry.example/exporter:1" } ) diff --git a/spec/requests/build_publish_controller_spec.rb b/spec/requests/build_publish_controller_spec.rb index 2197f32..31b730a 100644 --- a/spec/requests/build_publish_controller_spec.rb +++ b/spec/requests/build_publish_controller_spec.rb @@ -6,8 +6,8 @@ RSpec.describe "POST /build/publish", type: :request do end def stub_updater - updater = instance_double(WarpEngine::SoftwareUpdater::Tic80Service) - allow(WarpEngine::SoftwareUpdater::Tic80Service).to receive(:new).and_return(updater) + updater = instance_double(WarpEngine::Platforms::Tic80::Service) + allow(WarpEngine::Platforms::Tic80::Service).to receive(:new).and_return(updater) allow(updater).to receive(:update) updater end diff --git a/spec/services/software_updater/tic80_service_spec.rb b/spec/services/platforms/tic80_service_spec.rb similarity index 97% rename from spec/services/software_updater/tic80_service_spec.rb rename to spec/services/platforms/tic80_service_spec.rb index 4170300..668ac32 100644 --- a/spec/services/software_updater/tic80_service_spec.rb +++ b/spec/services/platforms/tic80_service_spec.rb @@ -1,7 +1,7 @@ require "rails_helper" require "zip" -RSpec.describe WarpEngine::SoftwareUpdater::Tic80Service do +RSpec.describe WarpEngine::Platforms::Tic80::Service do let(:tmpdir) { Dir.mktmpdir } let(:name) { "spectic" } let(:version) { "9.9" } diff --git a/spec/services/publish_service_spec.rb b/spec/services/publish_service_spec.rb new file mode 100644 index 0000000..6b6b564 --- /dev/null +++ b/spec/services/publish_service_spec.rb @@ -0,0 +1,59 @@ +require "rails_helper" + +RSpec.describe WarpEngine::PublishService do + describe "#publish" do + it "raises ArgumentError for unsupported platform" do + input = WarpEngine::PublishInputDto.new(platform: "unknown", name: "game", version: "1.0") + + expect { described_class.new.publish(input) }.to raise_error(ArgumentError, /Unsupported platform/) + end + + it "routes to correct platform service" do + input = WarpEngine::PublishInputDto.new(platform: "tic80", name: "game", version: "1.0") + mock_service = instance_double(WarpEngine::Platforms::Tic80::Service) + + allow(WarpEngine::Platforms::Tic80::Service).to receive(:new).and_return(mock_service) + allow(mock_service).to receive(:update) + + described_class.new.publish(input) + + expect(mock_service).to have_received(:update).with("game", "1.0") + end + + it "routes godot platform to Godot::Service" do + input = WarpEngine::PublishInputDto.new(platform: "godot", name: "game", version: "1.0") + mock_service = instance_double(WarpEngine::Platforms::Godot::Service) + + allow(WarpEngine::Platforms::Godot::Service).to receive(:new).and_return(mock_service) + allow(mock_service).to receive(:update) + + described_class.new.publish(input) + + expect(mock_service).to have_received(:update).with("game", "1.0") + end + + it "routes bevy platform to Bevy::Service" do + input = WarpEngine::PublishInputDto.new(platform: "bevy", name: "game", version: "1.0") + mock_service = instance_double(WarpEngine::Platforms::Bevy::Service) + + allow(WarpEngine::Platforms::Bevy::Service).to receive(:new).and_return(mock_service) + allow(mock_service).to receive(:update) + + described_class.new.publish(input) + + expect(mock_service).to have_received(:update).with("game", "1.0") + end + + it "routes phaser platform to Phaser::Service" do + input = WarpEngine::PublishInputDto.new(platform: "phaser", name: "game", version: "1.0") + mock_service = instance_double(WarpEngine::Platforms::Phaser::Service) + + allow(WarpEngine::Platforms::Phaser::Service).to receive(:new).and_return(mock_service) + allow(mock_service).to receive(:update) + + described_class.new.publish(input) + + expect(mock_service).to have_received(:update).with("game", "1.0") + end + end +end diff --git a/spec/services/update_service_spec.rb b/spec/services/update_service_spec.rb deleted file mode 100644 index ca874a9..0000000 --- a/spec/services/update_service_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -require "rails_helper" - -RSpec.describe WarpEngine::UpdateService do - describe "#update" do - it "raises ArgumentError for unsupported platform" do - input = WarpEngine::UpdateInputDto.new(platform: "unknown", name: "game", version: "1.0") - - expect { described_class.new.update(input) }.to raise_error(ArgumentError, /Unsupported platform/) - end - - it "routes to correct platform service" do - input = WarpEngine::UpdateInputDto.new(platform: "tic80", name: "game", version: "1.0") - mock_service = instance_double(WarpEngine::SoftwareUpdater::Tic80Service) - - allow(WarpEngine::SoftwareUpdater::Tic80Service).to receive(:new).and_return(mock_service) - allow(mock_service).to receive(:update) - - described_class.new.update(input) - - expect(mock_service).to have_received(:update).with("game", "1.0") - end - - it "routes godot platform to GodotService" do - input = WarpEngine::UpdateInputDto.new(platform: "godot", name: "game", version: "1.0") - mock_service = instance_double(WarpEngine::SoftwareUpdater::GodotService) - - allow(WarpEngine::SoftwareUpdater::GodotService).to receive(:new).and_return(mock_service) - allow(mock_service).to receive(:update) - - described_class.new.update(input) - - expect(mock_service).to have_received(:update).with("game", "1.0") - end - - it "routes bevy platform to BevyService" do - input = WarpEngine::UpdateInputDto.new(platform: "bevy", name: "game", version: "1.0") - mock_service = instance_double(WarpEngine::SoftwareUpdater::BevyService) - - allow(WarpEngine::SoftwareUpdater::BevyService).to receive(:new).and_return(mock_service) - allow(mock_service).to receive(:update) - - described_class.new.update(input) - - expect(mock_service).to have_received(:update).with("game", "1.0") - end - - it "routes phaser platform to PhaserService" do - input = WarpEngine::UpdateInputDto.new(platform: "phaser", name: "game", version: "1.0") - mock_service = instance_double(WarpEngine::SoftwareUpdater::PhaserService) - - allow(WarpEngine::SoftwareUpdater::PhaserService).to receive(:new).and_return(mock_service) - allow(mock_service).to receive(:update) - - described_class.new.update(input) - - expect(mock_service).to have_received(:update).with("game", "1.0") - end - end -end