Een proeftag telt niet als laatste release #1593

Merged
brenno merged 1 commit from fix/versiepoort-negeert-proeftag into main 2026-08-19 20:14:14 +00:00
Owner

Wat er misgaat

check-version-bump bepaalt zijn basislijn met git describe --tags --abbrev=0 --match 'v*'. Die glob vangt ook een pre-release-tag. Met v0.4.7-rc1 in de kloon las de poort een uitgebrachte 0.4.7; pubspec staat op 0.4.6, en dat heet vanaf 0.4.7 een verboden stap terug:

check-version-bump: illegal version bump.
  last release : 0.4.7 (git describe)
  pubspec now  : 0.4.6

Gevolg: make check viel om op élke tak, ook op takken die de versie niet hadden aangeraakt. De poort zit vóór de testsuite in check-locked, dus hij kapt de hele run af.

Die tag zegt in zijn eigen boodschap wat hij is: "Proeftag: toetst de Windows-installerbouw op de spiegel (#1583). Geen echte release."

Reikwijdte — eerlijk gehouden

v0.4.7-rc1 staat op geen enkele remote. git ls-remote --tags origin en … mirror geven allebei v0.4.6 als laatste. Het is dus geen kapotte main, maar het restant van een release-repetitie op één machine.

Dat maakt de fout niet minder echt: git describe leest wat de lokale kloon heeft. Eén repetitie legt daar alle takken plat tot iemand de tag met de hand opruimt, en de volgende échte rc-tag doet hetzelfde bij iedereen die hem ophaalt. Een poort die omvalt op een tag die niemand als release bedoelde, is een vals alarm op precies het instrument dat een echt alarm geloofwaardig moet houden.

De reparatie

--exclude '*-*' bij git describe. Een koppelteken achter de versiekern is exact SemVer's pre-release-markering, en SemVer zegt hetzelfde als de poort zou moeten: een pre-release staat lager dan de release die hij voorafgaat, dus hij kan nooit de laatst uitgebrachte versie zijn.

Blijft er alleen een proeftag over, dan is er geen basislijn en zwijgt de poort — het bestaande, gedocumenteerde overslaan-pad (een ondiepe kloon zonder tags). Liever niets zeggen dan iets verzinnen.

Regressietest

Drie tests die een echte wegwerp-repo bouwen (git init, commits, tags) en lastReleasedVersion daarop draaien. Dat is geen omweg: de uitsluiting zit in een argumentenlijst voor git describe, en niets minder dan een echte git describe bewijst dat hij werkt. Daarvoor kreeg de functie één optionele workingDirectory-parameter, met de reden erbij in de dartdoc.

Zonder de vlag vallen twee van de drie om:

Expected: '0.4.6'   Actual: '0.4.7-rc1'
Expected: null      Actual: '0.5.0-rc1'

Poorten

  • make check — groen (EXIT=0, 9618 tests, dekking 87,3 %, per-bestandsvloer 0 onder de vloer)
  • make check-secrets — schoon (gitleaks + trufflehog, werkboom én historie)
  • make sast — 0 bevindingen (semgrep, lokale regels)
  • DAST niet gedraaid: raakt geen geserveerd oppervlak

Bewaker overgeslagen, bewust. Deze wijziging raakt het bestandsformaat niet, de opslag niet, geen afhankelijkheid, geen uitgaand verkeer en geen publieke belofte — het is gereedschap in tool/ plus zijn test.

## Wat er misgaat `check-version-bump` bepaalt zijn basislijn met `git describe --tags --abbrev=0 --match 'v*'`. Die glob vangt ook een **pre-release**-tag. Met `v0.4.7-rc1` in de kloon las de poort een uitgebrachte 0.4.7; pubspec staat op 0.4.6, en dat heet vanaf 0.4.7 een verboden stap terug: ``` check-version-bump: illegal version bump. last release : 0.4.7 (git describe) pubspec now : 0.4.6 ``` Gevolg: `make check` viel om op élke tak, ook op takken die de versie niet hadden aangeraakt. De poort zit vóór de testsuite in `check-locked`, dus hij kapt de hele run af. Die tag zegt in zijn eigen boodschap wat hij is: *"Proeftag: toetst de Windows-installerbouw op de spiegel (#1583). Geen echte release."* ## Reikwijdte — eerlijk gehouden **`v0.4.7-rc1` staat op geen enkele remote.** `git ls-remote --tags origin` en `… mirror` geven allebei `v0.4.6` als laatste. Het is dus geen kapotte `main`, maar het restant van een release-repetitie op één machine. Dat maakt de fout niet minder echt: `git describe` leest wat de lokale kloon heeft. Eén repetitie legt daar alle takken plat tot iemand de tag met de hand opruimt, en de volgende échte rc-tag doet hetzelfde bij iedereen die hem ophaalt. Een poort die omvalt op een tag die niemand als release bedoelde, is een vals alarm op precies het instrument dat een echt alarm geloofwaardig moet houden. ## De reparatie `--exclude '*-*'` bij `git describe`. Een koppelteken achter de versiekern is exact SemVer's pre-release-markering, en SemVer zegt hetzelfde als de poort zou moeten: een pre-release staat **lager** dan de release die hij voorafgaat, dus hij kan nooit de laatst uitgebrachte versie zijn. Blijft er alleen een proeftag over, dan is er geen basislijn en zwijgt de poort — het bestaande, gedocumenteerde overslaan-pad (een ondiepe kloon zonder tags). Liever niets zeggen dan iets verzinnen. ## Regressietest Drie tests die een **echte wegwerp-repo** bouwen (`git init`, commits, tags) en `lastReleasedVersion` daarop draaien. Dat is geen omweg: de uitsluiting zit in een argumentenlijst voor `git describe`, en niets minder dan een echte `git describe` bewijst dat hij werkt. Daarvoor kreeg de functie één optionele `workingDirectory`-parameter, met de reden erbij in de dartdoc. Zonder de vlag vallen twee van de drie om: ``` Expected: '0.4.6' Actual: '0.4.7-rc1' Expected: null Actual: '0.5.0-rc1' ``` ## Poorten - `make check` — groen (EXIT=0, 9618 tests, dekking 87,3 %, per-bestandsvloer 0 onder de vloer) - `make check-secrets` — schoon (gitleaks + trufflehog, werkboom én historie) - `make sast` — 0 bevindingen (semgrep, lokale regels) - DAST niet gedraaid: raakt geen geserveerd oppervlak **Bewaker overgeslagen, bewust.** Deze wijziging raakt het bestandsformaat niet, de opslag niet, geen afhankelijkheid, geen uitgaand verkeer en geen publieke belofte — het is gereedschap in `tool/` plus zijn test.
fix(poort): een proeftag telt niet als laatste release
All checks were successful
scans / scans (pull_request) Successful in 3m2s
static-gate / static-gate (pull_request) Successful in 6m18s
12d4fb7a57
`check-version-bump` bepaalt zijn basislijn met `git describe --match 'v*'`, en
die glob vangt ook een pre-release-tag. Met `v0.4.7-rc1` in de kloon — een
proeftag voor de Windows-bouwlijn, die in zijn eigen boodschap zegt "Geen echte
release" — las de poort dus een uitgebrachte 0.4.7. De pubspec staat op 0.4.6,
en dat heet vanaf 0.4.7 een verboden stap terug. Gevolg: `make check` viel om op
élke tak, ook op takken die de versie niet hadden aangeraakt.

Die tag staat op geen enkele remote; hij is het restant van een release-
repetitie op één machine. Dat maakt het niet minder erg: `git describe` leest
wat de lokale kloon heeft, dus één repetitie legt daar alle takken plat tot
iemand de tag opruimt — en de volgende echte rc doet hetzelfde bij iedereen die
hem ophaalt.

Dit is een vals alarm op precies de poort die een echt alarm geloofwaardig moet
houden. `--exclude '*-*'` sluit elke pre-release uit; SemVer zegt hetzelfde, een
pre-release staat lager dan de release die hij voorafgaat.

De regressietest bouwt een echte wegwerp-repo met beide soorten tags, want de
uitsluiting zit in een argumentenlijst en niets minder dan een echte
`git describe` bewijst dat hij werkt. Zonder de vlag valt hij om op 0.4.7-rc1.
brenno merged commit e49e68ad34 into main 2026-08-19 20:14:14 +00:00
brenno deleted branch fix/versiepoort-negeert-proeftag 2026-08-19 20:14:15 +00:00
Sign in to join this conversation.
No description provided.