Skip to content

chore(ci): unblock CI on develop — ignore CHANGELOG.md + skip native postinstall in setup#296

Merged
github-actions[bot] merged 2 commits into
developfrom
chore/prettier-ignore-changelog
Jun 9, 2026
Merged

chore(ci): unblock CI on develop — ignore CHANGELOG.md + skip native postinstall in setup#296
github-actions[bot] merged 2 commits into
developfrom
chore/prettier-ignore-changelog

Conversation

@tomymaritano

@tomymaritano tomymaritano commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Why

Two distinct CI issues, both blocking every Phase 0 PR (#290, #292, #294). Bundling them is OK because they're orthogonal-but-related: both clear a "lint-or-setup says no, so I can't merge" path on develop.

Issue 1: Prettier fails on `CHANGELOG.md`

semantic-release writes CHANGELOG entries without prettier formatting. The root `format:check` script uses `--ignore-path .gitignore`, which overrides Prettier's default `.prettierignore` lookup. CHANGELOG.md correctly isn't gitignored (it's tracked), so it gets linted, fails, kills lint.

Issue 2: `setup` job fails when native deps don't match the host Electron

`setup` runs `pnpm install --frozen-lockfile` (no `--ignore-scripts`). That triggers apps/desktop's `electron-builder install-app-deps` postinstall, which rebuilds better-sqlite3 from source against Electron's bundled Node headers. When better-sqlite3 lags an Electron major (the v0.15.0 incident: Electron 42 + better-sqlite3 12.10.0, V8 `External::Value` signature mismatch), the rebuild fails and setup dies — taking lint/test/typecheck/build down with it.

The same shape took down deploy-api.yml (#287) and release.yml (#288). This brings ci.yml in line.

What changes

  • `.prettierignore` (new) — CHANGELOG.md + local build artefacts (.next/, .source/, .astro/, .wrangler/, dist/, out/, release/, coverage/, pnpm-lock.yaml).
  • `package.json` — `format` and `format:check` now pass `--ignore-path .gitignore --ignore-path .prettierignore` (Prettier 3.x supports repeated `--ignore-path`).
  • `.github/workflows/ci.yml` — `setup` job install: `--ignore-scripts` added with explanatory comment.

Verification

  • `pnpm format:check` locally → "All matched files use Prettier code style!"
  • CI doesn't need a runtime-functional better-sqlite3: lint and typecheck don't load native modules, and `pnpm test` excludes storage-sqlite per CLAUDE.md.

Order of operations

After this lands → rebase #290 / #292 / #294 → CI green → merge them in order → cut v0.15.1.

@vercel

vercel Bot commented Jun 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
readide Error Error Jun 9, 2026 1:52pm

@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@tomymaritano, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 8 minutes and 51 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 542e6136-8a58-46e4-a9c3-f8223ef3546f

📥 Commits

Reviewing files that changed from the base of the PR and between 1705e9f and 0adfb81.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml
  • .prettierignore
  • package.json
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/prettier-ignore-changelog

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added the dependencies Pull requests that update a dependency file label Jun 9, 2026
@github-actions github-actions Bot enabled auto-merge (squash) June 9, 2026 13:47
@github-actions github-actions Bot added the size/S label Jun 9, 2026
@tomymaritano tomymaritano changed the title chore: ignore CHANGELOG.md in prettier check chore(ci): unblock CI on develop — ignore CHANGELOG.md + skip native postinstall in setup Jun 9, 2026
@github-actions github-actions Bot added the ci label Jun 9, 2026
CI Prettier was failing on develop because semantic-release writes
CHANGELOG.md without prettier formatting. The format script was using
`--ignore-path .gitignore` only, which overrides prettier's default
.prettierignore lookup and means CHANGELOG.md (which should be in the
repo, so not in .gitignore) was getting linted.

Two changes:
- Add a .prettierignore covering CHANGELOG.md and the local build
  artefacts that aren't always in .gitignore (.next/, .source/, etc).
- Update format and format:check to pass `--ignore-path .gitignore
  --ignore-path .prettierignore` so both ignore lists are honoured.

Prettier 3.x supports repeated --ignore-path flags, so no fork in
behaviour vs the original .gitignore-only path.
The setup job's `pnpm install --frozen-lockfile` was running every
workspace's postinstall — including apps/desktop's
electron-builder install-app-deps, which rebuilds better-sqlite3 from
source against Electron's bundled Node headers. That rebuild can break
when better-sqlite3 lags an Electron major. v0.15.0 hit exactly this
on Electron 42 + better-sqlite3 12.10.0 and took the whole CI matrix
down.

CI doesn't need a runtime-functional better-sqlite3: lint and typecheck
don't load native modules, and `pnpm test` excludes storage-sqlite per
CLAUDE.md. Skipping the postinstall makes setup resilient to the
desktop-side native-deps churn.

Same pattern already in release.yml (added in #288) and deploy-api.yml
(#287). This brings ci.yml in line.
@tomymaritano tomymaritano force-pushed the chore/prettier-ignore-changelog branch from 2bafe9e to 0adfb81 Compare June 9, 2026 13:50
@github-actions github-actions Bot merged commit 79f9b55 into develop Jun 9, 2026
15 of 17 checks passed
tomymaritano added a commit that referenced this pull request Jun 9, 2026
## Release v0.15.1 — Phase 0 DevOps stabilization

Brings the 7-PR DevOps cleanup chain to main and cuts a clean release.
This is the verification gate for the whole Phase 0 effort — if anything
breaks at tag, build, or publish, Phase 0 isn't done.

### What landed since v0.15.0

| PR | Phase | Summary |
|----|-------|---------|
| #290 | **A1** | \`fix(desktop)\`: pin Electron to ^41.7.1 so
better-sqlite3 prebuilts apply (closes the v0.15.0 V8 ABI failure on all
3 build platforms) |
| #291 | **A2** | \`fix(release)\`: restore version bumping via
\`scripts/bump-version.mjs\` + \`@semantic-release/exec\` (closes the
"tag at 0.14.0" trap) |
| #292 | **B** | \`chore(ci)\`: workflow surface cleanup — actions
@v4@v5 sweep, \`windows-latest\` → \`windows-2025-vs2026\` pin, drop
\`FORCE_JAVASCRIPT_ACTIONS_TO_NODE24\`, \`if-no-files-found: error\`,
\`permissions:\` blocks, HUSKY: '0' removal |
| #293 | **A4** | \`chore(ci)\`: \`release.yml\` pre-flight dry-run gate
+ post-flight version assertion (closes the "silent no-release" trap) |
| #294 | **C1** | \`ci\`: PR-title commitlint as a standalone workflow →
required check on develop + main |
| #295 | | \`fix(lint)\`: develop lint baseline (preserve-caught-error ×
4 in encryptionService + mcp-server tsconfig split for ESLint
projectService) |
| #296 | | \`chore(ci)\`: unblock CI on develop — ignore CHANGELOG.md in
Prettier (semantic-release writes it), \`pnpm install --ignore-scripts\`
in setup job (same shape as release.yml + deploy-api.yml) |

### C2 — branch protection updates (already applied via gh api)

Both \`develop\` and \`main\`:
- **Required status checks**: \`lint\`, \`test\`, \`typecheck\`,
\`CodeRabbit\`, \`commitlint\`
- Force-pushes blocked
- \`strict: true\` (PRs must be up to date)

### Release pipeline guardrails now in place

- **Pre-merge**: PR-title commitlint blocks \`release:\`-style
non-conventional squash titles upstream.
- **Mid-release**: \`release.yml\` dry-run check fails loud if no
release would be cut. \`scripts/bump-version.mjs\` mutates both
\`package.json\` files. Post-flight assertion verifies both match the
dry-run-announced version.
- **Post-release**: \`build.yml\` artifact upload uses
\`if-no-files-found: error\` (silent zero-asset releases die at upload).
- **Native deps**: \`apps/desktop\` pinned to Electron 41.7.1 with
prebuilt better-sqlite3. CI \`setup\` skips postinstall so workflow-side
install never rebuilds native modules.

### Expected behavior of the Release pipeline after merge

1. Merge this PR → main tip advances.
2. Manually dispatch the **Release** workflow.
3. \`release.yml\` runs:
- \`pnpm install --ignore-scripts\` (no native rebuild needed for
semantic-release).
- **Pre-flight dry-run** → "next release version is 0.15.1" (single
\`fix(release):\` commit since v0.15.0).
   - \`npx semantic-release\`:
- \`@semantic-release/exec\` runs \`node scripts/bump-version.mjs
0.15.1\` → both package.json files updated.
     - \`@semantic-release/git\` commits + pushes tag \`v0.15.1\`.
     - \`@semantic-release/github\` creates draft Release.
   - **Post-flight assertion** → both package.jsons read \`0.15.1\`.
4. Tag push triggers \`build.yml\` on macOS-14, windows-2025-vs2026,
ubuntu-latest.
5. All 3 platforms succeed → publish job un-drafts the GitHub Release.
6. Auto-sync PR opens to merge main → develop.

### What still needs verification (post-release)

- [ ] Tag push actually triggers Build (needs GH_TOKEN with workflow
scope — A3 deferred, may need PAT regen)
- [ ] Build completes on all 3 platforms with prebuilt better-sqlite3
(smoke-test desktop bundle after publish)
- [ ] Auto-sync PR back to develop is created

🤖 This is the Phase 0 verification gate. Mobile + Plugin Marketplace UI
remain deferred.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added PR title validation workflow for automated commit message
compliance checks.

* **Bug Fixes**
  * Enhanced error diagnostics in encryption operations.
* Added pre-flight checks to release process to prevent failed
deployments.
  * Stricter artifact validation in builds.

* **Chores**
  * Updated GitHub Actions to latest stable versions.
  * Improved code formatting configuration and build scripts.
  * Adjusted Electron dependency version.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci dependencies Pull requests that update a dependency file size/S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant