feat: remove node installation from gemini (#374)
Closes # ## Description Standardising this across all modules: - remove default node & nvm installation <!-- Briefly describe what this PR does and why --> ## Type of Change - [ ] New module - [ ] Bug fix - [x] Feature/enhancement - [ ] Documentation - [ ] Other ## Module Information <!-- Delete this section if not applicable --> **Path:** `registry/coder-labs/modules/gemini` **New version:** `v2.0.0` **Breaking change:** [x] Yes [ ] No ## Testing & Validation - [x] Tests pass (`bun test`) - [x] Code formatted (`bun run fmt`) - [ ] Changes tested locally ## Related Issues <!-- Link related issues or write "None" if not applicable --> --------- Co-authored-by: DevCats <christofer@coder.com>
This commit is contained in:
parent
68f881e220
commit
240643d3b0
@ -13,7 +13,7 @@ Run [Gemini CLI](https://github.com/google-gemini/gemini-cli) in your workspace
|
|||||||
```tf
|
```tf
|
||||||
module "gemini" {
|
module "gemini" {
|
||||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||||
version = "1.1.0"
|
version = "2.0.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
folder = "/home/coder/project"
|
folder = "/home/coder/project"
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ module "gemini" {
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- Node.js and npm will be installed automatically if not present
|
- **Node.js and npm must be sourced/available before the gemini module installs** - ensure they are installed in your workspace image or via earlier provisioning steps
|
||||||
- The [Coder Login](https://registry.coder.com/modules/coder/coder-login) module is required
|
- The [Coder Login](https://registry.coder.com/modules/coder/coder-login) module is required
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
@ -46,7 +46,7 @@ variable "gemini_api_key" {
|
|||||||
|
|
||||||
module "gemini" {
|
module "gemini" {
|
||||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||||
version = "1.1.0"
|
version = "2.0.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
gemini_api_key = var.gemini_api_key
|
gemini_api_key = var.gemini_api_key
|
||||||
folder = "/home/coder/project"
|
folder = "/home/coder/project"
|
||||||
@ -94,7 +94,7 @@ data "coder_parameter" "ai_prompt" {
|
|||||||
module "gemini" {
|
module "gemini" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||||
version = "1.1.0"
|
version = "2.0.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
gemini_api_key = var.gemini_api_key
|
gemini_api_key = var.gemini_api_key
|
||||||
gemini_model = "gemini-2.5-flash"
|
gemini_model = "gemini-2.5-flash"
|
||||||
@ -118,7 +118,7 @@ For enterprise users who prefer Google's Vertex AI platform:
|
|||||||
```tf
|
```tf
|
||||||
module "gemini" {
|
module "gemini" {
|
||||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||||
version = "1.1.0"
|
version = "2.0.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
gemini_api_key = var.gemini_api_key
|
gemini_api_key = var.gemini_api_key
|
||||||
folder = "/home/coder/project"
|
folder = "/home/coder/project"
|
||||||
|
|||||||
@ -153,7 +153,7 @@ describe("gemini", async () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
await execModuleScript(id);
|
await execModuleScript(id);
|
||||||
const resp = await readFileContainer(id, "/home/coder/.gemini-module/install.log");
|
const resp = await readFileContainer(id, "/home/coder/.gemini-module/agentapi-start.log");
|
||||||
expect(resp).toContain('GOOGLE_GENAI_USE_VERTEXAI=\'true\'');
|
expect(resp).toContain('GOOGLE_GENAI_USE_VERTEXAI=\'true\'');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ describe("gemini", async () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
await execModuleScript(id);
|
await execModuleScript(id);
|
||||||
const resp = await readFileContainer(id, "/home/coder/.gemini-module/install.log");
|
const resp = await readFileContainer(id, "/home/coder/.gemini-module/agentapi-start.log");
|
||||||
expect(resp).toContain(model);
|
expect(resp).toContain(model);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ describe("gemini", async () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
await execModuleScript(id);
|
await execModuleScript(id);
|
||||||
const resp = await readFileContainer(id, "/home/coder/.gemini-module/install.log");
|
const resp = await readFileContainer(id, "/home/coder/.gemini-module/agentapi-start.log");
|
||||||
expect(resp).toContain(folder);
|
expect(resp).toContain(folder);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
BOLD='\033[0;1m'
|
BOLD='\033[0;1m'
|
||||||
|
source "$HOME"/.bashrc
|
||||||
command_exists() {
|
command_exists() {
|
||||||
command -v "$1" >/dev/null 2>&1
|
command -v "$1" > /dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
set -o nounset
|
set -o nounset
|
||||||
@ -21,56 +21,46 @@ echo "--------------------------------"
|
|||||||
|
|
||||||
set +o nounset
|
set +o nounset
|
||||||
|
|
||||||
function install_node() {
|
function check_dependencies() {
|
||||||
if ! command_exists npm; then
|
|
||||||
printf "npm not found, checking for Node.js installation...\n"
|
|
||||||
if ! command_exists node; then
|
if ! command_exists node; then
|
||||||
printf "Node.js not found, installing Node.js via NVM...\n"
|
printf "Error: Node.js is not installed. Please install Node.js manually or use the pre_install_script to install it.\n"
|
||||||
export NVM_DIR="$HOME/.nvm"
|
|
||||||
if [ ! -d "$NVM_DIR" ]; then
|
|
||||||
mkdir -p "$NVM_DIR"
|
|
||||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
|
||||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
||||||
else
|
|
||||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
nvm install --lts
|
|
||||||
nvm use --lts
|
|
||||||
nvm alias default node
|
|
||||||
|
|
||||||
printf "Node.js installed: %s\n" "$(node --version)"
|
|
||||||
printf "npm installed: %s\n" "$(npm --version)"
|
|
||||||
else
|
|
||||||
printf "Node.js is installed but npm is not available. Please install npm manually.\n"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! command_exists npm; then
|
||||||
|
printf "Error: npm is not installed. Please install npm manually or use the pre_install_script to install it.\n"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
printf "Node.js version: %s\n" "$(node --version)"
|
||||||
|
printf "npm version: %s\n" "$(npm --version)"
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_gemini() {
|
function install_gemini() {
|
||||||
if [ "${ARG_INSTALL}" = "true" ]; then
|
if [ "${ARG_INSTALL}" = "true" ]; then
|
||||||
install_node
|
check_dependencies
|
||||||
|
|
||||||
if ! command_exists nvm; then
|
|
||||||
printf "which node: %s\n" "$(which node)"
|
|
||||||
printf "which npm: %s\n" "$(which npm)"
|
|
||||||
|
|
||||||
mkdir -p "$HOME"/.npm-global
|
|
||||||
npm config set prefix "$HOME/.npm-global"
|
|
||||||
export PATH="$HOME/.npm-global/bin:$PATH"
|
|
||||||
if ! grep -q "export PATH=$HOME/.npm-global/bin:\$PATH" ~/.bashrc; then
|
|
||||||
echo "export PATH=$HOME/.npm-global/bin:\$PATH" >> ~/.bashrc
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "%s Installing Gemini CLI\n" "${BOLD}"
|
printf "%s Installing Gemini CLI\n" "${BOLD}"
|
||||||
|
|
||||||
|
NPM_GLOBAL_PREFIX="${HOME}/.npm-global"
|
||||||
|
if [ ! -d "$NPM_GLOBAL_PREFIX" ]; then
|
||||||
|
mkdir -p "$NPM_GLOBAL_PREFIX"
|
||||||
|
fi
|
||||||
|
|
||||||
|
npm config set prefix "$NPM_GLOBAL_PREFIX"
|
||||||
|
|
||||||
|
export PATH="$NPM_GLOBAL_PREFIX/bin:$PATH"
|
||||||
|
|
||||||
if [ -n "$ARG_GEMINI_VERSION" ]; then
|
if [ -n "$ARG_GEMINI_VERSION" ]; then
|
||||||
npm install -g "@google/gemini-cli@$ARG_GEMINI_VERSION"
|
npm install -g "@google/gemini-cli@$ARG_GEMINI_VERSION"
|
||||||
else
|
else
|
||||||
npm install -g "@google/gemini-cli"
|
npm install -g "@google/gemini-cli"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! grep -q "export PATH=\"\$HOME/.npm-global/bin:\$PATH\"" "$HOME/.bashrc"; then
|
||||||
|
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> "$HOME/.bashrc"
|
||||||
|
fi
|
||||||
|
|
||||||
printf "%s Successfully installed Gemini CLI. Version: %s\n" "${BOLD}" "$(gemini --version)"
|
printf "%s Successfully installed Gemini CLI. Version: %s\n" "${BOLD}" "$(gemini --version)"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -157,8 +147,6 @@ function configure_mcp() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
install_gemini
|
install_gemini
|
||||||
gemini --version
|
|
||||||
populate_settings_json
|
populate_settings_json
|
||||||
add_system_prompt_if_exists
|
add_system_prompt_if_exists
|
||||||
configure_mcp
|
configure_mcp
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ set -o pipefail
|
|||||||
source "$HOME"/.bashrc
|
source "$HOME"/.bashrc
|
||||||
|
|
||||||
command_exists() {
|
command_exists() {
|
||||||
command -v "$1" >/dev/null 2>&1
|
command -v "$1" > /dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -f "$HOME/.nvm/nvm.sh" ]; then
|
if [ -f "$HOME/.nvm/nvm.sh" ]; then
|
||||||
@ -48,7 +48,7 @@ if [ -n "$GEMINI_TASK_PROMPT" ]; then
|
|||||||
printf "Running automated task: %s\n" "$GEMINI_TASK_PROMPT"
|
printf "Running automated task: %s\n" "$GEMINI_TASK_PROMPT"
|
||||||
PROMPT="Every step of the way, report tasks to Coder with proper descriptions and statuses. Your task at hand: $GEMINI_TASK_PROMPT"
|
PROMPT="Every step of the way, report tasks to Coder with proper descriptions and statuses. Your task at hand: $GEMINI_TASK_PROMPT"
|
||||||
PROMPT_FILE="$MODULE_DIR/prompt.txt"
|
PROMPT_FILE="$MODULE_DIR/prompt.txt"
|
||||||
echo -n "$PROMPT" >"$PROMPT_FILE"
|
echo -n "$PROMPT" > "$PROMPT_FILE"
|
||||||
GEMINI_ARGS=(--prompt-interactive "$PROMPT")
|
GEMINI_ARGS=(--prompt-interactive "$PROMPT")
|
||||||
else
|
else
|
||||||
printf "Starting Gemini CLI in interactive mode.\n"
|
printf "Starting Gemini CLI in interactive mode.\n"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user