diff --git a/.drone.yml b/.drone.yml index d6e446f..55cef38 100644 --- a/.drone.yml +++ b/.drone.yml @@ -27,6 +27,7 @@ steps: - name: release-notes image: golang:1.25.8 commands: + - git fetch --tags --force || true - bash scripts/generate-release-notes.sh when: event: diff --git a/scripts/generate-release-notes.sh b/scripts/generate-release-notes.sh index b0b471f..f5f3f73 100755 --- a/scripts/generate-release-notes.sh +++ b/scripts/generate-release-notes.sh @@ -11,7 +11,13 @@ if [ -z "$CURRENT_TAG" ]; then exit 1 fi -PREVIOUS_TAG=$(git describe --tags --abbrev=0 "$CURRENT_TAG"^ 2>/dev/null || echo "") +# In CI, the tag name may be available but not present as a local ref. +CURRENT_REF="$CURRENT_TAG" +if ! git rev-parse --verify -q "${CURRENT_REF}^{commit}" >/dev/null; then + CURRENT_REF="${DRONE_COMMIT:-HEAD}" +fi + +PREVIOUS_TAG=$(git describe --tags --abbrev=0 "${CURRENT_REF}^" 2>/dev/null || echo "") mkdir -p "$(dirname "$OUTPUT_FILE")" @@ -23,7 +29,7 @@ mkdir -p "$(dirname "$OUTPUT_FILE")" echo "Changes since $PREVIOUS_TAG:" echo - git log "$PREVIOUS_TAG..$CURRENT_TAG" --pretty=format:"%s" | while read -r commit; do + git log "$PREVIOUS_TAG..$CURRENT_REF" --pretty=format:"%s" | while read -r commit; do if [[ $commit =~ ^([a-z]+)(\(.+\))?:\ (.+)$ ]]; then TYPE="${BASH_REMATCH[1]}" SCOPE="${BASH_REMATCH[2]}" @@ -54,7 +60,7 @@ mkdir -p "$(dirname "$OUTPUT_FILE")" else echo "Initial release" echo - git log "$CURRENT_TAG" --pretty=format:"- %s" | head -20 + git log "$CURRENT_REF" --pretty=format:"- %s" | head -20 fi echo