|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Get the latest tag |
| 4 | +gitTopLevel="$(git rev-parse --show-toplevel)" |
| 5 | +versionCodeFilter="\(versionCode\s\+=\s\+\)\([[:digit:]]\+\)" |
| 6 | +previousTag=$(git tag | sort -V | tail -n 2 | head -n 1) |
| 7 | +latestTag=$(git describe --tags $(git rev-list --tags --max-count=1)) |
| 8 | +versionCode=$(git show "$tag:app/build.gradle.kts" | grep versionCode | sed -e "s/$versionCodeFilter/\2/" | xargs) |
| 9 | +changeLogs=0 |
| 10 | +subjects=() |
| 11 | +bodies=() |
| 12 | + |
| 13 | +echo "Latest Tag: $latestTag, versionCode: $versionCode" |
| 14 | + |
| 15 | +if [ -z "$latestTag" ] || [ -z "$previousTag" ]; then |
| 16 | + echo "No tags found in the repository." |
| 17 | + exit 1 |
| 18 | +fi |
| 19 | + |
| 20 | +echo "Generating Changelog..." |
| 21 | +while IFS= read -r body && IFS= read -r subject; do |
| 22 | + subject_trimmed=$(echo "$subject" | sed -e 's/Change-Id:\s*.*//' | sed -e 's/Signed-off-by:\s*.*//' | sed 's/__END__//' | sed -e 's/^[^a-zA-Z0-9]*//') |
| 23 | + body_trimmed=$(echo "$body" | sed -e 's/Change-Id:\s*.*//' | sed -e 's/Signed-off-by:\s*.*//' | sed 's/__END__//' | sed -e 's/^[^a-zA-Z0-9]*//') |
| 24 | + |
| 25 | + [[ -n "$subject_trimmed" ]] && echo "* $subject_trimmed" |
| 26 | + [[ -n "$body_trimmed" ]] && echo "- $body_trimmed" |
| 27 | + |
| 28 | + subjects+=("$subject_trimmed") |
| 29 | + bodies+=("$body_trimmed") |
| 30 | +done < <(git log "$previousTag".."$latestTag" --pretty=format:"%s%n%b%n__END__") |
| 31 | + |
| 32 | +changeLogs=${#subjects[@]} |
| 33 | + |
| 34 | +if [ $changeLogs -gt 0 ]; then |
| 35 | + echo "saving to '$gitTopLevel/fastlane/metadata/android/en-US/changeLogs/$versionCode.txt'..." |
| 36 | + |
| 37 | + echo "" > "$gitTopLevel/fastlane/metadata/android/en-US/changeLogs/$versionCode.txt" |
| 38 | + |
| 39 | + for subject in "${subjects[@]}"; do |
| 40 | + [[ -n "$subject" ]] && echo "* $subject" >> "$gitTopLevel/fastlane/metadata/android/en-US/changeLogs/$versionCode.txt" |
| 41 | + done |
| 42 | + |
| 43 | + for body in "${bodies[@]}"; do |
| 44 | + [[ -n "$body" ]] && echo "- $body" >> "$gitTopLevel/fastlane/metadata/android/en-US/changeLogs/$versionCode.txt" |
| 45 | + done |
| 46 | + |
| 47 | + currentCommitHash=$(git rev-parse HEAD) |
| 48 | + isCurrentCommitOnRemote=$(git branch -r --contains "$currentCommitHash") |
| 49 | + if [ -n "$isCurrentCommitOnRemote" ]; then |
| 50 | + newVersionName="${newTag#v}" |
| 51 | + |
| 52 | + echo "commit '$currentCommitHash' is on the remote branch, creating a new change log commit..." |
| 53 | + echo |
| 54 | + |
| 55 | + git add "$gitTopLevel/fastlane/metadata/android/en-US/changeLogs/" |
| 56 | + git commit -sm "updated $changeLogs change logs(s)" |
| 57 | + else |
| 58 | + echo "commit '$currentCommitHash' is not on the remote branch, amending..." |
| 59 | + echo |
| 60 | + |
| 61 | + git add "$gitTopLevel/fastlane/metadata/android/en-US/changeLogs/" |
| 62 | + git commit --amend --no-edit |
| 63 | + fi |
| 64 | +fi |
0 commit comments