#!/usr/bin/env bash set -euo pipefail usage() { cat >&2 </dev/null || true)" [[ "$channel" == "release" ]] || continue cmp="$(version_tool compare "$candidate" "$tag" 2>/dev/null || true)" [[ "$cmp" == "-1" ]] || continue releases+=("$candidate") done < <(git -C "$repo_root" tag --merged "$tag" | sed '/^$/d') if ((${#releases[@]} == 0)); then return 0 fi printf '%s\n' "${releases[@]}" | version_tool latest release } previous_tag() { local candidate cmp local -a tags=() while IFS= read -r candidate; do [[ -n "$candidate" && "$candidate" != "$tag" ]] || continue version_tool validate "$candidate" >/dev/null 2>&1 || continue cmp="$(version_tool compare "$candidate" "$tag" 2>/dev/null || true)" [[ "$cmp" == "-1" ]] || continue tags+=("$candidate") done < <(git -C "$repo_root" tag --merged "$tag" | sed '/^$/d') if ((${#tags[@]} == 0)); then return 0 fi printf '%s\n' "${tags[@]}" | version_tool latest prerelease } write_commits() { local previous="$1" local range="$tag" if [[ -n "$previous" ]]; then range="${previous}..${tag}" fi git -C "$repo_root" log --reverse --abbrev=7 --format='ยท %h %s' "$range" } version_tool validate "$tag" >/dev/null previous="" if [[ "$DEFAULT_BASE" == "true" ]]; then previous="$(previous_tag || true)" else previous="$(previous_release_tag || true)" fi { printf '## Changelog\n\n' write_commits "$previous" } > "$out" if [[ "$DEFAULT_BASE" == "true" ]]; then if [[ -n "$previous" ]]; then echo "release notes base: $previous" >&2 else echo "release notes base: first release" >&2 fi elif [[ -n "$previous" ]]; then echo "release notes base: $previous" >&2 else echo "release notes base: first release" >&2 fi