#!/usr/bin/env bash # Imprime as notas de uma release: a imagem publicada (quando houver) e a seção # do CHANGELOG.md daquela versão (ou o log de commits desde a tag anterior, se # não houver seção). # # scripts/release-notes.sh v1.2.3 [git.exemplo.com/dono/projeto] set -euo pipefail tag=${1:?uso: release-notes.sh [imagem]} image=${2:-} version=${tag#v} if [ -n "$image" ]; then echo "## Imagem" echo echo '```' echo "$image:$version" echo '```' echo fi section="" if [ -f CHANGELOG.md ]; then section=$(awk -v head="## [$version]" ' index($0, head) == 1 { found = 1; next } found && /^## \[/ { exit } found && /^\[[^]]+\]: / { next } found { print } ' CHANGELOG.md) fi if [ -n "$(printf '%s' "$section" | tr -d '[:space:]')" ]; then printf '%s\n' "$section" else previous=$(git describe --tags --abbrev=0 "$tag^" 2>/dev/null || true) echo "## Mudanças${previous:+ desde $previous}" echo git log --no-merges --format='- %s (%h)' "${previous:+$previous..}$tag" fi