Skip to content

chore(ci): add GitHub Actions workflows for ci, release-please, and calver#3

Merged
johnnyhuy merged 6 commits into
mainfrom
chore/release-and-ci-workflows
Jul 20, 2026
Merged

chore(ci): add GitHub Actions workflows for ci, release-please, and calver#3
johnnyhuy merged 6 commits into
mainfrom
chore/release-and-ci-workflows

Conversation

@johnnyhuy

Copy link
Copy Markdown
Contributor

Summary

  • ci.yml — lint + typecheck + vitest + build on every push/PR to main, with an all gate that fails when any step fails (modeled on echohello-dev/pidex's ci.yml structure).
  • release-please.yml — drives conventional-commit releases off the existing release-please-config.json. Calver-only wouldn't suit the workspace layout, so this stays primary.
  • calver-release.yml — sidecar calver tag-on-main pipeline kept because Supaplane still wants a date-stamped release artefact visible at the repo root independent of release-please's release PRs (direct port of pidex's release.yml).
  • Drive-by fix: connection-offer.test.ts typo (supaplane.runsupaplane.com) and vitest hoisted to root devDeps so bun run test resolves vitest/config from the root CI step.

Consequences

  • Two release pipelines now co-exist. release-please opens PRs and produces changelog-driven semver tags; calver stamps a YYYY.MM.DD[-N] release on every push to main. Both run off push-to-main and have contents: write.
  • Workflow action versions are SHA-pinned (matching pidex) so dep updates go through a PR, not silent drift.

Testing

Local (bun + mise):
✓ lint — 13 warnings, 0 errors
✓ typecheck — all packages
✓ test — 6 files, 23 tests passed
✓ build — protocol + client + server + cli

CI on PR will run the same checks on Ubuntu.

Co-authored-by: opencode-agent hello@sst.dev

opencode and others added 6 commits July 18, 2026 00:11
Adds the three-screen MVP on top of @echohello/client:

- connect:    manual ws:// endpoint + label, saved to AsyncStorage,
              connects via SupaplaneClient
- sessions:   workspace list grouped by freshness, tap to drill in
- session:    transcript + composer (send/abort/start) bound to
              ClientCommand wire types

Shared infrastructure:
- zustand connection-store: single SupaplaneClient instance,
  status, workspaces, sessions, per-session event buffer
- AsyncStorage wrapper (v3 API: setMany/removeMany) for the
  saved endpoint and TOFU-pinned server fingerprint
- dark theme tokens, Button, TextField, ConnectionBanner

Bundler plumbing: metro.config.cjs with explicit watchFolders
and nodeModulesPaths so Bun's hoisting doesn't trip the
resolver on a monorepo root.

Co-authored-by: opencode <opencode@echohello.dev>
Desktop build wiring:
- packages/desktop/tsconfig.build.json emits ESM to dist/
- packages/desktop/package.json: dev now runs tsc -> electron
- main.js (dist) replaces main.ts as the package entry, and
  preload.js resolves to the dist sibling
- @echohello/server and @echohello/protocol exports point at
  dist/ so Electron's Node can resolve them. Run
  'bun run build:server' (or 'bun run build') before
  'desktop dev'.

Dev port scheme (avoiding Paseo + Vite + Metro defaults):
- Daemon listenPort: 6767 -> 17687 (IANA-sparse range,
  visually echoes 6767)
- Vite port: 5173 -> 5179 (adjacent to Vite default so it
  reads as 'the Supaplane Vite port')
- vite.config.ts reads SUPAPLANE_DAEMON_PORT and VITE_PORT
  envs; defaults updated
- AGENTS.md + docs/development.md updated to reflect the
  new ports

Server hygiene:
- daemon-keypair.ts: replace require('node:crypto') with
  a top-level import so it builds cleanly to ESM

Co-authored-by: opencode <opencode@echohello.dev>
…alver

Modeled on the echohello-dev/pidex workflow structure:

- ci.yml: lint + typecheck + vitest + build, with an 'all' gate job that
  fails when any step fails. Pinned action SHAs match pidex so versions
  stay aligned across repos.
- release-please.yml: drives conventional-commit releases off the existing
  release-please-config.json (calver-only wouldn't suit the workspace
  layout).
- calver-release.yml: sidecar calver tag-on-main pipeline, kept because
  Supaplane still wants a date-stamped release artefact visible at the
  repo root independent of release-please's release PRs.

Co-authored-by: opencode-agent <hello@sst.dev>
Connection-offer.test.ts was asserting the encoder maps to
app.supaplane.run, but the encoder (and every other reference in the
repo, including the comment on encodeOfferToFragmentUrl itself) uses
app.supaplane.com. Fix the assertion to match.

Also hoist vitest to the root devDependencies so `bun run test` can
resolve `vitest/config` without needing bunx to fetch a copy that won't
find the local config. The CI workflow depends on the root test command
running green.

Co-authored-by: opencode-agent <hello@sst.dev>
@johnnyhuy
johnnyhuy merged commit 65562af into main Jul 20, 2026
4 of 6 checks passed
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