mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 13:01:00 +00:00
test: mutation testing on the core libraries with per-module floors
Stryker runs against encryption at rest, medication compliance, the rollups, source ranking, unit conversion and backup validation, with the unit tests that live next to them (vitest.mutation.config.mts). It is too slow for a pull request and runs nightly and on demand (.github/workflows/mutation.yml). scripts/mutation-floors.mjs reads the JSON report and fails when a module scores below its floor in stryker.floors.json, so one well-tested module cannot hide a weak one. The floors sit two points below the first measured scores: crypto 46.9 %, compliance 66.8 %, rollups 41.7 %, source ranking 57.0 %, units 87.4 %, backup validation 25.5 %. @stryker-mutator/vitest-runner 10.0.0 predates Vitest 5, which names a test "describe > test" where the runner still built "describe test". Every test inside a describe block was filtered out of the mutant runs, so nearly every mutant survived (5.5 % across the set). A pnpm patch builds the name the way Vitest 5 does; the Docker dependency stage copies the patches directory, which the frozen install needs.
This commit is contained in:
1 parent
d539eee90b
commit
f5d4dd2ec6
11 files changed
+326
-70
No files matched your search
@@ -0,0 +1,48 @@
|
||||
name: Mutation tests
|
||||
|
||||
# Stryker on the core libraries (stryker.config.mjs): encryption at rest,
|
||||
# medication compliance, rollups, source ranking, unit conversion and backup
|
||||
# validation. Too slow for a pull request; it runs once a night and on
|
||||
# demand, and fails when a module's score drops below its floor in
|
||||
# stryker.floors.json. The HTML report is uploaded either way.
|
||||
on:
|
||||
schedule:
|
||||
- cron: "23 1 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
mutation:
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 120
|
||||
name: mutation (core libraries)
|
||||
steps:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
|
||||
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
|
||||
|
||||
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
||||
with:
|
||||
node-version: 22
|
||||
cache: pnpm
|
||||
|
||||
- run: pnpm install --frozen-lockfile
|
||||
|
||||
- run: pnpm db:generate
|
||||
|
||||
- name: Run Stryker
|
||||
run: pnpm exec stryker run --concurrency 4
|
||||
|
||||
- name: Check the per-module floors
|
||||
run: node scripts/mutation-floors.mjs | tee -a "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
- name: Upload the report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
||||
with:
|
||||
name: mutation-report
|
||||
path: reports/mutation/
|
||||
if-no-files-found: ignore
|
||||
retention-days: 30
|
||||
Reference in new issue
Block a user