chore: Update generation configuration at Fri Dec 13 02:28:28 UTC 202… · googleapis/java-datastore@106ee4d

@@ -28,11 +28,23 @@ function update_config() {

2828

sed -i -e "s/^${key_word}.*$/${key_word}: ${new_value}/" "${file}"

2929

}

303031+

# Update an action to a new version in GitHub action.

32+

function update_action() {

33+

local key_word=$1

34+

local new_value=$2

35+

local file=$3

36+

echo "Update ${key_word} to ${new_value} in ${file}"

37+

# use a different delimiter because the key_word contains "/".

38+

sed -i -e "s|${key_word}@v.*$|${key_word}@v${new_value}|" "${file}"

39+

}

40+3141

# The parameters of this script is:

3242

# 1. base_branch, the base branch of the result pull request.

3343

# 2. repo, organization/repo-name, e.g., googleapis/google-cloud-java

3444

# 3. [optional] generation_config, the path to the generation configuration,

3545

# the default value is generation_config.yaml in the repository root.

46+

# 4. [optional] workflow, the library generation workflow file,

47+

# the default value is .github/workflows/hermetic_library_generation.yaml.

3648

while [[ $# -gt 0 ]]; do

3749

key="$1"

3850

case "${key}" in

@@ -48,6 +60,10 @@ case "${key}" in

4860

generation_config="$2"

4961

shift

5062

;;

63+

--workflow)

64+

workflow="$2"

65+

shift

66+

;;

5167

*)

5268

echo "Invalid option: [$1]"

5369

exit 1

@@ -71,21 +87,34 @@ if [ -z "${generation_config}" ]; then

7187

echo "Use default generation config: ${generation_config}"

7288

fi

738990+

if [ -z "${workflow}" ]; then

91+

workflow=".github/workflows/hermetic_library_generation.yaml"

92+

echo "Use default library generation workflow file: ${workflow}"

93+

fi

94+7495

current_branch="generate-libraries-${base_branch}"

7596

title="chore: Update generation configuration at $(date)"

769777-

# try to find a open pull request associated with the branch

98+

git checkout "${base_branch}"

99+

# Try to find a open pull request associated with the branch

78100

pr_num=$(gh pr list -s open -H "${current_branch}" -q . --json number | jq ".[] | .number")

79-

# create a branch if there's no open pull request associated with the

101+

# Create a branch if there's no open pull request associated with the

80102

# branch; otherwise checkout the pull request.

81103

if [ -z "${pr_num}" ]; then

82104

git checkout -b "${current_branch}"

105+

# Push the current branch to remote so that we can

106+

# compare the commits later.

107+

git push -u origin "${current_branch}"

83108

else

84109

gh pr checkout "${pr_num}"

85110

fi

86111112+

# Only allow fast-forward merging; exit with non-zero result if there's merging

113+

# conflict.

114+

git merge -m "chore: merge ${base_branch} into ${current_branch}" "${base_branch}"

115+87116

mkdir tmp-googleapis

88-

# use partial clone because only commit history is needed.

117+

# Use partial clone because only commit history is needed.

89118

git clone --filter=blob:none https://github.com/googleapis/googleapis.git tmp-googleapis

90119

pushd tmp-googleapis

91120

git pull

@@ -94,25 +123,43 @@ popd

94123

rm -rf tmp-googleapis

95124

update_config "googleapis_commitish" "${latest_commit}" "${generation_config}"

9612597-

# update gapic-generator-java version to the latest

126+

# Update gapic-generator-java version to the latest

98127

latest_version=$(get_latest_released_version "com.google.api" "gapic-generator-java")

99128

update_config "gapic_generator_version" "${latest_version}" "${generation_config}"

100129101-

# update libraries-bom version to the latest

130+

# Update composite action version to latest gapic-generator-java version

131+

update_action "googleapis/sdk-platform-java/.github/scripts" \

132+

"${latest_version}" \

133+

"${workflow}"

134+135+

# Update libraries-bom version to the latest

102136

latest_version=$(get_latest_released_version "com.google.cloud" "libraries-bom")

103137

update_config "libraries_bom_version" "${latest_version}" "${generation_config}"

104138105-

git add "${generation_config}"

139+

git add "${generation_config}" "${workflow}"

106140

changed_files=$(git diff --cached --name-only)

107141

if [[ "${changed_files}" == "" ]]; then

108142

echo "The latest generation config is not changed."

109143

echo "Skip committing to the pull request."

144+

else

145+

git commit -m "${title}"

146+

fi

147+148+

# There are potentially at most two commits: merge commit and change commit.

149+

# We want to exit the script if no commit happens (otherwise this will be an

150+

# infinite loop).

151+

# `git cherry` is a way to find whether the local branch has commits that are

152+

# not in the remote branch.

153+

# If we find any such commit, push them to remote branch.

154+

unpushed_commit=$(git cherry -v "origin/${current_branch}" | wc -l)

155+

if [[ "${unpushed_commit}" -eq 0 ]]; then

156+

echo "No unpushed commits, exit"

110157

exit 0

111158

fi

112-

git commit -m "${title}"

159+113160

if [ -z "${pr_num}" ]; then

114161

git remote add remote_repo https://cloud-java-bot:"${GH_TOKEN}@github.com/${repo}.git"

115-

git fetch -q --unshallow remote_repo

162+

git fetch -q remote_repo

116163

git push -f remote_repo "${current_branch}"

117164

gh pr create --title "${title}" --head "${current_branch}" --body "${title}" --base "${base_branch}"

118165

else