v0.15.0 6b178f8

next-release-tag.sh RawHistoryFolder

1#!/usr/bin/env bash
2# Print the release tag for HEAD, or nothing when its unreleased commits do not
3# require a release. A tag already pointing to HEAD is emitted again so a
4# failed GoReleaser job can be retried without minting a second tag.
5set -euo pipefail
6
7latest=$(git tag --list 'v*.*.*' --sort=-v:refname | head -n1)
8head=$(git rev-parse HEAD)
9if [ -n "$latest" ] && [ "$(git rev-parse "$latest^{}")" = "$head" ]; then
10	printf '%s\n' "$latest"
11	exit 0
12fi
13
14if [ -n "$latest" ]; then
15	range="${latest}..HEAD"
16else
17	range="HEAD"
18fi
19
20minor=false
21patch=false
22while IFS= read -r commit; do
23	subject=$(git log -1 --format=%s "$commit")
24	body=$(git log -1 --format=%b "$commit")
25
26	# A breaking change is a v0.x minor release.
27	if grep -Eq '^[[:alpha:]]+(\([^)]+\))?!:' <<<"$subject" || grep -Eiq '^BREAKING[ -]CHANGE:' <<<"$body"; then
28		minor=true
29		continue
30	fi
31
32	type=${subject%%(*}
33	type=${type%%:*}
34	type=${type%%!*}
35	type=$(tr '[:upper:]' '[:lower:]' <<<"$type")
36	case "$type" in
37		feat) minor=true ;;
38		fix|perf|refactor|build|chore|ci) patch=true ;;
39		docs|test|style) ;;
40		*) ;;
41	esac
42done < <(git rev-list "$range")
43
44if [ "$minor" != true ] && [ "$patch" != true ]; then
45	exit 0
46fi
47
48# The renamed project starts a new public release line at v0.1.0.
49if [ -z "$latest" ]; then
50	printf '%s\n' 'v0.1.0'
51	exit 0
52fi
53
54version=${latest#v}
55IFS=. read -r major minor_version patch_version <<<"$version"
56if [ "$minor" = true ]; then
57	printf 'v%s.%s.0\n' "$major" "$((minor_version + 1))"
58else
59	printf 'v%s.%s.%s\n' "$major" "$minor_version" "$((patch_version + 1))"
60fi

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 476

↑↓ moveenter openesc close