Skip to content

ci: publish PR web previews - #135

Closed
gac0812 wants to merge 7 commits into
1024XEngineer:MVPfrom
gac0812:codex/ci-pr-web-preview
Closed

ci: publish PR web previews#135
gac0812 wants to merge 7 commits into
1024XEngineer:MVPfrom
gac0812:codex/ci-pr-web-preview

Conversation

@gac0812

@gac0812 gac0812 commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Summary

  • export an Expo web build for eligible pull requests
  • deploy each build under a PR-specific GitHub Pages path
  • comment the preview URL and QR code on the pull request
  • remove the preview automatically when the pull request closes
  • configure Expo's base URL for nested preview paths

Why

Reviewers need a directly accessible interface preview without installing the mobile toolchain. The preview is a static GitHub Pages deployment and uses the development in-process transport because Pages cannot host the persistent WebSocket backend.

Dependency

@gac0812 gac0812 closed this Jul 31, 2026

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found two functional issues in the preview and remote schedule paths. Local verification passed: npm run check (44 suites, 199 tests) and the Expo web export completed successfully.

jobs:
deploy-preview:
name: Deploy web preview
if: github.event.pull_request.head.repo.full_name == github.repository

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Do not unconditionally skip fork PRs if previews are meant for contributor PRs. This condition evaluates false for this PR (gac0812/Tfgxs), so the preview job is skipped entirely and no URL/QR comment is published. A fork-safe design needs to build without write credentials and perform the Pages update in a trusted follow-up job, or the preview contract should explicitly document that fork PRs are unsupported.

status: Extract<ScheduleStatus, 'scheduled' | 'done'>,
): Promise<ScheduleStatusUpdateResponse> {
const command: ScheduleStatusUpdateCommand = {
type: 'schedule.status.command',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] This remote mutation is not handled by the current backend. main.py registers schedule.upsert.command, schedule.list.query, and schedule.deleted, but there is no schedule.status.command route/handler. Consequently, toggleDone sends this request through the real WebSocket and waits until the client timeout instead of changing the schedule; the fake server masks the mismatch in tests. Add the backend handler or use a protocol message that the backend actually supports.

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.

1 participant