diff --git a/.github/workflows/createchangelog.yaml b/.github/workflows/createchangelog.yaml index 87e27206bd..111bb5b680 100644 --- a/.github/workflows/createchangelog.yaml +++ b/.github/workflows/createchangelog.yaml @@ -9,8 +9,8 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout Repository - uses: actions/checkout@v4 + - name: Checkout Repository + uses: actions/checkout@v4 # Make sure to get latest commits, like the one committed by the previous job in jobs list. # reference: https://github.com/orgs/community/discussions/110853 with: @@ -18,102 +18,102 @@ jobs: submodules: 'recursive' ref: ${{ github.ref_name }} - - name: Get all releases and update changelog.md file - run: | - # Initialize some values - changelog_path="docs/changelog.md" - gh release list --exclude-drafts --json tagName,name,isLatest,isPrerelease --limit 1000000 > releases.txt - declare -rA number_of_releases=$(cat releases.txt | grep -Po '"tagName"' | wc --lines) - - # 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 changelog is based on GitHub Releases, and autogenerated using GitHub Actions." >> $changelog_path - echo "" >> $changelog_path - echo "!!! warning \"Important\"" >> $changelog_path - echo "" >> $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 said PR **will 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 - while read -r line; do - 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]} - body=$(gh release view "$tag" --json body --jq .body) - - # The generation of changelog file contents - echo "# $name" >> $changelog_path + - name: Get all releases and update changelog.md file + run: | + # Initialize some values + changelog_path="docs/changelog.md" + gh release list --exclude-drafts --json tagName,name,isLatest,isPrerelease --limit 1000000 > releases.txt + declare -rA number_of_releases=$(cat releases.txt | grep -Po '"tagName"' | wc --lines) + + # 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 changelog is based on GitHub Releases, and autogenerated using GitHub Actions." >> $changelog_path echo "" >> $changelog_path - echo "$body" >> $changelog_path + echo "!!! warning \"Important\"" >> $changelog_path echo "" >> $changelog_path - done - env: - GH_TOKEN: ${{ github.token }} - - - 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' - git add docs/changelog.md - git commit -m "Update changelog.md with all releases" - git push + echo " This file **SHOULD NOT** be edited directly, any PRs that tries changing it directly will either be requested on not changing it, or said PR **will 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 + while read -r line; do + 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]} + body=$(gh release view "$tag" --json body --jq .body) + + # 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 }} + + - 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' + git add docs/changelog.md + git commit -m "Update changelog.md with all releases" + git push