From d6453d02ab301284a41c3d1a5598e3edd51292b4 Mon Sep 17 00:00:00 2001 From: Twisha Bansal Date: Fri, 17 Oct 2025 12:49:31 +0530 Subject: [PATCH 1/4] ci: fix renovate PRs for toolbox versions --- .github/renovate.json5 | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/renovate.json5 diff --git a/.github/renovate.json5 b/.github/renovate.json5 new file mode 100644 index 0000000..f69f79b --- /dev/null +++ b/.github/renovate.json5 @@ -0,0 +1,38 @@ +{ + extends: [ + 'config:recommended', + ':semanticCommitTypeAll(chore)', + ':ignoreUnstable', + ':separateMajorReleases', + ':prConcurrentLimitNone', + ':prHourlyLimitNone', + ':preserveSemverRanges', + ], + rebaseWhen: 'conflicted', + dependencyDashboardLabels: [ + 'type: process', + ], + packageRules: [ + { + groupName: 'GitHub Actions', + matchManagers: [ + 'github-actions', + ], + pinDigests: true, + }, + { + matchPackageNames: ['googleapis/genai-toolbox'], + 'semanticCommitType': 'feat' + } + ], + customManagers: [ + { + customType: "regex", + managerFilePatterns: ["/toolbox_version\\.txt$/"], + matchStrings: ["(?[\\d\\.]+)"], + datasourceTemplate: "github-releases", + packageNameTemplate: "googleapis/genai-toolbox", + extractVersionTemplate: "^v(?.*)$", + } + ] +} From 73a586d98da439195b2f725a517e0b7974c53c9e Mon Sep 17 00:00:00 2001 From: Twisha Bansal Date: Fri, 17 Oct 2025 15:54:15 +0530 Subject: [PATCH 2/4] ci: mirror toolbox changelog into extension changelog --- .github/workflows/mirror-changelog.yml | 129 +++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 .github/workflows/mirror-changelog.yml diff --git a/.github/workflows/mirror-changelog.yml b/.github/workflows/mirror-changelog.yml new file mode 100644 index 0000000..055ccca --- /dev/null +++ b/.github/workflows/mirror-changelog.yml @@ -0,0 +1,129 @@ +# Copyright 2025 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: Mirror Toolbox Changelog + +on: + pull_request_target: + types: [opened, edited] + +jobs: + add-release-notes: + if: github.actor == 'renovate[bot]' && startsWith(github.head_ref, 'renovate/googleapis-genai-toolbox') + runs-on: ubuntu-latest + permissions: + pull-requests: write + + steps: + - name: Add Toolbox Release Notes to PR Body + uses: actions/github-script@v6 + env: + REQUIRED_KEYWORD: 'alloydb' + with: + script: | + const requiredKeyword = process.env.REQUIRED_KEYWORD; + const prBody = context.payload.pull_request.body || ''; + + // Extract the relevant changelog section + const startMarker = 'googleapis/genai-toolbox'; + const endMarker = ''; + const startIndex = prBody.indexOf(startMarker); + const endIndex = prBody.indexOf(endMarker, startIndex); + + if (startIndex === -1 || endIndex === -1) { + console.log('Could not find the release notes section in the PR body. Exiting.'); + return; + } + const releaseNotesSection = prBody.substring(startIndex, endIndex); + + // Parse, Filter, and transform + const prefixesToFilter = ['source/', 'sources/', 'tool/', 'tools/']; + + // Use a map for cleaner type switching + const typeMap = { + '##### ⚠ BREAKING CHANGES': 'feat!', + '##### Features': 'feat', + '##### Bug Fixes': 'fix', + '##### Chores': 'ignore', + '##### Miscellaneous Chores': 'ignore', + '##### Documentation': 'ignore', + }; + + let currentType = 'feat'; // Default + const newChangelog = []; + + for (const line of releaseNotesSection.split('\n')) { + const trimmedLine = line.trim(); + + // Update current type if it's a header + if (typeMap[trimmedLine]) { + currentType = typeMap[trimmedLine]; + continue; + } + + // Skip ignored sections + if (currentType === 'ignore') { + continue; + } + + // Match and extract changelog item + const itemMatch = trimmedLine.match(/^[*-]\s(.*)$/); + if (itemMatch) { + // Use the raw content, exactly as the original script did + const originalContent = itemMatch[1]; + + const lineAsLowerCase = originalContent.toLowerCase(); + const hasPrefix = prefixesToFilter.some(prefix => lineAsLowerCase.includes(prefix)); + const hasKeyword = lineAsLowerCase.includes(requiredKeyword); + + // Include if it doesn't have a prefix OR it has the keyword + if (!hasPrefix || hasKeyword) { + // Use the original script's output format + newChangelog.push(`- ${currentType}: ${originalContent}`); + } else { + console.log(`Filtering out: ${originalContent}`); + } + } + } + + if (newChangelog.length === 0) { + console.log('Found no changelog items to add after filtering. Exiting.'); + return; + } + + // Construct the override block + const overrideBlock = [ + '\n\nBEGIN_COMMIT_OVERRIDE', + ...newChangelog, + 'END_COMMIT_OVERRIDE' + ].join('\n'); + + // Update PR body + const baseBody = prBody.split('\n\nBEGIN_COMMIT_OVERRIDE')[0].trim(); + const finalBody = baseBody + overrideBlock; + + if (finalBody === prBody) { + console.log('The generated changelog is identical. No update needed.'); + return; + } + + // 5. Update the PR + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + body: finalBody, + }); + + console.log('Successfully updated the PR body with filtered release notes.'); From b9a7c0862a683a7fa87ce00da779b87a66929786 Mon Sep 17 00:00:00 2001 From: Twisha Bansal Date: Fri, 17 Oct 2025 16:00:33 +0530 Subject: [PATCH 3/4] ci: mirror toolbox changelog into extension changelog --- .github/workflows/mirror-changelog.yml | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/.github/workflows/mirror-changelog.yml b/.github/workflows/mirror-changelog.yml index 055ccca..71da7e6 100644 --- a/.github/workflows/mirror-changelog.yml +++ b/.github/workflows/mirror-changelog.yml @@ -29,10 +29,12 @@ jobs: - name: Add Toolbox Release Notes to PR Body uses: actions/github-script@v6 env: - REQUIRED_KEYWORD: 'alloydb' + REQUIRED_KEYWORDS: 'alloydb' with: script: | - const requiredKeyword = process.env.REQUIRED_KEYWORD; + const requiredKeywordsEnv = process.env.REQUIRED_KEYWORDS; + const requiredKeywords = requiredKeywordsEnv.split(',').map(kw => kw.trim()).filter(kw => kw.length > 0); + const prBody = context.payload.pull_request.body || ''; // Extract the relevant changelog section @@ -80,16 +82,19 @@ jobs: // Match and extract changelog item const itemMatch = trimmedLine.match(/^[*-]\s(.*)$/); if (itemMatch) { - // Use the raw content, exactly as the original script did const originalContent = itemMatch[1]; - const lineAsLowerCase = originalContent.toLowerCase(); + const hasPrefix = prefixesToFilter.some(prefix => lineAsLowerCase.includes(prefix)); - const hasKeyword = lineAsLowerCase.includes(requiredKeyword); - // Include if it doesn't have a prefix OR it has the keyword - if (!hasPrefix || hasKeyword) { - // Use the original script's output format + // Check if the line includes ANY of the required keywords + let hasAnyRequiredKeyword = false; + if (requiredKeywords.length > 0) { + hasAnyRequiredKeyword = requiredKeywords.some(keyword => lineAsLowerCase.includes(keyword)); + } + + // Include if it doesn't have a prefix OR it has any of the required keywords + if (!hasPrefix || hasAnyRequiredKeyword) { newChangelog.push(`- ${currentType}: ${originalContent}`); } else { console.log(`Filtering out: ${originalContent}`); @@ -118,7 +123,7 @@ jobs: return; } - // 5. Update the PR + // Update the PR await github.rest.pulls.update({ owner: context.repo.owner, repo: context.repo.repo, @@ -126,4 +131,4 @@ jobs: body: finalBody, }); - console.log('Successfully updated the PR body with filtered release notes.'); + console.log('Successfully updated the PR body with filtered release notes.'); \ No newline at end of file From a6d777a1ce649cf88fefee5f339e26cea48439c0 Mon Sep 17 00:00:00 2001 From: Twisha Bansal <58483338+twishabansal@users.noreply.github.com> Date: Fri, 17 Oct 2025 16:02:09 +0530 Subject: [PATCH 4/4] Update mirror-changelog.yml --- .github/workflows/mirror-changelog.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/mirror-changelog.yml b/.github/workflows/mirror-changelog.yml index 71da7e6..5250d3e 100644 --- a/.github/workflows/mirror-changelog.yml +++ b/.github/workflows/mirror-changelog.yml @@ -29,7 +29,7 @@ jobs: - name: Add Toolbox Release Notes to PR Body uses: actions/github-script@v6 env: - REQUIRED_KEYWORDS: 'alloydb' + REQUIRED_KEYWORDS: 'dataplex' with: script: | const requiredKeywordsEnv = process.env.REQUIRED_KEYWORDS; @@ -131,4 +131,4 @@ jobs: body: finalBody, }); - console.log('Successfully updated the PR body with filtered release notes.'); \ No newline at end of file + console.log('Successfully updated the PR body with filtered release notes.');