diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 78a8451..280991a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,13 +1,16 @@
# .github/workflows/release.yml
#
# Manual-only release: cuts source/types.h's VERSION_STRING and
-# CHANGELOG.md's "## Unreleased" section for the version/title given in the
+# CHANGELOG.md's "## Unreleased" section for the version given in the
# dispatch form, commits and pushes that bump straight to main, then builds
# the .3dsx/.smdh and publishes them as a GitHub Release. The version input
# is always typed by hand (no auto-computed default — GitHub's dispatch
# form can't pre-fill a value computed from repo state) and is only
-# validated to be greater than the current VERSION_STRING. The workflow
-# refuses to overwrite an existing release/tag.
+# validated to be greater than the current VERSION_STRING. The CHANGELOG
+# heading is just "## vX.Y.Z (date)" — no separate title to type in; the
+# Unreleased section's own content (used verbatim as the GitHub Release
+# body too) already says what the release is about. The workflow refuses
+# to overwrite an existing release/tag.
name: Release
on:
@@ -17,10 +20,6 @@ on:
description: 'Version to release, e.g. 2.3.2 — no leading "v" (must be greater than the current VERSION_STRING in source/types.h)'
required: true
type: string
- title:
- description: 'Short title for the CHANGELOG heading, e.g. "Backup fix and test coverage" (becomes "## vX.Y.Z –
(date)")'
- required: true
- type: string
permissions:
contents: write
@@ -45,27 +44,22 @@ jobs:
token: ${{ secrets.RELEASE_PUSH_TOKEN || github.token }}
# Validates the typed-in version input, then cuts CHANGELOG.md's
- # "## Unreleased" section into a dated "## vX.Y.Z – " one
- # (leaving a fresh empty "## Unreleased" above it) and bumps
- # source/types.h's VERSION_STRING to match — the same two edits a
- # human previously made by hand before tagging a release. Fails the
- # whole run before touching any file if the input isn't a plain
- # x.y.z, isn't greater than the current VERSION_STRING, or the
- # changelog has nothing new to release, since a bad input at this
- # point would otherwise commit garbage to main.
+ # "## Unreleased" section into a dated "## vX.Y.Z" one (leaving a
+ # fresh empty "## Unreleased" above it) and bumps source/types.h's
+ # VERSION_STRING to match — the same two edits a human previously
+ # made by hand before tagging a release. Fails the whole run before
+ # touching any file if the input isn't a plain x.y.z, isn't greater
+ # than the current VERSION_STRING, or the changelog has nothing new
+ # to release, since a bad input at this point would otherwise commit
+ # garbage to main.
- name: Validate and apply version bump
env:
NEW_VERSION: ${{ inputs.version }}
- TITLE: ${{ inputs.title }}
run: |
if [[ ! "$NEW_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "version input must look like x.y.z with no leading 'v' (got: '$NEW_VERSION')" >&2
exit 1
fi
- if [ -z "$TITLE" ]; then
- echo "title input must not be empty" >&2
- exit 1
- fi
CURRENT_VERSION=$(grep -m1 'define VERSION_STRING' source/types.h | sed -E 's/.*"v([^"]*)".*/\1/')
if [ -z "$CURRENT_VERSION" ]; then
@@ -86,7 +80,7 @@ jobs:
fi
TODAY=$(date -u +%F)
- NEWSEC="## v${NEW_VERSION} – ${TITLE} (${TODAY})"
+ NEWSEC="## v${NEW_VERSION} (${TODAY})"
awk -v newsec="$NEWSEC" '
/^## Unreleased$/ { print; print ""; print newsec; next }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b781400..196dda5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,10 +3,10 @@
All notable changes to 3DS App Manager are documented in this file.
Headings use the app's own `VERSION_STRING` (`source/types.h`). Cutting a
release is a manual, deliberate step: trigger the `Release` GitHub Actions
-workflow (`.github/workflows/release.yml`) with a version and title —
-it renames this file's `## Unreleased` section to `## vX.Y.Z –
-(date)`, bumps `VERSION_STRING` to match, builds, and publishes the result
-as a GitHub Release using that section verbatim as the release notes. Keep
+workflow (`.github/workflows/release.yml`) with just a version number —
+it renames this file's `## Unreleased` section to `## vX.Y.Z (date)`,
+bumps `VERSION_STRING` to match, builds, and publishes the result as a
+GitHub Release using that section verbatim as the release notes. Keep
the `## vX.Y.Z` heading format exact.
**Policy:** every change gets a `CHANGELOG.md` entry under a `## Unreleased`
@@ -16,6 +16,18 @@ accurate at all times instead of being reconstructed from memory later.
## Unreleased
+### Changed: release workflow no longer asks for a title
+`.github/workflows/release.yml`'s `workflow_dispatch` form used to require
+typing in both a `version` and a `title` (the latter only ever used to
+build the CHANGELOG heading, `## vX.Y.Z – (date)`) — one manual
+field too many for something meant to be a quick, low-friction trigger.
+Dropped `title` entirely: the heading is now just `## vX.Y.Z (date)`, and
+the release's actual notes still come verbatim from the `## Unreleased`
+section's own content (unchanged — that's the part that actually says
+what the release is about). Only `version` is still typed by hand, since
+choosing a semver bump is a real judgment call the workflow can't safely
+guess at.
+
### Removed: host-test CI workflow
`.github/workflows/tests.yml` (the automatic `make -C tests` run on every
push/PR) is removed, trimming Actions down to just two workflows: `build`
diff --git a/CLAUDE.md b/CLAUDE.md
index 39d7c29..646f626 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -185,13 +185,14 @@ workflow for the host test suite (removed to keep Actions to just the PR
build check + the manual release), so run `make test` yourself before
pushing and say explicitly in your summary that it wasn't re-verified by
CI. `.github/workflows/release.yml` is manual-only (`workflow_dispatch`, a
-`version` + `title` input, never fires on push/PR) — trigger it from the
+single `version` input, never fires on push/PR) — trigger it from the
Actions tab when the user actually asks to cut a release. It validates the
-inputs, renames `CHANGELOG.md`'s `## Unreleased` section to
-`## vX.Y.Z – (date)`, bumps `VERSION_STRING` in `source/types.h`
-to match, commits and pushes that bump to `main`, builds, and publishes
-the `.3dsx`/`.smdh` as a GitHub Release using that section verbatim as the
-release notes.
+input, renames `CHANGELOG.md`'s `## Unreleased` section to
+`## vX.Y.Z (date)`, bumps `VERSION_STRING` in `source/types.h` to match,
+commits and pushes that bump to `main`, builds, and publishes the
+`.3dsx`/`.smdh` as a GitHub Release using that section verbatim as the
+release notes — there's no separate title to type in; the Unreleased
+section's own content is the release notes.
## Changelog policy