Fix CI: flaky mtime test on master + PR checkout always failing #29

Merged
kyuno merged 2 commits from fix/static-store-test-mtime-precision into master 2026-09-24 19:42:48 +02:00
2 changed files with 9 additions and 2 deletions

View file

@ -55,13 +55,16 @@ jobs:
# node:20-alpine n'a pas git préinstallé - même approche de clone # node:20-alpine n'a pas git préinstallé - même approche de clone
# manuel que le job publish (pas d'actions/checkout, action JS qui a # manuel que le job publish (pas d'actions/checkout, action JS qui a
# ses propres soucis dans les conteneurs Alpine minimalistes ici). # ses propres soucis dans les conteneurs Alpine minimalistes ici).
# Sur une PR, `ref_name` vaut le numéro de la PR (ex. `29`), qui n'est
# pas une ref récupérable ("couldn't find remote ref 29") : on récupère
# alors la branche source de la PR (`head_ref`, vide hors PR).
- name: Récupérer les sources - name: Récupérer les sources
run: | run: |
set -eu set -eu
apk add --no-cache git apk add --no-cache git
git init -q git init -q
git remote add origin "${{ github.server_url }}/${{ github.repository }}.git" git remote add origin "${{ github.server_url }}/${{ github.repository }}.git"
git fetch -q --depth 1 origin "${{ github.ref_name }}" git fetch -q --depth 1 origin "${{ github.head_ref || github.ref_name }}"
git checkout -q FETCH_HEAD git checkout -q FETCH_HEAD
- name: Serveur - installer les dépendances - name: Serveur - installer les dépendances

View file

@ -195,11 +195,15 @@ describe('StaticPartyStore', () => {
const otherFile = path.join(partiesDir(), `${other.id}.json`); const otherFile = path.join(partiesDir(), `${other.id}.json`);
const past = new Date(Date.now() - 60000); const past = new Date(Date.now() - 60000);
fs.utimesSync(otherFile, past, past); fs.utimesSync(otherFile, past, past);
// Compared against what the filesystem itself reports back, not
// past.getTime(): Linux returns mtimeMs as a float that can land a
// hair off the exact millisecond set (e.g. ...780.999 for ...781).
const mtimeBefore = fs.statSync(otherFile).mtimeMs;
StaticPartyService.markWatched(sp, alice, 'e1'); StaticPartyService.markWatched(sp, alice, 'e1');
await StaticPartyStore.writeNow(); await StaticPartyStore.writeNow();
assert.equal(fs.statSync(otherFile).mtimeMs, past.getTime(), 'the untouched party\'s file was not rewritten'); assert.equal(fs.statSync(otherFile).mtimeMs, mtimeBefore, 'the untouched party\'s file was not rewritten');
}); });
it('deleting a party removes its file, even with a save still pending', async () => { it('deleting a party removes its file, even with a save still pending', async () => {