Releases, tags og GitHub Actions

Releases handler ikke kun om teknik — det er jeres måde at vise frem, få feedback og levere til kunden. Her får du både den bløde vinkel og den tekniske proces.

Hvorfor arbejder vi med releases?

På GitHub er det standard at arbejde med releases. En release markerer et tydeligt punkt i projektet, hvor noget kan vises frem, testes eller overleveres.

  • Et tydeligt milepæl — En release markerer et klart punkt i projektet — noget konkret I kan pege på og sige: "Det her er klar nu."
  • Vis frem, test, overlever — Releases bruges til at vise produktet frem for kunden, lade dem teste og overlevere det, I har bygget i sprinten.
  • Grundlag for feedback — Når kunden ved præcis hvilken version de kigger på, bliver feedback konkret og handlingsbar — ikke "det virker ikke" uden kontekst.
  • Professionel standard — På GitHub er releases standard i professionelle teams. Det signalerer struktur, sporbarhed og at I tager jeres leverance alvorligt.

Ofte kobles en release til et sprint-slutpunkt og bruges som grundlag for feedback — præcis som i professionelle udviklingsteams.

Sådan gør vi det

Nogle faste rammer gør det nemmere for jer og jeres kunde at have en fælles forståelse.

  • Release ved sprint-slut

    En release kobles typisk til sprint-slut og fungerer som det punkt, hvor I samler op og får feedback — præcis som i rigtige udviklingsteams.

  • En release om ugen

    Som udgangspunkt laver I en release pr. uge. Det giver en fast rytme og sikrer, at kunden løbende ser fremgang.

  • Patches undervejs

    I må gerne lave patch-releases (v0.2.1, v0.2.2) mellem sprint-slut, hvis kritiske fejl skal rettes hurtigt.

  • Den vigtige regel

    Ingen commits på main uden en release til jeres kunde. Main er jeres leverance-klar kode — det der står der, skal kunne vises frem.

Semantisk versionering

Vi bruger Semantic Versioning — formatet er vMAJOR.MINOR.PATCH. Første release er typisk v0.1.0, fordi systemet stadig er under aktiv udvikling.

Klik på MAJOR, MINOR eller PATCH for at se hvornår du bumper hver del

v
MINOR

Ny funktionalitet

Ny funktionalitet bagudkompatibel — mere værdi uden at bryde det eksisterende.

Bump MINOR når du tilføjer nye features, sider eller forbedringer som kunden kan bruge med det samme.

  • v0.1.0 → v0.2.0 — ny side til brugeradministration
  • v0.2.0 → v0.3.0 — eksport til PDF tilføjet
  • v1.0.0 → v1.1.0 — dashboard med grafer

Typisk versionsforløb i et elevprojekt

v0.1.0
Første release

Projektet er under aktiv udvikling — derfor starter vi på 0.x

v0.2.0
Sprint 2

Ny funktionalitet fra sprinten

v0.2.1
Hotfix

Kritisk fejl rettet mellem sprints

v0.3.0
Sprint 3

Endnu en sprint-release

v1.0.0
Stabil version

Klar til "rigtig" produktion — breaking change fra 0.x til 1.x

Se det i praksis

Vil du have en god struktur, kan du kigge på open-source projekter og se hvordan de gør. Her er to konkrete eksempler:

GitHub release-side for Dokploy v0.26.2 med tag, Latest-badge, github-actions som forfatter og What's Changed-sektion
Eksempel fra Dokploy på GitHub — et open-source projekt med professionel release-struktur.

Tag og semver

Versionen v0.26.2 følger vMAJOR.MINOR.PATCH — her er PATCH bumped, fordi det primært er fejlrettelser.

Oprettet af github-actions

Robot-ikonet viser at releasen er oprettet automatisk via GitHub Actions — ikke manuelt i UI.

Latest-badge

Grøn "Latest" markerer den nyeste release. Det er det punkt kunden typisk skal kigge på.

What's Changed

Release-noter lister hvad der er ændret — ofte med links til pull requests og bidragydere.


Hvad sker der bag kulisserne?

Bag hver release ligger Git-tags, GitHub Releases og ofte automatiseret CI/CD. Her er de fire byggesten:

  • Release — En release er en markeret version af din kode — typisk navngivet med semantisk versionering som v1.0.0.
  • Tag — Et Git-tag er et fast referencepunkt til et bestemt commit. Tags bruges til at markere releases.
  • GitHub Release — En GitHub Release tilføjer release-noter, downloadbare filer og synlighed på repository-siden.
  • GitHub Actions — Med Actions kan du automatisere build, test og publicering, når et tag pushes til GitHub.

Release-flow — visuelt

Fra commit på main til tag, release og Actions — klik på hvert trin.

Klik på trinene og se hvordan tag, release og Actions hænger sammen

committagremoteActions

Main er klar

Sprint-arbejdet er merged til main. Koden er testet og klar til at blive versioneret.

Kommandoer i flowet

De vigtigste trin og kommandoer bag release-processen.

Klik på hvert trin for at se forklaring og kommandoer

Klar kode på main

Før du laver en release, skal din kode være klar og merged til main (eller din release-branch). Sørg for at versionen er bumped og CHANGELOG er opdateret.

Trin-for-trin guide

Følg disse trin for at lave din release med tag og GitHub Actions.

0 / 5 fuldført

Bump versionsnummeret i package.json, Cargo.toml eller tilsvarende. Opdater CHANGELOG med ændringer siden sidste release. Merge alle nødvendige PRs til main og verificer at CI er grøn.

Terminal
# Tjek at du er på main og alt er committed
git checkout main
git pull origin main
git status

Eksempel: GitHub Actions workflow

Dette workflow trigges automatisk når du pusher et tag der matcher v*. Gem det som .github/workflows/release.yml i dit repository.

.github/workflows/release.yml
name: Release

on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: npm ci && npm run build
      - name: Create GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          generate_release_notes: true
on.push.tags

Definerer hvornår workflowet kører. Her trigges det når et tag der matcher mønsteret v* pushes — f.eks. v1.0.0 eller v2.1.3.

runs-on: ubuntu-latest

Angiver hvilken runner der bruges. ubuntu-latest er den mest almindelige Linux-miljø til build og deploy.

softprops/action-gh-release

Et færdigt action der opretter en GitHub Release fra det pushede tag. generate_release_notes: true genererer automatisk noter fra commits.

Test din viden

Svar på spørgsmålene for at tjekke om du har styr på releases, semver, tags og Actions.

Hvad er hovedforskellen på et tag og en branch?

Hvornår trigger release-workflowet i eksemplet?

Hvad gør git push origin v1.0.0?

Hvorfor anbefales annoterede tags (-a) til releases?

Hvilken version bump bruger du når du retter en kritisk fejl uden ny funktionalitet?

Hvorfor starter mange projekter med v0.1.0 og ikke v1.0.0?