#!/bin/bash # This script updates src/file_lists.cmake and the checked-in generated code # for the well-known types, commits the resulting changes, and pushes them. # This does not do anything useful when run manually, but should be run by our # GitHub action instead. set -ex # Cd to the repo root. cd $(dirname -- "$0") previous_commit_title=$(git log -1 --pretty='%s') # Exit early if the previous commit was auto-generated. This reduces the risk # of a bug causing an infinite loop of auto-generated commits. if (echo "$previous_commit_title" | grep -q "^Auto-generate files"); then echo "Previous commit was auto-generated" exit 0 fi # Run the staleness tests and use them to update any stale files. bazel test //src:cmake_lists_staleness_test || ./bazel-bin/src/cmake_lists_staleness_test --fix bazel test //src/google/protobuf:well_known_types_staleness_test || ./bazel-bin/src/google/protobuf/well_known_types_staleness_test --fix # Try to determine the most recent CL or pull request. pr_from_merge=$(echo "$previous_commit_title" | sed -n 's/^Merge pull request #\([0-9]\+\).*/\1/p') pr_from_squash=$(echo "$previous_commit_title" | sed -n 's/^.*(#\([0-9]\+\))$/\1/p') cl=$(git log -1 --pretty='%b' | sed -n 's/^PiperOrigin-RevId: \([0-9]*\)$/\1/p') if [ ! -z "$pr_from_merge" ]; then commit_message="Auto-generate files after PR #$pr_from_merge" elif [ ! -z "$pr_from_squash" ]; then commit_message="Auto-generate files after PR #$pr_from_squash" elif [ ! -z "$cl" ]; then commit_message="Auto-generate files after cl/$cl" else # If we are unable to determine the CL or 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 files" fi git add -A git diff --staged --quiet || git commit -am "$commit_message" git push