Skip to content

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

Merged
tomymaritano merged 15 commits into
developfrom
chore/backmerge-main-v2
Aug 22, 2026
Merged

chore(release): merge main into develop#581
tomymaritano merged 15 commits into
developfrom
chore/backmerge-main-v2

Conversation

@tomymaritano

Copy link
Copy Markdown
Collaborator

Establishes main as an ancestor of develop so the promotion PR #571 can satisfy main's up-to-date requirement.

Merge this with a merge commit. Do not squash. #578 and #579 both squashed the same content, which is why they did not work — a squash replays the changes as a new commit and main never becomes an ancestor. #580 now excludes chore/backmerge-* branches from the squash auto-merge, so the method chosen here will stick.

git diff origin/develop is empty: the content already landed. This carries ancestry only.

🤖 Generated with Claude Code

tomymaritano and others added 15 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.
@tomymaritano
tomymaritano enabled auto-merge August 22, 2026 22:11
@tomymaritano
tomymaritano merged commit 2f2bb4a into develop Aug 22, 2026
23 of 24 checks passed
@tomymaritano
tomymaritano deleted the chore/backmerge-main-v2 branch August 22, 2026 22:30
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 0.17.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

github-actions Bot pushed a commit that referenced this pull request Aug 22, 2026
…582)

## Problem

`tests/runMigrations.test.ts > records migrations that already exist in
the schema` times out intermittently and blocks unrelated PRs. It
blocked #581 until I reran the job, which then passed — a flake, not a
break.

## Why it is slow

Not a bug. Each test creates a real libsql file database in `/tmp` and
drives the **entire** `MIGRATIONS` catalog through it. The failing one
calls `applyMigrations` **twice**. CI measured:

| Test | Duration |
| --- | --- |
| applies the catalog to an empty database, then no-ops | 3004 ms |
| records migrations that already exist in the schema | 7376 ms |

vitest's default is 5000 ms and there is no `testTimeout` configured
anywhere in the repo. The suite has been living one runner hiccup away
from red.

## Fix

An explicit 30s budget on those two tests, with a comment saying why.

Scoped deliberately: a global `testTimeout` bump would hide genuinely
slow *unit* tests elsewhere. These two are the only ones doing real
database I/O, so they are the only ones that should carry a longer
budget.

Verified locally: `pnpm --filter @dripnex/api test` → 59/59 pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants