From 8a0892fcd17bb797e56db1e47fee46de6cd682af Mon Sep 17 00:00:00 2001 From: Twisha Bansal Date: Thu, 18 Sep 2025 22:20:40 +0530 Subject: [PATCH 1/4] ci: setup packaging and releasing --- .../workflows/package-and-upload-assets.yml | 137 ++++++++++++++++++ .release-please-manifest.json | 3 + gemini-extension.json | 2 +- release-please-config.json | 23 +++ release-please.yml | 16 ++ toolbox_version.txt | 1 + 6 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/package-and-upload-assets.yml create mode 100644 .release-please-manifest.json create mode 100644 release-please-config.json create mode 100644 release-please.yml create mode 100644 toolbox_version.txt diff --git a/.github/workflows/package-and-upload-assets.yml b/.github/workflows/package-and-upload-assets.yml new file mode 100644 index 0000000..2b98d12 --- /dev/null +++ b/.github/workflows/package-and-upload-assets.yml @@ -0,0 +1,137 @@ +# 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: Package and Upload Release Assets + +# Global variables +env: + PACKAGE_NAME: "biqquery-data-analytics" + FILES_TO_PACKAGE: "gemini-extension.json CLOUD-SQL-POSTGRESQL.md LICENSE" + GCS_BUCKET_URL: "https://storage.googleapis.com/genai-toolbox-extensions" + +on: + release: + types: [created] + +jobs: + package: + name: Package for ${{ matrix.platform.os }}-${{ matrix.platform.arch }} + runs-on: ubuntu-latest + + strategy: + matrix: + platform: + - { os: "linux", arch: "x64", download_path_segment: "linux/amd64", binary_suffix: "", archive_extension: "tar.gz", archive_command: 'tar -czvf "${ARCHIVE_NAME}" -C staging .' } + - { os: "darwin", arch: "arm64", download_path_segment: "darwin/arm64", binary_suffix: "", archive_extension: "tar.gz", archive_command: 'tar -czvf "${ARCHIVE_NAME}" -C staging .' } + - { os: "darwin", arch: "x64", download_path_segment: "darwin/amd64", binary_suffix: "", archive_extension: "tar.gz", archive_command: 'tar -czvf "${ARCHIVE_NAME}" -C staging .' } + - { os: "win32", arch: "x64", download_path_segment: "windows/amd64", binary_suffix: ".exe", archive_extension: "zip", archive_command: '(cd staging && zip ../"${ARCHIVE_NAME}" *)' } + + steps: + - name: Checkout code at the new tag + uses: actions/checkout@v4 + with: + ref: ${{ github.event.release.tag_name }} + + - name: Set Dynamic Environment Variables + id: vars + run: | + echo "archive_name=${{ matrix.platform.os }}.${{ matrix.platform.arch }}.${{ env.PACKAGE_NAME }}.${{ matrix.platform.archive_extension }}" >> $GITHUB_OUTPUT + echo "source_binary=toolbox${{ matrix.platform.binary_suffix }}" >> $GITHUB_OUTPUT + + - name: Get Toolbox Version + id: get_toolbox_version + run: | + TOOLBOX_VERSION=$(cat toolbox_version.txt) + echo "Found toolbox version: ${TOOLBOX_VERSION}" + echo "TOOLBOX_VERSION=${TOOLBOX_VERSION}" >> $GITHUB_OUTPUT + + - name: Download Source Binary + env: + TOOLBOX_VERSION: ${{ steps.get_toolbox_version.outputs.TOOLBOX_VERSION }} + DOWNLOAD_PATH_SEGMENT: ${{ matrix.platform.download_path_segment }} + SOURCE_BINARY: ${{ steps.vars.outputs.source_binary }} + run: | + DOWNLOAD_URL="${GCS_BUCKET_URL}/v${TOOLBOX_VERSION}/${DOWNLOAD_PATH_SEGMENT}/${SOURCE_BINARY}" + + echo "Downloading binary from: ${DOWNLOAD_URL}" + curl -L --fail -o "${SOURCE_BINARY}" "${DOWNLOAD_URL}" + + echo "Binary downloaded and prepared." + ls -l + + - name: Create release archive + id: create_archive + env: + ARCHIVE_COMMAND: ${{ matrix.platform.archive_command }} + ARCHIVE_NAME: ${{ steps.vars.outputs.archive_name }} + SOURCE_BINARY: ${{ steps.vars.outputs.source_binary }} + run: | + ARCHIVE_NAME="${{ matrix.platform.os }}.${{ matrix.platform.arch }}.${PACKAGE_NAME}.${{ matrix.platform.archive_extension }}" + SOURCE_BINARY="toolbox${{ matrix.platform.binary_suffix }}" + + echo "Packaging ${SOURCE_BINARY} into ${ARCHIVE_NAME}" + + mkdir staging + cp "${SOURCE_BINARY}" "staging/${SOURCE_BINARY}" + cp ${FILES_TO_PACKAGE} staging/ + + if [[ "${{ matrix.platform.os }}" == "win32" ]]; then + echo "Modifying gemini-extension.json for Windows..." + jq '(.mcpServers[].command) |= sub("toolbox$"; "toolbox.exe")' gemini-extension.json > staging/gemini-extension.json + echo "Modification complete." + fi + + echo "All assets staged." + ls -l staging + + # Create archive + eval "${ARCHIVE_COMMAND}" + echo "Created archive: ${ARCHIVE_NAME}" + echo "ARCHIVE_PATH=${ARCHIVE_NAME}" >> $GITHUB_OUTPUT + + - name: Upload archive as workflow artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.vars.outputs.archive_name }} + path: ${{ steps.create_archive.outputs.ARCHIVE_PATH }} + + # This job gathers all archives and uploads them to the GitHub Release. + upload: + name: Upload all assets to release + runs-on: ubuntu-latest + needs: package + permissions: + contents: write + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download all archives from workflow artifacts + uses: actions/download-artifact@v4 + with: + path: release-archives + + - name: List downloaded files + run: | + echo "--- Downloaded files ---" + ls -R release-archives + echo "------------------------" + + - name: Upload all assets to GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload \ + ${{ github.event.release.tag_name }} \ + release-archives/*/* \ No newline at end of file diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..46b1b67 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "0.0.0" +} \ No newline at end of file diff --git a/gemini-extension.json b/gemini-extension.json index 1628f26..0842cd8 100644 --- a/gemini-extension.json +++ b/gemini-extension.json @@ -1,6 +1,6 @@ { "name": "cloud-sql-postgresql", - "version": "0.1.0", + "version": "0.0.0", "description": "Create, connect, and interact with a Cloud SQL for PostgreSQL database and data.", "mcpServers": { "Cloud SQL for PostgreSQL": { diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..ded6600 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,23 @@ +{ + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true, + "changelog-sections": [ + { "type": "feat", "section": "Features" }, + { "type": "fix", "section": "Bug Fixes" }, + { "type": "chore", "section": "Miscellaneous Chores", "hidden": false }, + { "type": "docs", "section": "Documentation", "hidden": false } + ], + "packages": { + ".": { + "release-type": "simple", + "package-name": "cloud-sql-postgresql", + "extra-files": [ + { + "type": "json", + "path": "gemini-extension.json", + "jsonpath": "$.version" + } + ] + } + } +} \ No newline at end of file diff --git a/release-please.yml b/release-please.yml new file mode 100644 index 0000000..63065c1 --- /dev/null +++ b/release-please.yml @@ -0,0 +1,16 @@ +# 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. + +handleGHRelease: true +manifest: true \ No newline at end of file diff --git a/toolbox_version.txt b/toolbox_version.txt new file mode 100644 index 0000000..0548fb4 --- /dev/null +++ b/toolbox_version.txt @@ -0,0 +1 @@ +0.14.0 \ No newline at end of file From f026a6468529dc06d4af302933b11897453efee9 Mon Sep 17 00:00:00 2001 From: Twisha Bansal Date: Fri, 19 Sep 2025 13:39:06 +0530 Subject: [PATCH 2/4] chore: update codeowners --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0a451e5..e42e342 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,3 +4,4 @@ # * @googleapis/senseai-eco +* @gemini-cli-extensions/cloud-sql-postgresql-maintainers From 09c8d607ce8fa97ab0b6eb7e76e6c45eb2843f86 Mon Sep 17 00:00:00 2001 From: Twisha Bansal <58483338+twishabansal@users.noreply.github.com> Date: Fri, 19 Sep 2025 13:40:32 +0530 Subject: [PATCH 3/4] Delete release-please.yml --- release-please.yml | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 release-please.yml diff --git a/release-please.yml b/release-please.yml deleted file mode 100644 index 63065c1..0000000 --- a/release-please.yml +++ /dev/null @@ -1,16 +0,0 @@ -# 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. - -handleGHRelease: true -manifest: true \ No newline at end of file From 01c6738711b99d5a5ffa0daef0c8ea7822a1fd5e Mon Sep 17 00:00:00 2001 From: Averi Kitsch Date: Fri, 19 Sep 2025 19:59:21 -0700 Subject: [PATCH 4/4] Update .github/CODEOWNERS --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e42e342..98864b5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,5 +3,5 @@ # For syntax help see # -* @googleapis/senseai-eco +* @gemini-cli-extensions/senseai-eco * @gemini-cli-extensions/cloud-sql-postgresql-maintainers