diff --git a/.github/release-please.yml b/.github/release-please.yml new file mode 100644 index 0000000..63065c1 --- /dev/null +++ b/.github/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/.github/workflows/package-and-upload-assets.yml b/.github/workflows/package-and-upload-assets.yml new file mode 100644 index 0000000..d1ad058 --- /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: "postgres" + FILES_TO_PACKAGE: "gemini-extension.json POSTGRESQL.md LICENSE" + GCS_BUCKET_URL: "https://storage.googleapis.com/genai-toolbox/geminicli" + +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/*/* 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 044d6cb..77a2423 100644 --- a/gemini-extension.json +++ b/gemini-extension.json @@ -1,6 +1,6 @@ { "name": "postgres", - "version": "0.1.0", + "version": "0.0.0", "description": "Connect and interact with a PostgreSQL database and data", "mcpServers": { "PostgreSQL": { diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..607e274 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,37 @@ +{ + "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": "postgres", + "extra-files": [ + { + "type": "json", + "path": "gemini-extension.json", + "jsonpath": "$.version" + } + ] + } + } +} diff --git a/toolbox_version.txt b/toolbox_version.txt new file mode 100644 index 0000000..7092c7c --- /dev/null +++ b/toolbox_version.txt @@ -0,0 +1 @@ +0.15.0 \ No newline at end of file