Skip to content

chore: update librarian to v0.20.0 #31

chore: update librarian to v0.20.0

chore: update librarian to v0.20.0 #31

# Copyright 2026 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Librarian - Update googleapis commitish and generate all
on:
schedule:
- cron: '0 3 * * *' # Run once a day at 3:00 AM UTC
workflow_dispatch: # Allow manual trigger
pull_request: # Run in dry-run mode to test changes to this workflow itself
paths:
- '.github/workflows/update_librarian_googleapis.yaml'
jobs:
update-librarian-googleapis:
runs-on: ubuntu-24.04
defaults:
run:
working-directory: google-cloud-java
steps:
- name: Checkout google-cloud-java
uses: actions/checkout@v6
with:
repository: googleapis/google-cloud-java
path: google-cloud-java
fetch-depth: 0
persist-credentials: false
- name: Check for Open PR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -x
current_branch="update-librarian-googleapis-main"
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "PR Test: Skipping open PR check."
else
# Try to find an open pull request associated with the branch
pr_num=$(gh pr list -s open -H "${current_branch}" -q . --json number | jq ".[] | .number")
if [ -n "${pr_num}" ]; then
echo "Error: An open Pull Request already exists for this update: PR #${pr_num}."
echo "Please merge or close the existing PR before running this workflow again."
exit 1 # Fails this step and the workflow
fi
fi
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '>=1.20.2'
- name: Run librarian update
run: |
version=$(go run github.com/googleapis/librarian/cmd/librarian@latest config get version)
go run "github.com/googleapis/librarian/cmd/librarian@${version}" update sources.googleapis
- name: Get latest commit
id: commit
run: |
version=$(go run github.com/googleapis/librarian/cmd/librarian@latest config get version)
new_commit=$(go run "github.com/googleapis/librarian/cmd/librarian@${version}" config get sources.googleapis.commit)
echo "new_commit=${new_commit}" >> $GITHUB_OUTPUT
echo "short_commit=${new_commit:0:7}" >> $GITHUB_OUTPUT
# TODO(https://github.com/googleapis/librarian/issues/6220): Remove this step.
- name: Update generation_config.yaml
run: |
sed -i -e "s/^googleapis_commitish.*$/googleapis_commitish: ${{ steps.commit.outputs.new_commit }}/" generation_config.yaml
git diff generation_config.yaml
- name: Detect Changes To Librarian.yaml
id: detect_librarian
run: |
git add librarian.yaml
changed_files=$(git diff --cached --name-only)
if [[ "${changed_files}" == "" ]]; then
echo "has_changes=false" >> $GITHUB_OUTPUT
echo "No changes in librarian.yaml"
else
echo "has_changes=true" >> $GITHUB_OUTPUT
fi
- name: Install protoc
if: steps.detect_librarian.outputs.has_changes == 'true'
run: |
set -e
VERSION="33.2"
curl -fsSL --retry 5 --retry-delay 15 -o /tmp/protoc.zip "https://github.com/protocolbuffers/protobuf/releases/download/v$VERSION/protoc-$VERSION-linux-x86_64.zip"
cd /usr/local
sudo unzip -o /tmp/protoc.zip
protoc --version
- uses: actions/setup-java@v4
if: steps.detect_librarian.outputs.has_changes == 'true'
with:
java-version: "17"
distribution: "temurin"
cache: "maven"
- name: Verify Java and Maven installation
if: steps.detect_librarian.outputs.has_changes == 'true'
run: |
java -version
if ! command -v mvn &> /dev/null; then
sudo apt-get update && sudo apt-get install -y maven
fi
mvn -version
- uses: actions/setup-python@v5
if: steps.detect_librarian.outputs.has_changes == 'true'
with:
python-version: "3.12"
cache: 'pip'
- name: Run librarian install
if: steps.detect_librarian.outputs.has_changes == 'true'
run: |
go run github.com/googleapis/librarian/cmd/librarian@latest install
echo "$HOME/.cache/librarian/bin/java_tools/bin" >> $GITHUB_PATH
env:
PYTHONPATH: ${{ github.workspace }}/sdk-platform-java/hermetic_build/library_generation/owlbot
- name: Generate Libraries
if: steps.detect_librarian.outputs.has_changes == 'true'
run: |
go run github.com/googleapis/librarian/cmd/librarian@latest generate --all
- name: Commit and Create PR
if: steps.detect_librarian.outputs.has_changes == 'true'
env:
GH_TOKEN: ${{ secrets.CLOUD_JAVA_BOT_GITHUB_TOKEN }}
PR_TITLE: "chore: update googleapis commitish to ${{ steps.commit.outputs.short_commit }}"
PR_BODY: "Updated googleapis commitish in librarian.yaml and generation_config.yaml to https://github.com/googleapis/googleapis/commit/${{ steps.commit.outputs.new_commit }}"
run: |
set -x
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "=== PR Test: DRY RUN MODE ACTIVE ==="
echo "Would have checked out branch: update-librarian-googleapis-main"
echo "Would have committed configs with title: $PR_TITLE"
echo "Would have pushed branch and created PR."
exit 0
fi
[ -z "$(git config user.email)" ] && git config --global user.email "cloud-java-bot@google.com"
[ -z "$(git config user.name)" ] && git config --global user.name "cloud-java-bot"
base_branch="main"
current_branch="update-librarian-googleapis-${base_branch}"
# Create and switch to the branch (force checkout -B to discard any local state on this branch name if it existed)
git checkout -B "${current_branch}"
# 1. Commit Config Changes
# Ensure they are staged
git add librarian.yaml generation_config.yaml
if ! git diff --cached --quiet; then
git commit -m "${PR_TITLE}"
else
echo "No config changes to commit"
fi
# 2. Commit Generated Code
git add .
if ! git diff --cached --quiet; then
git commit -m "chore: generate libraries"
else
echo "No generated code changes to commit"
fi
# Push to remote (force push to overwrite any stale branch on remote)
git remote add remote_repo https://cloud-java-bot:"${GH_TOKEN}@github.com/${{ github.repository }}.git" || git remote set-url remote_repo https://cloud-java-bot:"${GH_TOKEN}@github.com/${{ github.repository }}.git"
git fetch -q remote_repo
git push -f remote_repo "${current_branch}"
# Create the PR
gh pr create --title "${PR_TITLE}" --head "${current_branch}" --body "${PR_BODY}" --base "${base_branch}"