diff --git a/.github/workflows/build-tebako.yml b/.github/workflows/build-tebako.yml new file mode 100644 index 0000000..61c23b0 --- /dev/null +++ b/.github/workflows/build-tebako.yml @@ -0,0 +1,47 @@ +name: Build Launcher Binary + +on: + push: + branches: [ master, test ] + workflow_dispatch: + +jobs: + build-tebako: + runs-on: ubuntu-latest + strategy: + matrix: + architecture: [x64] + container: + image: ghcr.io/tamatebako/tebako-ubuntu-20.04:latest + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + + - name: Install Gosu and native dependencies + run: | + apt-get update + apt-get install -y libsdl2-dev libgl1-mesa-dev libopenal-dev libgmp-dev libfontconfig1-dev libsndfile1-dev libmpg123-dev libpango1.0-dev libtool libssl-dev libffi-dev + + - name: Update Bundler and lockfile + run: | + gem install bundler -v 2.4.22 + bundle _2.4.22_ lock --update --bundler + + - name: Build Tebako binary + run: | + tebako press -P -R 3.4.1 -m bundle -o w3d_hub_linux_launcher -r $PWD -e w3d_hub_linux_launcher.rb + + - name: Prepare artifact directory + run: | + mkdir w3d-hub-launcher-x86_64 + cp w3d_hub_linux_launcher w3d-hub-launcher-x86_64/ + cp -r media w3d-hub-launcher-x86_64/ + cp -r locales w3d-hub-launcher-x86_64/ + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: w3d-hub-launcher-x86_64 + path: w3d-hub-launcher-x86_64 diff --git a/lib/api.rb b/lib/api.rb index ca2f931..3d7701a 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -1,5 +1,19 @@ class W3DHub class Api + + # Detect CA bundle path for Excon + def self.ca_bundle_path + redhat_path = '/etc/pki/tls/certs/ca-bundle.crt' + debian_path = '/etc/ssl/certs/ca-certificates.crt' + [redhat_path, debian_path].find { |path| File.exist?(path) } + end + + # Set Excon default CA file if found + ca_file = ca_bundle_path + if ca_file + Excon.defaults[:ssl_ca_file] = ca_file + end + LOG_TAG = "W3DHub::Api".freeze API_TIMEOUT = 30 # seconds diff --git a/lib/asterisk/irc_client.rb b/lib/asterisk/irc_client.rb index 5f2dafd..0c7541a 100644 --- a/lib/asterisk/irc_client.rb +++ b/lib/asterisk/irc_client.rb @@ -10,6 +10,15 @@ class W3DHub TAG = "IRCClient" class SSL + # Detect system CA bundle path for SSL verification + def self.ca_bundle_path + [ + '/etc/ssl/certs/ca-certificates.crt', # Debian/Ubuntu + '/etc/pki/tls/certs/ca-bundle.crt', # RHEL/Fedora/CentOS + '/etc/ssl/ca-bundle.pem' # Some other distros + ].find { |path| File.exist?(path) } + end + def self.default_context verify_peer_and_hostname end @@ -23,7 +32,13 @@ class W3DHub def self.verify_peer no_verify.tap do |context| context.verify_mode = OpenSSL::SSL::VERIFY_PEER - context.cert_store = OpenSSL::X509::Store.new.tap(&:set_default_paths) + context.cert_store = OpenSSL::X509::Store.new + ca_file = ca_bundle_path + if ca_file + context.cert_store.add_file(ca_file) + else + context.cert_store.set_default_paths + end end end diff --git a/lib/pages/community.rb b/lib/pages/community.rb index 926e64a..4ae3fdd 100644 --- a/lib/pages/community.rb +++ b/lib/pages/community.rb @@ -161,7 +161,13 @@ class W3DHub flow(width: 1.0, max_width: 1230, height: 200, margin: 8, border_thickness: 1, border_color: lighten(Gosu::Color.new(0xff_252525))) do background 0x44_000000 - image image_path, height: 1.0 + # Ensure the image file exists before trying to load it + if File.exist?(image_path) + image image_path, height: 1.0 + else + logger.warn("W3DHub::Community") { "Image not found in cache: #{image_path}" } + image BLACK_IMAGE, height: 1.0 + end stack(fill: true, height: 1.0, padding: 4, border_thickness_left: 1, border_color_left: lighten(Gosu::Color.new(0xff_252525))) do tagline "#{item.title}", width: 1.0 diff --git a/lib/pages/settings.rb b/lib/pages/settings.rb index 3fd0049..d93bc8b 100644 --- a/lib/pages/settings.rb +++ b/lib/pages/settings.rb @@ -84,7 +84,7 @@ class W3DHub when "es" "EspaƱol" else - raise "Unknown language error" + logger.warn("W3DHub::Settings") { "Unknown language code: #{string.inspect}" } end end diff --git a/w3d_hub_linux_launcher.rb b/w3d_hub_linux_launcher.rb index 622b8ad..695f0fb 100644 --- a/w3d_hub_linux_launcher.rb +++ b/w3d_hub_linux_launcher.rb @@ -20,12 +20,19 @@ class W3DHub W3DHUB_DEBUG = ARGV.join.include?("--debug") W3DHUB_DEVELOPER = ARGV.join.include?("--developer") - GAME_ROOT_PATH = File.expand_path(".", __dir__) + # Use the real working directory as the root for runtime data/logs + GAME_ROOT_PATH = Dir.pwd + CACHE_PATH = "#{GAME_ROOT_PATH}/data/cache" + LOGS_PATH = "#{GAME_ROOT_PATH}/data/logs" SETTINGS_FILE_PATH = "#{GAME_ROOT_PATH}/data/settings.json" APPLICATIONS_CACHE_FILE_PATH = "#{GAME_ROOT_PATH}/data/applications_cache.json" - LOGGER = Logger.new("#{GAME_ROOT_PATH}/data/logs/w3d_hub_linux_launcher.log", "daily") + # Ensure data/cache and data/logs exist + FileUtils.mkdir_p(CACHE_PATH) unless Dir.exist?(CACHE_PATH) + FileUtils.mkdir_p(LOGS_PATH) unless Dir.exist?(LOGS_PATH) + + LOGGER = Logger.new("#{LOGS_PATH}/w3d_hub_linux_launcher.log", "daily") LOGGER.level = Logger::Severity::DEBUG # W3DHUB_DEBUG ? Logger::Severity::DEBUG : Logger::Severity::WARN LOG_TAG = "W3DHubLinuxLauncher"