Skip to content

Commit d46f214

Browse files
committed
Merge branch 'release-prep'
2 parents f03d95b + 7c55f03 commit d46f214

File tree

7 files changed

+489
-263
lines changed

7 files changed

+489
-263
lines changed

.github/workflows/build.yml

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
name: Build Dodo Recorder
2+
3+
on:
4+
release:
5+
types: [created]
6+
workflow_dispatch:
7+
inputs:
8+
platforms:
9+
description: 'Platforms to build (comma-separated: macos-arm64,macos-x64,windows,linux)'
10+
required: false
11+
default: 'macos-arm64,macos-x64,windows,linux'
12+
type: choice
13+
options:
14+
- 'macos-arm64,macos-x64,windows,linux'
15+
- 'macos-arm64,windows'
16+
- 'macos-x64,windows'
17+
- 'windows,linux'
18+
- 'macos-arm64,macos-x64'
19+
- 'windows'
20+
- 'linux'
21+
- 'macos-arm64'
22+
- 'macos-x64'
23+
24+
jobs:
25+
build:
26+
strategy:
27+
matrix:
28+
os: [macos-latest, windows-latest, ubuntu-latest]
29+
include:
30+
- os: macos-latest
31+
target: mac
32+
arch: arm64
33+
platform_key: macos-arm64
34+
- os: macos-latest
35+
target: mac
36+
arch: x64
37+
platform_key: macos-x64
38+
- os: windows-latest
39+
target: win
40+
arch: x64
41+
platform_key: windows
42+
- os: ubuntu-latest
43+
target: linux
44+
arch: x64
45+
platform_key: linux
46+
fail-fast: false
47+
48+
runs-on: ${{ matrix.os }}
49+
if: |
50+
github.event_name == 'release' ||
51+
contains(github.event.inputs.platforms, matrix.platform_key)
52+
53+
steps:
54+
- name: Checkout code
55+
uses: actions/checkout@v4
56+
57+
- name: Setup Node.js
58+
uses: actions/setup-node@v4
59+
with:
60+
node-version: '18'
61+
62+
- name: Get npm cache directory
63+
id: npm-cache-dir
64+
shell: bash
65+
run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
66+
67+
- name: Cache npm dependencies
68+
uses: actions/cache@v4
69+
with:
70+
path: ${{ steps.npm-cache-dir.outputs.dir }}
71+
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
72+
restore-keys: |
73+
${{ runner.os }}-node-
74+
75+
- name: Cache Playwright browsers
76+
uses: actions/cache@v4
77+
with:
78+
path: playwright-browsers
79+
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
80+
restore-keys: |
81+
playwright-browsers-${{ runner.os }}-
82+
83+
- name: Install dependencies
84+
run: npm ci
85+
86+
- name: Download Whisper model
87+
shell: bash
88+
run: |
89+
mkdir -p models
90+
curl -L -o models/ggml-small.en.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en.bin
91+
92+
- name: Install Playwright browsers
93+
shell: bash
94+
run: |
95+
if [ "${{ runner.os }}" = "Windows" ]; then
96+
bash ./build/install-playwright-browsers.sh
97+
else
98+
./build/install-playwright-browsers.sh
99+
fi
100+
101+
- name: Build (macOS arm64)
102+
if: matrix.os == 'macos-latest' && matrix.arch == 'arm64'
103+
run: npm run build
104+
env:
105+
CSC_LINK: ${{ secrets.MACOS_CERTIFICATE }}
106+
CSC_KEY_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
107+
APPLE_ID: ${{ secrets.APPLE_ID }}
108+
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
109+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
110+
111+
- name: Build (macOS x64)
112+
if: matrix.os == 'macos-latest' && matrix.arch == 'x64'
113+
run: npm run build
114+
env:
115+
CSC_LINK: ${{ secrets.MACOS_CERTIFICATE }}
116+
CSC_KEY_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
117+
APPLE_ID: ${{ secrets.APPLE_ID }}
118+
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
119+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
120+
TARGET_ARCH: x64
121+
122+
- name: Build (Windows)
123+
if: matrix.os == 'windows-latest'
124+
run: npm run build
125+
shell: bash
126+
127+
- name: Build (Linux)
128+
if: matrix.os == 'ubuntu-latest'
129+
run: npm run build
130+
131+
- name: Upload artifacts (macOS arm64)
132+
if: matrix.os == 'macos-latest' && matrix.arch == 'arm64'
133+
uses: actions/upload-artifact@v4
134+
with:
135+
name: dodo-recorder-macos-arm64
136+
path: |
137+
release/*.dmg
138+
release/*.zip
139+
retention-days: 30
140+
141+
- name: Upload artifacts (macOS x64)
142+
if: matrix.os == 'macos-latest' && matrix.arch == 'x64'
143+
uses: actions/upload-artifact@v4
144+
with:
145+
name: dodo-recorder-macos-x64
146+
path: |
147+
release/*.dmg
148+
release/*.zip
149+
retention-days: 30
150+
151+
- name: Upload artifacts (Windows)
152+
if: matrix.os == 'windows-latest'
153+
uses: actions/upload-artifact@v4
154+
with:
155+
name: dodo-recorder-windows
156+
path: release/*.exe
157+
retention-days: 30
158+
159+
- name: Upload artifacts (Linux)
160+
if: matrix.os == 'ubuntu-latest'
161+
uses: actions/upload-artifact@v4
162+
with:
163+
name: dodo-recorder-linux
164+
path: |
165+
release/*.AppImage
166+
release/*.deb
167+
retention-days: 30
168+
169+
release:
170+
needs: build
171+
runs-on: ubuntu-latest
172+
if: github.event_name == 'release'
173+
permissions:
174+
contents: write
175+
176+
steps:
177+
- name: Checkout code
178+
uses: actions/checkout@v4
179+
180+
- name: Download all artifacts
181+
uses: actions/download-artifact@v4
182+
with:
183+
path: artifacts
184+
185+
- name: Display structure of downloaded files
186+
run: ls -R artifacts
187+
188+
- name: Upload to GitHub Release
189+
uses: softprops/action-gh-release@v1
190+
with:
191+
files: |
192+
artifacts/dodo-recorder-macos-arm64/*
193+
artifacts/dodo-recorder-macos-x64/*
194+
artifacts/dodo-recorder-windows/*
195+
artifacts/dodo-recorder-linux/*
196+
env:
197+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,4 @@ tsconfig.tsbuildinfo
4545

4646
test-sessions/
4747

48+
build-info.json

CHANGELOG.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Changelog
2+
3+
All notable changes to Dodo Recorder will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [Unreleased]
9+
10+
### Added
11+
12+
### Changed
13+
14+
### Fixed
15+
16+
## [0.1.0] - 2026-01-23
17+
18+
### Initial Release
19+
20+
**Core Features:**
21+
- 🎬 Browser interaction recording with Playwright
22+
- 🎙️ Voice commentary with local Whisper.cpp transcription
23+
- 📸 Screenshot capture (manual and automatic)
24+
- ✅ Assertion mode for recording element validations
25+
- 🪟 Non-intrusive floating widget in recorded browser
26+
- 🎭 Framework-agnostic session output (Playwright, Cypress, Selenium, Puppeteer)
27+
28+
**Technical Highlights:**
29+
- Multiple locator strategies (testId, text, role, CSS, XPath) with confidence levels
30+
- Voice-to-action synchronization algorithm
31+
- Offline processing (no cloud dependencies)
32+
- Session bundles optimized for AI test generation
33+
34+
**Platform Support:**
35+
- macOS (x64 and ARM64), Windows, Linux
36+
37+
### Known Limitations
38+
39+
- Whisper model (466 MB) must be downloaded manually
40+
- Release builds only available for macOS Apple Silicon
41+
- English-only transcription (small.en model)
42+
43+
[Unreleased]: https://github.com/dodosaurus/dodo-recorder/compare/v0.1.0...HEAD
44+
[0.1.0]: https://github.com/dodosaurus/dodo-recorder/releases/tag/v0.1.0

README.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
## 🖥️ Platform Support
2020

2121
**Current Release:**
22-
-**macOS Apple Silicon (M1–M4)** — signed and notarized builds
23-
-**macOS Intel (x64)** — build from source (not yet released)
24-
-**Windows** — build from source (not yet released)
25-
-**Linux** — build from source (not yet released)
22+
-**macOS Apple Silicon (ARM64)** - tested
23+
-**macOS Intel (x64)** — not tested
24+
-**Windows** — not tested
25+
-**Linux** — not tested
26+
27+
**CI/CD Builds:** Cross-platform builds are available via GitHub Actions. See [`docs/ci_cd.md`](docs/ci_cd.md) for details.
2628

2729
## 🎯 Overview
2830

@@ -165,6 +167,10 @@ Built apps are created in the `release/` folder for your current platform.
165167

166168
> **⚠️ Production Builds:** Currently only macOS Apple Silicon (ARM64) builds are signed, notarized, and tested for distribution. Intel Mac, Windows, and Linux users should build from source using `npm run build` for local testing.
167169
170+
> **🔄 CI/CD Builds:** Use GitHub Actions to build for all platforms without needing a Windows or Linux machine. Builds run on releases or can be triggered manually with platform selection. See [`docs/ci_cd.md`](docs/ci_cd.md) for setup instructions.
171+
172+
> **💰 GitHub Actions:** Free for public repositories (unlimited minutes) and 2,000 free minutes/month for private repos. See [`docs/ci_cd.md`](docs/ci_cd.md#github-actions-pricing) for details.
173+
168174
> **Note for Maintainers:** See [`docs/code_signing.md`](docs/code_signing.md) for code signing and notarization setup. Contributors don't need code signing for development.
169175
170176
### Project Structure
@@ -262,15 +268,13 @@ A: No. All transcription happens locally using Whisper.cpp. Your voice recording
262268
**Q: Why do I get "Playwright browser not installed" error?**
263269
A: Run `./build/install-playwright-browsers.sh` to download the Playwright Chromium browser. The `npm install` command should do this automatically via a postinstall script.
264270

265-
**Q: Why is there only a macOS Apple Silicon build right now?**
266-
A: Initial development and testing focused on Apple Silicon (M1–M4). The app works on other platforms when building from source, but I want to complete testing and release signed builds for Intel Mac, Windows, and Linux before distributing them.
267-
268271
---
269272

270273
## 📚 Documentation
271274

272275
- **[User Guide](docs/user_guide.md)**: Complete feature documentation, keyboard shortcuts, and output format details
273276
- **[Architecture](docs/architecture.md)**: System design, data flow, and technical implementation
277+
- **[CI/CD Builds](docs/ci_cd.md)**: GitHub Actions workflow for cross-platform builds
274278
- **[Code Signing](docs/code_signing.md)**: macOS code signing setup and configuration
275279
- **[Voice Transcription](docs/voice_transcription.md)**: Deep dive into the local transcription system
276280
- **[Output Format](docs/output_format.md)**: Detailed explanation of session bundle structure

0 commit comments

Comments
 (0)