chore(release): merge main into develop - #577
Conversation
## 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>
## Why v0.15.1 Build (run 27212685957) failed on linux because electron-builder rejected the AppImage build: \`executableName contains invalid chars: @readieddesktop\`. publish job (\`needs: build\`) was skipped, no binaries reached the GitHub Release, v0.15.1 has been marked draft. This brings the linux fix from #298 (already on develop) into main as a cherry-pick so semantic-release can cut v0.15.2. ## Why not the original develop → main PR (#299) I created a sync PR (#300) earlier to bring main's release-cycle commits (CHANGELOG + version bump) back to develop. Squash-merging that sync PR collapsed the merge ancestry — develop has main's content but not main's commit history, so #299 stayed permanently BEHIND. Cherry-picking the linux fix straight to main sidesteps that. After this lands and Release cuts v0.15.2, the auto sync-develop job in build.yml will bring the v0.15.2 release commits back to develop with proper ancestry. ## Diff \`apps/desktop/package.json\`: \`"executableName": "readied"\` added to \`build.linux\`. Single line. mac+win already build cleanly because they use \`productName\` ("Readied") and \`appId\` (\`app.readied.desktop\`) respectively. ## Expected Build flow semantic-release reads main's commit log since v0.15.1: - \`fix(desktop): set linux.executableName for AppImage build (#298)\` → patch bump → v0.15.2 cut as draft → Build runs on mac/win/linux → all 3 publish to draft → \`publish\` job undrafts → \`sync-develop\` PRs main → develop.
## Summary Release PR: `develop` → `main`. Contains one user-facing fix since v0.15.2: - **fix(desktop): prevent 'Object has been destroyed' and 'db not open' crashes** (#303) — guards window and database lifecycle so IPC handlers don't touch a destroyed `BrowserWindow` or a closed SQLite handle during shutdown/reload. semantic-release should cut **v0.15.3** (patch bump from the `fix:` commit). ## Release checklist (after merge) 1. Merge this PR into `main` 2. Click **Run workflow** on the **Release** action (`workflow_dispatch`) 3. semantic-release bumps version, tags, creates draft GitHub Release 4. Tag push triggers Build workflow (mac/win/linux) 5. All builds green → release undrafted → electron-updater picks it up 6. Auto-PR syncs `main` back to `develop` 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- 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> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Keep develop for product and CI. Take main's CHANGELOG so 0.15.3 is not dropped. This branch is the promotion head — merge to main with a merge commit, never squash.
chore(release): promote 0.16.0
Release runs on every push to `main`. No PAT, no **Run workflow**. `feat` / `fix` since `v0.15.3` will cut **0.16.0**. Build starts from `workflow_run` (must already be on develop — merge that PR first). **Do not squash the previous promotion.** This PR is a `ci:` fix and can squash. See `docs/RELEASE.md`.
The repo is \`dripnex/app\`. semantic-release compared that to \`dripnex/readide\` in package.json and aborted. This is why the first automatic Release failed even though the bot can push. Merging this to main retriggers Release and should cut 0.16.0.
Dry-run already announced 0.16.0, then our grep matched the same phrase inside generated notes and skipped the actual release. Tightened the match.
main is protected (PR + status checks). The git plugin tried to push the version bump and got GH013. Tags only; binaries get the version in the Build job.
Resolve conflicts so develop (#567 Settings plugin install) can land on main with the existing semantic-release pipeline. Keep main's tag-without bump-commit behavior and dripnex/app repo name. Co-authored-by: Tomás Maritano <tomymaritano@gmail.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (10)
📝 WalkthroughWalkthroughThe release configuration now uses tag-based version stamping. The release workflow records the semantic-release tag, and the build workflow applies it before packaging. Repository metadata, desktop publishing settings, and documentation now reference ChangesRelease and repository updates
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant SemanticRelease as semantic-release
participant ReleaseWorkflow as Release workflow
participant VersionFile as version.txt
participant BuildWorkflow as Build workflow
participant BumpScript as bump-version.mjs
SemanticRelease->>ReleaseWorkflow: Emit prefixed semantic version
ReleaseWorkflow->>VersionFile: Write v-prefixed release tag
BuildWorkflow->>BumpScript: Pass resolved tag version
BumpScript->>BuildWorkflow: Stamp package version before build
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
Cerrado: choca con el mismo requisito de estar-al-día. |
Pull request was closed
Back-merge so the promotion PR #571 can satisfy `main`'s up-to-date requirement. `main` carries release-tooling commits `develop` never received — notably #540 (tag without pushing a bump commit) and #537 (point semantic-release at `dripnex/app`). `main` is authoritative for release tooling, so those come back here. **Why a branch and not `gh pr update-branch`:** GitHub refuses to update a PR whose head is a protected branch. And a direct `develop ← main` PR (#577) deadlocks — `develop` requires the head to be up to date, but `main` is inherently behind `develop`. A branch descended from `develop` with `main` merged in satisfies both. No product changes: release config, workflow, and doc URLs only. `package.json` stays at 0.15.2, which is expected under the post-#540 flow. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- 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> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com>
…585) ## Context I enabled **Allow GitHub Actions to create and approve pull requests** at the org and repo level, which unblocked `sync-develop` — it had been failing with `GitHub Actions is not permitted to create or approve pull requests` since forever. Re-running it against the v0.17.0 build now succeeds. But it immediately produced #584, which **cannot merge**. ## The problem `sync-develop` opened a `develop ← main` PR. That shape deadlocks: `develop` requires the head branch to be up to date, and `main` falls behind `develop` the moment anything lands after the release — #582 and #583 did exactly that. #584 has been sitting at `BEHIND` since it was created. I hit the same wall by hand earlier tonight with #577. Even if it could merge, the squash auto-merge would replay the content as a fresh commit and **not** establish ancestry, which is the entire point of a back-merge. That is what went wrong in #578 and #579. ## The fix Push a branch descended from `develop` with `main` merged into it, then open that against `develop`. Same thing that finally worked manually in #581. - Named `chore/backmerge-main-<tag>`, which matches the exclusion added in #580 so `automerge.yml` leaves it alone. - The job arms auto-merge itself with `--merge`, so it lands as a merge commit. - Exits early when `main` is already an ancestor, or when the branch already exists, so re-runs are safe. ## Follow-up #584 should be closed — this replaces it. The next release will exercise this path for real. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Back-merge so the promotion PR #571 can satisfy
main's up-to-date requirement.maincarries release chores (chore(release): promote develop for Settings plugin install, tag/stamp fixes) thatdevelopnever received.main's ruleset hasstrict_required_status_checks_policy: true, so #571 stays BEHIND until these land here.gh pr update-branch 571cannot do this — GitHub refuses to update a PR whose head is a protected branch. Same shape as the earlierchore(release): merge main into 0.16.0 promotecommit in main's history.No product changes.
🤖 Generated with Claude Code
Summary by CodeRabbit
Release Process
Documentation