docs: fix three comments after review of #414
Review follow-ups of PR #414. - audit.yml points to the concurrency comment of check-rust.yml, whose measurement covers push and pull_request runs only: say this workflow runs on schedule and workflow_dispatch, which it does not cover. - reportService.test.ts said CI runs Node 20, so no node:sqlite; CI runs Node 24 since #376, and the harness itself is #392's. - The release skill said /actions/tasks ignores `limit`. Measured 2026-10-12: only without `page` (613 rows); with `page` it pages by 30 or by `limit`. Refs #376 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
08d54fd176
commit
d1d025df8d
3 changed files with 6 additions and 3 deletions
|
|
@ -52,7 +52,7 @@ updated: 2026-10-11
|
||||||
Le script (token `~/.forgejo-token`) lit la release par tag, compte les 7 artefacts **par suffixe** (`.exe` NSIS, `.deb`, `.rpm`, leurs 3 signatures `.sig`, `latest.json` — les noms exacts varient selon la version de Tauri), puis télécharge `latest.json` (il pilote l'auto-update des installations existantes) et vérifie `version` (il affiche `pub_date` et la longueur des notes), puis exige **exactement trois clés** (#320) : `linux-x86_64-deb`, `linux-x86_64-rpm` et `windows-x86_64`, sans clé générique `linux-x86_64` depuis le 2026-10-11 (`docs/qa-update-cycle.md`). Pour chacune : l'extension de l'URL (`.deb`, `.rpm`, `.exe`), une signature non vide dont le `file:` (commentaire de confiance minisign, signature décodée du base64) est le nom de fichier de l'URL, décodé, et la version dans l'URL. **Il sort en 1 sur tout écart** (`MANQUANT`, `VIDE`, `MAUVAISE VERSION`, `MAUVAISE EXTENSION`, `DIFFÉRENT`, `INATTENDUE`) et finit par `VERDICT : OK` ou `VERDICT : ÉCHEC` : pas d'annonce de la release ni d'étape 10 avant un verdict OK. Un second argument (`verify-release.sh vX.Y.Z fichier.json`) contrôle un `latest.json` local au lieu de l'asset, pour éprouver les contrôles sur un fichier fabriqué.
|
Le script (token `~/.forgejo-token`) lit la release par tag, compte les 7 artefacts **par suffixe** (`.exe` NSIS, `.deb`, `.rpm`, leurs 3 signatures `.sig`, `latest.json` — les noms exacts varient selon la version de Tauri), puis télécharge `latest.json` (il pilote l'auto-update des installations existantes) et vérifie `version` (il affiche `pub_date` et la longueur des notes), puis exige **exactement trois clés** (#320) : `linux-x86_64-deb`, `linux-x86_64-rpm` et `windows-x86_64`, sans clé générique `linux-x86_64` depuis le 2026-10-11 (`docs/qa-update-cycle.md`). Pour chacune : l'extension de l'URL (`.deb`, `.rpm`, `.exe`), une signature non vide dont le `file:` (commentaire de confiance minisign, signature décodée du base64) est le nom de fichier de l'URL, décodé, et la version dans l'URL. **Il sort en 1 sur tout écart** (`MANQUANT`, `VIDE`, `MAUVAISE VERSION`, `MAUVAISE EXTENSION`, `DIFFÉRENT`, `INATTENDUE`) et finit par `VERDICT : OK` ou `VERDICT : ÉCHEC` : pas d'annonce de la release ni d'étape 10 avant un verdict OK. Un second argument (`verify-release.sh vX.Y.Z fichier.json`) contrôle un `latest.json` local au lieu de l'asset, pour éprouver les contrôles sur un fichier fabriqué.
|
||||||
**Lire aussi l'étape « Generate latest.json » du journal du run** (même route web que ci-dessous) : `scripts/build-latest-json.sh` y nomme le paquet retenu pour chaque type (`build-latest-json: .rpm <- …`), puis le `latest.json` généré est affiché. Le script et le filtre `scripts/check-latest-json.jq` passent par les tests de `check-frontend` à chaque PR ; leur appel par `release.yml` et le délimiteur aléatoire des notes ne s'exercent qu'au tag. Un manifeste refusé par le filtre arrête le job sur `ERROR: release-assets/latest.json failed scripts/check-latest-json.jq`, avant le `DELETE` : registre intact, et la release Forgejo reste créée sans mise à jour servie.
|
**Lire aussi l'étape « Generate latest.json » du journal du run** (même route web que ci-dessous) : `scripts/build-latest-json.sh` y nomme le paquet retenu pour chaque type (`build-latest-json: .rpm <- …`), puis le `latest.json` généré est affiché. Le script et le filtre `scripts/check-latest-json.jq` passent par les tests de `check-frontend` à chaque PR ; leur appel par `release.yml` et le délimiteur aléatoire des notes ne s'exercent qu'au tag. Un manifeste refusé par le filtre arrête le job sur `ERROR: release-assets/latest.json failed scripts/check-latest-json.jq`, avant le `DELETE` : registre intact, et la release Forgejo reste créée sans mise à jour servie.
|
||||||
Durée observée du run : 22 à 30 min sur les 12 dernières releases — poser le `Monitor` puis passer à autre chose.
|
Durée observée du run : 22 à 30 min sur les 12 dernières releases — poser le `Monitor` puis passer à autre chose.
|
||||||
**Lire aussi le Node.js du run.** `release.yml` n'est exercé qu'au tag : une montée de Node (Node 20 → 24 par #376) ne se prouve que dans ce journal. Il passe par la route web (l'API v1 des journaux répond 404). Le `run_number` vient de `/actions/tasks`, qui rend toute la liste, la plus récente en tête (le paramètre `limit` y est ignoré) :
|
**Lire aussi le Node.js du run.** `release.yml` n'est exercé qu'au tag : une montée de Node (Node 20 → 24 par #376) ne se prouve que dans ce journal. Il passe par la route web (l'API v1 des journaux répond 404). Le `run_number` vient de `/actions/tasks` : sans paramètre `page`, la route rend toute la liste, la plus récente en tête, et ignore `limit` (avec `page`, elle pagine par 30 ou par `limit`, mesuré le 2026-10-12) :
|
||||||
```bash
|
```bash
|
||||||
TAG=vX.Y.Z
|
TAG=vX.Y.Z
|
||||||
RUN=$(curl -s -H "Authorization: token $(cat ~/.forgejo-token)" \
|
RUN=$(curl -s -H "Authorization: token $(cat ~/.forgejo-token)" \
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,9 @@ on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
# What this key does on Forgejo 8.0.3: see the comment on `concurrency` in
|
# What this key does on Forgejo 8.0.3: see the comment on `concurrency` in
|
||||||
# check-rust.yml (#376).
|
# check-rust.yml (#376). That measurement covers push and pull_request runs;
|
||||||
|
# this workflow only runs on schedule and workflow_dispatch, which it does
|
||||||
|
# not cover.
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ci-audit-${{ github.ref }}
|
group: ci-audit-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
|
||||||
|
|
@ -719,7 +719,8 @@ describe("real-vs-real compare — transfer netting (Issue #243)", () => {
|
||||||
// income/transfer credits are not dropped before they can count or cancel.
|
// income/transfer credits are not dropped before they can count or cancel.
|
||||||
//
|
//
|
||||||
// There is no runnable SQLite in these unit tests (tauri-plugin-sql only
|
// There is no runnable SQLite in these unit tests (tauri-plugin-sql only
|
||||||
// exists inside the Tauri WebView, and CI runs Node 20 → no node:sqlite), so
|
// exists inside the Tauri WebView, and no harness opens node:sqlite yet:
|
||||||
|
// CI runs Node 24 since #376, which has it, and #392 plans that harness), so
|
||||||
// the netting is pinned two ways: (1) a reference-semantics check over
|
// the netting is pinned two ways: (1) a reference-semantics check over
|
||||||
// concrete debit/credit rows that reproduces the exact per-row rule the SQL
|
// concrete debit/credit rows that reproduces the exact per-row rule the SQL
|
||||||
// encodes, and (2) structural assertions that the real query on BOTH compare
|
// encodes, and (2) structural assertions that the real query on BOTH compare
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue