-
Notifications
You must be signed in to change notification settings - Fork 0
feat: AppShell application platform layer #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
172cddf
714e8a3
3cb575b
3fab0f0
78ffcd4
3226957
3b1bf8a
5716201
dade02a
f142f4f
889baf6
e8da536
bf2de7d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -49,7 +49,9 @@ jobs: | |
| - name: Typo check | ||
| if: ${{ matrix.run_on == 'macos-latest' }} | ||
| run: | | ||
| cargo install typos-cli || echo "typos-cli already installed" | ||
| # --locked for reproducibility; no `|| echo` mask — a failed install | ||
| # must fail the step, not surface later as `typos: command not found`. | ||
| which typos >/dev/null 2>&1 || cargo install typos-cli --locked | ||
| typos | ||
| - name: Lint (macOS) | ||
| if: ${{ matrix.run_on == 'macos-latest' }} | ||
|
|
@@ -60,6 +62,11 @@ jobs: | |
| - name: Lint (Windows) | ||
| if: ${{ matrix.run_on == 'windows-latest' }} | ||
| run: ./script/clippy.ps1 | ||
| # Platform crates are pure-Rust (no display server) and their tests are | ||
| # MANDATORY on every OS — unlike the rest of the repo, where tests are | ||
| # optional. See docs/learned/app-platform-plan.md §5 Phase 0 item 2/3. | ||
| - name: Test platform crates | ||
| run: cargo test -p gpui-component-storage -p gpui-component-manifest | ||
| - name: Test Linux | ||
| if: ${{ matrix.run_on == 'ubuntu-latest' }} | ||
| run: | | ||
|
|
@@ -73,3 +80,52 @@ jobs: | |
| run: | | ||
| cargo test --all | ||
| cargo test -p gpui-component --doc | ||
|
|
||
| # Native launch smoke test for the app-platform conformance examples | ||
| # (examples/app_shell single-window, examples/app_shell_tray tray-first). Each | ||
| # example boots the real shell, opens its window(s), then `--smoke` requests a | ||
| # clean quit and exits 0. See docs/learned/app-platform-plan.md §5 Phase 1 and | ||
| # §6 gate 7. Keep the matrix in sync with the `test` job above. | ||
| native-launch-smoke: | ||
| name: Native launch smoke | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: | ||
| - target: aarch64-apple-darwin | ||
| run_on: macos-latest | ||
| - target: x86_64-linux-gnu | ||
| run_on: ubuntu-latest | ||
| - target: x86_64-windows-msvc | ||
| run_on: windows-latest | ||
| runs-on: ${{ matrix.run_on }} | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions-rust-lang/setup-rust-toolchain@v1 | ||
|
Comment on lines
+103
to
+104
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win Unpinned actions + no zizmor flags 🔒 Suggested hardening- - uses: actions/checkout@v4
- - uses: actions-rust-lang/setup-rust-toolchain@v1
+ - uses: actions/checkout@v4 # pin to a commit SHA
+ with:
+ persist-credentials: false
+ - uses: actions-rust-lang/setup-rust-toolchain@v1 # pin to a commit SHA
+ with:
+ cache: false🧰 Tools🪛 zizmor (1.26.1)[warning] 101-101: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false (artipacked) [error] 101-101: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) [error] 102-102: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy) (unpinned-uses) [error] 102-102: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): enables caching by default (cache-poisoning) 🤖 Prompt for AI AgentsSource: Linters/SAST tools
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Out of scope for this PR. As noted, this is a repo-wide gap — the same unpinned pattern is in the pre-existing |
||
| - name: Install system dependencies | ||
| if: ${{ matrix.run_on != 'windows-latest' }} | ||
| run: script/bootstrap | ||
| # Build on every OS: this exercises the full D4 identity chain (build.rs + | ||
| # include_identity!) cross-platform, even where we do not launch a | ||
| # GPU-backed window below. | ||
| - name: Build conformance examples | ||
| run: cargo build -p app_shell -p app_shell_tray | ||
| # Launch smoke runs on macOS only. Platform parity (CLAUDE.md) requires | ||
| # documenting why the other two are gated off rather than silently skipped: | ||
| # - macOS: GitHub arm64 runners provide a working Metal device; the | ||
| # `--smoke` launch is verified to reach a ready window and exit 0. | ||
| # - Linux: GPUI renders via Vulkan. Stock ubuntu runners have no display | ||
| # and no Vulkan device, so a native launch needs both xvfb and a | ||
| # software driver (lavapipe) that is not guaranteed present. Gated off | ||
| # to avoid flaky reds; enable once the runner image ships them: | ||
| # xvfb-run -a cargo run -p app_shell -- --smoke | ||
| # xvfb-run -a cargo run -p app_shell_tray -- --smoke | ||
| # - Windows: GPUI renders via DirectX; headless runners have no reliable | ||
| # present surface. Gated off pending a WARP-backed offscreen path: | ||
| # cargo run -p app_shell -- --smoke | ||
| # cargo run -p app_shell_tray -- --smoke | ||
| - name: Native launch smoke (macOS) | ||
| if: ${{ matrix.run_on == 'macos-latest' }} | ||
| run: | | ||
| cargo run -p app_shell -- --smoke | ||
| cargo run -p app_shell_tray -- --smoke | ||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| [package] | ||
| name = "gpui-component-manifest" | ||
| description = "App identity schema, validation, and build-time codegen for gpui-component apps. No GPUI dependency; usable from build scripts and packaging tools." | ||
| version.workspace = true | ||
| edition.workspace = true | ||
| publish.workspace = true | ||
|
|
||
| [dependencies] | ||
| serde.workspace = true | ||
| thiserror.workspace = true | ||
| toml.workspace = true | ||
|
|
||
| [dev-dependencies] | ||
| tempfile.workspace = true | ||
|
|
||
| [lints] | ||
| workspace = true |
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: BumpyClock/gpui-component
Length of output: 5187
🏁 Script executed:
Repository: BumpyClock/gpui-component
Length of output: 18664
🏁 Script executed:
Repository: BumpyClock/gpui-component
Length of output: 4968
Complete the gpui fork tag step in the update flow.
The release discipline expects both the fork tag and the workspace tag, but this procedure only documents the workspace tag.
.claude/skills/update-gpui/SKILL.md#L50-L53: add thegpui-vYYYY.MM.DD-<shortsha>tag creation/push step, or point to the release automation that creates it.docs/COMPATIBILITY.md#L24-L27: keep the fork-tag requirement aligned with the executable procedure.🧰 Tools
🪛 LanguageTool
[grammar] ~50-~50: Ensure spelling is correct
Context: ...eping** (this skill is the ONLY place a gpui rev changes — see docs/learned/app-plat...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[grammar] ~51-~51: Ensure spelling is correct
Context: ...the root
Cargo.toml(minor bump for a gpui rev change or breaking API change while...(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[grammar] ~52-~52: Ensure spelling is correct
Context: ... the new workspace version with the new gpui rev. - After the change lands on
main,...(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
📍 Affects 2 files
.claude/skills/update-gpui/SKILL.md#L50-L53(this comment)docs/COMPATIBILITY.md#L24-L27🤖 Prompt for AI Agents
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Real but out of scope here (release-process docs in the update-gpui skill + COMPATIBILITY.md, not code touched by this PR). Tracking as a follow-up to add the fork-tag step / point at the automation that creates it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@BumpyClock, acknowledged. This is a valid release-process follow-up, but it does not need to block this App Platform PR. If no follow-up issue exists yet, would you like me to open one for the fork-tag/automation documentation alignment?