diff --git a/.github/scripts/update_generation_config.sh b/.github/scripts/update_generation_config.sh
index 561a31304..91434688c 100644
--- a/.github/scripts/update_generation_config.sh
+++ b/.github/scripts/update_generation_config.sh
@@ -28,11 +28,23 @@ function update_config() {
sed -i -e "s/^${key_word}.*$/${key_word}: ${new_value}/" "${file}"
}
+# Update an action to a new version in GitHub action.
+function update_action() {
+ local key_word=$1
+ local new_value=$2
+ local file=$3
+ echo "Update ${key_word} to ${new_value} in ${file}"
+ # use a different delimiter because the key_word contains "/".
+ sed -i -e "s|${key_word}@v.*$|${key_word}@v${new_value}|" "${file}"
+}
+
# The parameters of this script is:
# 1. base_branch, the base branch of the result pull request.
# 2. repo, organization/repo-name, e.g., googleapis/google-cloud-java
# 3. [optional] generation_config, the path to the generation configuration,
# the default value is generation_config.yaml in the repository root.
+# 4. [optional] workflow, the library generation workflow file,
+# the default value is .github/workflows/hermetic_library_generation.yaml.
while [[ $# -gt 0 ]]; do
key="$1"
case "${key}" in
@@ -48,6 +60,10 @@ case "${key}" in
generation_config="$2"
shift
;;
+ --workflow)
+ workflow="$2"
+ shift
+ ;;
*)
echo "Invalid option: [$1]"
exit 1
@@ -71,21 +87,34 @@ if [ -z "${generation_config}" ]; then
echo "Use default generation config: ${generation_config}"
fi
+if [ -z "${workflow}" ]; then
+ workflow=".github/workflows/hermetic_library_generation.yaml"
+ echo "Use default library generation workflow file: ${workflow}"
+fi
+
current_branch="generate-libraries-${base_branch}"
title="chore: Update generation configuration at $(date)"
-# try to find a open pull request associated with the branch
+git checkout "${base_branch}"
+# Try to find a open pull request associated with the branch
pr_num=$(gh pr list -s open -H "${current_branch}" -q . --json number | jq ".[] | .number")
-# create a branch if there's no open pull request associated with the
+# Create a branch if there's no open pull request associated with the
# branch; otherwise checkout the pull request.
if [ -z "${pr_num}" ]; then
git checkout -b "${current_branch}"
+ # Push the current branch to remote so that we can
+ # compare the commits later.
+ git push -u origin "${current_branch}"
else
gh pr checkout "${pr_num}"
fi
+# Only allow fast-forward merging; exit with non-zero result if there's merging
+# conflict.
+git merge -m "chore: merge ${base_branch} into ${current_branch}" "${base_branch}"
+
mkdir tmp-googleapis
-# use partial clone because only commit history is needed.
+# Use partial clone because only commit history is needed.
git clone --filter=blob:none https://github.com/googleapis/googleapis.git tmp-googleapis
pushd tmp-googleapis
git pull
@@ -94,25 +123,43 @@ popd
rm -rf tmp-googleapis
update_config "googleapis_commitish" "${latest_commit}" "${generation_config}"
-# update gapic-generator-java version to the latest
+# Update gapic-generator-java version to the latest
latest_version=$(get_latest_released_version "com.google.api" "gapic-generator-java")
update_config "gapic_generator_version" "${latest_version}" "${generation_config}"
-# update libraries-bom version to the latest
+# Update composite action version to latest gapic-generator-java version
+update_action "googleapis/sdk-platform-java/.github/scripts" \
+ "${latest_version}" \
+ "${workflow}"
+
+# Update libraries-bom version to the latest
latest_version=$(get_latest_released_version "com.google.cloud" "libraries-bom")
update_config "libraries_bom_version" "${latest_version}" "${generation_config}"
-git add "${generation_config}"
+git add "${generation_config}" "${workflow}"
changed_files=$(git diff --cached --name-only)
if [[ "${changed_files}" == "" ]]; then
echo "The latest generation config is not changed."
echo "Skip committing to the pull request."
+else
+ git commit -m "${title}"
+fi
+
+# There are potentially at most two commits: merge commit and change commit.
+# We want to exit the script if no commit happens (otherwise this will be an
+# infinite loop).
+# `git cherry` is a way to find whether the local branch has commits that are
+# not in the remote branch.
+# If we find any such commit, push them to remote branch.
+unpushed_commit=$(git cherry -v "origin/${current_branch}" | wc -l)
+if [[ "${unpushed_commit}" -eq 0 ]]; then
+ echo "No unpushed commits, exit"
exit 0
fi
-git commit -m "${title}"
+
if [ -z "${pr_num}" ]; then
git remote add remote_repo https://cloud-java-bot:"${GH_TOKEN}@github.com/${repo}.git"
- git fetch -q --unshallow remote_repo
+ git fetch -q remote_repo
git push -f remote_repo "${current_branch}"
gh pr create --title "${title}" --head "${current_branch}" --body "${title}" --base "${base_branch}"
else
diff --git a/README.md b/README.md
index bc5bf8abc..362f547a7 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ If you are using Maven without the BOM, add this to your dependencies:
com.google.cloud
google-cloud-datastore
- 2.24.3
+ 2.25.0
```
diff --git a/generation_config.yaml b/generation_config.yaml
index 63fce0276..13bc526fb 100644
--- a/generation_config.yaml
+++ b/generation_config.yaml
@@ -1,5 +1,5 @@
-gapic_generator_version: 2.50.0
-googleapis_commitish: 798bd23a97e0c6a2582a4b442c09523b1325b533
+gapic_generator_version: 2.51.0
+googleapis_commitish: 7d0c6bee2517d77635beb2a1dd6d6e7d4d943512
libraries_bom_version: 26.51.0
libraries:
- api_shortname: datastore
diff --git a/renovate.json b/renovate.json
index b3314f4b2..586208852 100644
--- a/renovate.json
+++ b/renovate.json
@@ -41,16 +41,6 @@
],
"depNameTemplate": "com.google.cloud:sdk-platform-java-config",
"datasourceTemplate": "maven"
- },
- {
- "fileMatch": [
- "^.github/workflows/hermetic_library_generation.yaml$"
- ],
- "matchStrings": [
- "uses: googleapis/sdk-platform-java/.github/scripts@v(?.+?)\\n"
- ],
- "depNameTemplate": "com.google.api:gapic-generator-java",
- "datasourceTemplate": "maven"
}
],
"packageRules": [
@@ -111,13 +101,6 @@
"^com.fasterxml.jackson.core"
],
"groupName": "jackson dependencies"
- },
- {
- "matchPackagePatterns": [
- "^com.google.api:gapic-generator-java",
- "^com.google.cloud:sdk-platform-java-config"
- ],
- "groupName": "SDK platform Java dependencies"
}
],
"semanticCommits": true,