From c8556c3af812f33499e607361b424c47d0fa6d2c Mon Sep 17 00:00:00 2001 From: Joshua Sing Date: Fri, 15 Dec 2023 16:36:25 +1100 Subject: ci: clean up release workflow --- .github/scripts/changelog.sh | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .github/scripts/changelog.sh (limited to '.github/scripts') diff --git a/.github/scripts/changelog.sh b/.github/scripts/changelog.sh new file mode 100644 index 0000000..76492cf --- /dev/null +++ b/.github/scripts/changelog.sh @@ -0,0 +1,74 @@ +#!/bin/sh +# Copyright (c) 2023 Joshua Sing +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# +# Usage: changelog.sh +# Reads the changelog for the specified version from the changelog file. +# The output will be reformatted for use in GitHub releases. +# +# The changelog file defaults to "ChangeLog", but can be changed by setting +# the environment variable $CHANGELOG_FILE +# + +set -e + +# Check if the version argument is provided +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +version="${1#v}" +changelog_file="${CHANGELOG_FILE:-ChangeLog}" +found_version=false +changelog="" + +# Check if the specified changelog file exists +if [ ! -f "$changelog_file" ]; then + echo "Error: Changelog file '$changelog_file' not found" + exit 1 +fi + +# Read the changelog file line by line +while IFS= read -r line; do + # Check for the version line + if echo "$line" | grep -Eq "^${version} - "; then + found_version=true + continue + fi + + # Continue reading the changelog until the next version or end of file, + # skipping empty lines + if $found_version; then + echo "$line" | grep -Eq "^\s*$" && continue + echo "$line" | grep -Eq "^[0-9]+\.[0-9]+\.[0-9]+ - " && break + changelog="${changelog}${line}\n" + fi +done < "$changelog_file" + +# If the specified version was not found, print an error +if ! $found_version; then + echo "Error: Version $version was not found in changelog" + exit 1 +fi + +# Tidy up the changelog for displaying on GitHub +changelog=$(echo "$changelog" | sed -e 's/^\t\*/###/' -e 's/^\t//') + +# Print the changelog for the specified version +echo "$changelog" +echo +echo "Full changelog: https://github.com/libressl/portable/blob/master/ChangeLog" +exit 0 -- cgit v1.2.3-55-g6feb