diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..a32506b --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,6 @@ +# This file controls who is tagged for review for any given pull request +# +# For syntax help see +# + +* @gemini-cli-extensions/senseai-eco diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..7687295 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,109 @@ +# 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 +# +# https://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: 🐞 Bug Report +description: File a report for unexpected or undesired behavior. +title: "" +labels: ["type: bug"] +type: "bug" + +body: + - type: markdown + attributes: + value: | + Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your problem. + + - id: preamble + type: checkboxes + attributes: + label: Pre-reqs + description: | + Please run through the following list and make sure you've tried the usual "quick fixes": + - Search the [current open issues](https://github.com/gemini-cli-extensions/dataproc/issues) + - Update to the latest version of the extension and [Gemini CLI](https://github.com/google-gemini/gemini-cli?tab=readme-ov-file#stable) + options: + - label: "I've searched the current open issues" + required: true + - label: "I've updated to the latest versions" + + - type: input + id: ex_version + attributes: + label: Extension Version + description: | + What version of the extension are you using (`gemini extensions list` or `/extensions list`)? + placeholder: ex. version 0.1.0 + validations: + required: true + + - type: input + id: version + attributes: + label: Gemini CLI Version + description: | + What version of the Gemini CLI are you using (`gemini --version`)? + placeholder: ex. version 0.6.0 + validations: + required: true + + - type: input + id: environment + attributes: + label: Environment + description: "Let us know what OS type and version in which you are seeing the bug!" + placeholder: output of `uname -a` + validations: + required: true + + - id: current-behavior + type: textarea + attributes: + label: Current Behavior + description: "Please enter a detailed description of the behavior you encountered instead." + validations: + required: true + + - id: expected-behavior + type: textarea + attributes: + label: Expected Behavior + description: | + Please enter a detailed description of the behavior you expected, and any information about what behavior you + noticed and why it is defective or unintentional. + validations: + required: true + + - type: textarea + id: repro + attributes: + label: Steps to reproduce? + description: | + How can we reproduce this bug? Please walk us through it step by step, + with as much relevant detail as possible. A 'minimal' reproduction is + preferred, which means removing as much of the examples as possible so + only the minimum required to run and reproduce the bug is left. + value: | + 1. ? + 2. ? + 3. ? + ... + validations: + required: true + + - type: textarea + id: additional-details + attributes: + label: Additional Details + description: | + Any other information you want us to know? diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..07acf52 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,19 @@ +# 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. + +blank_issues_enabled: false +contact_links: + - name: Google Cloud Support + url: https://cloud.google.com/support/ + about: If you have a support contract with Google, please both open an issue here and open Google Cloud Support portal with a link to the issue. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..dab0f47 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,54 @@ +# 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 +# +# https://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: ✨ Feature Request +description: Suggest an idea for new or improved behavior. +title: "" +labels: ["type: feature request"] +type: feature +body: + - type: markdown + attributes: + value: | + Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your feature request. + + - id: preamble + type: checkboxes + attributes: + label: Pre-reqs + description: | + Please run through the following list and make sure you've tried the usual "quick fixes": + options: + - label: "Search the [current open issues](https://github.com/gemini-cli-extensions/dataproc/issues)" + required: true + + - type: textarea + id: use-case + attributes: + label: What are you trying to do that currently feels hard or impossible? + description: "A clear and concise description of what the end goal for the feature should be -- avoid generalizing and try to provide a specific use-case." + validations: + required: true + + - type: textarea + id: suggested-solution + attributes: + label: Suggested Solution(s) + description: "If you have a suggestion for how this use-case can be solved, please feel free to include it." + + - type: textarea + id: additional-details + attributes: + label: Additional Details + description: "Any additional information we should know? Please reference it here (issues, PRs, descriptions, or screenshots)" diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 0000000..ee3e5ea --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,54 @@ +# 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 +# +# https://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: 💬 Question +description: Questions on how something works or the best way to do something? +title: "" +labels: ["type: question"] + +body: + - type: markdown + attributes: + value: | + Thanks for helping us improve! 🙏 Please provide as much information as possible about your question. + + - id: preamble + type: checkboxes + attributes: + label: Prerequisites + description: | + Please run through the following list and make sure you've tried the usual "quick fixes": + options: + - label: "Search the [issues](https://github.com/gemini-cli-extensions/dataproc/issues)" + required: true + + - type: textarea + id: question + attributes: + label: Question + description: "What's your question? Please provide as much relevant information as possible to reduce turnaround time. Include information like what environment, language, or framework you are using." + validations: + required: true + + - type: textarea + id: code + attributes: + label: Code + description: "Please paste any useful application code that might be relevant to your question. (if your code is in a public repo, feel free to paste a link!)" + + - type: textarea + id: additional-details + attributes: + label: Additional Details + description: "Any other information you want us to know that might be helpful in answering your question? (link issues, PRs, descriptions, or screenshots)." diff --git a/.github/labels.yaml b/.github/labels.yaml new file mode 100644 index 0000000..bdcf4c9 --- /dev/null +++ b/.github/labels.yaml @@ -0,0 +1,86 @@ +# 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: duplicate + color: ededed + description: "" + +- name: 'type: bug' + color: db4437 + description: Error or flaw in code with unintended results or allowing sub-optimal + usage patterns. +- name: 'type: cleanup' + color: c5def5 + description: An internal cleanup or hygiene concern. +- name: 'type: docs' + color: 0000A0 + description: Improvement to the documentation for an API. +- name: 'type: feature request' + color: c5def5 + description: "'Nice-to-have' improvement, new feature or different behavior or design." +- name: 'type: process' + color: c5def5 + description: A process-related concern. May include testing, release, or the like. +- name: 'type: question' + color: c5def5 + description: Request for information or clarification. + +- name: 'priority: p0' + color: b60205 + description: Highest priority. Critical issue. P0 implies highest priority. +- name: 'priority: p1' + color: ffa03e + description: Important issue which blocks shipping the next release. Will be fixed + prior to next release. +- name: 'priority: p2' + color: fef2c0 + description: Moderately-important priority. Fix may not be included in next release. +- name: 'priority: p3' + color: ffffc7 + description: Desirable enhancement or fix. May not be included in next release. + +- name: 'do not merge' + color: d93f0b + description: Indicates a pull request not ready for merge, due to either quality + or timing. + +- name: 'autorelease: pending' + color: ededed + description: Release please needs to do its work on this. +- name: 'autorelease: triggered' + color: ededed + description: Release please has triggered a release for this. +- name: 'autorelease: tagged' + color: ededed + description: Release please has completed a release for this. + + +- name: 'docs: deploy-preview' + color: BFDADC + description: Label to trigger Github Action docs preview. + +- name: 'status: help wanted' + color: 8befd7 + description: 'Status: Unplanned work open to contributions from the community.' +- name: 'status: feedback wanted' + color: 8befd7 + description: 'Status: waiting for feedback from community or issue author.' + +- name: 'status: waiting for response' + color: 8befd7 + description: 'Status: reviewer is awaiting feedback or responses from the author before proceeding.' + +- name: 'release-please:force-run' + color: bdca82 + description: Manually trigger the release please workflow on a PR. \ No newline at end of file diff --git a/.github/release-please.yml b/.github/release-please.yml index 6a76712..9e34b6b 100644 --- a/.github/release-please.yml +++ b/.github/release-please.yml @@ -1,4 +1,4 @@ -# Copyright 2025 Google LLC +# 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. diff --git a/.github/renovate.json5 b/.github/renovate.json5 new file mode 100644 index 0000000..0533093 --- /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/mcp-toolbox'], + 'semanticCommitType': 'feat' + } + ], + customManagers: [ + { + customType: "regex", + managerFilePatterns: ["/toolbox_version\\.txt$/"], + matchStrings: ["(?[\\d\\.]+)"], + datasourceTemplate: "github-releases", + packageNameTemplate: "googleapis/mcp-toolbox", + extractVersionTemplate: "^v(?.*)$", + } + ] +} diff --git a/.github/workflows/assign-issues.yml b/.github/workflows/assign-issues.yml new file mode 100644 index 0000000..476c40f --- /dev/null +++ b/.github/workflows/assign-issues.yml @@ -0,0 +1,32 @@ +# 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: Issue assignment + +on: + issues: + types: [opened] + +jobs: + auto-assign: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: "Auto-assign issue" + uses: pozil/auto-assign-issue@v2 + with: + assignees: averikitsch + numOfAssignee: 1 + abortIfPreviousAssignees: true diff --git a/.github/workflows/assign-prs.yml b/.github/workflows/assign-prs.yml new file mode 100644 index 0000000..ddf4e82 --- /dev/null +++ b/.github/workflows/assign-prs.yml @@ -0,0 +1,33 @@ +# 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: PR assignment + +on: + pull_request_target: + types: [opened, edited, reopened] + +jobs: + auto-assign: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - name: "Auto-assign PR" + uses: pozil/auto-assign-issue@v2 + with: + assignees: averikitsch + numOfAssignee: 1 + abortIfPreviousAssignees: true diff --git a/.github/workflows/header-check.yml b/.github/workflows/header-check.yml new file mode 100644 index 0000000..4dec929 --- /dev/null +++ b/.github/workflows/header-check.yml @@ -0,0 +1,30 @@ +# 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: 'License Header Check' + +on: + pull_request: + branches: [ main ] + +jobs: + license-check: + name: 'License Header Check' + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Check License Header + uses: apache/skywalking-eyes/header@98a5d1362e26852204382ca749ed66631f15a95d # main diff --git a/.github/workflows/json-lint.yml b/.github/workflows/json-lint.yml new file mode 100644 index 0000000..ab09cc1 --- /dev/null +++ b/.github/workflows/json-lint.yml @@ -0,0 +1,29 @@ +# 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: Lint JSON + +on: + pull_request: + branches: [ main ] + +jobs: + json-lint: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Run JSON Lint + run: jq . gemini-extension.json \ No newline at end of file diff --git a/.github/workflows/markdown-checks.yml b/.github/workflows/markdown-checks.yml new file mode 100644 index 0000000..dbb2cd7 --- /dev/null +++ b/.github/workflows/markdown-checks.yml @@ -0,0 +1,33 @@ +# 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 +# +# https://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: Lint Markdown + +on: + pull_request: + branches: [ main ] + +jobs: + link-check: + name: Run link check + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Link Checker + uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 + with: + # There is no security token. So, it would fail on any links which aren't public. + args: "--verbose --no-progress **/*.md" diff --git a/.github/workflows/mirror-changelog.yml b/.github/workflows/mirror-changelog.yml new file mode 100644 index 0000000..e8d9b75 --- /dev/null +++ b/.github/workflows/mirror-changelog.yml @@ -0,0 +1,152 @@ +# 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: 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-mcp-toolbox') + runs-on: ubuntu-latest + permissions: + pull-requests: write + + steps: + - name: Add Toolbox Release Notes to PR Body + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 + env: + REQUIRED_KEYWORDS: 'dataproc' + with: + script: | + 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 + const startMarker = 'googleapis/mcp-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) { + let originalContent = itemMatch[1]; + + // This is a two-step process to prevent `release-please` from + // creating mangled, doubly-nested links for PRs. + + // STEP 1: CLEAN THE INPUT. + // The source changelog contains a zero-width space as an HTML entity (`​`). + // This breaks the regex in the next step, so we must remove it first. + // E.g., "[#​1770](...)" becomes "[#1770](...)" + originalContent = originalContent.replace(/​/g, ''); + + // STEP 2: PROTECT THE OUTPUT. + // `release-please` aggressively tries to auto-link any text that looks like `#1234`. + // To prevent this, we insert an invisible Unicode zero-width space (`\u200B`) + // between the '#' and the number in the link text. This breaks the parser's + // pattern matching without changing the visual appearance of the link. + // E.g., "[#1770](...)" becomes "[mcp-toolbox#​1770](...)" + originalContent = originalContent.replace(/\[#(\d+)\](\([^)]+\))/g, '[mcp-toolbox#\u200B$1]$2'); + + const lineAsLowerCase = originalContent.toLowerCase(); + + const hasPrefix = prefixesToFilter.some(prefix => lineAsLowerCase.includes(prefix)); + + // 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}`); + } + } + } + + 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; + } + + // 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.'); diff --git a/.github/workflows/pr-title-linter.yml b/.github/workflows/pr-title-linter.yml new file mode 100644 index 0000000..7186777 --- /dev/null +++ b/.github/workflows/pr-title-linter.yml @@ -0,0 +1,27 @@ +# 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: 'Lint PR Title' + +on: + pull_request: + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/presubmit-tests.yml b/.github/workflows/presubmit-tests.yml new file mode 100644 index 0000000..9b338ff --- /dev/null +++ b/.github/workflows/presubmit-tests.yml @@ -0,0 +1,39 @@ +# 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 +# +# https://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: Presubmit Tests + +on: + pull_request: + branches: [ main ] + +jobs: + run-presubmit-tests: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Install Gemini CLI + run: npm install @google/gemini-cli + + - name: Install toolbox binary + run: | + VERSION=$(cat toolbox_version.txt) + curl -L -o toolbox "https://storage.googleapis.com/mcp-toolbox-for-databases/v${VERSION}/linux/amd64/toolbox" + chmod +x toolbox + + - name: Install Extension + run: npx gemini extensions validate . + env: + GEMINI_API_KEY: "placeholder" diff --git a/.github/workflows/sync-labels.yaml b/.github/workflows/sync-labels.yaml new file mode 100644 index 0000000..e411496 --- /dev/null +++ b/.github/workflows/sync-labels.yaml @@ -0,0 +1,37 @@ +# 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: Sync Labels +on: + push: + branches: + - main + +# Declare default permissions as read only. +permissions: read-all + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: 'read' + issues: 'write' + pull-requests: 'write' + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: micnncim/action-label-syncer@3abd5ab72fda571e69fffd97bd4e0033dd5f495c # v1.3.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + manifest: .github/labels.yaml diff --git a/.licenserc.yaml b/.licenserc.yaml new file mode 100644 index 0000000..6bb7f24 --- /dev/null +++ b/.licenserc.yaml @@ -0,0 +1,36 @@ +# 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. + +header: + license: + spdx-id: "Apache-2.0" + copyright-owner: "Google LLC" + pattern: | + 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\. + paths: + - "**/*.yaml" + - "**/*.yml" + - "**/*.toml" diff --git a/toolbox_version.txt b/toolbox_version.txt new file mode 100644 index 0000000..1cc5f65 --- /dev/null +++ b/toolbox_version.txt @@ -0,0 +1 @@ +1.1.0 \ No newline at end of file