Files
code-tools/terraform/scripts.tf
2025-09-29 14:14:30 +00:00

151 lines
4.7 KiB
HCL

locals {
core_scripts = {
workspace = {
display = "Setup Development Workspace"
icon = "/icon/container.svg"
path = "${path.module}/scripts/workspace-setup.sh"
order = 1
blocks_login = true
}
dev_tools = {
display = "Install Development Tools"
icon = "/icon/code.svg"
path = "${path.module}/scripts/dev-tools.sh"
order = 2
blocks_login = true
}
terminal_tools = {
display = "Install Terminal Tools"
icon = "/icon/terminal.svg"
path = "${path.module}/scripts/terminal-tools.sh"
order = 3
blocks_login = false
}
git_hooks = {
display = "Configure Git Hooks"
icon = "/icon/git.svg"
path = "${path.module}/scripts/git-hooks.sh"
order = 4
blocks_login = false
}
}
ai_scripts = {
claude = {
enabled = data.coder_parameter.enable_ai_tools.value && var.install_claude_code
display = "Install Claude CLI"
icon = "/icon/claude.svg"
path = "${path.module}/scripts/claude-install.sh"
blocks_login = false
}
codex = {
enabled = data.coder_parameter.enable_ai_tools.value && var.install_codex_support
display = "Install Codex CLI"
icon = "/icon/openai.svg"
path = "${path.module}/scripts/codex-setup.sh"
blocks_login = false
}
gemini = {
enabled = data.coder_parameter.enable_ai_tools.value && var.install_gemini_support
display = "Install Gemini CLI"
icon = "/icon/google.svg"
path = "${path.module}/scripts/gemini-setup.sh"
blocks_login = false
}
cursor = {
enabled = data.coder_parameter.enable_ai_tools.value && var.install_cursor_support
display = "Configure Cursor"
icon = "/icon/cursor.svg"
path = "${path.module}/scripts/cursor-setup.sh"
blocks_login = false
}
windsurf = {
enabled = data.coder_parameter.enable_ai_tools.value && var.install_windsurf_support
display = "Configure Windsurf"
icon = "/icon/windsurf.svg"
path = "${path.module}/scripts/windsurf-setup.sh"
blocks_login = false
}
}
}
resource "coder_script" "core" {
for_each = local.core_scripts
agent_id = coder_agent.main.id
display_name = each.value.display
icon = each.value.icon
run_on_start = true
start_blocks_login = each.value.blocks_login
script = <<-EOT
set -euo pipefail
script_file=$(mktemp)
echo '${base64encode(file(each.value.path))}' | base64 -d | tr -d '\r' > "$script_file"
chmod +x "$script_file"
export PATH="/home/coder/.venv/bin:/home/coder/.local/bin:/home/coder/bin:/home/coder/.cargo/bin:/usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH"
current_nvm=$(printenv NVM_DIR 2>/dev/null || true)
if [ -z "$current_nvm" ]; then
NVM_DIR=/usr/local/share/nvm
else
NVM_DIR="$current_nvm"
fi
export NVM_DIR
if [ -d "$NVM_DIR" ]; then
if [ -s "$NVM_DIR/nvm.sh" ]; then
# shellcheck disable=SC1090,SC1091
. "$NVM_DIR/nvm.sh" >/dev/null 2>&1 || true
fi
shopt -s nullglob
for node_bin in "$NVM_DIR"/versions/node/*/bin; do
PATH="$node_bin:$PATH"
done
shopt -u nullglob
fi
"$script_file"
EOT
}
resource "coder_script" "ai" {
for_each = { for key, value in local.ai_scripts : key => value if value.enabled }
agent_id = coder_agent.main.id
display_name = each.value.display
icon = each.value.icon
run_on_start = true
start_blocks_login = each.value.blocks_login
script = <<-EOT
set -euo pipefail
script_file=$(mktemp)
echo '${base64encode(file(each.value.path))}' | base64 -d | tr -d '\r' > "$script_file"
chmod +x "$script_file"
export PATH="/home/coder/.venv/bin:/home/coder/.local/bin:/home/coder/bin:/home/coder/.cargo/bin:/usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:$PATH"
current_nvm=$(printenv NVM_DIR 2>/dev/null || true)
if [ -z "$current_nvm" ]; then
NVM_DIR=/usr/local/share/nvm
else
NVM_DIR="$current_nvm"
fi
export NVM_DIR
if [ -d "$NVM_DIR" ]; then
if [ -s "$NVM_DIR/nvm.sh" ]; then
# shellcheck disable=SC1090,SC1091
. "$NVM_DIR/nvm.sh" >/dev/null 2>&1 || true
fi
shopt -s nullglob
for node_bin in "$NVM_DIR"/versions/node/*/bin; do
PATH="$node_bin:$PATH"
done
shopt -u nullglob
fi
"$script_file"
EOT
}