Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
208 commits
Select commit Hold shift + click to select a range
91f7051
docs: Add Git Flow branching strategy to CONTRIBUTING.md
AndyMik90 Dec 22, 2025
0adadda
Feature/apps restructure v2.7.2 (#138)
AndyMik90 Dec 22, 2025
df77953
Feat: Ollama download progress tracking with new apps structure (#141)
rayBlock Dec 22, 2025
ebd8340
fix: resolve Python environment race condition (#142)
Jorisslagter Dec 22, 2025
f96c630
fix: remove legacy path from auto-claude source detection (#148)
Jorisslagter Dec 22, 2025
220faf0
Fix/linear 400 error
AndyMik90 Dec 22, 2025
30e7536
fix(task): stop running process when task status changes away from in…
AndyMik90 Dec 22, 2025
6951251
feat: Add UI scale feature with 75-200% range (#125)
enescingoz Dec 23, 2025
05f5d30
fix: hide status badge when execution phase badge is showing (#154)
AndyMik90 Dec 23, 2025
ced2ad4
fix/PRs from old main setup to apps structure (#185)
AndyMik90 Dec 23, 2025
8f766ad
feat/beta-release (#190)
AndyMik90 Dec 23, 2025
407a0be
Feat/beta release (#193)
AndyMik90 Dec 23, 2025
e3eec68
fix(ci): correct welcome workflow PR message (#206)
AndyMik90 Dec 23, 2025
f168bdc
fix: Add Python 3.10+ version validation and GitHub Actions Python se…
possebon Dec 23, 2025
02bef95
feat: Add OpenRouter as LLM/embedding provider (#162)
possebon Dec 23, 2025
5352729
fix(core): add global spec numbering lock to prevent collisions (#209)
AndyMik90 Dec 23, 2025
6ec8549
Fix/ideation status sync (#212)
souky-byte Dec 23, 2025
5ccdb6a
fix: add future annotations import to discovery.py (#229)
Jorisslagter Dec 24, 2025
0f7d6e0
fix: resolve Python detection and backend packaging issues (#241)
Furansujin Dec 24, 2025
348de6d
Feat/Auto Fix Github issues and do extensive AI PR reviews (#250)
AndyMik90 Dec 24, 2025
5e8c530
Revert "Feat/Auto Fix Github issues and do extensive AI PR reviews (#…
AndyMik90 Dec 24, 2025
f843811
feat: add i18n internationalization system (#248)
Mitsu13Ion Dec 24, 2025
a3f8754
fix: update path resolution for ollama_model_detector.py in memory ha…
delyethan Dec 25, 2025
d42041c
ci: implement enterprise-grade PR quality gates and security scanning…
AlexMadera Dec 25, 2025
596e951
feat(github): add automated PR review with follow-up support (#252)
AndyMik90 Dec 25, 2025
d4cad80
chore(deps): bump vitest from 4.0.15 to 4.0.16 in /apps/frontend (#272)
dependabot[bot] Dec 25, 2025
a2cee69
chore(deps): bump @electron/rebuild in /apps/frontend (#271)
dependabot[bot] Dec 25, 2025
6ac8250
fix(paths): normalize relative paths to posix (#239)
danielfrey63 Dec 25, 2025
e74a3df
fix: accept bug_fix workflow_type alias during planning (#240)
danielfrey63 Dec 25, 2025
1e1d7d9
fix(ci): use develop branch for dry-run builds in beta-release workfl…
AndyMik90 Dec 25, 2025
f49d481
chore(deps): bump typescript-eslint in /apps/frontend (#269)
dependabot[bot] Dec 25, 2025
5ac566e
chore(deps): bump jsdom from 26.1.0 to 27.3.0 in /apps/frontend (#268)
dependabot[bot] Dec 25, 2025
d79f2da
fix(ci): use correct electron-builder arch flags (#278)
AndyMik90 Dec 25, 2025
b005fa5
fix(security): resolve CodeQL file system race conditions and unused …
AndyMik90 Dec 25, 2025
f1cc5a0
fix(github): resolve follow-up review API issues
AndyMik90 Dec 25, 2025
50dd107
chore(deps): bump @xterm/xterm from 5.5.0 to 6.0.0 in /apps/frontend …
dependabot[bot] Dec 25, 2025
0b874d4
fix(ci): add write permissions to beta-release update-version job
AndyMik90 Dec 25, 2025
d98e283
fix: resolve spawn python ENOENT error on Linux by using getAugmented…
r3d91ll Dec 25, 2025
7f19c2e
feat(python): bundle Python 3.12 with packaged Electron app (#284)
AndyMik90 Dec 25, 2025
3ff6127
fix(frontend): validate backend source path before using it (#287)
AndyMik90 Dec 26, 2025
5106c6e
Potential fix for code scanning alert no. 224: Uncontrolled command l…
AndyMik90 Dec 26, 2025
8bb3df9
fix(frontend): support archiving tasks across all worktree locations …
AndyMik90 Dec 26, 2025
217249c
fix(github): add explicit GET method to gh api comment fetches (#294)
AndyMik90 Dec 26, 2025
8416f30
feat: enhance the logs for the commit linting stage (#293)
AlexMadera Dec 26, 2025
26beefe
feat(merge,oauth): add path-aware AI merge resolution and device code…
AndyMik90 Dec 26, 2025
7a51cbd
Fix/2.7.2 fixes (#300)
AndyMik90 Dec 26, 2025
937a60f
fix: stop tracking spec files in git (#295)
AndyMik90 Dec 26, 2025
d0b0b3d
fix(build): add --force-local flag to tar on Windows (#303)
AndyMik90 Dec 26, 2025
d9fb8f2
fix(build): use PowerShell for tar extraction on Windows
AndyMik90 Dec 26, 2025
086429c
fix(github): add augmented PATH env to all gh CLI calls
AndyMik90 Dec 26, 2025
c0a02a4
fix(build): use explicit Windows System32 tar path (#308)
AndyMik90 Dec 26, 2025
1c14227
chore(ci): cancel in-progress runs (#302)
tosincarik Dec 26, 2025
92c6f27
fix(python): use venv Python for all services to fix dotenv errors (#…
AlexMadera Dec 26, 2025
e1b0f74
fix(updater): proper semver comparison for pre-release versions (#313)
MikeeBuilds Dec 26, 2025
e80ef79
fix(project): fix task status persistence reverting on refresh (#246)…
MikeeBuilds Dec 26, 2025
661e47c
fix(ci): add auto-updater manifest files and version auto-update (#317)
MikeeBuilds Dec 26, 2025
cb6b216
fix(tasks): sync status to worktree implementation plan to prevent re…
AlexMadera Dec 26, 2025
8a80b1d
fix(ci): remove version bump to fix branch protection conflict (#325)
MikeeBuilds Dec 26, 2025
50e3111
feat: bump version (#329)
AlexMadera Dec 26, 2025
d3a63b0
perf: convert synchronous I/O to async operations in worktree handler…
JoshuaRileyDev Dec 27, 2025
fec6b9f
refactor(settings): remove deprecated ProjectSettings modal and hooks…
Mitsu13Ion Dec 27, 2025
9734b70
chore: Refactor/kanban realtime status sync (#249)
souky-byte Dec 27, 2025
787667e
refactor(components): remove deprecated TaskDetailPanel re-export (#344)
Mitsu13Ion Dec 27, 2025
d51f456
feat: centralize CLI tool path management (#341)
Furansujin Dec 27, 2025
9d43abe
refactor: remove deprecated code across backend and frontend (#348)
Mitsu13Ion Dec 27, 2025
fef07c9
feat: add terminal dropdown with inbuilt and external options in task…
JoshuaRileyDev Dec 27, 2025
40d04d7
chore: bump version to 2.7.2-beta.10
AndyMik90 Dec 27, 2025
e9782db
fix(ui): close parent modal when Edit dialog opens (#354)
MikeeBuilds Dec 27, 2025
4dcc5af
fix: make backend tests pass on Windows (#282)
tosincarik Dec 27, 2025
4e71361
fix(analyzer): add C#/Java/Swift/Kotlin project files to security has…
MikeeBuilds Dec 27, 2025
7881b2d
fix(terminal): preserve terminal state when switching projects (#358)
AndyMik90 Dec 27, 2025
1fa7a9c
fix: Resolve pre-commit hook failures with version sync, pytest path,…
ianstantiate Dec 27, 2025
eabe7c7
fix(subprocess): handle Python paths with spaces (#352)
MikeeBuilds Dec 27, 2025
20f20fa
fix(security): invalidate profile cache when file is created/modified…
MikeeBuilds Dec 27, 2025
753dc8b
fix(perf): remove projectTabs from useEffect deps to fix re-render lo…
MikeeBuilds Dec 27, 2025
9bbdef0
fix/Improving UX for Display/Scaling Changes (#332)
kvnloo Dec 27, 2025
2d3b7fb
docs: add security research documentation (#361)
bdmorin Dec 27, 2025
0ca2e3f
fix: fixed version-specific links in readme and pre-commit hook that …
ianstantiate Dec 28, 2025
db0cbea
fix: Memory Status card respects configured embedding provider (#336)…
MikeeBuilds Dec 28, 2025
bc22064
Fixes failing spec - "gh CLI Check Handler - should return installed:…
ianstantiate Dec 28, 2025
8b4ce58
fix(ideation): update progress calculation to include just-completed …
illia1f Dec 28, 2025
7751588
fix(github): improve PR review with structured outputs and fork suppo…
AndyMik90 Dec 28, 2025
68548e3
feat(analyzer): add iOS/Swift project detection (#389)
MikeeBuilds Dec 28, 2025
aaa8313
fix: improve CLI tool detection and add Claude CLI path settings (#393)
jslitzkerttcu Dec 28, 2025
98b12ed
fix(ui): prevent TaskEditDialog from unmounting when opened (#395)
MikeeBuilds Dec 28, 2025
321c971
fix(analyzer): move Swift detection before Ruby detection (#401)
MikeeBuilds Dec 29, 2025
0513121
fix: 2.7.2 bug fixes and improvements (#388)
AndyMik90 Dec 29, 2025
9aef0dd
fix(frontend): add .js extension to electron-log/main imports
AndyMik90 Dec 29, 2025
a39ea49
chore(ci): remove redundant CLA GitHub Action workflow
AndyMik90 Dec 29, 2025
4bdf7a0
fix(github): pass repo parameter to GHClient for explicit PR resoluti…
AndyMik90 Dec 29, 2025
230de5f
feat(build): add Flatpak packaging support for Linux (#404)
Mitsu13Ion Dec 29, 2025
e7e6b52
fix(model): respect task_metadata.json model selection (#415)
AndyMik90 Dec 30, 2025
2f66246
fix: Allow windows to run CC PR Reviewer (#406)
AlexMadera Dec 30, 2025
0a571d3
feat: add gitlab integration (#254)
Mitsu13Ion Dec 30, 2025
717fba0
feat: enhance pr review page to include PRs filters (#423)
AlexMadera Dec 30, 2025
62a7551
fix(spec_runner): add --base-branch argument support (#428)
Mitsu13Ion Dec 30, 2025
88c7605
fix(client): add spec_dir to SDK permissions (#429)
Mitsu13Ion Dec 30, 2025
515b73b
ci: remove conventional commits PR title validation workflow
AndyMik90 Dec 29, 2025
bdb0154
feat: Enhance the look of the PR Detail area (#427)
AlexMadera Dec 30, 2025
798ca79
fix(ui): add fallback to prevent tasks stuck in ai_review status (#397)
MikeeBuilds Dec 30, 2025
ac8dfca
refactor: remove deprecated TaskDetailPanel component (#432)
Mitsu13Ion Dec 30, 2025
666794b
feat(frontend): Add Files tab to task details panel (#430)
Mitsu13Ion Dec 30, 2025
3c0708b
fix(windows): resolve EINVAL error when opening worktree in VS Code (…
fireapache Dec 30, 2025
203a970
fix: infinite loop in useTaskDetail merge preview loading (#444)
abe238 Dec 31, 2025
c15bb31
fix: accept Python 3.12+ in install-backend.js (#443)
abe238 Dec 31, 2025
2effa53
fix: prevent infinite re-render loop in task selection useEffect (#442)
abe238 Dec 31, 2025
da31b68
feat: remove top bars (#386)
fireapache Dec 31, 2025
5d8ede2
Fix/2.7.2 beta12 (#424)
AndyMik90 Dec 31, 2025
0f9c5b8
fix(pr-review): treat LOW-only findings as ready to merge (#455)
AndyMik90 Dec 31, 2025
fb6b7fc
fix: create spec.md during roadmap-to-task conversion (#446)
Pranaveswar19 Dec 31, 2025
52a4fcc
fix(ci): add Rust toolchain for Intel Mac builds (#459)
AndyMik90 Dec 31, 2025
7210610
Fix/windows issues (#471)
AndyMik90 Jan 1, 2026
8e5c11a
chore: bump version to 2.7.2-beta.12 (#460)
AndyMik90 Jan 1, 2026
4da8cd6
fix(detection): support bun.lock text format for Bun 1.2.0+ (#525)
AndyMik90 Jan 1, 2026
8d58dd6
fix: prefer versioned Homebrew Python over system python3 (#494)
mirzaaghazadeh Jan 1, 2026
344ec65
fix(pr-review): use temporary worktree for PR review isolation (#532)
AndyMik90 Jan 1, 2026
3db02c5
fix(csp): allow external HTTPS images in Content-Security-Policy (#549)
MikeeBuilds Jan 2, 2026
30f7951
fix: resolve frontend lag and update dependencies (#526)
AndyMik90 Jan 2, 2026
f58c257
fix(memory): fix learning loop to retrieve patterns and gotchas (#530)
AndyMik90 Jan 2, 2026
7990dcb
fix(ui): preserve original task description after spec creation (#536)
AndyMik90 Jan 2, 2026
29e4550
fix: detect and clear cross-platform CLI paths in settings (#535)
AndyMik90 Jan 2, 2026
c2148bb
fix(ci): add Python setup to beta-release and fix PR status gate chec…
AndyMik90 Jan 2, 2026
16a7fa4
fix(merge): resolve KanbanBoard conflicts favoring develop
AndyMik90 Jan 2, 2026
90a2032
feat(terminal): respect preferred terminal setting for Windows PTY shell
AndyMik90 Jan 2, 2026
90dddc2
fix(ci): cache pip wheels to speed up Intel Mac builds
AndyMik90 Jan 2, 2026
dedd075
# 🔥 hotfix(electron): restore app functionality on Windows broken by …
sniggl Jan 2, 2026
6d4231e
ci(release): add CHANGELOG.md validation and fix release workflow
AndyMik90 Jan 2, 2026
04de8c7
fix(merge): handle Windows CRLF line endings in regex fallback
AndyMik90 Jan 2, 2026
effaa68
fix: Solve ladybug problem on running npm install all on windows (#576)
AlexMadera Jan 2, 2026
6ac3012
2.7.2 release
AndyMik90 Jan 2, 2026
2880baf
Merge branch 'fix/2.7.3-hotfixes' into develop
AndyMik90 Jan 2, 2026
d278963
feat: custom Anthropic compatible API profile management (#181)
gnoviawan Jan 2, 2026
3086233
Improving Task Card Title Readability (#461)
fireapache Jan 2, 2026
5efc2c5
docs: update stable download links to v2.7.2 (#579)
AlexMadera Jan 2, 2026
4a83304
feat: add Dart/Flutter/Melos support to security profiles (#583)
Mitsu13Ion Jan 2, 2026
6c85590
fix(kanban): complete refresh button implementation (#584)
MikeeBuilds Jan 3, 2026
14b3db5
fix: pass electron version explicitly to electron-rebuild on Windows …
fireapache Jan 3, 2026
f5be794
fix(frontend): resolve PATH and PYTHONPATH issues in insights and cha…
hluisi Jan 3, 2026
7177c79
fix: human_review status persistence bug (worktree plan path fix) (#605)
MikeeBuilds Jan 3, 2026
13535f1
feat(terminal): add worktree support for terminals (#625)
AndyMik90 Jan 3, 2026
acdd7d9
refactor(github-review): replace confidence scoring with evidence-bas…
AndyMik90 Jan 3, 2026
556f0b2
fix(frontend): filter empty env vars to prevent OAuth token override …
Ashwinhegde19 Jan 3, 2026
4ec9db8
fix: security hook cwd extraction and PATH issues (#555, #556) (#587)
hluisi Jan 3, 2026
f7b02e8
fix(ci): include update manifests for architecture-specific auto-upda…
hluisi Jan 3, 2026
39da819
Fix/small fixes 2.7.3 (#631)
AndyMik90 Jan 3, 2026
46c41f8
fix: change hardcoded Opus defaults to Sonnet (fix #433) (#633)
MikeeBuilds Jan 3, 2026
b720312
fix(ui): update TaskCard description truncation for improved display …
AndyMik90 Jan 3, 2026
e1e8943
fix(mcp): use shell mode for Windows command spawning (#572)
andydataguy Jan 4, 2026
eeef8a3
fix: check .claude.json for OAuth auth in profile scorer (#652)
MikeeBuilds Jan 4, 2026
65f6089
fix(python): sanitize environment to prevent PYTHONHOME contamination…
MikeeBuilds Jan 5, 2026
234d44f
fix(settings): allow toggle deselection and improve embedding model n…
MikeeBuilds Jan 5, 2026
8be0e6f
feat(sentry): add anonymous error reporting with privacy controls (#636)
AndyMik90 Jan 5, 2026
1e3e8bd
Fix/update app (#594)
AndyMik90 Jan 5, 2026
6fb2d48
fix: improve GLM presets, ideation auth, and Insights env (#648)
StillKnotKnown Jan 5, 2026
c271354
fix: detect Claude CLI installed via NVM on Linux/macOS (#623)
StillKnotKnown Jan 5, 2026
7b4993e
Fix/small fixes all around (#645)
AndyMik90 Jan 5, 2026
35573fd
fix(frontend): detect @lydell/node-pty prebuilts in postinstall (#673)
fireapache Jan 5, 2026
63f4617
sentry dev support + sessions handling in terminals
AndyMik90 Jan 5, 2026
81afc3d
fix(terminal): resolve React Fast Refresh hook error in usePtyProcess
AndyMik90 Jan 5, 2026
e293732
docs: add stars badge and star history chart to README (#675)
eddie333016 Jan 5, 2026
3930b12
fix(a11y): Add missing ARIA attributes for screen reader accessibilit…
Orinks Jan 5, 2026
2c9fcbf
chore: Update Linux app icon to use multiple resolution sizes and fix…
Pdzly Jan 5, 2026
97f3449
fix(github): pass OAuth token to Python runner subprocesses (fixes #5…
MikeeBuilds Jan 5, 2026
ec4441c
fix: centralize Claude CLI invocation (#680)
StillKnotKnown Jan 5, 2026
5005e56
Fix Window Size on Hi-DPI Displays (#696)
aaronson2012 Jan 5, 2026
78aceae
fix(profiles): support API profiles in auth check and model resolutio…
gnoviawan Jan 6, 2026
09aa4f4
fix: WIndows not finding the gith bash path (#724)
AlexMadera Jan 6, 2026
574cd11
fix: pass augmented env to Claude CLI validation on macOS (#640)
tallinn102 Jan 6, 2026
8a4b506
fix: show OAuth terminal during profile authentication (#671)
bvdr Jan 6, 2026
84bc522
fix(setup): auto-create .env from .env.example during backend install…
Crimson341 Jan 6, 2026
df57fbf
fix: InvestigationDialog overflow issue (#669)
jackchuka Jan 6, 2026
2f321fb
Fix: Security allowlist not working in worktree mode (#646)
arcker Jan 6, 2026
724ad82
fix(a11y): Add context menu for keyboard-accessible task status chang…
Orinks Jan 6, 2026
78b80bc
fix: Multiple bug fixes including binary file handling and semantic t…
AndyMik90 Jan 6, 2026
7fda36a
fix: use --continue instead of --resume for Claude session restoratio…
AndyMik90 Jan 6, 2026
e9c859c
fix(memory): use Homebrew for Ollama installation on macOS (#742)
MikeeBuilds Jan 6, 2026
e3d72d6
refactor: simplify task description handling and improve modal layout…
AndyMik90 Jan 6, 2026
f406959
fix(startup): prevent app freeze by making Claude CLI detection non-b…
aslaker Jan 7, 2026
31519c2
fix: add helpful error message when Python dependencies are missing (…
StillKnotKnown Jan 7, 2026
5e78390
fix(roadmap): normalize feature status values for Kanban display [ACS…
MikeeBuilds Jan 7, 2026
96b7eb4
ACS-103 Windows can finish a task (#739)
AlexMadera Jan 7, 2026
01decae
fix(memory): handle Ollama version errors during model pull (#760)
bbopen Jan 7, 2026
fbaf2e7
fix(windows): add pywin32 dependency for LadybugDB (#627) (#778)
AndyMik90 Jan 7, 2026
cbd47f2
fix(insights): await async sendMessage to prevent race condition (#61…
AndyMik90 Jan 7, 2026
061411d
fix(python-bundling): verify critical packages exist, not just marker…
AndyMik90 Jan 7, 2026
cc78d7a
fix(multi-project): filter task IPC events by project to prevent cros…
AndyMik90 Jan 7, 2026
4203341
fix(permissions): grant worktree access to original project directori…
AndyMik90 Jan 7, 2026
da4c272
Fix/2.7.2 hotfixes (#577)
AndyMik90 Jan 2, 2026
ea31a69
ci: force workflow re-index for tag trigger
AndyMik90 Jan 2, 2026
95b59ea
fix(ci): fix YAML syntax error in release.yml multiline string
AndyMik90 Jan 2, 2026
16638d1
Start comprehensive UTF-8 encoding fix
TamerineSky Jan 7, 2026
bec1776
Fix UTF-8 encoding for Priorities 1-2 (Core & Agents - 18 instances)
TamerineSky Jan 7, 2026
d7fa80b
Fix UTF-8 encoding for Priorities 3-4 (Spec & Project - 26 instances)
TamerineSky Jan 7, 2026
a0fc4b9
Fix UTF-8 encoding for Priorities 5-7 (Services, Analysis, Ideation -…
TamerineSky Jan 7, 2026
ec559bd
Fix UTF-8 encoding for Priorities 8-14 (All remaining - 85+ instances)
TamerineSky Jan 7, 2026
2bb4405
Fix UTF-8 encoding for missed instances (23 instances)
TamerineSky Jan 7, 2026
80898e2
Fix missed os.fdopen() calls and duplicate encoding bug
TamerineSky Jan 7, 2026
2fdb602
Fix missed Path.read_text() and Path.write_text() encoding (99 instan…
TamerineSky Jan 7, 2026
ebfd579
Fix critical syntax errors from CodeRabbit review
TamerineSky Jan 7, 2026
ffa9b71
Fix critical syntax errors in test_context_gatherer.py
TamerineSky Jan 7, 2026
ff646c4
Fix CodeRabbit issues: UnicodeDecodeError handling and trailing newlines
TamerineSky Jan 7, 2026
a7818b3
Fix test fixture to use UTF-8 encoding consistently
TamerineSky Jan 7, 2026
4cc9198
fix(frontend): ensure PATH includes system directories when launched …
czerewacz Jan 7, 2026
63766f7
feat(pr-review): add prominent verdict summary to PR review comments …
AndyMik90 Jan 7, 2026
f611332
Fix linting errors and security vulnerabilities from merge
TamerineSky Jan 7, 2026
de0dcb2
Fix code formatting for ruff compliance
TamerineSky Jan 7, 2026
126557d
Merge branch 'develop' into fix/comprehensive-utf8-encoding
TamerineSky Jan 7, 2026
172e029
Fix missing UTF-8 encoding in init.py gitignore operations
TamerineSky Jan 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
48 changes: 40 additions & 8 deletions .github/workflows/beta-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,21 @@ jobs:
- name: Install Rust toolchain (for building native Python packages)
uses: dtolnay/rust-toolchain@stable

- name: Cache pip wheel cache (for compiled packages like real_ladybug)
uses: actions/cache@v4
with:
path: ~/Library/Caches/pip
key: pip-wheel-${{ runner.os }}-x64-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
pip-wheel-${{ runner.os }}-x64-

- name: Cache bundled Python
uses: actions/cache@v4
with:
path: apps/frontend/python-runtime
key: python-bundle-${{ runner.os }}-x64-3.12.8-rust
key: python-bundle-${{ runner.os }}-x64-3.12.8-rust-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
python-bundle-${{ runner.os }}-x64-
python-bundle-${{ runner.os }}-x64-3.12.8-rust-

- name: Build application
run: cd apps/frontend && npm run build
Expand Down Expand Up @@ -181,13 +189,21 @@ jobs:
- name: Install dependencies
run: cd apps/frontend && npm ci

- name: Cache pip wheel cache
uses: actions/cache@v4
with:
path: ~/Library/Caches/pip
key: pip-wheel-${{ runner.os }}-arm64-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
pip-wheel-${{ runner.os }}-arm64-

- name: Cache bundled Python
uses: actions/cache@v4
with:
path: apps/frontend/python-runtime
key: python-bundle-${{ runner.os }}-arm64-3.12.8
key: python-bundle-${{ runner.os }}-arm64-3.12.8-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
python-bundle-${{ runner.os }}-arm64-
python-bundle-${{ runner.os }}-arm64-3.12.8-

- name: Build application
run: cd apps/frontend && npm run build
Expand Down Expand Up @@ -265,13 +281,21 @@ jobs:
- name: Install dependencies
run: cd apps/frontend && npm ci

- name: Cache pip wheel cache
uses: actions/cache@v4
with:
path: ~\AppData\Local\pip\Cache
key: pip-wheel-${{ runner.os }}-x64-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
pip-wheel-${{ runner.os }}-x64-

- name: Cache bundled Python
uses: actions/cache@v4
with:
path: apps/frontend/python-runtime
key: python-bundle-${{ runner.os }}-x64-3.12.8
key: python-bundle-${{ runner.os }}-x64-3.12.8-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
python-bundle-${{ runner.os }}-x64-
python-bundle-${{ runner.os }}-x64-3.12.8-

- name: Build application
run: cd apps/frontend && npm run build
Expand Down Expand Up @@ -335,13 +359,21 @@ jobs:
flatpak install -y --user flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08
flatpak install -y --user flathub org.electronjs.Electron2.BaseApp//25.08

- name: Cache pip wheel cache
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-wheel-${{ runner.os }}-x64-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
pip-wheel-${{ runner.os }}-x64-

- name: Cache bundled Python
uses: actions/cache@v4
with:
path: apps/frontend/python-runtime
key: python-bundle-${{ runner.os }}-x64-3.12.8
key: python-bundle-${{ runner.os }}-x64-3.12.8-${{ hashFiles('apps/backend/requirements.txt') }}
restore-keys: |
python-bundle-${{ runner.os }}-x64-
python-bundle-${{ runner.os }}-x64-3.12.8-

- name: Build application
run: cd apps/frontend && npm run build
Expand Down
130 changes: 124 additions & 6 deletions .github/workflows/prepare-release.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
name: Prepare Release

# Triggers when code is pushed to main (e.g., merging develop → main)
# If package.json version is newer than the latest tag, creates a new tag
# which then triggers the release.yml workflow
# If package.json version is newer than the latest tag:
# 1. Validates CHANGELOG.md has an entry for this version (FAILS if missing)
# 2. Extracts release notes from CHANGELOG.md
# 3. Creates a new tag which triggers release.yml

on:
push:
Expand Down Expand Up @@ -67,8 +69,122 @@ jobs:
echo "⏭️ No release needed (package version not newer than latest tag)"
fi

- name: Create and push tag
# CRITICAL: Validate CHANGELOG.md has entry for this version BEFORE creating tag
- name: Validate and extract changelog
if: steps.check.outputs.should_release == 'true'
id: changelog
run: |
VERSION="${{ steps.check.outputs.new_version }}"
CHANGELOG_FILE="CHANGELOG.md"

echo "🔍 Validating CHANGELOG.md for version $VERSION..."

if [ ! -f "$CHANGELOG_FILE" ]; then
echo "::error::CHANGELOG.md not found! Please create CHANGELOG.md with release notes."
exit 1
fi

# Extract changelog section for this version
# Looks for "## X.Y.Z" header and captures until next "## " or "---" or end
CHANGELOG_CONTENT=$(awk -v ver="$VERSION" '
BEGIN { found=0; content="" }
/^## / {
if (found) exit
# Match version at start of header (e.g., "## 2.7.3 -" or "## 2.7.3")
if ($2 == ver || $2 ~ "^"ver"[[:space:]]*-") {
found=1
# Skip the header line itself, we will add our own
next
}
}
/^---$/ { if (found) exit }
found { content = content $0 "\n" }
END {
if (!found) {
print "NOT_FOUND"
exit 1
}
# Trim leading/trailing whitespace
gsub(/^[[:space:]]+|[[:space:]]+$/, "", content)
print content
}
' "$CHANGELOG_FILE")

if [ "$CHANGELOG_CONTENT" = "NOT_FOUND" ] || [ -z "$CHANGELOG_CONTENT" ]; then
echo ""
echo "::error::═══════════════════════════════════════════════════════════════════════"
echo "::error:: CHANGELOG VALIDATION FAILED"
echo "::error::═══════════════════════════════════════════════════════════════════════"
echo "::error::"
echo "::error:: Version $VERSION not found in CHANGELOG.md!"
echo "::error::"
echo "::error:: Before releasing, please update CHANGELOG.md with an entry like:"
echo "::error::"
echo "::error:: ## $VERSION - Your Release Title"
echo "::error::"
echo "::error:: ### ✨ New Features"
echo "::error:: - Feature description"
echo "::error::"
echo "::error:: ### 🐛 Bug Fixes"
echo "::error:: - Fix description"
echo "::error::"
echo "::error::═══════════════════════════════════════════════════════════════════════"
echo ""

# Also add to job summary for visibility
echo "## ❌ Release Blocked: Missing Changelog" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Version **$VERSION** was not found in CHANGELOG.md." >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### How to fix:" >> $GITHUB_STEP_SUMMARY
echo "1. Update CHANGELOG.md with release notes for version $VERSION" >> $GITHUB_STEP_SUMMARY
echo "2. Commit and push the changes" >> $GITHUB_STEP_SUMMARY
echo "3. The release will automatically retry" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Expected format:" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`markdown" >> $GITHUB_STEP_SUMMARY
echo "## $VERSION - Release Title" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### ✨ New Features" >> $GITHUB_STEP_SUMMARY
echo "- Feature description" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 🐛 Bug Fixes" >> $GITHUB_STEP_SUMMARY
echo "- Fix description" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY

exit 1
fi

echo "✅ Found changelog entry for version $VERSION"
echo ""
echo "--- Extracted Release Notes ---"
echo "$CHANGELOG_CONTENT"
echo "--- End Release Notes ---"

# Save changelog to file for artifact upload
echo "$CHANGELOG_CONTENT" > changelog-extract.md

# Also save to output (for short changelogs)
# Using heredoc for multiline output
{
echo "content<<CHANGELOG_EOF"
echo "$CHANGELOG_CONTENT"
echo "CHANGELOG_EOF"
} >> $GITHUB_OUTPUT

echo "changelog_valid=true" >> $GITHUB_OUTPUT

# Upload changelog as artifact for release.yml to use
- name: Upload changelog artifact
if: steps.check.outputs.should_release == 'true' && steps.changelog.outputs.changelog_valid == 'true'
uses: actions/upload-artifact@v4
with:
name: changelog-${{ steps.check.outputs.new_version }}
path: changelog-extract.md
retention-days: 1

- name: Create and push tag
if: steps.check.outputs.should_release == 'true' && steps.changelog.outputs.changelog_valid == 'true'
run: |
VERSION="${{ steps.check.outputs.new_version }}"
TAG="v$VERSION"
Expand All @@ -85,17 +201,19 @@ jobs:

- name: Summary
run: |
if [ "${{ steps.check.outputs.should_release }}" = "true" ]; then
if [ "${{ steps.check.outputs.should_release }}" = "true" ] && [ "${{ steps.changelog.outputs.changelog_valid }}" = "true" ]; then
echo "## 🚀 Release Triggered" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Version:** v${{ steps.check.outputs.new_version }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "✅ Changelog validated and extracted from CHANGELOG.md" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "The release workflow has been triggered and will:" >> $GITHUB_STEP_SUMMARY
echo "1. Build binaries for all platforms" >> $GITHUB_STEP_SUMMARY
echo "2. Generate changelog from PRs" >> $GITHUB_STEP_SUMMARY
echo "2. Use changelog from CHANGELOG.md" >> $GITHUB_STEP_SUMMARY
echo "3. Create GitHub release" >> $GITHUB_STEP_SUMMARY
echo "4. Update README with new version" >> $GITHUB_STEP_SUMMARY
else
elif [ "${{ steps.check.outputs.should_release }}" = "false" ]; then
echo "## ⏭️ No Release Needed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Package version:** ${{ steps.package.outputs.version }}" >> $GITHUB_STEP_SUMMARY
Expand Down
Loading
Loading