Auto-generate CMake file lists in GitHub action (#10592)
This GitHub action will run after each pull request merge and will auto-update the file lists in in src/file_lists.cmake. The action will run as our bot account. I realized that if a bug somehow made the file generation non-idempotent, this could trigger an infinite loop of commits, so I put in an extra safeguard against that. If the previous commit was by "Protobuf Team Bot", the GitHub action will revert any local changes to ensure that no new commit will be made.pull/10611/head
parent
2202cc8d33
commit
805812ec90
2 changed files with 58 additions and 13 deletions
@ -0,0 +1,41 @@ |
||||
#!/bin/bash |
||||
|
||||
# This script updates the CMake file lists (i.e. src/file_lists.cmake), commits |
||||
# the resulting change, and pushes it. This does not do anything useful when |
||||
# run manually, but should be run by our GitHub action instead. |
||||
|
||||
set -ex |
||||
|
||||
# Exit early if the previous commit was made by the bot. This reduces the risk |
||||
# of a bug causing an infinite loop of auto-generated commits. |
||||
if (git log -1 --pretty=format:'%an' | grep -q "Protobuf Team Bot"); then |
||||
echo "Previous commit was authored by bot" |
||||
exit 0 |
||||
fi |
||||
|
||||
$(dirname -- "$0")/update_file_lists.sh |
||||
|
||||
# Try to determine the most recent pull request number. |
||||
title=$(git log -1 --pretty='%s') |
||||
pr_from_merge=$(echo "$title" | sed -n 's/^Merge pull request #\([0-9]\+\).*/\1/p') |
||||
pr_from_squash=$(echo "$title" | sed -n 's/^.*(#\([0-9]\+\))$/\1/p') |
||||
|
||||
pr="" |
||||
if [ ! -z "$pr_from_merge" ]; then |
||||
pr="$pr_from_merge" |
||||
elif [ ! -z "$pr_from_squash" ]; then |
||||
pr="$pr_from_squash" |
||||
fi |
||||
|
||||
if [ ! -z "$pr" ]; then |
||||
commit_message="Auto-generate CMake file lists after PR #$pr" |
||||
else |
||||
# If we are unable to determine the pull request number, we fall back on this |
||||
# default commit message. Typically this should not occur, but could happen |
||||
# if a pull request was merged via a rebase. |
||||
commit_message="Auto-generate CMake file lists" |
||||
fi |
||||
|
||||
git add -A |
||||
git diff --staged --quiet || git commit -am "$commit_message" |
||||
git push |
Loading…
Reference in new issue