This is an automated email from the ASF dual-hosted git repository.

derrickaw pushed a commit to branch 20260527_createBOMWorkflow
in repository https://gitbox.apache.org/repos/asf/beam.git

commit 2cb588058ca95e69b7458bc44b59bfe773da3ae8
Author: Derrick Williams <[email protected]>
AuthorDate: Wed May 27 17:27:44 2026 +0000

    initial draft bom workflow
---
 .github/workflows/beam_Upgrade_GCP_BOM.yml | 85 ++++++++++++++++++++++++++++++
 scripts/tools/gcp_bom_upgrade_check.py     | 62 ++++++++++++++++++++++
 2 files changed, 147 insertions(+)

diff --git a/.github/workflows/beam_Upgrade_GCP_BOM.yml 
b/.github/workflows/beam_Upgrade_GCP_BOM.yml
new file mode 100644
index 00000000000..fb336082444
--- /dev/null
+++ b/.github/workflows/beam_Upgrade_GCP_BOM.yml
@@ -0,0 +1,85 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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: Upgrade GCP Platform Libraries BOM
+
+on:
+  schedule:
+    - cron: "0 0 * * 0" # Weekly on Sundays at 00:00 UTC
+  workflow_dispatch:
+
+permissions:
+  contents: write
+  pull-requests: write
+  checks: read
+  issues: read
+  statuses: read
+
+concurrency:
+  group: '${{ github.workflow }} @ ${{ github.ref }}'
+  cancel-in-progress: true
+
+jobs:
+  upgrade_gcp_bom:
+    runs-on: [self-hosted, ubuntu-24.04, main]
+    name: Upgrade GCP BOM
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v6
+      - name: Setup environment
+        uses: ./.github/actions/setup-environment-action
+        with:
+          python-version: 3.11
+          java-version: default
+          go-version: default
+      - name: Check if new BOM is available
+        id: check_bom
+        run: python3 scripts/tools/gcp_bom_upgrade_check.py
+      - name: Run bomupgrader
+        if: steps.check_bom.outputs.should_upgrade == 'true'
+        run: python3 scripts/tools/bomupgrader.py ${{ 
steps.check_bom.outputs.latest_version }}
+      - name: Install gh cli
+        if: steps.check_bom.outputs.should_upgrade == 'true'
+        uses: ./.github/actions/setup-gh-cli-linux
+      - name: Set git config
+        if: steps.check_bom.outputs.should_upgrade == 'true'
+        run: |
+          git config user.name $GITHUB_ACTOR
+          git config user.email actions@"$RUNNER_NAME".local
+      - name: Commit Changes and create PR
+        if: steps.check_bom.outputs.should_upgrade == 'true'
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          LATEST_VER: ${{ steps.check_bom.outputs.latest_version }}
+          CURRENT_VER: ${{ steps.check_bom.outputs.current_version }}
+        run: |
+          branchName=upgrade_gcp_bom_${LATEST_VER//./_}
+          git checkout -b $branchName
+          git add -A
+          git diff-index --quiet HEAD || gitdiff=$? || echo $?
+          if [[ $gitDiff != 0 ]]; then
+            echo "Changes are ready to commit"
+            git commit -m "Upgrade GCP Libraries BOM to ${LATEST_VER}" --quiet
+            git push origin $branchName --quiet
+            
+            PR_BODY="This PR was created by automation. It upgrades the Google 
Cloud Platform Libraries BOM from **${CURRENT_VER}** to **${LATEST_VER}** and 
updates Netty, gRPC, Arrow, Gax, Protobuf, and OpenTelemetry versions to match.
+            
+            Please review the changes and merge if all tests pass."
+            
+            GITHUB_PR_URL=$(gh pr create --title "Upgrade GCP Libraries BOM to 
${LATEST_VER}" --body "$PR_BODY" --label "dependencies" --base master)
+            echo "Link of the new PR: $GITHUB_PR_URL"
+          else
+            echo "No changes on the files"
+          fi
diff --git a/scripts/tools/gcp_bom_upgrade_check.py 
b/scripts/tools/gcp_bom_upgrade_check.py
new file mode 100644
index 00000000000..7037ba68dbe
--- /dev/null
+++ b/scripts/tools/gcp_bom_upgrade_check.py
@@ -0,0 +1,62 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+import urllib.request
+import re
+import os
+
+def get_latest_bom():
+    url = 
"https://repo1.maven.org/maven2/com/google/cloud/libraries-bom/maven-metadata.xml";
+    with urllib.request.urlopen(url) as response:
+        xml = response.read().decode('utf-8')
+    match = re.search(r'<release>([^<]+)</release>', xml)
+    if match:
+        return match.group(1)
+    raise RuntimeError("Could not find latest release in Maven metadata")
+
+def get_current_bom():
+    path = 
"buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy"
+    with open(path) as f:
+        content = f.read()
+    match = 
re.search(r'google_cloud_platform_libraries_bom\s*:\s*[\"\']com\.google\.cloud:libraries-bom:([0-9.]+)[\"\']',
 content)
+    if match:
+        return match.group(1)
+    raise RuntimeError("Could not find current libraries-bom in 
BeamModulePlugin.groovy")
+
+def to_tuple(version_str):
+    return tuple(map(int, version_str.split('.')))
+
+def main():
+    latest = get_latest_bom()
+    current = get_current_bom()
+    print(f"Latest libraries-bom version: {latest}")
+    print(f"Current libraries-bom version: {current}")
+    
+    should_upgrade = to_tuple(latest) > to_tuple(current)
+    
+    github_output = os.getenv('GITHUB_OUTPUT')
+    if github_output:
+        with open(github_output, 'a') as f:
+            f.write(f"should_upgrade={str(should_upgrade).lower()}\n")
+            f.write(f"latest_version={latest}\n")
+            f.write(f"current_version={current}\n")
+            
+    if should_upgrade:
+        print("A newer version of libraries-bom is available. Upgrade needed.")
+    else:
+        print("libraries-bom is up-to-date.")
+
+if __name__ == '__main__':
+    main()

Reply via email to