Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
61 changes: 61 additions & 0 deletions docs/release-playbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,67 @@
- Publish browser store listings and verify installed updates as required by the target browser.
- The protected release workflow signs the Firefox unlisted XPI with AMO credentials and uploads it with the other release assets.

## Firefox Verification Test Plan

Use this plan before declaring Firefox support release-ready or bumping the
project version for a Firefox-supporting release.

### Automated gates

Run these commands from a clean checkout in order:

1. `npm run release:clean`
2. `npm run fetch-clang`
3. `npm run lint`
4. `npm run build`
5. `npm run test:e2e`
6. `npm run test:preflight-clang`
7. `npm run version:check`
8. `npm run release:check-version`
9. `npm run test:browser:firefox`
10. `npm run package:release`

Passing these gates proves that:

- Firefox-specific manifest generation succeeds
- the Firefox extension package passes `web-ext` lint/build smoke
- release packaging emits the Firefox artifact and release manifest
- manifest/package metadata stay version-synchronized

### Manual Firefox runtime QA

Automated Firefox smoke does **not** prove that the extension compiles and runs
programs correctly inside Firefox. Before release, verify these behaviors in a
real Firefox desktop build:

1. Load the unpacked Firefox build and confirm the toolbar action opens the IDE.
2. Confirm Monaco renders and the default sample appears without blocking
console/runtime errors.
3. Compile and run the default sample program.
4. Run a program that reads stdin and confirm terminal interaction works.
5. Open a local source file with Firefox's fallback picker and save changes.
6. Import a folder, compile a multi-file project, and confirm diagnostics appear
in the expected file.
7. Write an output file with `std::ofstream` and confirm the documented Firefox
persistence behavior matches reality.
8. Restart Firefox and verify session/workspace restore behavior matches the
documented limitations.
9. Install the packaged Firefox ZIP/XPI and repeat the compile/run sanity check.

### Release decision

The Firefox release gate passes only when:

- every automated gate above succeeds
- manual Firefox runtime QA succeeds
- no new Firefox-only regressions are found in startup, compile/run, file
flows, or packaging
- remaining Firefox limitations are already documented and match observed
behavior

Do **not** cut the version bump for a Firefox-supporting release if only the
packaging smoke passes. Runtime validation in Firefox is still required.

## Validation

- `npm run lint`
Expand Down
2 changes: 1 addition & 1 deletion manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "browser.cpp",
"short_name": "browser.cpp",
"description": "In-browser C++20 IDE powered by Monaco Editor and WASM Clang",
"version": "0.2.1",
"version": "0.3",
"minimum_chrome_version": "105",
"icons": {
"16": "icons/icon16.png",
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

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

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "browser.cpp",
"version": "0.2.1",
"version": "0.3",
"description": "In-browser C++20 IDE with WASM Clang toolchain",
"private": true,
"scripts": {
Expand Down
Loading