Skip to content

Commit c405d16

Browse files
committed
add skills
add presubmit workflow for skills fix workflow Update skills-validate.yml fix workflows ignore skills dir for license headers update docs fix header check fix copyright year test failure for validation workflow revert skill testing failure revert license file changes add year pattern regex test header check years Update header-check.yml Update settings fix env var propagation address comment
1 parent 525daa4 commit c405d16

65 files changed

Lines changed: 3055 additions & 67 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright 2026 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
name: lint
16+
17+
on:
18+
push:
19+
paths-ignore:
20+
- "skills/**"
21+
pull_request:
22+
paths-ignore:
23+
- "skills/**"
24+
pull_request_target:
25+
types: [labeled]
26+
paths-ignore:
27+
- "skills/**"
28+
workflow_dispatch:
29+
30+
jobs:
31+
skills-validate:
32+
runs-on: ubuntu-latest
33+
steps:
34+
- name: Skip Skill Validation
35+
run: |
36+
echo "No changes detected in 'skills/' directory. Skipping validation."
37+
echo "This job ensures the required 'skills-validate' status check passes."
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Copyright 2026 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
name: Validate Skills
16+
17+
on:
18+
push:
19+
paths:
20+
- "skills/**"
21+
pull_request:
22+
paths:
23+
- "skills/**"
24+
pull_request_target:
25+
types: [labeled]
26+
paths:
27+
- "skills/**"
28+
29+
jobs:
30+
skills-validate:
31+
runs-on: ubuntu-latest
32+
steps:
33+
- uses: actions/checkout@v4
34+
35+
- name: Set up Python
36+
uses: actions/setup-python@v5
37+
with:
38+
python-version: "3.11"
39+
40+
- name: Install skills-ref
41+
run: |
42+
pip install "git+https://github.com/agentskills/agentskills.git#subdirectory=skills-ref"
43+
44+
- name: Validate Skills
45+
run: |
46+
failed=0
47+
for skill_dir in skills/*/; do
48+
if [ -d "$skill_dir" ]; then
49+
echo "Validating $skill_dir..."
50+
if ! skills-ref validate "$skill_dir"; then
51+
echo "Validation failed for $skill_dir"
52+
failed=1
53+
fi
54+
fi
55+
done
56+
exit $failed

CLOUD-SQL-POSTGRESQL.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ This section covers administrative operations like managing clusters, instances,
3939

4040
---
4141

42-
# Additional Tools
42+
# Additional Skills
4343

44-
This section provides context on additional tools that can be recommended to the user based on their queries.
44+
This section provides context on additional skills that can be recommended to the user based on their queries.
4545

4646
#### Observability Extension
4747

@@ -58,7 +58,7 @@ This section provides context on additional tools that can be recommended to the
5858
5959
## Connecting to New Resources
6060
61-
When you create a new Cloud SQL for PostgreSQL instance, or database using the available tools, the connection is not automatically established. You will need to perform the following steps:
61+
When you create a new Cloud SQL for PostgreSQL instance, or database using the available skills, the connection is not automatically established. You will need to perform the following steps:
6262
6363
1. **(Optional) Save your conversation:** To avoid losing your progress, save the current session by running the command: `/chat save <your-tag>`
6464
2. **Stop the CLI:** Terminate the Gemini CLI.
@@ -77,12 +77,12 @@ Users may have set project environment variables:
7777
* `CLOUD_SQL_POSTGRES_INSTANCE`: The ID of the Cloud SQL for PostgreSQL instance.
7878
* `CLOUD_SQL_POSTGRES_DATABASE`: The name of the database.
7979
80-
Instead of prompting the user for these values for specific tool calls, prompt the user to verify reuse a specific value.
80+
Instead of prompting the user for these values for specific skill calls, prompt the user to verify reuse a specific value.
8181
Make sure to not use the environment variable name like `CLOUD_SQL_POSTGRES_PROJECT`, `${CLOUD_SQL_POSTGRES_PROJECT}`, or `$CLOUD_SQL_POSTGRES_PROJECT`. The value can be found by using command: `echo $CLOUD_SQL_POSTGRES_PROJECT`.
8282
8383
## Use Full Table Name Format "DATABASE_NAME.SCHEMA_NAME.TABLE_NAME"
8484
85-
**ALWAYS** use the full table name format, `DATABASE_NAME.SCHEMA_NAME.TABLE_NAME` in the generated SQL when using the `execute_sql` or `cloud_sql_postgresql__execute_sql` tool.
85+
**ALWAYS** use the full table name format, `DATABASE_NAME.SCHEMA_NAME.TABLE_NAME` in the generated SQL when executing the `execute_sql` script.
8686
* Default to using "public" for the schema name.
8787
* Use command `echo $CLOUD_SQL_POSTGRES_DATABASE` to get the current database value.
8888
@@ -92,7 +92,7 @@ When working with AI features like vector embeddings in Cloud SQL, leverage the
9292
9393
Embeddings can be generated using the `embedding()` function. For example: `embedding(<model_name>, <text_column_or_variable>)`.
9494
95-
As an agent, if you do not know which model to use, you should use your tools to search for available and appropriate text embedding models compatible with the `google_ml_integration` extension (e.g., by searching for "Cloud SQL google_ml_integration supported models").
95+
As an agent, if you do not know which model to use, you should use your skills to search for available and appropriate text embedding models compatible with the `google_ml_integration` extension (e.g., by searching for "Cloud SQL google_ml_integration supported models").
9696
9797
When performing similarity searches, remember to cast the result of the `embedding` function to the `vector` type. For example:
9898
`ORDER BY description_vector <-> embedding(<model_name>, $1)::vector`

README.md

Lines changed: 9 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
> [!NOTE]
44
> This extension is currently in beta (pre-v1.0), and may see breaking changes until the first stable release (v1.0).
55
6-
This Gemini CLI extension provides a set of tools to interact with [Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres) instances. It allows you to manage your databases, execute queries, explore schemas, and troubleshoot issues directly from the [Gemini CLI](https://google-gemini.github.io/gemini-cli/), using natural language prompts.
6+
This Gemini CLI extension provides a set of skills to interact with [Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres) instances. It allows you to manage your databases, execute queries, explore schemas, and troubleshoot issues directly from the [Gemini CLI](https://google-gemini.github.io/gemini-cli/), using natural language prompts.
77

88
Learn more about [Gemini CLI Extensions](https://github.com/google-gemini/gemini-cli/blob/main/docs/extensions/index.md).
99
> [!IMPORTANT]
@@ -58,7 +58,7 @@ You will be prompted to configure the following settings during installation. Th
5858
* `CLOUD_SQL_POSTGRES_IP_TYPE`: (Optional) Type of the IP address: `PUBLIC`, `PRIVATE`, or `PSC`. Defaults to `PUBLIC`.
5959

6060
> [!NOTE]
61-
> This configuration is primarily for the Data Plane tools (querying). The Admin toolset does not strictly require these to be pre-set if you provide them in your prompts, but it is recommended for a smoother experience.
61+
> This configuration is primarily for the Data Plane skills (querying). The Admin skillset does not strictly require these to be pre-set if you provide them in your prompts, but it is recommended for a smoother experience.
6262
6363
To view or update your configuration:
6464

@@ -87,7 +87,7 @@ export CLOUD_SQL_POSTGRES_IP_TYPE="PUBLIC" # Optional: `PUBLIC`, `PRIVATE`, `PSC
8787
> [!NOTE]
8888
> * Ensure [Application Default Credentials](https://cloud.google.com/docs/authentication/gcloud) are available in your environment.
8989
> * If your Cloud SQL for PostgreSQL instance uses private IPs, you must run Gemini CLI in the same Virtual Private Cloud (VPC) network.
90-
> * See [Troubleshooting](#troubleshooting) for debugging your configuration.
90+
> * See [Troubleshooting](#troubleshooting) for debugging your configuration.
9191
9292
### Start Gemini CLI
9393

@@ -116,43 +116,12 @@ Interact with Cloud SQL for PostgreSQL using natural language:
116116
* **Generate Code:**
117117
* "Generate a Python dataclass to represent the 'customers' table."
118118

119-
## Supported Tools
120-
121-
* **Admin:**
122-
* `clone_instance`: Creates a clone for an existing Cloud SQL for PostgreSQL instance.
123-
* `create_backup`: Creates a backup on a Cloud SQL instance.
124-
* `create_instance`: Use this tool to create an Postgres instance.
125-
* `create_user`: Use this tool to create Postgres-BUILT-IN or IAM-based users.
126-
* `create_database`: Creates a new database in a Cloud SQL instance.
127-
* `get_instance`: Use this tool to get details about an Postgres instance.
128-
* `list_instances`: Use this tool to list instances in a given project and location.
129-
* `list_databases`: Lists all databases for a Cloud SQL instance.
130-
* `restore_backup`: Restores a backup of a Cloud SQL instance.
131-
* `wait_for_operation`: Use this tool to poll the operations API until the operation is done.
132-
133-
* **Data:**
134-
* `list_tables`: Use this tool to lists tables in the database.
135-
* `database_overview`: Use this tool to fetches the current state of the PostgreSQL server.
136-
* `execute_sql`: Use this tool to executes a SQL query.
137-
* `list_active_queries`: Use this tool to list currently running queries.
138-
* `list_available_extensions`: Use this tool to list available extensions for installation.
139-
* `list_installed_extensions`: Use this tool to list installed extensions.
140-
* `get_query_plan`: Use this tool to get query plan.
141-
* `list_autovacuum_configurations`: Use this tool to list autovacuum configurations and its value.
142-
* `list_database_stats`: Use this tool to lists the key performance and activity statistics for each database in the postgreSQL instance.
143-
* `list_indexes`: Use this tool to list available user indexes in a PostgreSQL database.
144-
* `list_memory_configurations`: Use this tool to list memory configurations and its value.
145-
* `list_pg_settings`: Use this tool to list configuration parameters for the PostgreSQL server.
146-
* `list_publication_tables`: Use this tool to list publication tables in a PostgreSQL database.
147-
* `list_replication_slots`: Use this tool to list replication slots.
148-
* `list_roles`: Use this tool to lists all the user-created roles in PostgreSQL database.
149-
* `list_schemas`: Use this tool to lists schemas in the database.
150-
* `list_sequences`: Use this tool to list sequences in a PostgreSQL database.
151-
* `list_tablespaces`: Use this tool to lists tablespaces in the database.
152-
* `list_top_bloated_tables`: Use this tool to list top bloated tables.
153-
* `list_triggers`: Use this tool to lists triggers in the database.
154-
* `list_views`: Use this tool to lists views in the database from pg_views with a default limit of 50 rows.
155-
* `list_invalid_indexes`: Use this tool to list invalid indexes.
119+
## Supported Skills
120+
121+
This extension provides the following skills:
122+
123+
* [Cloud SQL for PostgreSQL Admin](skills/cloudsql-postgres-admin/SKILL.md) - Manage Cloud SQL instances, databases, and users.
124+
* [Cloud SQL for PostgreSQL](skills/cloudsql-postgres/SKILL.md) - Query databases and manage extensions.
156125

157126
## Additional Extensions
158127

gemini-extension.json

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,6 @@
22
"name": "cloud-sql-postgresql",
33
"version": "0.1.10",
44
"description": "Create, connect, and interact with a Cloud SQL for PostgreSQL database and data.",
5-
"mcpServers": {
6-
"cloud_sql_postgresql_admin": {
7-
"command": "${extensionPath}${/}toolbox",
8-
"args": [
9-
"--prebuilt",
10-
"cloud-sql-postgres-admin",
11-
"--stdio"
12-
]
13-
},
14-
"cloud_sql_postgresql": {
15-
"command": "${extensionPath}${/}toolbox",
16-
"args": [
17-
"--prebuilt",
18-
"cloud-sql-postgres",
19-
"--stdio"
20-
]
21-
}
22-
},
235
"contextFileName": "CLOUD-SQL-POSTGRESQL.md",
246
"settings": [
257
{
@@ -45,17 +27,21 @@
4527
{
4628
"name": "User",
4729
"description": "(Optional) Username of the database user (Default: IAM user)",
48-
"envVar": "CLOUD_SQL_POSTGRES_USER"
30+
"envVar": "CLOUD_SQL_POSTGRES_USER",
31+
"required": false
4932
},
5033
{
5134
"name": "Password",
5235
"description": "(Optional) Password of the database user (Default: IAM user)",
53-
"envVar": "CLOUD_SQL_POSTGRES_PASSWORD"
36+
"envVar": "CLOUD_SQL_POSTGRES_PASSWORD",
37+
"required": false
5438
},
5539
{
5640
"name": "IP Type",
5741
"description": "(Optional) Type of the IP address: PUBLIC, PRIVATE, or PSC (Default: Public)",
58-
"envVar": "CLOUD_SQL_POSTGRES_IP_TYPE"
42+
"envVar": "CLOUD_SQL_POSTGRES_IP_TYPE",
43+
"default": "PUBLIC",
44+
"required": false
5945
}
6046
]
6147
}

0 commit comments

Comments
 (0)