feat: register bevy, github-release-deploy, itch-deploy, pseudo-localization, code-signing, and steam-workshop as built-in plugins - #230
Merged
Conversation
…blish needed
Loads the same way orchestrator/steam-deploy/runtime-test-framework
already do: a literal import("@game-ci/bevy") at the call site, which
Bun's --compile bundler can trace and embed directly into the
standalone binary - unlike PluginLoader.load's string-parameter path
(--plugin @game-ci/bevy), which resolves via loadFromNpm and fails at
runtime since this package was never published.
Detection only fires for a project with a real `bevy` dependency in
Cargo.toml, so registering it unconditionally costs nothing for
non-Bevy projects using the same binary.
Verified against the actual compiled binary: `game-ci build <path>`
against a fake Bevy project (real Cargo.toml with a bevy dependency,
no --plugin flag) correctly auto-detects and reaches "Building
<name> (cargo build)" before failing only on a missing `cargo`
executable in the test sandbox - confirms plugin registration and
detection both work end-to-end.
|
Warning Review limit reachedNext included review available in 19 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
frostebite
added a commit
to game-ci/documentation
that referenced
this pull request
Aug 29, 2026
… plugins - Removes --plugin flags from every experimental-plugin usage example: bevy, github-release-deploy, itch-deploy, pseudo-localization, code-signing, and steam-workshop are all registered by default as of game-ci/cli#230 - no flag, no npm publish needed. - Adds a Bevy options table (--target/--features/--locked/--debug/--outputPath), matching the level of detail the other plugins already had. - Adds a "Planned plugins" table covering the 8 structural-draft-only plugins (anti-cheat, dedicated-server-provisioning, dev-tunnel, gamemaker, renpy, rpg-maker, save-data-compat, screen-capture) that had no documentation at all before this - not usable yet, but visible as roadmap. - Bumps the GitHub Action's stale v0.1.14 example pin to v0.1.48, fixes the Windows asset description (it's a .zip archive with a dist/ sibling, not a bare .exe - matches the actual fix in game-ci/cli#230), and corrects the Orchestrator section's now-wrong claim that the current release "predates" Orchestrator integration.
frostebite
added a commit
that referenced
this pull request
Aug 29, 2026
…d real-project examples (#232) * feat: register github-release-deploy, itch-deploy, pseudo-localization, code-signing, and steam-workshop as built-in plugins Same fix as the previous commit for bevy - these five are functional but were only reachable via --plugin @game-ci/<name>, which fails at runtime (loadFromNpm) since none of them are published to npm. Only a literal import() traced into the compiled binary actually works. Each registers its own subcommand(s) (deploy github-release, deploy itch, deploy steam-workshop, sign, pseudo-localize) rather than doing engine-style project detection, so - like steam-deploy, already built-in - there's no auto-detection cost to registering them unconditionally; they only do anything when their own subcommand is invoked. Verified against the actual compiled binary: `game-ci deploy github-release` and `game-ci deploy steam-workshop`, with no --plugin flag, both reach real command logic (fail on a missing required argument, not "unknown command"). * fix(action): Windows install path downloaded a nonexistent asset and silently skipped checksum verification Two real bugs, both found while verifying the composite action end-to-end against a live release for the docs work: 1. The Windows branch downloaded `game-ci-windows-x64.exe`, which has never existed - the real release asset is `game-ci-windows-x64.zip` (a zip containing game-ci.exe plus its dist/ sibling of static assets, same packaging as every other platform). Every Windows run of this action would 404. 2. Checksum verification: `Invoke-WebRequest ... | Select-Object -ExpandProperty Content` for a plain-text response returns a raw byte[] on this PowerShell/runner combination, not a decoded string. $expectedHash silently ended up empty every time, and the `if ($expectedHash) {...}` guard around the actual comparison meant verification was always skipped without ever warning - it's been a silent no-op since this branch was written, not something my zip fix introduced. Verified against v0.1.48 end-to-end (real download, checksum compare, extract, `--help` invocation) via PowerShell directly: checksum now matches, dist/ and game-ci.exe both land correctly, and the binary runs. * fix(godot): fall back to --import when export_presets.cfg is missing Godot's export_presets.cfg is commonly untracked (it can carry machine-specific paths/keystore locations, much like a .env file), so plenty of real, otherwise-buildable Godot projects don't have one checked in - godotengine's own official demo projects included (e.g. 2d/dodge_the_creeps). `game-ci build` on such a project previously failed outright with no useful signal, unconditionally attempting `--export-release` regardless of whether a preset existed. Falls back to `godot --headless --import` instead - validates the project actually opens/imports cleanly - the same accommodation this repo's own engine-smoke-test.yml already made by hand for its Godot fixture, now built into the command itself so any real project gets it too. * ci: add real-project example smoke tests for Godot and Bevy Validates the CLI against real, popular open-source projects instead of only our own minimal fixtures - runs weekly + manually (not on every PR, unlike engine-smoke-test.yml) since these depend on external repos we don't control and involve real, slower engine work (a real Godot import, real cargo builds). - Godot: godotengine/godot-demo-projects' 2d/dodge_the_creeps (the canonical minimal tutorial project) - exercises the just-added --import fallback, since it has no export_presets.cfg. - Bevy: NiklasEi/bevy_game_template (a maintained, purpose-built starting template) and webbertakken/death-arena (a real game, older Bevy 0.9 vs. the template's 0.19 - some version spread). Both have a direct `bevy` Cargo dependency our plugin's detection requires - no --plugin flag needed for either. Unity is deliberately not included here: this repo's own Unity coverage in engine-smoke-test.yml already exercises real build/activate logic with a real license, and open-source + freely-buildable (no proprietary assets) Unity projects are hard to find. GameMaker, Ren'Py, RPG Maker, and the other structural-draft plugins aren't included either - their domain logic isn't implemented yet regardless of how many public example projects exist for those engines (see #231 for the separate, real concern about how many built-in plugins this binary can keep absorbing).
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.
Summary
Registers six functional-but-unpublished plugins as built-ins, so they're actually usable from the released binary with no
--pluginflag and no npm publish:@game-ci/bevy—game-ci build <path>auto-detects a Bevy project@game-ci/github-release-deploy—game-ci deploy github-release <buildPath>@game-ci/itch-deploy—game-ci deploy itch <buildPath>@game-ci/pseudo-localization—game-ci pseudo-localize@game-ci/code-signing—game-ci sign <path>@game-ci/steam-workshop—game-ci deploy steam-workshop <itemPath>All six were previously only reachable via
--plugin @game-ci/<name>, which routes throughPluginLoader.load's string-parameter path (loadFromNpm) and fails at runtime since none of them are published to npm — the only working path today is running from source inside this monorepo. This registers each the same wayorchestrator/steam-deploy/runtime-test-frameworkalready are: a literalimport()at theloadPlugins()call site, which Bun's--compilebundler traces and embeds directly into the standalone binary.bevydependency inCargo.toml), so registering it unconditionally costs nothing for non-Bevy projects using the same binary.steam-deploy— already built-in — works: they only do anything when their own subcommand is actually invoked.Updated each plugin's README banner and usage examples to drop the now-stale
--pluginflag, and a stale code comment ingithub-release-deploy'sonLoadwarning that referenced the old load-gating.Test plan
bun test ./src— 220/220 passvitest run— all pass (bevy, github-release-deploy, itch-deploy, pseudo-localization, code-signing, steam-workshop)--pluginflag:game-ci build <fake-bevy-project> --debug→ correctly detects and reachesBuilding fake-bevy-game (cargo build)game-ci deploy github-release→ reaches real command logic (Missing required argument: tag, not "unknown command")game-ci deploy steam-workshop→ same (Missing required argument: appId)