Skip to content

Commit 8834e51

Browse files
harrryydadambuchweitzjuliusmarmingecodexMarve10s
authored
Fix TodoPanel sidebar overflow & migrate CI from Bun to Vite+ (#73)
* fix: maintain reasoning selections for multiple providers (pingdotgg#2760) * [codex] Bump Effect to beta.73 and migrate compatibility APIs (pingdotgg#2840) Co-authored-by: codex <codex@users.noreply.github.com> * Add Claude Opus 4.8 support (pingdotgg#2849) * Migrate TypeScript checks to Effect TSGo (pingdotgg#2851) * Extract collection performance refactors from mobile stack (pingdotgg#2854) Co-authored-by: codex <codex@users.noreply.github.com> * Extract independent web cleanup from mobile stack (pingdotgg#2855) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> * Ensure Electron runtime is installed in release workflow (pingdotgg#2861) * T3 Code Mobile [WIP] (pingdotgg#2013) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Julius Marminge <julius@macmini.local> Co-authored-by: Yash Singh <saiansh2525@gmail.com> * chore: add vendored reference repo subtree sync tooling (pingdotgg#2902) Co-authored-by: codex <codex@users.noreply.github.com> * Use HttpApi for Environment APIs & standardize authn/authz (pingdotgg#2858) Co-authored-by: codex <codex@users.noreply.github.com> * chore: add Alchemy reference repo subtree (pingdotgg#2918) Co-authored-by: codex <codex@users.noreply.github.com> * fix(desktop): Include standard Linux AppImage icons for Niri/Noctalia (pingdotgg#2915) * Probe Cursor models via list_available_models (pingdotgg#2428) Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Julius Marminge <julius@mac.lan> * Migrate workspace to Vite+ and pnpm (pingdotgg#2899) Co-authored-by: Julius Marminge <julius@mac.lan> Co-authored-by: Cursor Agent <cursoragent@cursor.com> * test(web): CI stability - prebundle react-dom client for browser tests (pingdotgg#2928) * fix(ssh): Surface redacted stdout for failed commands (pingdotgg#2920) * fix(desktop): Preserve SSH HTTP auth status (pingdotgg#2923) Co-authored-by: Julius Marminge <jmarminge@gmail.com> * fix: build web before desktop release packaging (pingdotgg#2934) Co-authored-by: Julius Marminge <julius@mac.lan> * ci: let setup-vp install dependencies (pingdotgg#2936) Co-authored-by: Julius Marminge <julius@mac.lan> * fix(release): surface desktop packaging subprocess output (pingdotgg#2937) Co-authored-by: Julius Marminge <julius@mac.lan> * chore: setup eas ci (pingdotgg#2911) Co-authored-by: Julius Marminge <julius@mac.lan> * fix(release): use workspace electron-builder for desktop packaging (pingdotgg#2938) Co-authored-by: Julius Marminge <julius@mac.lan> * [codex] remove duplicated pnpm root config (pingdotgg#2939) Co-authored-by: Julius Marminge <julius@mac.lan> * fix(release): install dependency closures in partial jobs (pingdotgg#2941) Co-authored-by: Julius Marminge <julius@mac.lan> * [codex] split ci workflow jobs (pingdotgg#2940) Co-authored-by: Julius Marminge <julius@mac.lan> * [codex] fix mobile native static analysis source discovery (pingdotgg#2942) Co-authored-by: Julius Marminge <julius@mac.lan> * fix(release): preserve desktop artifact arch (pingdotgg#2943) Co-authored-by: Julius Marminge <julius@mac.lan> * [codex] Fix desktop packaging patched dependencies (pingdotgg#2944) Co-authored-by: codex <codex@users.noreply.github.com> * [codex] Filter staged desktop patched dependencies (pingdotgg#2945) Co-authored-by: codex <codex@users.noreply.github.com> * fix(release): install hosted web workspace closure (pingdotgg#2949) * fix(cli): bundle patched diff parser dependency (pingdotgg#2957) Co-authored-by: Julius Marminge <julius@mac.lan> * Prevent settings layout shifts with scrollbar gutters (pingdotgg#2960) * [codex] fix release finalize install (pingdotgg#2961) Co-authored-by: Julius Marminge <julius@mac.lan> * fix(source-control): handle self-hosted GitLab, multi-account GitHub auth & azure devops web url (pingdotgg#2480) Co-authored-by: Julius Marminge <julius@mac.lan> * [codex] Avoid shell for Node executable spawns (pingdotgg#2952) Co-authored-by: Julius Marminge <julius@mac.lan> * [codex] Avoid shell for Windows environment probe (pingdotgg#2951) Co-authored-by: Julius Marminge <julius@mac.lan> * fix(composer): support spaces in file mentions (pingdotgg#2625) * [codex] Avoid shell for system executables (pingdotgg#2950) Co-authored-by: Julius Marminge <julius@mac.lan> * feat(relay): Add managed relay tunnels and APN service (pingdotgg#2837) Co-authored-by: codex <codex@users.noreply.github.com> * Restructure documentation into topical folders (pingdotgg#2963) * move * dont fail if env-file is unspecified * fallback to None when RELAY_DOMAIN is unset * implicit install from vp * forward args directly * bump alchemy to fix absolute drizzle schema out * bump alchemy to fix drizzle schema out attempt 2 * Migrate tests to vite-plus test APIs (pingdotgg#2964) * remove `vp staged` * publish deploy status on relay deploy workflow * Use pnpm for server publish workflow (pingdotgg#2966) * Rename function for publishing arguments to vp pm (pingdotgg#2967) * Fix TodoPanel detail panel overflowing sidebar - Apply right-full instead of left-full to prevent overflow - Add browser tests for rendering, interactions, and detail panel - Set viewport size in vitest browser config * Remove duplicate 'publish' argument in CLI script --------- Co-authored-by: Adam Buchweitz <312235+adambuchweitz@users.noreply.github.com> Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com> Co-authored-by: Ibrahim Elkamali <126423069+Marve10s@users.noreply.github.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Julius Marminge <julius@macmini.local> Co-authored-by: Yash Singh <saiansh2525@gmail.com> Co-authored-by: Mike Olson <mwolson@member.fsf.org> Co-authored-by: Julius Marminge <julius@mac.lan> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Julius Marminge <jmarminge@gmail.com> Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com>
1 parent 9ce0f1c commit 8834e51

4,534 files changed

Lines changed: 1031133 additions & 15623 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Optional: T3 Cloud source builds
2+
# Leave these unset to disable optional T3 Cloud features in local source builds.
3+
# Release builds inject their public values at build time. Do not add server-side
4+
# secrets to this file.
5+
6+
# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
7+
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
8+
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
9+
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
10+
11+
# Get this from your relay deployment. `infra/relay` deploys update it automatically.
12+
# T3CODE_RELAY_URL=https://relay.example.com

.github/workflows/ci.yml

Lines changed: 96 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,72 +7,125 @@ on:
77
- main
88

99
jobs:
10-
quality:
11-
name: Format, Lint, Typecheck, Test, Browser Test, Build
10+
check:
11+
name: Check
1212
runs-on: blacksmith-8vcpu-ubuntu-2404
1313
timeout-minutes: 10
1414
steps:
1515
- name: Checkout
1616
uses: actions/checkout@v6
1717

18-
- name: Setup Bun
19-
uses: oven-sh/setup-bun@v2
18+
- name: Setup Vite+
19+
uses: voidzero-dev/setup-vp@v1
2020
with:
21-
bun-version-file: package.json
21+
node-version-file: package.json
22+
cache: true
23+
run-install: true
24+
25+
- name: Ensure Electron runtime is installed
26+
run: vp run --filter @t3tools/desktop ensure:electron
27+
28+
- name: Check
29+
run: vp check
30+
31+
- name: Typecheck
32+
run: vpr typecheck
33+
34+
- name: Build desktop pipeline
35+
run: vp run build:desktop
2236

23-
- name: Setup Node
24-
uses: actions/setup-node@v6
37+
- name: Verify preload bundle output
38+
run: |
39+
test -f apps/desktop/dist-electron/preload.cjs
40+
grep -nE "desktopBridge|getLocalEnvironmentBootstrap|PICK_FOLDER_CHANNEL|wsUrl" apps/desktop/dist-electron/preload.cjs
41+
42+
test:
43+
name: Test
44+
runs-on: blacksmith-8vcpu-ubuntu-2404
45+
timeout-minutes: 10
46+
steps:
47+
- name: Checkout
48+
uses: actions/checkout@v6
49+
50+
- name: Setup Vite+
51+
uses: voidzero-dev/setup-vp@v1
2552
with:
2653
node-version-file: package.json
54+
cache: true
55+
run-install: true
2756

28-
- name: Cache Bun and Turbo
29-
uses: actions/cache@v5
57+
- name: Ensure Electron runtime is installed
58+
run: vp run --filter @t3tools/desktop ensure:electron
59+
60+
- name: Test
61+
run: vp run test
62+
63+
test_browser:
64+
name: Test Browser
65+
runs-on: blacksmith-8vcpu-ubuntu-2404
66+
timeout-minutes: 10
67+
steps:
68+
- name: Checkout
69+
uses: actions/checkout@v6
70+
71+
- name: Setup Vite+
72+
uses: voidzero-dev/setup-vp@v1
3073
with:
31-
path: |
32-
~/.bun/install/cache
33-
.turbo
34-
key: ${{ runner.os }}-bun-${{ hashFiles('bun.lock') }}-${{ hashFiles('turbo.json') }}
35-
restore-keys: |
36-
${{ runner.os }}-bun-${{ hashFiles('bun.lock') }}-
74+
node-version-file: package.json
75+
cache: true
76+
run-install: true
3777

3878
- name: Cache Playwright browsers
3979
uses: actions/cache@v5
4080
with:
4181
path: ~/.cache/ms-playwright
42-
key: ${{ runner.os }}-playwright-${{ hashFiles('bun.lock') }}
82+
key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }}
4383
restore-keys: |
4484
${{ runner.os }}-playwright-
4585
46-
- name: Install dependencies
47-
run: bun install --frozen-lockfile
48-
49-
- name: Format
50-
run: bun run fmt:check
51-
52-
- name: Lint
53-
run: bun run lint
86+
- name: Install browser test runtime
87+
run: vp run --filter @t3tools/web test:browser:install
5488

55-
- name: Typecheck
56-
run: bun run typecheck
89+
- name: Browser test / Chat view
90+
working-directory: apps/web
91+
run: vp test run --mode browser --browser=chromium src/components/ChatView.browser.tsx
5792

58-
- name: Test
59-
run: bun run test
93+
- name: Browser test / Chat markdown
94+
working-directory: apps/web
95+
run: vp test run --mode browser --browser=chromium src/components/ChatMarkdown.browser.tsx
6096

61-
- name: Install browser test runtime
97+
- name: Browser test / Components
98+
working-directory: apps/web
6299
run: |
63-
cd apps/web
64-
bunx playwright install --with-deps chromium
100+
vp test run --mode browser --browser=chromium \
101+
src/components/GitActionsControl.browser.tsx \
102+
src/components/KeybindingsToast.browser.tsx \
103+
src/components/ThreadTerminalDrawer.browser.tsx \
104+
src/components/chat/MessagesTimeline.browser.tsx \
105+
src/components/chat/ProviderModelPicker.browser.tsx \
106+
src/components/chat/CompactComposerControlsMenu.browser.tsx \
107+
src/components/settings/SettingsPanels.browser.tsx
108+
109+
mobile_native_static_analysis:
110+
name: Mobile Native Static Analysis
111+
runs-on: blacksmith-12vcpu-macos-26
112+
timeout-minutes: 10
113+
steps:
114+
- name: Checkout
115+
uses: actions/checkout@v6
65116

66-
- name: Browser test
67-
run: bun run --cwd apps/web test:browser
117+
- name: Setup Vite+
118+
uses: voidzero-dev/setup-vp@v1
119+
with:
120+
node-version-file: package.json
121+
cache: true
122+
run-install: true
68123

69-
- name: Build desktop pipeline
70-
run: bun run build:desktop
124+
- name: Install mobile native static analysis tools
125+
run: brew bundle install --file apps/mobile/Brewfile
71126

72-
- name: Verify preload bundle output
73-
run: |
74-
test -f apps/desktop/dist-electron/preload.cjs
75-
grep -nE "desktopBridge|getLocalEnvironmentBootstrap|PICK_FOLDER_CHANNEL|wsUrl" apps/desktop/dist-electron/preload.cjs
127+
- name: Lint mobile native sources
128+
run: vp run lint:mobile
76129

77130
release_smoke:
78131
name: Release Smoke
@@ -82,18 +135,12 @@ jobs:
82135
- name: Checkout
83136
uses: actions/checkout@v6
84137

85-
- name: Setup Bun
86-
uses: oven-sh/setup-bun@v2
87-
with:
88-
bun-version-file: package.json
89-
90-
- name: Setup Node
91-
uses: actions/setup-node@v6
138+
- name: Setup Vite+
139+
uses: voidzero-dev/setup-vp@v1
92140
with:
93141
node-version-file: package.json
94-
95-
- name: Install dependencies
96-
run: bun install --frozen-lockfile
142+
cache: true
143+
run-install: true
97144

98145
- name: Exercise release-only workflow steps
99146
run: node scripts/release-smoke.ts

.github/workflows/deploy-relay.yml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
name: Deploy T3 Cloud relay
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
permissions:
9+
contents: read
10+
id-token: none
11+
statuses: write
12+
13+
concurrency:
14+
group: relay-production
15+
cancel-in-progress: false
16+
17+
jobs:
18+
deploy_relay:
19+
name: Deploy production relay
20+
runs-on: blacksmith-8vcpu-ubuntu-2404
21+
timeout-minutes: 15
22+
environment:
23+
name: production
24+
env:
25+
CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
26+
PLANETSCALE_ORGANIZATION: ${{ vars.PLANETSCALE_ORGANIZATION }}
27+
AXIOM_ORG_ID: ${{ vars.AXIOM_ORG_ID }}
28+
RELAY_DOMAIN: ${{ vars.RELAY_DOMAIN }}
29+
RELAY_API_ZONE_NAME: ${{ vars.RELAY_API_ZONE_NAME }}
30+
RELAY_TUNNEL_ZONE_NAME: ${{ vars.RELAY_TUNNEL_ZONE_NAME }}
31+
CLERK_PUBLISHABLE_KEY: ${{ vars.CLERK_PUBLISHABLE_KEY }}
32+
CLERK_JWT_AUDIENCE: ${{ vars.CLERK_JWT_AUDIENCE }}
33+
APNS_ENVIRONMENT: ${{ vars.APNS_ENVIRONMENT }}
34+
APNS_TEAM_ID: ${{ vars.APNS_TEAM_ID }}
35+
APNS_KEY_ID: ${{ vars.APNS_KEY_ID }}
36+
APNS_BUNDLE_ID: ${{ vars.APNS_BUNDLE_ID }}
37+
ALCHEMY_TELEMETRY_DISABLED: "1"
38+
steps:
39+
- name: Checkout
40+
uses: actions/checkout@v6
41+
42+
- name: Setup Vite+
43+
uses: voidzero-dev/setup-vp@v1
44+
with:
45+
node-version-file: package.json
46+
cache: true
47+
run-install: true
48+
49+
- name: Deploy production relay stage
50+
id: deploy
51+
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
52+
env:
53+
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
54+
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
55+
PLANETSCALE_API_TOKEN: ${{ secrets.PLANETSCALE_API_TOKEN }}
56+
AXIOM_TOKEN: ${{ secrets.AXIOM_TOKEN }}
57+
CLERK_SECRET_KEY: ${{ secrets.CLERK_SECRET_KEY }}
58+
APNS_PRIVATE_KEY: ${{ secrets.APNS_PRIVATE_KEY }}
59+
60+
- name: Publish relay deploy commit status
61+
uses: actions/github-script@v8
62+
with:
63+
script: |
64+
const result = "${{ steps.deploy.outputs.result }}";
65+
const changed = "${{ steps.deploy.outputs.changed }}" === "true";
66+
const description = changed
67+
? "Relay production deploy applied infrastructure changes."
68+
: result === "noop"
69+
? "Relay production deploy was a no-op."
70+
: `Relay production deploy completed with result: ${result}.`;
71+
72+
await github.rest.repos.createCommitStatus({
73+
owner: context.repo.owner,
74+
repo: context.repo.repo,
75+
sha: context.sha,
76+
state: "success",
77+
context: "Relay deploy / production",
78+
description,
79+
target_url: `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`,
80+
});
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: Mobile EAS Preview
2+
3+
on:
4+
pull_request:
5+
6+
jobs:
7+
preview:
8+
name: EAS Preview
9+
runs-on: blacksmith-8vcpu-ubuntu-2404
10+
permissions:
11+
contents: read
12+
pull-requests: write
13+
env:
14+
APP_VARIANT: preview
15+
NODE_OPTIONS: --max-old-space-size=8192
16+
MOBILE_VERSION_POLICY: fingerprint
17+
steps:
18+
- id: expo-token
19+
name: Check for EXPO_TOKEN
20+
env:
21+
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
22+
run: |
23+
if [ -n "$EXPO_TOKEN" ]; then
24+
echo "present=true" >> "$GITHUB_OUTPUT"
25+
else
26+
echo "present=false" >> "$GITHUB_OUTPUT"
27+
echo "EXPO_TOKEN is not available; skipping EAS preview."
28+
fi
29+
30+
- name: Checkout
31+
if: steps.expo-token.outputs.present == 'true'
32+
uses: actions/checkout@v6
33+
with:
34+
fetch-depth: 0
35+
36+
- name: Setup Vite+
37+
if: steps.expo-token.outputs.present == 'true'
38+
uses: voidzero-dev/setup-vp@v1
39+
with:
40+
node-version-file: package.json
41+
cache: true
42+
run-install: true
43+
44+
- name: Expose pnpm
45+
if: steps.expo-token.outputs.present == 'true'
46+
run: |
47+
pnpm_version="$(node --print "require('./package.json').packageManager.split('@').pop()")"
48+
vp_pnpm_bin="$HOME/.vite-plus/package_manager/pnpm/$pnpm_version/pnpm/bin"
49+
echo "$vp_pnpm_bin" >> "$GITHUB_PATH"
50+
"$vp_pnpm_bin/pnpm" --version
51+
52+
- name: Setup EAS
53+
if: steps.expo-token.outputs.present == 'true'
54+
uses: expo/expo-github-action@v8
55+
with:
56+
eas-version: latest
57+
token: ${{ secrets.EXPO_TOKEN }}
58+
packager: pnpm
59+
60+
- name: Pull preview environment variables
61+
if: steps.expo-token.outputs.present == 'true'
62+
working-directory: apps/mobile
63+
env:
64+
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
65+
run: eas env:pull preview --non-interactive
66+
67+
- name: Deploy with fingerprint check
68+
if: steps.expo-token.outputs.present == 'true'
69+
uses: expo/expo-github-action/continuous-deploy-fingerprint@main
70+
env:
71+
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
72+
with:
73+
profile: preview:dev
74+
branch: pr-${{ github.event.pull_request.number }}
75+
platform: all
76+
environment: preview
77+
working-directory: apps/mobile
78+
github-token: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)