Promote-knappen: udrulning med eet klik via workflow_dispatch

Merge til main er kvalitetsgaten; promote er udrulningsgaten - og
udrulningsgaten skal ikke kraeve en git-klon og fire kommandoer, isaer
ikke fra en strandkant. Actions -> Promote to stable -> Run workflow:

- Naegter at koere hvis stable er divergeret fra main (aldrig force;
  divergens er en finding)
- Idempotent: intet at promovere = pæn besked, ingen fejl
- Skriver job-summary med de udrullede commits
- Kun write-adgang kan dispatche; ved kommende stable-ruleset skal
  GitHub Actions paa bypass-listen

CONSUMPTION.md: de tre ligevaerdige promote-former dokumenteret
(knappen, een-linjeren, den eksplicitte form).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Michael Dieringer 2026-07-03 16:39:06 +02:00
parent 54623e1e88
commit 0e3556fdc0
2 changed files with 69 additions and 1 deletions

53
.github/workflows/promote-stable.yml vendored Normal file
View file

@ -0,0 +1,53 @@
name: Promote to stable
# Udrulningsknappen: fast-forwarder stable-kanalen til main med eet klik
# (Actions -> Promote to stable -> Run workflow). Manuel og bevidst -
# merge til main er IKKE deploy; dette workflow ER deployet.
#
# Sikkerhed: kun brugere med write-adgang kan dispatche. Nægter at køre,
# hvis stable er divergeret fra main (aldrig force). Hvis stable-branchen
# beskyttes af et ruleset, skal GitHub Actions (eller dette workflow) på
# rulesettets bypass-liste, for at push'et kan gennemføres.
on:
workflow_dispatch:
permissions:
contents: write
jobs:
promote:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: main
- name: Fast-forward stable to main
run: |
git fetch origin stable
if ! git merge-base --is-ancestor origin/stable origin/main; then
echo "::error::stable er ikke en forfader til main - kanalen er divergeret. Promotion afbrudt; undersøg manuelt (aldrig force)."
exit 1
fi
OLD=$(git rev-parse origin/stable)
NEW=$(git rev-parse origin/main)
if [ "$OLD" = "$NEW" ]; then
echo "## Intet at promovere" >> "$GITHUB_STEP_SUMMARY"
echo "stable står allerede på main ($(git rev-parse --short "$NEW"))." >> "$GITHUB_STEP_SUMMARY"
exit 0
fi
{
echo "## Promoveret: $(git rev-parse --short "$OLD") → $(git rev-parse --short "$NEW")"
echo ""
echo "Commits udrullet til alle maskiner:"
git log --format='- `%h` %s' "$OLD".."$NEW"
} >> "$GITHUB_STEP_SUMMARY"
git push origin origin/main:stable