-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9393 from hercules-ci/changelog-d
Automatically compile hand-written release notes with `changelog-d`
- Loading branch information
Showing
12 changed files
with
311 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
organization: NixOS | ||
repository: nix |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
synopsis: Mounted SSH Store | ||
issues: #7890 | ||
prs: #7912 | ||
description: { | ||
|
||
Introduced the store [`mounted-ssh-ng://`](@docroot@/command-ref/new-cli/nix3-help-stores.md). | ||
This store allows full access to a Nix store on a remote machine and additionally requires that the store be mounted in the local filesystem. | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
synopsis: Fix `nix-env --query --drv-path --json` | ||
prs: #9257 | ||
description: { | ||
|
||
Fixed a bug where `nix-env --query` ignored `--drv-path` when `--json` was set. | ||
|
||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,179 @@ | ||
#!/usr/bin/env nix-shell | ||
#!nix-shell -i bash ../shell.nix -I nixpkgs=channel:nixos-unstable-small | ||
# ^^^^^^^ | ||
# Only used for bash. shell.nix goes to the flake. | ||
|
||
# --- CONFIGURATION --- | ||
|
||
# This does double duty for | ||
# - including rl-next | ||
# - marking where to insert new links (right after) | ||
SUMMARY_MARKER_LINE='{{#include ./SUMMARY-rl-next.md}}' | ||
|
||
# --- LIB --- | ||
|
||
log() { | ||
echo 1>&2 "release-notes:" "$@" | ||
} | ||
logcmd() { | ||
local cmd="$1" | ||
shift | ||
logcmd2 "$cmd" "${*@Q}" "$cmd" "$@" | ||
} | ||
logcmd2() { | ||
local fakecmd="$1" | ||
local fakeargs="$2" | ||
shift | ||
shift | ||
printf 1>&2 "release-notes: \033[34;1m$fakecmd\033[0m " | ||
echo "$fakeargs" 1>&2 | ||
"$@" | ||
} | ||
die() { | ||
# ANSI red | ||
printf 1>&2 "release-notes: \033[31;1merror:\033[0m" | ||
echo 1>&2 "" "$@" | ||
exit 1 | ||
} | ||
confirm() { | ||
local answer | ||
echo 1>&2 "$@" "[y/n]" | ||
read -r answer | ||
case "$answer" in | ||
y|Y|yes|Yes|YES) | ||
return 0 | ||
;; | ||
n|N|no|No|NO) | ||
return 1 | ||
;; | ||
*) | ||
echo 1>&2 "please answer y or n" | ||
confirm "$@" | ||
;; | ||
esac | ||
} | ||
report_done() { | ||
logcmd2 "git" "show" git -c pager.show=false show | ||
printf 1>&2 "release-notes: \033[32;1mdone\033[0m\n" | ||
} | ||
|
||
# --- PARSE ARGS --- | ||
|
||
if [[ $# -gt 0 ]]; then | ||
die "Release notes takes no arguments, but make sure to set VERSION." | ||
fi | ||
|
||
# --- CHECKS --- | ||
|
||
if [[ ! -e flake.nix ]] || [[ ! -e .git ]]; then | ||
die "must run in repo root" | ||
exit 1 | ||
fi | ||
|
||
# repo must be clean | ||
if ! git diff --quiet; then | ||
die "repo is dirty, please commit or stash changes" | ||
fi | ||
|
||
if ! git diff --quiet --cached; then | ||
die "repo has staged changes, please commit or stash them" | ||
fi | ||
|
||
if ! grep "$SUMMARY_MARKER_LINE" doc/manual/src/SUMMARY.md.in >/dev/null; then | ||
# would have been nice to catch this early, but won't be worth the extra infra | ||
die "SUMMARY.md.in is missing the marker line '$SUMMARY_MARKER_LINE', which would be used for inserting a new release notes page. Please fix the script." | ||
fi | ||
|
||
if [[ ! -n "${VERSION:-}" ]]; then | ||
die "please set the VERSION environment variable before invoking this script" | ||
exit 1 | ||
fi | ||
|
||
# version_major_minor: MAJOR.MINOR | ||
# version_full: MAJOR.MINOR.PATCH | ||
# IS_PATCH: true if this is a patch release; append instead of create | ||
if grep -E '^[0-9]+\.[0-9]+$' <<< "$VERSION" >/dev/null; then | ||
log 'is minor' | ||
IS_PATCH=false | ||
version_full="$VERSION.0" | ||
version_major_minor="$VERSION" | ||
elif grep -E '^[0-9]+\.[0-9]+\.0$' <<< "$VERSION" >/dev/null; then | ||
log 'is minor (.0)' | ||
IS_PATCH=false | ||
version_full="$VERSION" | ||
version_major_minor="$(echo "$VERSION" | sed -e 's/\.0$//')" | ||
elif grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' <<< "$VERSION" >/dev/null; then | ||
log 'is patch' | ||
IS_PATCH=true | ||
version_full="$VERSION" | ||
version_major_minor="$(echo "$VERSION" | sed -e 's/\.[0-9]*$//')" | ||
else | ||
die "VERSION must be MAJOR.MINOR[.PATCH], where each is a number, e.g. 2.20 or 2.20.1 (VERSION was set to $VERSION)" | ||
fi | ||
|
||
unset VERSION | ||
|
||
log "version_major_minor=$version_major_minor" | ||
log "version_full=$version_full" | ||
log "IS_PATCH=$IS_PATCH" | ||
|
||
basename=rl-${version_major_minor}.md | ||
file=doc/manual/src/release-notes/$basename | ||
|
||
if ! $IS_PATCH; then | ||
if [[ -e $file ]]; then | ||
die "release notes file $file already exists. If you'd like to make a minor release, pass a patch version, e.g. 2.20.1" | ||
fi | ||
fi | ||
|
||
# --- DEFAULTS --- | ||
|
||
if [[ ! -n "${DATE:-}" ]]; then | ||
DATE="$(date +%Y-%m-%d)" | ||
log "DATE not set, using $DATE" | ||
fi | ||
|
||
case "$DATE" in | ||
[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]) | ||
;; | ||
*) | ||
die "DATE must be YYYY-MM-DD, e.g. 2021-12-31 (DATE was set to $DATE)" | ||
;; | ||
esac | ||
|
||
# --- DO THE WORK --- | ||
|
||
# menu | ||
title="Release $version_major_minor ($DATE)" | ||
# section on page | ||
section_title="Release $version_full ($DATE)" | ||
|
||
( | ||
# TODO add minor number, and append? | ||
echo "# $section_title" | ||
echo | ||
changelog-d doc/manual/rl-next | sed -e 's/ *$//' | ||
) | tee -a $file | ||
|
||
log "Wrote $file" | ||
|
||
if ! $IS_PATCH; then | ||
NEW_SUMMARY_LINE=" - [$title](release-notes/$basename)" | ||
|
||
# find the marker line, insert new link after it | ||
escaped_marker="$(echo "$SUMMARY_MARKER_LINE" | sed -e 's/\//\\\//g' -e 's/ /\\ /g')" | ||
escaped_line="$(echo "$NEW_SUMMARY_LINE" | sed -e 's/\//\\\//g' -e 's/ /\\ /g')" | ||
logcmd sed -i -e "/$escaped_marker/a $escaped_line" doc/manual/src/SUMMARY.md.in | ||
fi | ||
|
||
for f in doc/manual/rl-next/*.md; do | ||
if [[ config != "$(basename $f)" ]]; then | ||
logcmd git rm $f | ||
fi | ||
done | ||
|
||
logcmd git add $file doc/manual/src/SUMMARY.md.in | ||
logcmd git status | ||
logcmd git commit -m "release notes: $version_full" | ||
|
||
report_done |
Oops, something went wrong.