Release script should refuse to tag a version with no CHANGELOG section
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 84/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- bash
- Ambito
- release
Direzione di ricerca
Parti da tools/release/release-and-deploy.sh intorno alla riga 45, dove viene validato l'argomento obbligatorio notes-file, e guarda come viene analizzato il flag esistente --skip-regression in modo che --skip-changelog-check segua lo stesso stile. Conferma il formato esatto dell'intestazione usato in CHANGELOG.md (ad es. ## [8.1.4.01]) prima di scrivere il grep. È completato quando lo script esce con 2 e punta a docs/RELEASING.md passo 1 se la sezione o il file di note manca, passa altrimenti, e il escape hatch ripristina il vecchio comportement.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Two of the last four releases were tagged with no CHANGELOG section, and one of those also had a completely empty GitHub release body. Both were backfilled by hand afterwards. tools/release/release-and-deploy.sh already knows enough to have refused.
| release | CHANGELOG section at tag time | release body at tag time |
|---|---|---|
| 8.1.2.01 (2026-08-28) | missing | present |
| 8.1.3.01 | present | present |
| 8.1.4.01 (2026-09-02) | missing | empty |
| 8.1.5.01 | present | present |
docs/RELEASING.md step 1 is explicit that the docs land on master before tagging, "so the tag points at a self-describing tree". Nothing enforces it, so it depends on whoever cuts the release remembering — and twice in one week it was not remembered.
Why it is worth enforcing rather than remembering
The cost is not tidiness. A tag with no changelog entry means:
- nobody can tell what shipped without reading a commit range;
- the gap is invisible until someone writes the next entry and finds a hole above it;
- backfilling is guesswork later — the 8.1.2.01 and 8.1.4.01 entries had to be reconstructed from diffs, and commit titles were misleading in both cases (8.1.4.01's read "expand max number of concurrent tasks", which undersold a watchdog stealing a simulation slot and a hard-coded test-site prefix reaching a production script).
Doing it at tag time costs one paragraph. Doing it a week later costs a diff review.
Suggested change
release-and-deploy.sh already takes the notes file as a required argument and fails if it is absent (:45). Two more checks in the same style, before the first gate:
-
The CHANGELOG must have a section for the version being tagged.
grep -q "^## \[${VERSION}\]" CHANGELOG.md || { echo "CHANGELOG.md has no '## [${VERSION}]' section." >&2 echo "See docs/RELEASING.md step 1: land the release-cut docs on master before tagging." >&2 exit 2 } -
The notes file must not be empty, so an empty release body cannot be published:
[ -s "$NOTES" ] || { echo "notes file is empty: $NOTES" >&2; exit 2; }
Both are cheap, both fail before anything is tagged or pushed, and both point at the procedure rather than just refusing.
An escape hatch is worth having for the case where someone genuinely needs to tag without docs — --skip-changelog-check, matching the existing --skip-regression — so the guard is a speed bump rather than a wall.
Possibly also worth doing
The release title is set to the bare version (--title "$VERSION", :78), while the deploy skill documents X.Y.Z.BB (<short description>). Every recent release therefore has a bare version title. Either the script should take a short description or the documented convention should be dropped — right now the docs and the tool disagree, and the tool wins silently.
Context
Both backfills are on master: 8.1.2.01 and 8.1.4.01 in CHANGELOG.md, with 8.1.4.01's release body populated via gh release edit.
🤖 Generated with Claude Code
- Lingua principale
- Java
- Stelle
- 140
- Fork
- 35
- Merge medio
- 22h 6m
- PR unite (30g)
- 14
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di virtualcell/vcell
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
virtualcell/vcell#2193 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Accessibility Requirement Java-based User Interface
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
virtualcell/vcell#2138 ·
I maintainer di solito rispondono entro 1 giorno
-
Accessibility Requirement Java-based
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
virtualcell/vcell#2137 ·
I maintainer di solito rispondono entro 1 giorno
-
Accessibility Requirement User Interface
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
virtualcell/vcell#2135 ·
I maintainer di solito rispondono entro 1 giorno
-
Accessibility Requirement Java-based User Interface
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
virtualcell/vcell#2134 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di virtualcell/vcell
Issue simili
-
Document and enforce pull request review guidelinesForse già presa @dashorst l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
`Time.at(t, in: nil)` returns UTC instead of the local time (or the time zone of `t`), unlike CRubyAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
hermes-queue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
chrisalunlloyd2-sudo/mindpalace#349 ·
I maintainer di solito rispondono entro 1 giorno
-
Retry-After parser accepts invalid delay-seconds valuesForse già presa @Dhruvraj-Rana l’ha presa oggi. ApertaBug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
open-telemetry/opentelemetry-java#9018 ·
I maintainer di solito rispondono entro 2 giorni
-
dropwizard-testing: DAOTest.inTransaction leaves the transaction open when an Error is thrownAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
dropwizard/dropwizard#11410 ·
I maintainer di solito rispondono entro 1 giorno