Skip to content

ci: add GodotLite export validation job#4

Merged
krazyjakee merged 6 commits into
masterfrom
claude/fix-ci-godotlite-cxNj4
Mar 1, 2026
Merged

ci: add GodotLite export validation job#4
krazyjakee merged 6 commits into
masterfrom
claude/fix-ci-godotlite-cxNj4

Conversation

@krazyjakee

Copy link
Copy Markdown
Contributor

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 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 krazyjakee merged commit f9d49fe into master Mar 1, 2026
4 checks passed
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants