From 09d509f9d4c1198efa9955d18c08d2ea2bd0f32e Mon Sep 17 00:00:00 2001 From: Christopher Rotnes Date: Sat, 16 May 2026 00:46:26 +0200 Subject: [PATCH 1/2] fix(#258): remove closed PR type from ci.yml + bump version to 1.5.13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes `closed` from ci.yml pull_request.types — the closed event shared the same concurrency group as the push event, silently cancelling deploy runs on every PR merge. Staging cleanup stays in cleanup-staging.yml where it belongs. Also bumps package.json from stale 1.5.10 to 1.5.13, so the Settings page reflects all changes shipped since 1.5.10. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/ci.yml | 2 +- CHANGELOG.md | 6 ++++++ app/package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d000da..8610843 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ on: - 'app/**' - '.github/workflows/**' pull_request: - types: [opened, synchronize, reopened, closed] + types: [opened, synchronize, reopened] branches: - master - dev diff --git a/CHANGELOG.md b/CHANGELOG.md index 62151ca..b112438 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to Workout Lens are documented here. +## [1.5.13] — 2026-05-16 + +### Developer / Infrastructure +- **Remove `closed` from `ci.yml` PR types (issue #258)** — the `closed` event and the `push` event both share the same concurrency group, causing the deploy job to be silently cancelled on every PR merge. Staging cleanup is handled exclusively by `cleanup-staging.yml`. +- **Bump `package.json` version to `1.5.13`** — versions `1.5.11` and `1.5.12` were released without updating `package.json`, so the Settings page was showing a stale `v1.5.10`. Fast-forwarded to `1.5.13` to reflect all changes since `1.5.10`. + ## [1.5.12] — 2026-05-16 ### Security diff --git a/app/package.json b/app/package.json index 55c6a96..946e7aa 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "workout-lens", "private": true, - "version": "1.5.10", + "version": "1.5.13", "author": "Christopher Rotnes", "license": "MIT", "repository": { From c30aa1bf984ee162ffcf0efb6428364065844c80 Mon Sep 17 00:00:00 2001 From: Christopher Rotnes Date: Sat, 16 May 2026 00:47:26 +0200 Subject: [PATCH 2/2] test(#258): guard package.json version against CHANGELOG drift MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fails CI if package.json version doesn't match the latest ## [x.y.z] heading in CHANGELOG.md — prevents a repeat of the 1.5.10 stale-version incident caught in issue #258. Co-Authored-By: Claude Sonnet 4.6 --- app/api/__tests__/packageVersion.test.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 app/api/__tests__/packageVersion.test.js diff --git a/app/api/__tests__/packageVersion.test.js b/app/api/__tests__/packageVersion.test.js new file mode 100644 index 0000000..ac0962e --- /dev/null +++ b/app/api/__tests__/packageVersion.test.js @@ -0,0 +1,15 @@ +import { describe, it, expect } from 'vitest'; +import { readFileSync } from 'fs'; +import { resolve } from 'path'; + +describe('package.json version sync', () => { + it('matches the latest version in CHANGELOG.md', () => { + const pkg = JSON.parse(readFileSync(resolve(__dirname, '../../package.json'), 'utf8')); + const changelog = readFileSync(resolve(__dirname, '../../../CHANGELOG.md'), 'utf8'); + + const match = changelog.match(/^## \[(\d+\.\d+\.\d+)\]/m); + expect(match, 'No version heading found in CHANGELOG.md').toBeTruthy(); + + expect(pkg.version).toBe(match[1]); + }); +});