From f400705bb74e324dbc05b845662169e4794ae288 Mon Sep 17 00:00:00 2001 From: kristianwind Date: Mon, 14 Sep 2026 08:21:27 +0200 Subject: [PATCH] =?UTF-8?q?fix(release):=20tagbeskeden=20n=C3=A5r=20frem?= =?UTF-8?q?=20til=20udgivelsen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Den skulle have gjort det siden #72, og gjorde det ikke. v0.45.0 og v0.46.0 fik begge flettecommittens overskrift som udgivelsestekst — uden at noget fejlede, og uden at nogen kunne se det andet end på siden bagefter. `fetch-depth: 0` er ikke nok. actions/checkout henter først alle tags korrekt og overskriver derefter netop den ene, der udløste kørslen: git rev-parse refs/tags/v0.46.0 git fetch --no-tags origin +0dc4c2f9b8…:refs/tags/v0.46.0 Den henter commit-SHA'en ind i tag-refen. Den annoterede tag bliver dermed til en letvægtstag, der peger direkte på commit'en, og `%(contents)` giver så commitbeskeden. Kommentaren i filen sagde, at en overfladisk checkout var problemet; det var rigtigt og utilstrækkeligt. Tagget hentes derfor som *ref* igen, lige før det læses. Og vagten: hver tagbesked begynder med sin egen version, så holder det ikke, læser vi noget andet end tagget, og kørslen fejler frem for at udgive en forkert tekst. Det er det, der manglede — fejlen var ikke svær at rette, den var svær at opdage. Målt i et klonet arbejdstræ i alle tre tilstande: annoteret giver den rigtige tekst med selvlinket fjernet, letvægt giver flettecommitten og udløser vagten, og en re-fetch af refen bringer den annoterede tilbage. Teksten på de to udgivelser, der allerede stod forkert, er rettet i hånden. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/release.yml | 37 ++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 950776f..aa100e6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,13 +72,44 @@ jobs: # # Den sidste linje er et link til udgivelsen selv, og den tages af: en # side, der linker til sig selv, hjælper ingen. + # + # Og `fetch-depth: 0` er ikke nok, hvilket kostede to udgivelser at opdage. + # actions/checkout henter først alle tags korrekt — og overskriver derefter + # netop den ene, der udløste kørslen: + # + # git rev-parse refs/tags/v0.46.0 + # git fetch --no-tags origin +0dc4c2f9b8…:refs/tags/v0.46.0 + # + # Den henter commit-SHA'en ind i tag-refen, så den annoterede tag bliver til + # en letvægtstag, der peger direkte på commit'en. `%(contents)` giver så + # commitbeskeden, og det var flettecommittens overskrift, der stod som + # udgivelsestekst på v0.45.0 og v0.46.0 — uden at noget fejlede. + # + # Derfor hentes tagget som *ref* igen her, før det læses. - id: notes run: | + git fetch --force origin \ + "refs/tags/${GITHUB_REF_NAME}:refs/tags/${GITHUB_REF_NAME}" + + body=$(git tag -l --format='%(contents)' "${GITHUB_REF_NAME}" \ + | sed '\#^https://github.com/.*/releases/tag/#d' \ + | sed -e :a -e '/^\n*$/{$d;N;ba' -e '}') + + # Hver tagbesked begynder med sin egen version. Holder det ikke, læser vi + # noget andet end tagget — og en forkert udgivelsestekst skal fejle her + # frem for at blive opdaget på siden bagefter. + case "$body" in + "${GITHUB_REF_NAME}"*) ;; + *) + echo "::error::Tagbeskeden begynder ikke med ${GITHUB_REF_NAME}." \ + "Læste vi en letvægtstag? Første linje: $(printf '%s' "$body" | head -1)" + exit 1 + ;; + esac + { echo 'body<> "$GITHUB_OUTPUT"