Lesson 07 · GitHub platform · releases

Releases

A release wraps a single commit, a tag, and a changelog into a fixed point other people can pin to. Knowing when to cut one — and when a plain merge to main is enough — is the actual skill.

Every lesson so far — Issues, Actions, Projects, Pages, Security, Insights — covered day-to-day repo mechanics. A release is different: it's the moment you say "this exact state of the code is a thing other people can depend on," out loud, in public.

What a release actually is

Under the hood a release is thin: it's a git tag — a pointer to one specific commit — dressed up with a title, notes, and optional files. "Releases are deployable software iterations you can package and make available for a wider audience to download and use." — GitHub Docs

Tag The pointer, e.g. v0.1.0. Pins the release to one exact commit forever. GitHub creates this for you when you publish a release from the web UI — you don't need git tag on the command line first.
Title A short human name for the release. Often just the tag, sometimes a codename.
Release notes What changed. Write by hand, or click Generate release notes to auto-draft from every PR merged since the last release.
Assets Optional attached files — a built binary, a zip, a compiled artifact. Not just source code (GitHub always attaches that automatically).
Pre-release A checkbox flag: "to notify users that the release is not ready for production and may be unstable." — GitHub Docs
Latest A label shown on one release at a time. Leave it alone and GitHub assigns it "automatically based on semantic versioning" — or set it explicitly.

The tag itself is one thing you already half-know from git: a named pointer to a commit, like a branch that never moves. "A tag date may be different than a release date since they can be created at different times" — the tag marks the code moment, the release wraps it with documentation later, possibly much later.

Draft first — it costs nothing

The safe default A release doesn't have to go live the moment you start it. Save it as a draft — visible only to you, editable, deletable — attach assets, generate notes, then publish when it's actually ready. GitHub's own guidance: "it's recommended to create releases as drafts first, attach all assets, and then publish." Nothing below asks you to publish anything.

Web UI vs. CLI

Web UIgh CLI
Repo → ReleasesDraft a new releasegh release create v0.1.0 --draft --generate-notes
Choose or type a tag, e.g. v0.1.0same tag, as the first argument
Click Generate release notes--generate-notes flag
Check Set as a pre-release--prerelease flag

CLI reference: gh release create. You already have gh available — same tool used to check this repo's visibility in an earlier lesson.

When is a release actually warranted?

GitHub's docs describe what a release is but stay quiet on when to cut one — that judgment call is yours. A working rule of thumb:

Cut a release when…Just merge to main when…
Someone outside your own deploy pipeline needs to pin a specific version — a library consumer, a Docker tag, a downloadable toolYou're continuously deploying and the only "version" that matters is whatever's on main right now
You want a fixed rollback point with a changelog attachedRollback already means "revert the commit" or "redeploy the previous deploy," no tag needed
You're shipping a milestone worth announcing (v1.0, a breaking change)The change is routine, internal, and not something anyone would reference by version number

This workspace's own repo is a practice ground, not a shipped library — nobody depends on a pinned version of it. So a release here is purely for practicing the mechanic, not because the repo needs one.

Your win — draft a release, don't publish it
  1. Go to Releases → Draft a new release on this repo.
  2. Type a new tag — v0.1.0 is fine — targeting main.
  3. Click Generate release notes and read what it drafted from your commit history.
  4. Leave it as a draft (don't click Publish) — you've now seen every piece of a release without putting anything live.
If you want to go further later, publishing is one click away — but the win here is understanding the anatomy, not shipping v0.1.0 of a learning repo.

Go deeper

Primary source — read this one: GitHub Docs — About releases. Covers tags, notes, assets, and pre-release/latest flags in full.