Skip to content

chore(release): merge main into develop - #577

Closed
tomymaritano wants to merge 14 commits into
developfrom
main
Closed

chore(release): merge main into develop#577
tomymaritano wants to merge 14 commits into
developfrom
main

Conversation

@tomymaritano

@tomymaritano tomymaritano commented Aug 22, 2026

Copy link
Copy Markdown
Collaborator

Back-merge so the promotion PR #571 can satisfy main's up-to-date requirement.

main carries release chores (chore(release): promote develop for Settings plugin install, tag/stamp fixes) that develop never received. main's ruleset has strict_required_status_checks_policy: true, so #571 stays BEHIND until these land here.

gh pr update-branch 571 cannot do this — GitHub refuses to update a PR whose head is a protected branch. Same shape as the earlier chore(release): merge main into 0.16.0 promote commit in main's history.

No product changes.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Release Process

    • Package versions are now stamped directly from release tags during builds.
    • Releases tag the merge commit and create draft releases without committing version or changelog updates to the main branch.
    • Release validation now requires complete semantic versions in build logs.
  • Documentation

    • Updated repository links, setup commands, release badges, and auto-update references to the current project location.
    • Clarified release process and authentication troubleshooting guidance.

tomymaritano and others added 14 commits June 9, 2026 11:13
## 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.
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>
Includes #567 Settings plugin install plus main's release-pipeline fixes (#537/#539/#540). Do not squash.
@github-actions github-actions Bot added dependencies Pull requests that update a dependency file ci app:desktop labels Aug 22, 2026
@github-actions
github-actions Bot enabled auto-merge (squash) August 22, 2026 21:47
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a5ff339e-0142-41ab-b8d3-c7d0ca6c3e33

📥 Commits

Reviewing files that changed from the base of the PR and between f1e450e and 3f5481f.

📒 Files selected for processing (10)
  • .github/workflows/build.yml
  • .github/workflows/release.yml
  • CLAUDE.md
  • CONTRIBUTING.md
  • README.md
  • apps/desktop/RELEASES.md
  • apps/desktop/package.json
  • docs/RELEASE.md
  • package.json
  • release.config.js

📝 Walkthrough

Walkthrough

The 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 dripnex/app.

Changes

Release and repository updates

Layer / File(s) Summary
Tag-based versioning
.github/workflows/build.yml, .github/workflows/release.yml, release.config.js, docs/RELEASE.md
The release workflow extracts a complete semantic version and writes its tag to version.txt. The build workflow runs scripts/bump-version.mjs before package installation and builds. Release configuration no longer commits version or changelog updates.
Repository reference updates
package.json, apps/desktop/package.json, apps/desktop/RELEASES.md, README.md, CONTRIBUTING.md, CLAUDE.md, docs/RELEASE.md
Repository URLs, publishing settings, updater references, badges, commands, discussion links, and release links now use dripnex/app. The PAT error documentation no longer names the repository.

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
Loading
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch main

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.

@tomymaritano

Copy link
Copy Markdown
Collaborator Author

Cerrado: choca con el mismo requisito de estar-al-día. develop exige head actualizado, y main está inherentemente atrás de develop, así que un PR develop ← main nunca puede satisfacerlo. Voy con una rama descendiente de develop que trae main adentro.

auto-merge was automatically disabled August 22, 2026 21:48

Pull request was closed

github-actions Bot added a commit that referenced this pull request Aug 22, 2026
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>
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app:desktop ci dependencies Pull requests that update a dependency file size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants