Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
753d0d8
chore: add performance gate
Simon-He95 Jun 8, 2026
3527538
fix performance gate analysis
Simon-He95 Jun 8, 2026
f59aaa0
fix: complete performance gate follow-up
Simon-He95 Jun 8, 2026
68c54dc
Strengthen performance gate reporting
Simon-He95 Jun 8, 2026
6437c7f
Add performance gate tokenization diagnostics
Simon-He95 Jun 8, 2026
9877ee6
Fix performance gate stability
Simon-He95 Jun 8, 2026
f72eb1e
Strengthen diff performance gate
Simon-He95 Jun 8, 2026
5fe7b1f
Fix performance gate review issues
Simon-He95 Jun 8, 2026
e601bb6
Fix performance gate release checks
Simon-He95 Jun 9, 2026
65d1cad
Fix release workflow token check
Simon-He95 Jun 9, 2026
5071f7d
Fix release workflow lint
Simon-He95 Jun 9, 2026
4101254
Use Playwright image for browser checks
Simon-He95 Jun 9, 2026
2e64257
Stabilize diff stream perf gate
Simon-He95 Jun 9, 2026
bb6d3f8
Regenerate CI performance baseline
Simon-He95 Jun 9, 2026
b5c4315
fix: address PR #9 review — prepublishOnly, baseline, streaming highl…
Simon-He95 Jun 9, 2026
1317d1a
fix: address PR #9 performance gate review — final-marker check, long…
Simon-He95 Jun 9, 2026
b211818
fix(perf): review fixes for performance gate — recalcPerOp, entry/rep…
Simon-He95 Jun 9, 2026
1ddea3a
fix: PR #9 review — skip-baseline gate default, textChunks extraction…
Simon-He95 Jun 9, 2026
f3dd97a
fix(perf): require committed baseline by default, fail fast when missing
Simon-He95 Jun 9, 2026
3ec0ad1
fix(perf): strengthen release gate semantics and CI reliability
Simon-He95 Jun 9, 2026
91e5533
fix(perf): hard-fail on baseline env mismatch, bind Proxy methods to …
Simon-He95 Jun 9, 2026
c7fe254
fix: make perf:gate hard-budget-only by default, baseline opt-in
Simon-He95 Jun 9, 2026
08dfe78
fix(perf): move longTask observer after initial highlight in update/b…
Simon-He95 Jun 9, 2026
9a90867
fix(perf): guard against partial baseline overwrite with --allow-part…
Simon-He95 Jun 9, 2026
1fc3353
fix(perf-gate): wait for Monaco diff computation in diff scenarios
Simon-He95 Jun 9, 2026
1a5ce9b
perf: use domcontentloaded + waitForFunction instead of networkidle
Simon-He95 Jun 9, 2026
a876167
fix: apply PR #9 review fixes
Simon-He95 Jun 9, 2026
890546e
fix(perf-gate): move marker to last line, use makeTsCode in update lo…
Simon-He95 Jun 9, 2026
7a95f9c
fix: enable baseline regression gate by default in perf:gate and CI
Simon-He95 Jun 9, 2026
6ea7848
fix: use hard-budget gate as default CI perf gate
Simon-He95 Jun 9, 2026
20db43d
fix(perf): cache instrumented highlighter/grammar proxies, add regres…
Simon-He95 Jun 9, 2026
b655c86
fix(perf): auto-detect baseline in CI, add release gate script, expan…
Simon-He95 Jun 9, 2026
5bdfce8
fix: apply PR #9 review fixes — require-baseline gate, autoScrollInit…
Simon-He95 Jun 9, 2026
4976e6c
fix: remove local baseline, default to hard budget gate in CI/release
Simon-He95 Jun 9, 2026
dae5a58
fix(perf-gate): work around onDidUpdateDiff/getLineChanges not firing…
Simon-He95 Jun 9, 2026
5777800
fix: final patch — align CI node version, harden release gate with re…
Simon-He95 Jun 9, 2026
cda05f4
chore: parallelize perf gate with smoke, clarify CI script naming
Simon-He95 Jun 9, 2026
82fb2be
fix(ci): prevent release:verify from running twice during publish
Simon-He95 Jun 10, 2026
a924b0d
perf(diff): avoid O(n²) model.getValue() in chunked append loop
Simon-He95 Jun 10, 2026
d40dcf6
chore: closeout patch - release:verify script, CI perf depends on smoke
Simon-He95 Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 46 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,10 @@ jobs:

playwright-smoke:
runs-on: ubuntu-22.04
needs: test
needs: [lint, test]
timeout-minutes: 30
container:
image: mcr.microsoft.com/playwright:v1.38.0-jammy

steps:
- uses: actions/checkout@v4
Expand All @@ -96,19 +99,57 @@ jobs:
- name: Set node
uses: actions/setup-node@v4
with:
node-version: lts/*
node-version: 22
cache: pnpm

- run: corepack enable

- name: Install
run: pnpm install --frozen-lockfile

- name: Install Playwright Chromium
run: pnpm exec playwright install --with-deps chromium

- name: Diff smoke
run: pnpm smoke:diff

- name: Height stability smoke
run: pnpm smoke:height-stability

performance-gate:
runs-on: ubuntu-22.04
needs: [playwright-smoke]
timeout-minutes: 30
container:
image: mcr.microsoft.com/playwright:v1.38.0-jammy

steps:
- uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Set node
uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm

- run: corepack enable

- name: Install
run: pnpm install --frozen-lockfile

- name: Performance gate
run: pnpm perf:gate:ci

- name: Analyze performance report
if: always()
run: pnpm perf:analyze || true

- name: Upload performance report
if: always()
uses: actions/upload-artifact@v4
with:
name: stream-monaco-performance-report
path: .perf/*
if-no-files-found: ignore
include-hidden-files: true
retention-days: 14
22 changes: 13 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,38 @@ on:

jobs:
release:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
container:
image: mcr.microsoft.com/playwright:v1.38.0-jammy
env:
NPM_TOKEN_PRESENT: ${{ secrets.NPM_TOKEN != '' }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
# Keep the release runner aligned with CI performance-gate. The perf
# gate imports Vite 7, which requires a modern Node runtime.
node-version: 24
cache: pnpm
registry-url: https://registry.npmjs.org/

- run: corepack enable

- run: pnpm install --frozen-lockfile

- run: pnpm build

- run: pnpm vitest run

- run: pnpm typecheck
- run: pnpm release:verify

- run: pnpm dlx changelogithub
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

- run: pnpm publish --no-git-checks --access public
if: ${{ secrets.NPM_TOKEN != '' }}
# release:verify has already run above. package.json also has
# prepublishOnly=pnpm release:verify, so publish must not run it again.
- run: pnpm publish --ignore-scripts --no-git-checks --access public
if: env.NPM_TOKEN_PRESENT == 'true'
env:
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
NPM_CONFIG_PROVENANCE: true
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ logs
*-error.log
.eslintcache
tmp

.perf/
scripts/.perf-app/
scripts/performance-baseline.json
16 changes: 14 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,23 @@
"format": "prettier --write --cache .",
"lint": "eslint . --cache",
"lint:fix": "pnpm run lint --fix",
"prepublishOnly": "pnpm build",
"prepublishOnly": "pnpm release:verify",
"release": "bumpp --tag \"v%s\"",
"publish:package": "pnpm build && npm publish",
"publish:package": "pnpm release:verify && npm publish --ignore-scripts",
"start": "esno src/index.ts",
"bench": "node scripts/stream-benchmark.mjs",
"bench:playwright": "node scripts/playwright-bench.mjs",
"perf:report": "pnpm build && node scripts/playwright-performance-gate.mjs --entry=dist --report-only",
"perf:gate": "pnpm perf:gate:ci",
"perf:gate:ci": "pnpm perf:gate:canary",
"perf:gate:canary": "pnpm build && node scripts/playwright-performance-gate.mjs --entry=dist --skip-baseline --repeat=1 --scenarios=editor-cold-first-highlight,editor-update-highlight,editor-stream-append-burst,diff-cold-first-highlight-no-unchanged-regions,diff-update-highlight,diff-stream-append-burst",
"perf:gate:budget": "pnpm perf:gate:ci",
"perf:gate:baseline": "pnpm build && node scripts/playwright-performance-gate.mjs --entry=dist --require-baseline",
"perf:gate:release": "pnpm build && node scripts/playwright-performance-gate.mjs --entry=dist --skip-baseline --repeat=2",
"perf:gate:src": "node scripts/playwright-performance-gate.mjs --entry=src",
"perf:baseline": "pnpm build && node scripts/playwright-performance-gate.mjs --entry=dist --repeat=3 --update-baseline",
"perf:analyze": "node scripts/analyze-performance-report.mjs",
"release:verify": "node scripts/release-verify.mjs",
"smoke:diff": "node scripts/playwright-diff-smoke.mjs",
"smoke:height-stability": "node scripts/playwright-height-stability-smoke.mjs",
"shot:diff-ux": "node scripts/playwright-diff-ux-shot.mjs",
Expand Down Expand Up @@ -123,6 +134,7 @@
"tsdown": "^0.12.9",
"tsx": "^3.14.0",
"typescript": "^5.9.3",
"vite": "^7.3.3",
"vitest": "^3.2.4"
},
"lint-staged": {
Expand Down
3 changes: 3 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading