chore(release): merge main into develop - #579
Merged
Merged
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>
github-actions Bot
pushed a commit
that referenced
this pull request
Aug 22, 2026
## Problem #566 made every non-draft PR into `develop` squash auto-merge. That breaks the release flow, and I found it by hitting it twice. A back-merge exists for its **topology**, not its content. Squashing one replays `main`'s changes as a fresh commit, so `main` never becomes an ancestor of `develop`. `main`'s ruleset has `strict_required_status_checks_policy: true`, so the promotion PR #571 stays `BEHIND` forever. Both #578 and #579 hit it. On #579 I explicitly ran `gh pr merge --auto --merge`, and the workflow re-armed auto-merge with `--squash` and overrode it. The resulting commit `00ac6d5` has a single parent, and `git merge-base --is-ancestor origin/main origin/develop` still fails. ## Fix Skip PRs whose head branch starts with `chore/backmerge-`. Those get merged by hand with a merge commit. Also documents the back-merge recipe in `docs/RELEASE.md` next to the promotion steps, since the failure mode is silent — the PR just sits at BEHIND with every check green and no explanation. ## Not changed The auto-merge policy itself, permissions, and the concurrency/live-recheck hardening from earlier in #566 all stay as they are. This is one `if:` clause plus docs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
|
🎉 This PR is included in version 0.17.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This was referenced Aug 22, 2026
tomymaritano
added a commit
that referenced
this pull request
Aug 23, 2026
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Establishes
mainas an ancestor ofdevelopso the promotion PR #571 can satisfymain's up-to-date requirement.This must be merged with a merge commit, not squashed. #578 squashed the same content and that is exactly why it did not work: a squash replays the changes as a new commit, so
main's commits never become ancestors ofdevelopand #571 stayed BEHIND.git merge-base --is-ancestor origin/main origin/developstill failed after it.git diff origin/developon this branch is empty — #578 already brought the content across. This PR carries ancestry only.🤖 Generated with Claude Code