2024-07-25 15:27:09 -05:00
name : Update changelog.md on Release
2024-07-16 10:55:30 -05:00
2024-07-13 10:58:07 -05:00
on :
release :
2024-07-25 15:27:09 -05:00
types : [ published, created, edited, deleted]
2024-07-30 21:41:52 -05:00
workflow_dispatch :
inputs :
reason :
description : 'Reason for manual trigger'
required : false
default : 'Manual update'
2024-07-13 10:58:07 -05:00
jobs :
2024-07-16 10:55:30 -05:00
update-file :
2024-07-13 10:58:07 -05:00
runs-on : ubuntu-latest
2024-07-16 10:55:30 -05:00
2024-07-13 10:58:07 -05:00
steps :
2024-07-16 10:55:30 -05:00
- name : Checkout Repository
2024-07-17 00:38:33 -05:00
uses : actions/checkout@v4
2024-07-16 10:55:30 -05:00
2024-07-25 15:27:09 -05:00
- name : Get all releases and update changelog.md file
2024-07-16 10:55:30 -05:00
run : |
2024-07-25 15:27:09 -05:00
# Initialize some values
changelog_path="docs/changelog.md"
gh release list --exclude-drafts --json tagName,name,isLatest,isPrerelease --limit 1000000 > releases.txt
2024-07-30 21:41:52 -05:00
declare -r number_of_releases=$(cat releases.txt | grep -Po '"tagName"' | wc --lines)
2024-07-25 15:27:09 -05:00
# Clear the contents of changelog file
echo "" > $changelog_path
# Write some Initial Content to changelog file
echo "# Changelog" >> $changelog_path
echo "" >> $changelog_path
echo "WinUtil change log received from GitHub Releases, it's autogenerated using GitHub Actions." >> $changelog_path
echo "" >> $changelog_path
echo "> [!WARNING]" >> $changelog_path
echo "> This file **SHOULD NOT** be edited directly, any PRs that tries changing it directly will either be requested on not changing it, or it'll get rejected." >> $changelog_path
echo "" >> $changelog_path
# Make array for git tag names
tag_arr=()
cat releases.txt | grep -Po '"tagName":\s*.*?[^\\]"' | awk -F ':' '{print $2}' | sed s/\"//g > tags_list.txt
while read -r line; do
tag_arr+=("$line")
done < tags_list.txt
# Make array for releases names
name_arr=()
cat releases.txt | grep -Po '"name":\s*.*?[^\\]"' | awk -F ':' '{print $2}' | sed s/\"//g > releases_names_list.txt
while read -r line; do
name_arr+=("$line")
done < releases_names_list.txt
# Make array for isPrerelease
isprerelease_arr=()
cat releases.txt | grep -Po '"isPrerelease":\s*(false|true)' | awk -F ':' '{print $2}' | sed s/\"//g > isprerelease_list.txt
while read -r line; do
isprerelease_arr+=("$line")
done < isprerelease_list.txt
# Make array for isLatest
islatest_arr=()
cat releases.txt | grep -Po '"isLatest":\s*(false|true)' | awk -F ':' '{print $2}' | sed s/\"//g > islatest_list.txt
2024-07-16 15:26:48 -05:00
while read -r line; do
2024-07-25 15:27:09 -05:00
islatest_arr+=("$line")
done < islatest_list.txt
# Debug Output
echo "Tag Array: " ${tag_arr[@]}
echo "Array Length: " ${#tag_arr[@]}
echo ""
echo "Release Name Array: " ${name_arr[@]}
echo "Array Length: " ${#name_arr[@]}
echo ""
echo "IsPrerelease Array: " ${isprerelease_arr[@]}
echo "Array Length: " ${#isprerelease_arr[@]}
echo ""
echo "IsLatest Array: " ${islatest_arr[@]}
echo "Array Length: " ${#islatest_arr[@]}
echo ""
# Exit when this impossible condition is met (just to be safe)
if [[ ! (${#tag_arr[@]}==${#name_arr[@]} && ${#tag_arr[@]}==${#isprerelease_arr[@]} && ${#tag_arr[@]}==${#islatest_arr[@]} ) ]] ; then
echo "Impossible Condition has been met, the Name Array Length Does Not match Tag Array Length, exiting..."
exit 1
fi
# Main loop that does the heavy lifting (Content Generation)
for (( i=0; i<${number_of_releases}; i++ ));
do
# The Variables to use on each iteration
tag=${tag_arr[$i]}
name=${name_arr[$i]}
isprerelease=${isprerelease_arr[$i]}
islatest=${islatest_arr[$i]}
2024-07-30 21:41:52 -05:00
body=$(gh release view "$tag" --json body --jq .body) || { echo "Failed to fetch release body for $tag"; exit 1; }
2024-07-25 15:27:09 -05:00
# The generation of changelog file contents
echo "# $name" >> $changelog_path
echo "" >> $changelog_path
echo "$body" >> $changelog_path
echo "" >> $changelog_path
done
env :
GH_TOKEN : ${{ github.token }}
2024-07-16 10:55:30 -05:00
- name : Commit and Push Changes
env :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
run : |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
2024-07-25 15:27:09 -05:00
git add docs/changelog.md
2024-08-06 15:50:36 -05:00
git diff --quiet && git diff --staged --quiet || (git commit -m "Update changelog.md with all releases" && git push)