ci: add GodotLite export validation job#4
Merged
Conversation
CI was only testing with the full-featured Godot editor binary, so it would never catch incompatibilities with the stripped-down GodotLite templates used in release builds. Add a new job that downloads the GodotLite Linux template, exports the project with it, and runs the resulting binary headless to verify it starts without errors from missing modules or classes. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1
The GodotLite validation job failed because the exported binary couldn't find the godot-livekit GDExtension libraries at runtime. Since this job tests GodotLite engine module compatibility (not native plugin loading), strip all .gdextension files before export. The release workflow already handles per-platform GDExtension inclusion separately. Also filter GDExtension warnings from the error summary since they are expected after stripping. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1
Stripping .gdextension files breaks the GDScript dependency chain — native classes like SentrySDK and LiveKitRoom disappear but GDScript files still reference them, causing cascading SCRIPT ERRORs. Instead: keep all GDExtensions, add a verification step that fails fast if any addon (godot-livekit, gut, sentry) is missing, list build directory contents after export for debugging, and run the exported binary from its own directory so library paths resolve correctly. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1
godot-livekit's native library depends on libpipewire-0.3.so.0 at runtime. Without it the GDExtension fails to load, cascading into a "dynamic library not found" error. Add the package to all three CI jobs (unit tests, integration tests, and GodotLite validation). https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1
Same issue as Image.create() (fixed in #1): static create() on native classes returns Variant in template_release builds, causing a parse error with :=. Use explicit type annotation instead. Also fix duplicate libpipewire-0.3-dev in godotlite-validation job. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1
GodotLite template_release builds don't register Image.create() as a static method, causing "Static function create() not found in base GDScriptNativeClass" at parse time. Use Image.new() + set_data() instead, which are instance methods and work in all builds. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1
krazyjakee
added a commit
that referenced
this pull request
Mar 5, 2026
* ci: add GodotLite export validation job CI was only testing with the full-featured Godot editor binary, so it would never catch incompatibilities with the stripped-down GodotLite templates used in release builds. Add a new job that downloads the GodotLite Linux template, exports the project with it, and runs the resulting binary headless to verify it starts without errors from missing modules or classes. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1 * ci: strip GDExtensions before GodotLite validation export The GodotLite validation job failed because the exported binary couldn't find the godot-livekit GDExtension libraries at runtime. Since this job tests GodotLite engine module compatibility (not native plugin loading), strip all .gdextension files before export. The release workflow already handles per-platform GDExtension inclusion separately. Also filter GDExtension warnings from the error summary since they are expected after stripping. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1 * ci: remove GDExtension stripping, verify all addons installed Stripping .gdextension files breaks the GDScript dependency chain — native classes like SentrySDK and LiveKitRoom disappear but GDScript files still reference them, causing cascading SCRIPT ERRORs. Instead: keep all GDExtensions, add a verification step that fails fast if any addon (godot-livekit, gut, sentry) is missing, list build directory contents after export for debugging, and run the exported binary from its own directory so library paths resolve correctly. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1 * ci: add libpipewire-0.3-dev to all CI jobs godot-livekit's native library depends on libpipewire-0.3.so.0 at runtime. Without it the GDExtension fails to load, cascading into a "dynamic library not found" error. Add the package to all three CI jobs (unit tests, integration tests, and GodotLite validation). https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1 * fix: use explicit type for SentryBreadcrumb.create() in export builds Same issue as Image.create() (fixed in #1): static create() on native classes returns Variant in template_release builds, causing a parse error with :=. Use explicit type annotation instead. Also fix duplicate libpipewire-0.3-dev in godotlite-validation job. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1 * fix: avoid Image.create() static method for GodotLite compatibility GodotLite template_release builds don't register Image.create() as a static method, causing "Static function create() not found in base GDScriptNativeClass" at parse time. Use Image.new() + set_data() instead, which are instance methods and work in all builds. https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1 --------- Co-authored-by: Claude <noreply@anthropic.com>
krazyjakee
added a commit
that referenced
this pull request
Mar 6, 2026
* ci: add GodotLite export validation job CI was only testing with the full-featured Godot editor binary, so it would never catch incompatibilities with the stripped-down GodotLite templates used in release builds. Add a new job that downloads the GodotLite Linux template, exports the project with it, and runs the resulting binary headless to verify it starts without errors from missing modules or classes. * ci: strip GDExtensions before GodotLite validation export The GodotLite validation job failed because the exported binary couldn't find the godot-livekit GDExtension libraries at runtime. Since this job tests GodotLite engine module compatibility (not native plugin loading), strip all .gdextension files before export. The release workflow already handles per-platform GDExtension inclusion separately. Also filter GDExtension warnings from the error summary since they are expected after stripping. * ci: remove GDExtension stripping, verify all addons installed Stripping .gdextension files breaks the GDScript dependency chain — native classes like SentrySDK and LiveKitRoom disappear but GDScript files still reference them, causing cascading SCRIPT ERRORs. Instead: keep all GDExtensions, add a verification step that fails fast if any addon (godot-livekit, gut, sentry) is missing, list build directory contents after export for debugging, and run the exported binary from its own directory so library paths resolve correctly. * ci: add libpipewire-0.3-dev to all CI jobs godot-livekit's native library depends on libpipewire-0.3.so.0 at runtime. Without it the GDExtension fails to load, cascading into a "dynamic library not found" error. Add the package to all three CI jobs (unit tests, integration tests, and GodotLite validation). * fix: use explicit type for SentryBreadcrumb.create() in export builds Same issue as Image.create() (fixed in #1): static create() on native classes returns Variant in template_release builds, causing a parse error with :=. Use explicit type annotation instead. Also fix duplicate libpipewire-0.3-dev in godotlite-validation job. * fix: avoid Image.create() static method for GodotLite compatibility GodotLite template_release builds don't register Image.create() as a static method, causing "Static function create() not found in base GDScriptNativeClass" at parse time. Use Image.new() + set_data() instead, which are instance methods and work in all builds. ---------
krazyjakee
added a commit
that referenced
this pull request
Jun 8, 2026
Closes #4 and #26. New ReadStateController (keepAlive) tracks per-channel unread + mention counts, mirroring the reference client's client_unread.gd: the gateway handler marks a channel unread on every MESSAGE_CREATE that isn't in the currently-visible channel (bumping the mention count when the user is mentioned), and selecting a channel marks it read locally + POSTs channels.ack with the latest message ID so the server's read position catches up. _ChannelTile renders the channel name bold with a white dot when unread, or a red mention pill with the count. _SpaceIcon overlays the same indicators on the rail (a left-rail unread pip or a corner mention pill), rolling up read state across all loaded channels of the space. State is in-memory only, matching the reference's behavior on cold start. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CI was only testing with the full-featured Godot editor binary, so it
would never catch incompatibilities with the stripped-down GodotLite
templates used in release builds. Add a new job that downloads the
GodotLite Linux template, exports the project with it, and runs the
resulting binary headless to verify it starts without errors from
missing modules or classes.
https://claude.ai/code/session_01VGBbeacXMewW3dgWecMzA1