mirror of
https://github.com/coder/registry.git
synced 2026-06-03 13:08:14 +00:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7c4ef92c8c | |||
| 7b84d916e1 | |||
| dd412fbf34 | |||
| faff2be207 | |||
| 6acded53f6 | |||
| f3c24af1db |
@@ -11,7 +11,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Run check.sh
|
||||
run: |
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
- name: Detect changed files
|
||||
uses: dorny/paths-filter@v3
|
||||
id: filter
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
- name: Install Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
with:
|
||||
@@ -93,7 +93,7 @@ jobs:
|
||||
needs: validate-style
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v6
|
||||
with:
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
- name: Authenticate with Google Cloud
|
||||
uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093
|
||||
with:
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
name: lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/setup-go@v6
|
||||
with:
|
||||
go-version: stable
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
issues: write
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg width='240' height='300' viewBox='0 0 240 300' fill='none' xmlns='http://www.w3.org/2000/svg'><g clip-path='url(#clip0_1401_86283)'><mask id='mask0_1401_86283' style='mask-type:luminance' maskUnits='userSpaceOnUse' x='0' y='0' width='240' height='300'><path d='M240 0H0V300H240V0Z' fill='white'/></mask><g mask='url(#mask0_1401_86283)'><path d='M180 240H60V120H180V240Z' fill='#4B4646'/><path d='M180 60H60V240H180V60ZM240 300H0V0H240V300Z' fill='#F1ECEC'/></g></g><defs><clipPath id='clip0_1401_86283'><rect width='240' height='300' fill='white'/></clipPath></defs></svg>
|
||||
|
After Width: | Height: | Size: 577 B |
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 440 440">
|
||||
<g id="Layer_6" data-name="Layer 6">
|
||||
<rect x="12" y="12" width="416" height="416" rx="103" ry="103" fill="#3a78b1" stroke-width="0"/>
|
||||
</g>
|
||||
<g id="Layer_8" data-name="Layer 8">
|
||||
<path d="M83.6,373.6v-178.6c0-63,52.4-143.7,142.7-143.7s144.1,69.7,144.1,141.1c0,122.6-116.6,143.1-116.6,143.1,0,0,7.2-11.5,7.2-29.5s-8-28-8-28c0,0,60-16,60-87s-53-83-86-83c-57,0-88.3,48.5-88.3,84.3v181.9c0,25.9-17.5,23.9-17.5,23.9h-19.2s-18.4,0-18.4-24.4Z" fill="#fff" stroke-width="0"/>
|
||||
</g>
|
||||
<g id="Layer_9" data-name="Layer 9">
|
||||
<circle cx="204.9" cy="306.6" r="48" fill="#fff" stroke-width="0"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 727 B |
@@ -39,7 +39,7 @@ module "cursor" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/cursor/coder"
|
||||
version = "1.0.19"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Run the [Goose](https://block.github.io/goose/) agent in your workspace to gener
|
||||
module "goose" {
|
||||
source = "registry.coder.com/coder/goose/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder"
|
||||
install_goose = true
|
||||
goose_version = "v1.0.16"
|
||||
@@ -40,7 +40,7 @@ module "coder-login" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/coder-login/coder"
|
||||
version = "1.0.15"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
variable "anthropic_api_key" {
|
||||
@@ -82,7 +82,7 @@ module "goose" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/goose/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder"
|
||||
install_goose = true
|
||||
goose_version = "v1.0.16"
|
||||
@@ -110,7 +110,7 @@ Run Goose as a standalone app in your workspace. This will install Goose and run
|
||||
module "goose" {
|
||||
source = "registry.coder.com/coder/goose/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder"
|
||||
install_goose = true
|
||||
goose_version = "v1.0.16"
|
||||
|
||||
@@ -31,7 +31,7 @@ module "MODULE_NAME" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/NAMESPACE/MODULE_NAME/coder"
|
||||
version = "1.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
extensions = [
|
||||
"dracula-theme.theme-dracula"
|
||||
]
|
||||
@@ -49,7 +49,7 @@ module "MODULE_NAME" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/NAMESPACE/MODULE_NAME/coder"
|
||||
version = "1.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
extensions = ["dracula-theme.theme-dracula"]
|
||||
settings = {
|
||||
"workbench.colorTheme" = "Dracula"
|
||||
@@ -65,7 +65,7 @@ Run code-server in the background, don't fetch it from GitHub:
|
||||
module "MODULE_NAME" {
|
||||
source = "registry.coder.com/NAMESPACE/MODULE_NAME/coder"
|
||||
version = "1.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
offline = true
|
||||
}
|
||||
```
|
||||
|
||||
@@ -17,7 +17,7 @@ It can be served on a Coder subdomain for easy access, or on `localhost` if you
|
||||
module "pgadmin" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/AJ0070/pgadmin/coder"
|
||||
version = "1.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,8 +14,8 @@ Launches RustDesk within your workspace with a virtual display to provide remote
|
||||
module "rustdesk" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/BenraouaneSoufiane/rustdesk/coder"
|
||||
version = "1.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -41,8 +41,8 @@ module "rustdesk" {
|
||||
module "rustdesk" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/BenraouaneSoufiane/rustdesk/coder"
|
||||
version = "1.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
rustdesk_password = "mycustompass"
|
||||
xvfb_resolution = "1920x1080x24"
|
||||
rustdesk_version = "1.4.1"
|
||||
|
||||
@@ -15,8 +15,8 @@ up a default or custom tmux configuration with session save/restore capabilities
|
||||
```tf
|
||||
module "tmux" {
|
||||
source = "registry.coder.com/anomaly/tmux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -39,8 +39,8 @@ module "tmux" {
|
||||
```tf
|
||||
module "tmux" {
|
||||
source = "registry.coder.com/anomaly/tmux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
tmux_config = "" # Optional: custom tmux.conf content
|
||||
save_interval = 1 # Optional: save interval in minutes
|
||||
sessions = ["default", "dev", "ops"] # Optional: list of tmux sessions
|
||||
@@ -78,7 +78,7 @@ This module can provision multiple tmux sessions, each as a separate app in the
|
||||
```tf
|
||||
module "tmux" {
|
||||
source = "registry.coder.com/anomaly/tmux/coder"
|
||||
version = "1.0.1"
|
||||
version = "1.0.2"
|
||||
agent_id = var.agent_id
|
||||
sessions = ["default", "dev", "anomaly"]
|
||||
tmux_config = <<-EOT
|
||||
|
||||
@@ -14,8 +14,8 @@ This module installs small, robust scripts in your workspace to create and extra
|
||||
module "archive" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/archive/coder"
|
||||
version = "0.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
|
||||
paths = ["./projects", "./code"]
|
||||
}
|
||||
@@ -43,8 +43,8 @@ Basic example:
|
||||
module "archive" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/archive/coder"
|
||||
version = "0.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
|
||||
# Paths to include in the archive (files or directories).
|
||||
directory = "~"
|
||||
@@ -61,8 +61,8 @@ Customize compression and output:
|
||||
module "archive" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/archive/coder"
|
||||
version = "0.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
|
||||
directory = "/"
|
||||
paths = ["/etc", "/home"]
|
||||
@@ -78,8 +78,8 @@ Enable auto-archive on stop:
|
||||
module "archive" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/archive/coder"
|
||||
version = "0.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
|
||||
# Creates /tmp/coder-archive.tar.gz of the users home directory (defaults).
|
||||
create_on_stop = true
|
||||
@@ -92,8 +92,8 @@ Extract on start:
|
||||
module "archive" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/archive/coder"
|
||||
version = "0.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
|
||||
# Where to look for the archive file to extract:
|
||||
output_dir = "/tmp"
|
||||
|
||||
@@ -13,8 +13,8 @@ Run Auggie CLI in your workspace to access Augment's AI coding assistant with ad
|
||||
```tf
|
||||
module "auggie" {
|
||||
source = "registry.coder.com/coder-labs/auggie/coder"
|
||||
version = "0.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -42,13 +42,13 @@ module "coder-login" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/coder-login/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
module "auggie" {
|
||||
source = "registry.coder.com/coder-labs/auggie/coder"
|
||||
version = "0.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
|
||||
# Authentication
|
||||
@@ -74,6 +74,7 @@ EOF # Required for tasks
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/coder/project"]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
EOF
|
||||
@@ -103,8 +104,8 @@ EOF
|
||||
```tf
|
||||
module "auggie" {
|
||||
source = "registry.coder.com/coder-labs/auggie/coder"
|
||||
version = "0.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
|
||||
# Multiple MCP configuration files
|
||||
@@ -127,6 +128,7 @@ module "auggie" {
|
||||
],
|
||||
"timeout": 600
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
@@ -13,8 +13,8 @@ Run Codex CLI in your workspace to access OpenAI's models through the Codex inte
|
||||
```tf
|
||||
module "codex" {
|
||||
source = "registry.coder.com/coder-labs/codex/coder"
|
||||
version = "3.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
openai_api_key = var.openai_api_key
|
||||
workdir = "/home/coder/project"
|
||||
}
|
||||
@@ -33,8 +33,8 @@ module "codex" {
|
||||
module "codex" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/codex/coder"
|
||||
version = "3.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
openai_api_key = "..."
|
||||
workdir = "/home/coder/project"
|
||||
report_tasks = false
|
||||
@@ -56,13 +56,13 @@ module "coder-login" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/coder-login/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
module "codex" {
|
||||
source = "registry.coder.com/coder-labs/codex/coder"
|
||||
version = "3.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
openai_api_key = "..."
|
||||
ai_prompt = data.coder_parameter.ai_prompt.value
|
||||
workdir = "/home/coder/project"
|
||||
@@ -108,7 +108,7 @@ For custom Codex configuration, use `base_config_toml` and/or `additional_mcp_se
|
||||
```tf
|
||||
module "codex" {
|
||||
source = "registry.coder.com/coder-labs/codex/coder"
|
||||
version = "3.1.0"
|
||||
version = "3.1.1"
|
||||
# ... other variables ...
|
||||
|
||||
# Override default configuration
|
||||
|
||||
@@ -13,8 +13,8 @@ Run [GitHub Copilot CLI](https://docs.github.com/copilot/concepts/agents/about-c
|
||||
```tf
|
||||
module "copilot" {
|
||||
source = "registry.coder.com/coder-labs/copilot/coder"
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/projects"
|
||||
}
|
||||
```
|
||||
@@ -51,8 +51,8 @@ data "coder_parameter" "ai_prompt" {
|
||||
|
||||
module "copilot" {
|
||||
source = "registry.coder.com/coder-labs/copilot/coder"
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/projects"
|
||||
|
||||
ai_prompt = data.coder_parameter.ai_prompt.value
|
||||
@@ -71,8 +71,8 @@ Customize tool permissions, MCP servers, and Copilot settings:
|
||||
```tf
|
||||
module "copilot" {
|
||||
source = "registry.coder.com/coder-labs/copilot/coder"
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/projects"
|
||||
|
||||
# Version pinning (defaults to "latest", use specific version if desired)
|
||||
@@ -101,6 +101,7 @@ module "copilot" {
|
||||
tools = ["*"]
|
||||
trust = true
|
||||
}
|
||||
|
||||
playwright = {
|
||||
command = "npx"
|
||||
args = ["-y", "@playwright/mcp@latest", "--headless", "--isolated"]
|
||||
@@ -142,8 +143,8 @@ variable "github_token" {
|
||||
|
||||
module "copilot" {
|
||||
source = "registry.coder.com/coder-labs/copilot/coder"
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/projects"
|
||||
github_token = var.github_token
|
||||
}
|
||||
@@ -156,8 +157,8 @@ Run Copilot as a command-line tool without task reporting or web interface. This
|
||||
```tf
|
||||
module "copilot" {
|
||||
source = "registry.coder.com/coder-labs/copilot/coder"
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
report_tasks = false
|
||||
cli_app = true
|
||||
|
||||
@@ -13,8 +13,8 @@ Run the Cursor Agent CLI in your workspace for interactive coding assistance and
|
||||
```tf
|
||||
module "cursor_cli" {
|
||||
source = "registry.coder.com/coder-labs/cursor-cli/coder"
|
||||
version = "0.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -42,8 +42,8 @@ module "coder-login" {
|
||||
|
||||
module "cursor_cli" {
|
||||
source = "registry.coder.com/coder-labs/cursor-cli/coder"
|
||||
version = "0.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
|
||||
# Optional
|
||||
@@ -60,6 +60,7 @@ module "cursor_cli" {
|
||||
command = "npx"
|
||||
args = ["-y", "@playwright/mcp@latest", "--headless", "--isolated", "--no-sandbox"]
|
||||
}
|
||||
|
||||
desktop-commander = {
|
||||
command = "npx"
|
||||
args = ["-y", "@wonderwhy-er/desktop-commander"]
|
||||
|
||||
@@ -13,8 +13,8 @@ Run [Gemini CLI](https://github.com/google-gemini/gemini-cli) in your workspace
|
||||
```tf
|
||||
module "gemini" {
|
||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||
version = "2.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -46,8 +46,8 @@ variable "gemini_api_key" {
|
||||
|
||||
module "gemini" {
|
||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||
version = "2.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
gemini_api_key = var.gemini_api_key
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
@@ -80,7 +80,7 @@ module "coder-login" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/coder-login/coder"
|
||||
version = "~> 1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
data "coder_parameter" "ai_prompt" {
|
||||
@@ -94,8 +94,8 @@ data "coder_parameter" "ai_prompt" {
|
||||
module "gemini" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||
version = "2.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
gemini_api_key = var.gemini_api_key
|
||||
gemini_model = "gemini-2.5-flash"
|
||||
folder = "/home/coder/project"
|
||||
@@ -118,8 +118,8 @@ For enterprise users who prefer Google's Vertex AI platform:
|
||||
```tf
|
||||
module "gemini" {
|
||||
source = "registry.coder.com/coder-labs/gemini/coder"
|
||||
version = "2.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
gemini_api_key = var.gemini_api_key
|
||||
folder = "/home/coder/project"
|
||||
use_vertexai = true
|
||||
|
||||
@@ -16,7 +16,7 @@ A module that adds Nextflow to your Coder template.
|
||||
module "nextflow" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/nextflow/coder"
|
||||
version = "0.9.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.9.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
---
|
||||
display_name: OpenCode
|
||||
icon: ../../../../.icons/opencode.svg
|
||||
description: Run OpenCode AI coding assistant for AI-powered terminal assistance
|
||||
verified: false
|
||||
tags: [agent, opencode, ai, tasks]
|
||||
---
|
||||
|
||||
# OpenCode
|
||||
|
||||
Run [OpenCode](https://opencode.ai) AI coding assistant in your workspace for intelligent code generation, analysis, and development assistance. This module integrates with [AgentAPI](https://github.com/coder/agentapi) for seamless task reporting in the Coder UI.
|
||||
|
||||
```tf
|
||||
module "opencode" {
|
||||
source = "registry.coder.com/coder-labs/opencode/coder"
|
||||
version = "0.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- **Authentication credentials** - OpenCode auth.json file is required for non-interactive authentication, you can find this file on your system: `$HOME/.local/share/opencode/auth.json`
|
||||
|
||||
## Examples
|
||||
|
||||
### Basic Usage with Tasks
|
||||
|
||||
```tf
|
||||
resource "coder_ai_task" "task" {
|
||||
app_id = module.opencode.task_app_id
|
||||
}
|
||||
|
||||
module "opencode" {
|
||||
source = "registry.coder.com/coder-labs/opencode/coder"
|
||||
version = "0.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/project"
|
||||
|
||||
ai_prompt = coder_ai_task.task.prompt
|
||||
|
||||
auth_json = <<-EOT
|
||||
{
|
||||
"google": {
|
||||
"type": "api",
|
||||
"key": "gem-xxx-xxxx"
|
||||
},
|
||||
"anthropic": {
|
||||
"type": "api",
|
||||
"key": "sk-ant-api03-xxx-xxxxxxx"
|
||||
}
|
||||
|
||||
}
|
||||
EOT
|
||||
|
||||
config_json = jsonencode({
|
||||
"$schema" = "https://opencode.ai/config.json"
|
||||
mcp = {
|
||||
filesystem = {
|
||||
command = ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/home/coder/projects"]
|
||||
enabled = true
|
||||
type = "local"
|
||||
environment = {
|
||||
SOME_VARIABLE_X = "value"
|
||||
}
|
||||
}
|
||||
playwright = {
|
||||
command = ["npx", "-y", "@playwright/mcp@latest", "--headless", "--isolated"]
|
||||
enabled = true
|
||||
type = "local"
|
||||
}
|
||||
}
|
||||
model = "anthropic/claude-sonnet-4-20250514"
|
||||
})
|
||||
|
||||
pre_install_script = <<-EOT
|
||||
#!/bin/bash
|
||||
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
EOT
|
||||
}
|
||||
```
|
||||
|
||||
### Standalone CLI Mode
|
||||
|
||||
Run OpenCode as a command-line tool without web interface or task reporting:
|
||||
|
||||
```tf
|
||||
module "opencode" {
|
||||
source = "registry.coder.com/coder-labs/opencode/coder"
|
||||
version = "0.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
report_tasks = false
|
||||
cli_app = true
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If you encounter any issues, check the log files in the `~/.opencode-module` directory within your workspace for detailed information.
|
||||
|
||||
## References
|
||||
|
||||
- [Opencode JSON Config](https://opencode.ai/docs/config/)
|
||||
- [OpenCode Documentation](https://opencode.ai/docs)
|
||||
- [AgentAPI Documentation](https://github.com/coder/agentapi)
|
||||
- [Coder AI Agents Guide](https://coder.com/docs/tutorials/ai-agents)
|
||||
@@ -0,0 +1,362 @@
|
||||
import {
|
||||
test,
|
||||
afterEach,
|
||||
describe,
|
||||
setDefaultTimeout,
|
||||
beforeAll,
|
||||
expect,
|
||||
} from "bun:test";
|
||||
import { execContainer, readFileContainer, runTerraformInit } from "~test";
|
||||
import {
|
||||
loadTestFile,
|
||||
writeExecutable,
|
||||
setup as setupUtil,
|
||||
execModuleScript,
|
||||
expectAgentAPIStarted,
|
||||
} from "../../../coder/modules/agentapi/test-util";
|
||||
import dedent from "dedent";
|
||||
|
||||
let cleanupFunctions: (() => Promise<void>)[] = [];
|
||||
const registerCleanup = (cleanup: () => Promise<void>) => {
|
||||
cleanupFunctions.push(cleanup);
|
||||
};
|
||||
afterEach(async () => {
|
||||
const cleanupFnsCopy = cleanupFunctions.slice().reverse();
|
||||
cleanupFunctions = [];
|
||||
for (const cleanup of cleanupFnsCopy) {
|
||||
try {
|
||||
await cleanup();
|
||||
} catch (error) {
|
||||
console.error("Error during cleanup:", error);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
interface SetupProps {
|
||||
skipAgentAPIMock?: boolean;
|
||||
skipOpencodeMock?: boolean;
|
||||
moduleVariables?: Record<string, string>;
|
||||
agentapiMockScript?: string;
|
||||
}
|
||||
|
||||
const setup = async (props?: SetupProps): Promise<{ id: string }> => {
|
||||
const projectDir = "/home/coder/project";
|
||||
const { id } = await setupUtil({
|
||||
moduleDir: import.meta.dir,
|
||||
moduleVariables: {
|
||||
install_opencode: props?.skipOpencodeMock ? "true" : "false",
|
||||
install_agentapi: props?.skipAgentAPIMock ? "true" : "false",
|
||||
workdir: projectDir,
|
||||
...props?.moduleVariables,
|
||||
},
|
||||
registerCleanup,
|
||||
projectDir,
|
||||
skipAgentAPIMock: props?.skipAgentAPIMock,
|
||||
agentapiMockScript: props?.agentapiMockScript,
|
||||
});
|
||||
if (!props?.skipOpencodeMock) {
|
||||
await writeExecutable({
|
||||
containerId: id,
|
||||
filePath: "/usr/bin/opencode",
|
||||
content: await loadTestFile(import.meta.dir, "opencode-mock.sh"),
|
||||
});
|
||||
}
|
||||
return { id };
|
||||
};
|
||||
|
||||
setDefaultTimeout(60 * 1000);
|
||||
|
||||
describe("opencode", async () => {
|
||||
beforeAll(async () => {
|
||||
await runTerraformInit(import.meta.dir);
|
||||
});
|
||||
|
||||
test("happy-path", async () => {
|
||||
const { id } = await setup();
|
||||
await execModuleScript(id);
|
||||
await expectAgentAPIStarted(id);
|
||||
});
|
||||
|
||||
test("install-opencode-version", async () => {
|
||||
const version_to_install = "0.1.0";
|
||||
const { id } = await setup({
|
||||
skipOpencodeMock: true,
|
||||
moduleVariables: {
|
||||
install_opencode: "true",
|
||||
opencode_version: version_to_install,
|
||||
pre_install_script: dedent`
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Mock the opencode install for testing
|
||||
mkdir -p /home/coder/.opencode/bin
|
||||
echo '#!/bin/bash\necho "opencode mock version ${version_to_install}"' > /home/coder/.opencode/bin/opencode
|
||||
chmod +x /home/coder/.opencode/bin/opencode
|
||||
`,
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
const resp = await execContainer(id, [
|
||||
"bash",
|
||||
"-c",
|
||||
`cat /home/coder/.opencode-module/install.log`,
|
||||
]);
|
||||
expect(resp.stdout).toContain(version_to_install);
|
||||
});
|
||||
|
||||
test("check-latest-opencode-version-works", async () => {
|
||||
const { id } = await setup({
|
||||
skipOpencodeMock: true,
|
||||
skipAgentAPIMock: true,
|
||||
moduleVariables: {
|
||||
install_opencode: "true",
|
||||
pre_install_script: dedent`
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Mock the opencode install for testing
|
||||
mkdir -p /home/coder/.opencode/bin
|
||||
echo '#!/bin/bash\necho "opencode mock latest version"' > /home/coder/.opencode/bin/opencode
|
||||
chmod +x /home/coder/.opencode/bin/opencode
|
||||
`,
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
await expectAgentAPIStarted(id);
|
||||
});
|
||||
|
||||
test("opencode-auth-json", async () => {
|
||||
const authJson = JSON.stringify({
|
||||
token: "test-auth-token-123",
|
||||
user: "test-user",
|
||||
});
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
auth_json: authJson,
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const authFile = await readFileContainer(
|
||||
id,
|
||||
"/home/coder/.local/share/opencode/auth.json",
|
||||
);
|
||||
|
||||
expect(authFile).toContain("test-auth-token-123");
|
||||
expect(authFile).toContain("test-user");
|
||||
});
|
||||
|
||||
test("opencode-config-json", async () => {
|
||||
const configJson = JSON.stringify({
|
||||
$schema: "https://opencode.ai/config.json",
|
||||
mcp: {
|
||||
test: {
|
||||
command: ["test-cmd"],
|
||||
type: "local",
|
||||
},
|
||||
},
|
||||
model: "anthropic/claude-sonnet-4-20250514",
|
||||
});
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
config_json: configJson,
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const configFile = await readFileContainer(
|
||||
id,
|
||||
"/home/coder/.config/opencode/opencode.json",
|
||||
);
|
||||
expect(configFile).toContain("test-cmd");
|
||||
expect(configFile).toContain("anthropic/claude-sonnet-4-20250514");
|
||||
});
|
||||
|
||||
test("opencode-ai-prompt", async () => {
|
||||
const prompt = "This is a task prompt for OpenCode.";
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
ai_prompt: prompt,
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const resp = await execContainer(id, [
|
||||
"bash",
|
||||
"-c",
|
||||
`cat /home/coder/.opencode-module/agentapi-start.log`,
|
||||
]);
|
||||
expect(resp.stdout).toContain(prompt);
|
||||
});
|
||||
|
||||
test("opencode-continue-flag", async () => {
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
continue: "true",
|
||||
ai_prompt: "test prompt",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const startLog = await execContainer(id, [
|
||||
"bash",
|
||||
"-c",
|
||||
"cat /home/coder/.opencode-module/agentapi-start.log",
|
||||
]);
|
||||
expect(startLog.stdout).toContain("--continue");
|
||||
});
|
||||
|
||||
test("opencode-continue-with-session-id", async () => {
|
||||
const sessionId = "session-123";
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
continue: "true",
|
||||
session_id: sessionId,
|
||||
ai_prompt: "test prompt",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const startLog = await execContainer(id, [
|
||||
"bash",
|
||||
"-c",
|
||||
"cat /home/coder/.opencode-module/agentapi-start.log",
|
||||
]);
|
||||
expect(startLog.stdout).toContain("--continue");
|
||||
expect(startLog.stdout).toContain(`--session ${sessionId}`);
|
||||
});
|
||||
|
||||
test("opencode-session-id", async () => {
|
||||
const sessionId = "session-123";
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
session_id: sessionId,
|
||||
ai_prompt: "test prompt",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const startLog = await execContainer(id, [
|
||||
"bash",
|
||||
"-c",
|
||||
"cat /home/coder/.opencode-module/agentapi-start.log",
|
||||
]);
|
||||
expect(startLog.stdout).toContain(`--session ${sessionId}`);
|
||||
});
|
||||
|
||||
test("opencode-report-tasks-enabled", async () => {
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
report_tasks: "true",
|
||||
ai_prompt: "test prompt",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const startLog = await execContainer(id, [
|
||||
"bash",
|
||||
"-c",
|
||||
"cat /home/coder/.opencode-module/agentapi-start.log",
|
||||
]);
|
||||
expect(startLog.stdout).toContain(
|
||||
"report your progress using coder_report_task",
|
||||
);
|
||||
});
|
||||
|
||||
test("opencode-report-tasks-disabled", async () => {
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
report_tasks: "false",
|
||||
ai_prompt: "test prompt",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const startLog = await execContainer(id, [
|
||||
"bash",
|
||||
"-c",
|
||||
"cat /home/coder/.opencode-module/agentapi-start.log",
|
||||
]);
|
||||
expect(startLog.stdout).not.toContain(
|
||||
"report your progress using coder_report_task",
|
||||
);
|
||||
});
|
||||
|
||||
test("cli-app-creation", async () => {
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
cli_app: "true",
|
||||
cli_app_display_name: "OpenCode Terminal",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
// CLI app creation is handled by the agentapi module
|
||||
// We just verify the setup completed successfully
|
||||
await expectAgentAPIStarted(id);
|
||||
});
|
||||
|
||||
test("pre-post-install-scripts", async () => {
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
pre_install_script: "#!/bin/bash\necho 'opencode-pre-install-script'",
|
||||
post_install_script: "#!/bin/bash\necho 'opencode-post-install-script'",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const preInstallLog = await readFileContainer(
|
||||
id,
|
||||
"/home/coder/.opencode-module/pre_install.log",
|
||||
);
|
||||
expect(preInstallLog).toContain("opencode-pre-install-script");
|
||||
|
||||
const postInstallLog = await readFileContainer(
|
||||
id,
|
||||
"/home/coder/.opencode-module/post_install.log",
|
||||
);
|
||||
expect(postInstallLog).toContain("opencode-post-install-script");
|
||||
});
|
||||
|
||||
test("workdir-variable", async () => {
|
||||
const workdir = "/home/coder/opencode-test-folder";
|
||||
const { id } = await setup({
|
||||
skipOpencodeMock: false,
|
||||
moduleVariables: {
|
||||
workdir,
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
|
||||
const resp = await readFileContainer(
|
||||
id,
|
||||
"/home/coder/.opencode-module/agentapi-start.log",
|
||||
);
|
||||
expect(resp).toContain(workdir);
|
||||
});
|
||||
|
||||
test("subdomain-enabled", async () => {
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
subdomain: "true",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
// Subdomain configuration is handled by the agentapi module
|
||||
// We just verify the setup completed successfully
|
||||
await expectAgentAPIStarted(id);
|
||||
});
|
||||
|
||||
test("custom-display-names", async () => {
|
||||
const { id } = await setup({
|
||||
moduleVariables: {
|
||||
web_app_display_name: "Custom OpenCode Web",
|
||||
cli_app_display_name: "Custom OpenCode CLI",
|
||||
cli_app: "true",
|
||||
},
|
||||
});
|
||||
await execModuleScript(id);
|
||||
// Display names are handled by the agentapi module
|
||||
// We just verify the setup completed successfully
|
||||
await expectAgentAPIStarted(id);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,203 @@
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = ">= 2.12"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
variable "agent_id" {
|
||||
type = string
|
||||
description = "The ID of a Coder agent."
|
||||
}
|
||||
|
||||
data "coder_workspace" "me" {}
|
||||
|
||||
data "coder_workspace_owner" "me" {}
|
||||
|
||||
variable "order" {
|
||||
type = number
|
||||
description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "group" {
|
||||
type = string
|
||||
description = "The name of a group that this app belongs to."
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "icon" {
|
||||
type = string
|
||||
description = "The icon to use for the app."
|
||||
default = "/icon/opencode.svg"
|
||||
}
|
||||
|
||||
variable "workdir" {
|
||||
type = string
|
||||
description = "The folder to run OpenCode in."
|
||||
}
|
||||
|
||||
variable "report_tasks" {
|
||||
type = bool
|
||||
description = "Whether to enable task reporting to Coder UI via AgentAPI"
|
||||
default = true
|
||||
}
|
||||
|
||||
variable "cli_app" {
|
||||
type = bool
|
||||
description = "Whether to create a CLI app for OpenCode"
|
||||
default = false
|
||||
}
|
||||
|
||||
variable "web_app_display_name" {
|
||||
type = string
|
||||
description = "Display name for the web app"
|
||||
default = "OpenCode"
|
||||
}
|
||||
|
||||
variable "cli_app_display_name" {
|
||||
type = string
|
||||
description = "Display name for the CLI app"
|
||||
default = "OpenCode CLI"
|
||||
}
|
||||
|
||||
variable "pre_install_script" {
|
||||
type = string
|
||||
description = "Custom script to run before installing OpenCode."
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "post_install_script" {
|
||||
type = string
|
||||
description = "Custom script to run after installing OpenCode."
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "install_agentapi" {
|
||||
type = bool
|
||||
description = "Whether to install AgentAPI."
|
||||
default = true
|
||||
}
|
||||
|
||||
variable "agentapi_version" {
|
||||
type = string
|
||||
description = "The version of AgentAPI to install."
|
||||
default = "v0.11.2"
|
||||
}
|
||||
|
||||
variable "ai_prompt" {
|
||||
type = string
|
||||
description = "Initial task prompt for OpenCode."
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "subdomain" {
|
||||
type = bool
|
||||
description = "Whether to use a subdomain for AgentAPI."
|
||||
default = false
|
||||
}
|
||||
|
||||
variable "install_opencode" {
|
||||
type = bool
|
||||
description = "Whether to install OpenCode."
|
||||
default = true
|
||||
}
|
||||
|
||||
variable "opencode_version" {
|
||||
type = string
|
||||
description = "The version of OpenCode to install."
|
||||
default = "latest"
|
||||
}
|
||||
|
||||
variable "continue" {
|
||||
type = bool
|
||||
description = "continue the last session. Uses the --continue flag"
|
||||
default = false
|
||||
}
|
||||
|
||||
variable "session_id" {
|
||||
type = string
|
||||
description = "Session id to continue. Passed via --session"
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "auth_json" {
|
||||
type = string
|
||||
description = "Your auth.json from $HOME/.local/share/opencode/auth.json, Required for non-interactive authentication"
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "config_json" {
|
||||
type = string
|
||||
description = "OpenCode JSON config. https://opencode.ai/docs/config/"
|
||||
default = ""
|
||||
}
|
||||
|
||||
locals {
|
||||
workdir = trimsuffix(var.workdir, "/")
|
||||
app_slug = "opencode"
|
||||
install_script = file("${path.module}/scripts/install.sh")
|
||||
start_script = file("${path.module}/scripts/start.sh")
|
||||
module_dir_name = ".opencode-module"
|
||||
}
|
||||
|
||||
module "agentapi" {
|
||||
source = "registry.coder.com/coder/agentapi/coder"
|
||||
version = "2.0.0"
|
||||
|
||||
agent_id = var.agent_id
|
||||
web_app_slug = local.app_slug
|
||||
web_app_order = var.order
|
||||
web_app_group = var.group
|
||||
web_app_icon = var.icon
|
||||
web_app_display_name = var.web_app_display_name
|
||||
cli_app = var.cli_app
|
||||
cli_app_slug = var.cli_app ? "${local.app_slug}-cli" : null
|
||||
cli_app_display_name = var.cli_app ? var.cli_app_display_name : null
|
||||
agentapi_subdomain = var.subdomain
|
||||
folder = local.workdir
|
||||
module_dir_name = local.module_dir_name
|
||||
install_agentapi = var.install_agentapi
|
||||
agentapi_version = var.agentapi_version
|
||||
pre_install_script = var.pre_install_script
|
||||
post_install_script = var.post_install_script
|
||||
start_script = <<-EOT
|
||||
#!/bin/bash
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh
|
||||
chmod +x /tmp/start.sh
|
||||
|
||||
ARG_WORKDIR='${local.workdir}' \
|
||||
ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \
|
||||
ARG_SESSION_ID='${var.session_id}' \
|
||||
ARG_REPORT_TASKS='${var.report_tasks}' \
|
||||
ARG_CONTINUE='${var.continue}' \
|
||||
/tmp/start.sh
|
||||
EOT
|
||||
|
||||
install_script = <<-EOT
|
||||
#!/bin/bash
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
|
||||
echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh
|
||||
chmod +x /tmp/install.sh
|
||||
ARG_OPENCODE_VERSION='${var.opencode_version}' \
|
||||
ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \
|
||||
ARG_INSTALL_OPENCODE='${var.install_opencode}' \
|
||||
ARG_REPORT_TASKS='${var.report_tasks}' \
|
||||
ARG_WORKDIR='${local.workdir}' \
|
||||
ARG_AUTH_JSON='${var.auth_json != null ? base64encode(replace(var.auth_json, "'", "'\\''")) : ""}' \
|
||||
ARG_OPENCODE_CONFIG='${var.config_json != null ? base64encode(replace(var.config_json, "'", "'\\''")) : ""}' \
|
||||
/tmp/install.sh
|
||||
EOT
|
||||
}
|
||||
|
||||
output "task_app_id" {
|
||||
value = module.agentapi.task_app_id
|
||||
}
|
||||
@@ -0,0 +1,374 @@
|
||||
run "defaults_are_correct" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.install_opencode == true
|
||||
error_message = "OpenCode installation should be enabled by default"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.install_agentapi == true
|
||||
error_message = "AgentAPI installation should be enabled by default"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.agentapi_version == "v0.11.2"
|
||||
error_message = "Default AgentAPI version should be 'v0.11.2'"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.opencode_version == "latest"
|
||||
error_message = "Default OpenCode version should be 'latest'"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.report_tasks == true
|
||||
error_message = "Task reporting should be enabled by default"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.cli_app == false
|
||||
error_message = "CLI app should be disabled by default"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.subdomain == false
|
||||
error_message = "Subdomain should be disabled by default"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.web_app_display_name == "OpenCode"
|
||||
error_message = "Default web app display name should be 'OpenCode'"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.cli_app_display_name == "OpenCode CLI"
|
||||
error_message = "Default CLI app display name should be 'OpenCode CLI'"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = local.app_slug == "opencode"
|
||||
error_message = "App slug should be 'opencode'"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = local.module_dir_name == ".opencode-module"
|
||||
error_message = "Module dir name should be '.opencode-module'"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = local.workdir == "/home/coder/project"
|
||||
error_message = "Workdir should be trimmed of trailing slash"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.continue == false
|
||||
error_message = "Continue flag should be disabled by default"
|
||||
}
|
||||
}
|
||||
|
||||
run "workdir_trailing_slash_trimmed" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project/"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = local.workdir == "/home/coder/project"
|
||||
error_message = "Workdir should be trimmed of trailing slash"
|
||||
}
|
||||
}
|
||||
|
||||
run "opencode_version_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
opencode_version = "v1.0.0"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.opencode_version == "v1.0.0"
|
||||
error_message = "OpenCode version should be set correctly"
|
||||
}
|
||||
}
|
||||
|
||||
run "agentapi_version_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
agentapi_version = "v0.9.0"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.agentapi_version == "v0.9.0"
|
||||
error_message = "AgentAPI version should be set correctly"
|
||||
}
|
||||
}
|
||||
|
||||
run "cli_app_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
cli_app = true
|
||||
cli_app_display_name = "Custom OpenCode CLI"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.cli_app == true
|
||||
error_message = "CLI app should be enabled when specified"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.cli_app_display_name == "Custom OpenCode CLI"
|
||||
error_message = "Custom CLI app display name should be set"
|
||||
}
|
||||
}
|
||||
|
||||
run "web_app_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
web_app_display_name = "Custom OpenCode Web"
|
||||
order = 5
|
||||
group = "AI Tools"
|
||||
icon = "/custom/icon.svg"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.web_app_display_name == "Custom OpenCode Web"
|
||||
error_message = "Custom web app display name should be set"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.order == 5
|
||||
error_message = "Custom order should be set"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.group == "AI Tools"
|
||||
error_message = "Custom group should be set"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.icon == "/custom/icon.svg"
|
||||
error_message = "Custom icon should be set"
|
||||
}
|
||||
}
|
||||
|
||||
run "ai_configuration_variables" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
ai_prompt = "This is a test prompt"
|
||||
session_id = "session-123"
|
||||
continue = true
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.ai_prompt == "This is a test prompt"
|
||||
error_message = "AI prompt should be set correctly"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.session_id == "session-123"
|
||||
error_message = "Session ID should be set correctly"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.continue == true
|
||||
error_message = "Continue flag should be set correctly"
|
||||
}
|
||||
}
|
||||
|
||||
run "auth_json_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
auth_json = "{\"token\": \"test-token\", \"user\": \"test-user\"}"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.auth_json != ""
|
||||
error_message = "Auth JSON should be set"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = can(jsondecode(var.auth_json))
|
||||
error_message = "Auth JSON should be valid JSON"
|
||||
}
|
||||
}
|
||||
|
||||
run "config_json_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
config_json = "{\"$schema\": \"https://opencode.ai/config.json\", \"mcp\": {\"test\": {\"command\": [\"test-cmd\"], \"type\": \"local\"}}, \"model\": \"anthropic/claude-sonnet-4-20250514\"}"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.config_json != ""
|
||||
error_message = "OpenCode JSON configuration should be set"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = can(jsondecode(var.config_json))
|
||||
error_message = "OpenCode JSON configuration should be valid JSON"
|
||||
}
|
||||
}
|
||||
|
||||
run "task_reporting_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
report_tasks = false
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.report_tasks == false
|
||||
error_message = "Task reporting should be disabled when specified"
|
||||
}
|
||||
}
|
||||
|
||||
run "subdomain_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
subdomain = true
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.subdomain == true
|
||||
error_message = "Subdomain should be enabled when specified"
|
||||
}
|
||||
}
|
||||
|
||||
run "install_flags_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
install_opencode = false
|
||||
install_agentapi = false
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.install_opencode == false
|
||||
error_message = "OpenCode installation should be disabled when specified"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.install_agentapi == false
|
||||
error_message = "AgentAPI installation should be disabled when specified"
|
||||
}
|
||||
}
|
||||
|
||||
run "custom_scripts_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
pre_install_script = "#!/bin/bash\necho 'pre-install'"
|
||||
post_install_script = "#!/bin/bash\necho 'post-install'"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.pre_install_script != null
|
||||
error_message = "Pre-install script should be set"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.post_install_script != null
|
||||
error_message = "Post-install script should be set"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = can(regex("pre-install", var.pre_install_script))
|
||||
error_message = "Pre-install script should contain expected content"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = can(regex("post-install", var.post_install_script))
|
||||
error_message = "Post-install script should contain expected content"
|
||||
}
|
||||
}
|
||||
|
||||
run "empty_variables_handled_correctly" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
ai_prompt = ""
|
||||
session_id = ""
|
||||
auth_json = ""
|
||||
config_json = ""
|
||||
continue = false
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.ai_prompt == ""
|
||||
error_message = "Empty AI prompt should be handled correctly"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.session_id == ""
|
||||
error_message = "Empty session ID should be handled correctly"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.auth_json == ""
|
||||
error_message = "Empty auth JSON should be handled correctly"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.config_json == ""
|
||||
error_message = "Empty config JSON should be handled correctly"
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.continue == false
|
||||
error_message = "Continue flag default should be handled correctly"
|
||||
}
|
||||
}
|
||||
|
||||
run "continue_flag_configuration" {
|
||||
command = plan
|
||||
|
||||
variables {
|
||||
agent_id = "test-agent"
|
||||
workdir = "/home/coder/project"
|
||||
continue = true
|
||||
}
|
||||
|
||||
assert {
|
||||
condition = var.continue == true
|
||||
error_message = "Continue flag should be enabled when specified"
|
||||
}
|
||||
}
|
||||
+131
@@ -0,0 +1,131 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
ARG_WORKDIR=${ARG_WORKDIR:-"$HOME"}
|
||||
ARG_REPORT_TASKS=${ARG_REPORT_TASKS:-true}
|
||||
ARG_MCP_APP_STATUS_SLUG=${ARG_MCP_APP_STATUS_SLUG:-}
|
||||
ARG_OPENCODE_VERSION=${ARG_OPENCODE_VERSION:-latest}
|
||||
ARG_INSTALL_OPENCODE=${ARG_INSTALL_OPENCODE:-true}
|
||||
ARG_AUTH_JSON=$(echo -n "$ARG_AUTH_JSON" | base64 -d 2> /dev/null || echo "")
|
||||
ARG_OPENCODE_CONFIG=$(echo -n "$ARG_OPENCODE_CONFIG" | base64 -d 2> /dev/null || echo "")
|
||||
|
||||
# Print all received environment variables
|
||||
printf "=== INSTALL CONFIG ===\n"
|
||||
printf "ARG_WORKDIR: %s\n" "$ARG_WORKDIR"
|
||||
printf "ARG_REPORT_TASKS: %s\n" "$ARG_REPORT_TASKS"
|
||||
printf "ARG_MCP_APP_STATUS_SLUG: %s\n" "$ARG_MCP_APP_STATUS_SLUG"
|
||||
printf "ARG_OPENCODE_VERSION: %s\n" "$ARG_OPENCODE_VERSION"
|
||||
printf "ARG_INSTALL_OPENCODE: %s\n" "$ARG_INSTALL_OPENCODE"
|
||||
if [ -n "$ARG_AUTH_JSON" ]; then
|
||||
printf "ARG_AUTH_JSON: [AUTH DATA RECEIVED]\n"
|
||||
else
|
||||
printf "ARG_AUTH_JSON: [NOT PROVIDED]\n"
|
||||
fi
|
||||
if [ -n "$ARG_OPENCODE_CONFIG" ]; then
|
||||
printf "ARG_OPENCODE_CONFIG: [RECEIVED]\n"
|
||||
else
|
||||
printf "ARG_OPENCODE_CONFIG: [NOT PROVIDED]\n"
|
||||
fi
|
||||
printf "==================================\n"
|
||||
|
||||
install_opencode() {
|
||||
if [ "$ARG_INSTALL_OPENCODE" = "true" ]; then
|
||||
if ! command_exists opencode; then
|
||||
echo "Installing OpenCode (version: ${ARG_OPENCODE_VERSION})..."
|
||||
if [ "$ARG_OPENCODE_VERSION" = "latest" ]; then
|
||||
curl -fsSL https://opencode.ai/install | bash
|
||||
else
|
||||
VERSION=$ARG_OPENCODE_VERSION curl -fsSL https://opencode.ai/install | bash
|
||||
fi
|
||||
export PATH=/home/coder/.opencode/bin:$PATH
|
||||
printf "Opencode location: %s\n" "$(which opencode)"
|
||||
if ! command_exists opencode; then
|
||||
echo "ERROR: Failed to install OpenCode"
|
||||
exit 1
|
||||
fi
|
||||
echo "OpenCode installed successfully"
|
||||
else
|
||||
echo "OpenCode already installed"
|
||||
fi
|
||||
else
|
||||
echo "OpenCode installation skipped (ARG_INSTALL_OPENCODE=false)"
|
||||
fi
|
||||
}
|
||||
|
||||
setup_opencode_config() {
|
||||
local opencode_config_file="$HOME/.config/opencode/opencode.json"
|
||||
local auth_json_file="$HOME/.local/share/opencode/auth.json"
|
||||
|
||||
mkdir -p "$(dirname "$auth_json_file")"
|
||||
mkdir -p "$(dirname "$opencode_config_file")"
|
||||
|
||||
setup_opencode_auth "$auth_json_file"
|
||||
|
||||
if [ -n "$ARG_OPENCODE_CONFIG" ]; then
|
||||
echo "Writing to the config file"
|
||||
echo "$ARG_OPENCODE_CONFIG" > "$opencode_config_file"
|
||||
fi
|
||||
|
||||
if [ "$ARG_REPORT_TASKS" = "true" ]; then
|
||||
setup_coder_mcp_server "$opencode_config_file"
|
||||
fi
|
||||
|
||||
echo "MCP configuration completed: $opencode_config_file"
|
||||
}
|
||||
|
||||
setup_opencode_auth() {
|
||||
local auth_json_file="$1"
|
||||
|
||||
if [ -n "$ARG_AUTH_JSON" ]; then
|
||||
echo "$ARG_AUTH_JSON" > "$auth_json_file"
|
||||
printf "added auth json to %s" "$auth_json_file"
|
||||
else
|
||||
printf "auth json not provided"
|
||||
fi
|
||||
}
|
||||
|
||||
setup_coder_mcp_server() {
|
||||
local opencode_config_file="$1"
|
||||
|
||||
# Set environment variables based on task reporting setting
|
||||
echo "Configuring OpenCode task reporting"
|
||||
export CODER_MCP_APP_STATUS_SLUG="$ARG_MCP_APP_STATUS_SLUG"
|
||||
export CODER_MCP_AI_AGENTAPI_URL="http://localhost:3284"
|
||||
echo "Coder integration configured for task reporting"
|
||||
|
||||
# Add coder MCP server configuration to the JSON file
|
||||
echo "Adding Coder MCP server configuration"
|
||||
|
||||
# Create the coder server configuration JSON
|
||||
coder_config=$(
|
||||
cat << EOF
|
||||
{
|
||||
"type": "local",
|
||||
"command": ["coder", "exp", "mcp", "server"],
|
||||
"enabled": true,
|
||||
"environment": {
|
||||
"CODER_MCP_APP_STATUS_SLUG": "${CODER_MCP_APP_STATUS_SLUG:-}",
|
||||
"CODER_MCP_AI_AGENTAPI_URL": "${CODER_MCP_AI_AGENTAPI_URL:-}",
|
||||
"CODER_AGENT_URL": "${CODER_AGENT_URL:-}",
|
||||
"CODER_AGENT_TOKEN": "${CODER_AGENT_TOKEN:-}",
|
||||
"CODER_MCP_ALLOWED_TOOLS": "coder_report_task"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
temp_file=$(mktemp)
|
||||
jq --argjson coder_config "$coder_config" '.mcp.coder = $coder_config' "$opencode_config_file" > "$temp_file"
|
||||
mv "$temp_file" "$opencode_config_file"
|
||||
echo "Coder MCP server configuration added"
|
||||
|
||||
}
|
||||
|
||||
install_opencode
|
||||
setup_opencode_config
|
||||
|
||||
echo "OpenCode module setup completed."
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
export PATH=/home/coder/.opencode/bin:$PATH
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
ARG_WORKDIR=${ARG_WORKDIR:-"$HOME"}
|
||||
ARG_AI_PROMPT=$(echo -n "${ARG_AI_PROMPT:-}" | base64 -d 2> /dev/null || echo "")
|
||||
ARG_REPORT_TASKS=${ARG_REPORT_TASKS:-true}
|
||||
ARG_SESSION_ID=${ARG_SESSION_ID:-}
|
||||
ARG_CONTINUE=${ARG_CONTINUE:-false}
|
||||
|
||||
# Print all received environment variables
|
||||
printf "=== START CONFIG ===\n"
|
||||
printf "ARG_WORKDIR: %s\n" "$ARG_WORKDIR"
|
||||
printf "ARG_REPORT_TASKS: %s\n" "$ARG_REPORT_TASKS"
|
||||
printf "ARG_CONTINUE: %s\n" "$ARG_CONTINUE"
|
||||
printf "ARG_SESSION_ID: %s\n" "$ARG_SESSION_ID"
|
||||
if [ -n "$ARG_AI_PROMPT" ]; then
|
||||
printf "ARG_AI_PROMPT: [AI PROMPT RECEIVED]\n"
|
||||
else
|
||||
printf "ARG_AI_PROMPT: [NOT PROVIDED]\n"
|
||||
fi
|
||||
printf "==================================\n"
|
||||
|
||||
OPENCODE_ARGS=()
|
||||
AGENTAPI_ARGS=()
|
||||
|
||||
validate_opencode_installation() {
|
||||
if ! command_exists opencode; then
|
||||
printf "ERROR: OpenCode not installed. Set install_opencode to true\n"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
build_opencode_args() {
|
||||
|
||||
if [ -n "$ARG_SESSION_ID" ]; then
|
||||
OPENCODE_ARGS+=(--session "$ARG_SESSION_ID")
|
||||
fi
|
||||
|
||||
if [ "$ARG_CONTINUE" = "true" ]; then
|
||||
OPENCODE_ARGS+=(--continue)
|
||||
fi
|
||||
|
||||
if [ -n "$ARG_AI_PROMPT" ]; then
|
||||
if [ "$ARG_REPORT_TASKS" = "true" ]; then
|
||||
PROMPT="Every step of the way, report your progress using coder_report_task tool with proper summary and statuses. Your task at hand: $ARG_AI_PROMPT"
|
||||
else
|
||||
PROMPT="$ARG_AI_PROMPT"
|
||||
fi
|
||||
AGENTAPI_ARGS+=(-I "$PROMPT")
|
||||
fi
|
||||
}
|
||||
|
||||
start_agentapi() {
|
||||
printf "Starting in directory: %s\n" "$ARG_WORKDIR"
|
||||
cd "$ARG_WORKDIR"
|
||||
|
||||
build_opencode_args
|
||||
|
||||
printf "Running OpenCode with args: %s\n" "${OPENCODE_ARGS[*]}"
|
||||
echo agentapi server "${AGENTAPI_ARGS[@]}" --type opencode --term-width 67 --term-height 1190 -- opencode "${OPENCODE_ARGS[@]}"
|
||||
agentapi server "${AGENTAPI_ARGS[@]}" --type opencode --term-width 67 --term-height 1190 -- opencode "${OPENCODE_ARGS[@]}"
|
||||
}
|
||||
|
||||
validate_opencode_installation
|
||||
start_agentapi
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Mock OpenCode CLI for testing purposes
|
||||
# This script simulates the OpenCode command-line interface
|
||||
|
||||
echo "OpenCode Mock CLI - Test Version"
|
||||
echo "Args received: $*"
|
||||
|
||||
# Simulate opencode behavior based on arguments
|
||||
case "$1" in
|
||||
--version | -v)
|
||||
echo "opencode mock version 0.1.0-test"
|
||||
;;
|
||||
--help | -h)
|
||||
echo "OpenCode Mock Help"
|
||||
echo "Usage: opencode [options] [command]"
|
||||
echo "This is a mock version for testing"
|
||||
;;
|
||||
*)
|
||||
echo "Running OpenCode mock with arguments: $*"
|
||||
echo "Mock execution completed successfully"
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
@@ -13,8 +13,8 @@ Run [Amp CLI](https://ampcode.com/) in your workspace to access Sourcegraph's AI
|
||||
```tf
|
||||
module "amp-cli" {
|
||||
source = "registry.coder.com/coder-labs/sourcegraph-amp/coder"
|
||||
version = "2.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
sourcegraph_amp_api_key = var.sourcegraph_amp_api_key
|
||||
install_sourcegraph_amp = true
|
||||
agentapi_version = "latest"
|
||||
@@ -49,7 +49,7 @@ module "amp-cli" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder-labs/sourcegraph-amp/coder"
|
||||
amp_version = "2.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
amp_api_key = var.amp_api_key # recommended for tasks usage
|
||||
workdir = "/home/coder/project"
|
||||
instruction_prompt = <<-EOT
|
||||
|
||||
@@ -19,8 +19,8 @@ variable "api_key" {
|
||||
|
||||
module "aider" {
|
||||
source = "registry.coder.com/coder/aider/coder"
|
||||
version = "2.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
api_key = var.api_key
|
||||
ai_provider = "google"
|
||||
model = "gemini"
|
||||
@@ -50,8 +50,8 @@ variable "gemini_api_key" {
|
||||
|
||||
module "aider" {
|
||||
source = "registry.coder.com/coder/aider/coder"
|
||||
version = "2.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
api_key = var.gemini_api_key
|
||||
install_aider = true
|
||||
workdir = "/home/coder"
|
||||
@@ -75,8 +75,8 @@ variable "custom_api_key" {
|
||||
module "aider" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/aider/coder"
|
||||
version = "2.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "2.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
ai_provider = "custom"
|
||||
custom_env_var_name = "MY_CUSTOM_API_KEY"
|
||||
|
||||
@@ -19,7 +19,7 @@ module "dcv" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/amazon-dcv-windows/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = resource.coder_agent.main.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
resource "coder_metadata" "dcv" {
|
||||
|
||||
@@ -13,8 +13,8 @@ Run [Amazon Q](https://aws.amazon.com/q/) in your workspace to access Amazon's A
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
|
||||
# Required: Authentication tarball (see below for generation)
|
||||
@@ -102,8 +102,8 @@ data "coder_parameter" "ai_prompt" {
|
||||
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
ai_prompt = data.coder_parameter.ai_prompt.value
|
||||
@@ -228,8 +228,8 @@ If no custom `agent_config` is provided, the default agent name "agent" is used.
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
}
|
||||
@@ -258,8 +258,8 @@ This example will:
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
ai_prompt = "Help me set up a Python FastAPI project with proper testing structure"
|
||||
@@ -279,8 +279,8 @@ module "amazon-q" {
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
|
||||
@@ -305,8 +305,8 @@ module "amazon-q" {
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
amazon_q_version = "1.14.0" # Specific version
|
||||
@@ -319,8 +319,8 @@ module "amazon-q" {
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
|
||||
@@ -331,6 +331,7 @@ module "amazon-q" {
|
||||
"prompt": "You are a specialized DevOps assistant...",
|
||||
"tools": ["fs_read", "fs_write", "execute_bash", "use_aws"]
|
||||
}
|
||||
|
||||
EOT
|
||||
}
|
||||
```
|
||||
@@ -340,8 +341,8 @@ module "amazon-q" {
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
|
||||
@@ -358,8 +359,8 @@ For environments without direct internet access, you can host Amazon Q installat
|
||||
```tf
|
||||
module "amazon-q" {
|
||||
source = "registry.coder.com/coder/amazon-q/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
auth_tarball = var.amazon_q_auth_tarball
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ Run the [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude
|
||||
```tf
|
||||
module "claude-code" {
|
||||
source = "registry.coder.com/coder/claude-code/coder"
|
||||
version = "4.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "4.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/project"
|
||||
claude_api_key = "xxxx-xxxxx-xxxx"
|
||||
}
|
||||
@@ -51,7 +51,7 @@ module "claude-code" {
|
||||
boundary_log_level = "WARN"
|
||||
boundary_additional_allowed_urls = ["GET *google.com"]
|
||||
boundary_proxy_port = "8087"
|
||||
version = "3.4.3"
|
||||
version = "4.2.3"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -70,8 +70,8 @@ data "coder_parameter" "ai_prompt" {
|
||||
|
||||
module "claude-code" {
|
||||
source = "registry.coder.com/coder/claude-code/coder"
|
||||
version = "4.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "4.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/project"
|
||||
|
||||
claude_api_key = "xxxx-xxxxx-xxxx"
|
||||
@@ -89,10 +89,13 @@ module "claude-code" {
|
||||
mcp = <<-EOF
|
||||
{
|
||||
"mcpServers": {
|
||||
"my-custom-tool": {
|
||||
"command": "my-tool-server"
|
||||
"args": ["--port", "8080"]
|
||||
"memory": {
|
||||
"type": "stdio",
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-memory"],
|
||||
"env": {}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
EOF
|
||||
@@ -106,8 +109,8 @@ Run and configure Claude Code as a standalone CLI in your workspace.
|
||||
```tf
|
||||
module "claude-code" {
|
||||
source = "registry.coder.com/coder/claude-code/coder"
|
||||
version = "4.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "4.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder"
|
||||
install_claude_code = true
|
||||
claude_code_version = "latest"
|
||||
@@ -129,8 +132,8 @@ variable "claude_code_oauth_token" {
|
||||
|
||||
module "claude-code" {
|
||||
source = "registry.coder.com/coder/claude-code/coder"
|
||||
version = "4.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "4.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/project"
|
||||
claude_code_oauth_token = var.claude_code_oauth_token
|
||||
}
|
||||
@@ -146,13 +149,13 @@ Configure Claude Code to use AWS Bedrock for accessing Claude models through you
|
||||
|
||||
```tf
|
||||
resource "coder_env" "bedrock_use" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "CLAUDE_CODE_USE_BEDROCK"
|
||||
value = "1"
|
||||
}
|
||||
|
||||
resource "coder_env" "aws_region" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "AWS_REGION"
|
||||
value = "us-east-1" # Choose your preferred region
|
||||
}
|
||||
@@ -174,13 +177,13 @@ variable "aws_secret_access_key" {
|
||||
}
|
||||
|
||||
resource "coder_env" "aws_access_key_id" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "AWS_ACCESS_KEY_ID"
|
||||
value = var.aws_access_key_id
|
||||
}
|
||||
|
||||
resource "coder_env" "aws_secret_access_key" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "AWS_SECRET_ACCESS_KEY"
|
||||
value = var.aws_secret_access_key
|
||||
}
|
||||
@@ -195,15 +198,15 @@ variable "aws_bearer_token_bedrock" {
|
||||
}
|
||||
|
||||
resource "coder_env" "bedrock_api_key" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "AWS_BEARER_TOKEN_BEDROCK"
|
||||
value = var.aws_bearer_token_bedrock
|
||||
}
|
||||
|
||||
module "claude-code" {
|
||||
source = "registry.coder.com/coder/claude-code/coder"
|
||||
version = "4.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "4.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/project"
|
||||
model = "global.anthropic.claude-sonnet-4-5-20250929-v1:0"
|
||||
}
|
||||
@@ -228,39 +231,39 @@ variable "vertex_sa_json" {
|
||||
}
|
||||
|
||||
resource "coder_env" "vertex_use" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "CLAUDE_CODE_USE_VERTEX"
|
||||
value = "1"
|
||||
}
|
||||
|
||||
resource "coder_env" "vertex_project_id" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "ANTHROPIC_VERTEX_PROJECT_ID"
|
||||
value = "your-gcp-project-id"
|
||||
}
|
||||
|
||||
resource "coder_env" "cloud_ml_region" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "CLOUD_ML_REGION"
|
||||
value = "global"
|
||||
}
|
||||
|
||||
resource "coder_env" "vertex_sa_json" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "VERTEX_SA_JSON"
|
||||
value = var.vertex_sa_json
|
||||
}
|
||||
|
||||
resource "coder_env" "google_application_credentials" {
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
name = "GOOGLE_APPLICATION_CREDENTIALS"
|
||||
value = "/tmp/gcp-sa.json"
|
||||
}
|
||||
|
||||
module "claude-code" {
|
||||
source = "registry.coder.com/coder/claude-code/coder"
|
||||
version = "4.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "4.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
workdir = "/home/coder/project"
|
||||
model = "claude-sonnet-4@20250514"
|
||||
|
||||
|
||||
@@ -68,13 +68,16 @@ function setup_claude_configurations() {
|
||||
mkdir -p "$module_path"
|
||||
|
||||
if [ "$ARG_MCP" != "" ]; then
|
||||
while IFS= read -r server_name && IFS= read -r server_json; do
|
||||
echo "------------------------"
|
||||
echo "Executing: claude mcp add \"$server_name\" '$server_json'"
|
||||
claude mcp add "$server_name" "$server_json"
|
||||
echo "------------------------"
|
||||
echo ""
|
||||
done < <(echo "$ARG_MCP" | jq -r '.mcpServers | to_entries[] | .key, (.value | @json)')
|
||||
(
|
||||
cd "$ARG_WORKDIR"
|
||||
while IFS= read -r server_name && IFS= read -r server_json; do
|
||||
echo "------------------------"
|
||||
echo "Executing: claude mcp add-json \"$server_name\" '$server_json' (in $ARG_WORKDIR)"
|
||||
claude mcp add-json "$server_name" "$server_json"
|
||||
echo "------------------------"
|
||||
echo ""
|
||||
done < <(echo "$ARG_MCP" | jq -r '.mcpServers | to_entries[] | .key, (.value | @json)')
|
||||
)
|
||||
fi
|
||||
|
||||
if [ -n "$ARG_ALLOWED_TOOLS" ]; then
|
||||
|
||||
@@ -103,9 +103,13 @@ task_session_exists() {
|
||||
local workdir_normalized=$(echo "$ARG_WORKDIR" | tr '/' '-')
|
||||
local project_dir="$HOME/.claude/projects/${workdir_normalized}"
|
||||
|
||||
printf "PROJECT_DIR: %s, workdir_normalized: %s\n" "$project_dir" "$workdir_normalized"
|
||||
|
||||
if [ -d "$project_dir" ] && find "$project_dir" -type f -name "*${TASK_SESSION_ID}*" 2> /dev/null | grep -q .; then
|
||||
printf "TASK_SESSION_ID: %s file found\n" "$TASK_SESSION_ID"
|
||||
return 0
|
||||
else
|
||||
printf "TASK_SESSION_ID: %s file not found\n" "$TASK_SESSION_ID"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
@@ -149,7 +153,11 @@ function start_agentapi() {
|
||||
else
|
||||
echo "No existing session found"
|
||||
if [ "$ARG_REPORT_TASKS" = "true" ]; then
|
||||
ARGS+=(--session-id "$TASK_SESSION_ID")
|
||||
if task_session_exists; then
|
||||
ARGS+=(--resume "$TASK_SESSION_ID")
|
||||
else
|
||||
ARGS+=(--session-id "$TASK_SESSION_ID")
|
||||
fi
|
||||
fi
|
||||
if [ -n "$ARG_AI_PROMPT" ]; then
|
||||
if [ "$ARG_REPORT_TASKS" = "true" ]; then
|
||||
@@ -171,7 +179,11 @@ function start_agentapi() {
|
||||
else
|
||||
echo "Continue disabled, starting fresh session"
|
||||
if [ "$ARG_REPORT_TASKS" = "true" ]; then
|
||||
ARGS+=(--session-id "$TASK_SESSION_ID")
|
||||
if task_session_exists; then
|
||||
ARGS+=(--resume "$TASK_SESSION_ID")
|
||||
else
|
||||
ARGS+=(--session-id "$TASK_SESSION_ID")
|
||||
fi
|
||||
fi
|
||||
if [ -n "$ARG_AI_PROMPT" ]; then
|
||||
if [ "$ARG_REPORT_TASKS" = "true" ]; then
|
||||
|
||||
@@ -14,8 +14,8 @@ Automatically install [code-server](https://github.com/coder/code-server) in a w
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -29,8 +29,8 @@ module "code-server" {
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
install_version = "4.8.3"
|
||||
}
|
||||
```
|
||||
@@ -43,8 +43,8 @@ Install the Dracula theme from [OpenVSX](https://open-vsx.org/):
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
extensions = [
|
||||
"dracula-theme.theme-dracula"
|
||||
]
|
||||
@@ -61,12 +61,13 @@ Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarte
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
extensions = ["dracula-theme.theme-dracula"]
|
||||
settings = {
|
||||
"workbench.colorTheme" = "Dracula"
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -78,8 +79,8 @@ Just run code-server in the background, don't fetch it from GitHub:
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
extensions = ["dracula-theme.theme-dracula", "ms-azuretools.vscode-docker"]
|
||||
}
|
||||
```
|
||||
@@ -92,8 +93,8 @@ You can pass additional command-line arguments to code-server using the `additio
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
additional_args = "--disable-workspace-trust"
|
||||
}
|
||||
```
|
||||
@@ -108,8 +109,8 @@ Run an existing copy of code-server if found, otherwise download from GitHub:
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
use_cached = true
|
||||
extensions = ["dracula-theme.theme-dracula", "ms-azuretools.vscode-docker"]
|
||||
}
|
||||
@@ -121,8 +122,8 @@ Just run code-server in the background, don't fetch it from GitHub:
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.4.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.main.id
|
||||
offline = true
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,8 +14,8 @@ Automatically logs the user into Coder when creating their workspace.
|
||||
module "coder-login" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/coder-login/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder)
|
||||
module "cursor" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/cursor/coder"
|
||||
version = "1.3.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.3.3"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -29,8 +29,8 @@ module "cursor" {
|
||||
module "cursor" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/cursor/coder"
|
||||
version = "1.3.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.3.3"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -45,8 +45,8 @@ The following example configures Cursor to use the GitHub MCP server with authen
|
||||
module "cursor" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/cursor/coder"
|
||||
version = "1.3.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.3.3"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
mcp = jsonencode({
|
||||
mcpServers = {
|
||||
@@ -57,6 +57,7 @@ module "cursor" {
|
||||
},
|
||||
"type" : "http"
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ The devcontainers-cli module provides an easy way to install [`@devcontainers/cl
|
||||
```tf
|
||||
module "devcontainers-cli" {
|
||||
source = "registry.coder.com/coder/devcontainers-cli/coder"
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.33"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -18,8 +18,8 @@ Under the hood, this module uses the [coder dotfiles](https://coder.com/docs/v2/
|
||||
module "dotfiles" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/dotfiles/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -31,8 +31,8 @@ module "dotfiles" {
|
||||
module "dotfiles" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/dotfiles/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -42,8 +42,8 @@ module "dotfiles" {
|
||||
module "dotfiles" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/dotfiles/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
user = "root"
|
||||
}
|
||||
```
|
||||
@@ -54,15 +54,16 @@ module "dotfiles" {
|
||||
module "dotfiles" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/dotfiles/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
|
||||
module "dotfiles-root" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/dotfiles/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
user = "root"
|
||||
dotfiles_uri = module.dotfiles.dotfiles_uri
|
||||
}
|
||||
@@ -76,8 +77,8 @@ You can set a default dotfiles repository for all users by setting the `default_
|
||||
module "dotfiles" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/dotfiles/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
default_dotfiles_uri = "https://github.com/coder/dotfiles"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,8 +14,8 @@ A file browser for your workspace.
|
||||
module "filebrowser" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/filebrowser/coder"
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.3"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -29,8 +29,8 @@ module "filebrowser" {
|
||||
module "filebrowser" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/filebrowser/coder"
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.3"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -41,8 +41,8 @@ module "filebrowser" {
|
||||
module "filebrowser" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/filebrowser/coder"
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.3"
|
||||
agent_id = coder_agent.main.id
|
||||
database_path = ".config/filebrowser.db"
|
||||
}
|
||||
```
|
||||
@@ -53,8 +53,8 @@ module "filebrowser" {
|
||||
module "filebrowser" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/filebrowser/coder"
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.3"
|
||||
agent_id = coder_agent.main.id
|
||||
agent_name = "main"
|
||||
subdomain = false
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ This module allows you to automatically clone a repository by URL and skip if it
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.com/coder/coder"
|
||||
}
|
||||
```
|
||||
@@ -28,8 +28,8 @@ module "git-clone" {
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.com/coder/coder"
|
||||
base_dir = "~/projects/coder"
|
||||
}
|
||||
@@ -43,11 +43,12 @@ To use with [Git Authentication](https://coder.com/docs/v2/latest/admin/git-prov
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.com/coder/coder"
|
||||
}
|
||||
|
||||
|
||||
data "coder_external_auth" "github" {
|
||||
id = "github"
|
||||
}
|
||||
@@ -69,17 +70,18 @@ data "coder_parameter" "git_repo" {
|
||||
module "git_clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = data.coder_parameter.git_repo.value
|
||||
}
|
||||
|
||||
|
||||
# Create a code-server instance for the cloned repository
|
||||
module "code-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/code-server/coder"
|
||||
version = "1.0.18"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
order = 1
|
||||
folder = "/home/${local.username}/${module.git_clone[count.index].folder_name}"
|
||||
}
|
||||
@@ -87,7 +89,7 @@ module "code-server" {
|
||||
# Create a Coder app for the website
|
||||
resource "coder_app" "website" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
order = 2
|
||||
slug = "website"
|
||||
external = true
|
||||
@@ -103,13 +105,14 @@ Configuring `git-clone` for a self-hosted GitHub Enterprise Server running at `g
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.example.com/coder/coder/tree/feat/example"
|
||||
git_providers = {
|
||||
"https://github.example.com/" = {
|
||||
provider = "github"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -122,8 +125,8 @@ To GitLab clone with a specific branch like `feat/example`
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://gitlab.com/coder/coder/-/tree/feat/example"
|
||||
}
|
||||
```
|
||||
@@ -134,13 +137,14 @@ Configuring `git-clone` for a self-hosted GitLab running at `gitlab.example.com`
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://gitlab.example.com/coder/coder/-/tree/feat/example"
|
||||
git_providers = {
|
||||
"https://gitlab.example.com/" = {
|
||||
provider = "gitlab"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -155,8 +159,8 @@ For example, to clone the `feat/example` branch:
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.com/coder/coder"
|
||||
branch_name = "feat/example"
|
||||
}
|
||||
@@ -173,8 +177,8 @@ For example, this will clone into the `~/projects/coder/coder-dev` folder:
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.com/coder/coder"
|
||||
folder_name = "coder-dev"
|
||||
base_dir = "~/projects/coder"
|
||||
@@ -193,7 +197,7 @@ module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/modules/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.com/coder/coder"
|
||||
depth = 1
|
||||
}
|
||||
@@ -208,8 +212,8 @@ This is useful for running initialization tasks like installing dependencies or
|
||||
module "git-clone" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-clone/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
url = "https://github.com/coder/coder"
|
||||
post_clone_script = <<-EOT
|
||||
#!/bin/bash
|
||||
|
||||
@@ -22,7 +22,7 @@ This module has a chance of conflicting with the user's dotfiles / the personali
|
||||
module "git-commit-signing" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-commit-signing/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,8 +14,8 @@ Runs a script that updates git credentials in the workspace to match the user's
|
||||
module "git-config" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-config/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -29,8 +29,8 @@ TODO: Add screenshot
|
||||
module "git-config" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-config/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
allow_email_change = true
|
||||
}
|
||||
```
|
||||
@@ -43,8 +43,8 @@ TODO: Add screenshot
|
||||
module "git-config" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/git-config/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
allow_username_change = false
|
||||
allow_email_change = false
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ Templates that utilize Github External Auth can automatically ensure that the Co
|
||||
module "github-upload-public-key" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/github-upload-public-key/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -47,8 +47,8 @@ data "coder_external_auth" "github" {
|
||||
module "github-upload-public-key" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/github-upload-public-key/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
external_auth_id = data.coder_external_auth.github.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -13,8 +13,8 @@ Run the [Goose](https://block.github.io/goose/) agent in your workspace to gener
|
||||
```tf
|
||||
module "goose" {
|
||||
source = "registry.coder.com/coder/goose/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder"
|
||||
install_goose = true
|
||||
goose_version = "v1.0.31"
|
||||
@@ -39,7 +39,7 @@ module "coder-login" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/coder-login/coder"
|
||||
version = "1.0.15"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
|
||||
variable "anthropic_api_key" {
|
||||
@@ -79,8 +79,8 @@ resource "coder_agent" "main" {
|
||||
module "goose" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/goose/coder"
|
||||
version = "3.0.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "3.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder"
|
||||
install_goose = true
|
||||
goose_version = "v1.0.31"
|
||||
|
||||
@@ -26,8 +26,8 @@ This module lets you fetch all or selective secrets from a [HCP Vault Secrets](h
|
||||
```tf
|
||||
module "vault" {
|
||||
source = "registry.coder.com/coder/hcp-vault-secrets/coder"
|
||||
version = "1.0.34"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.35"
|
||||
agent_id = coder_agent.main.id
|
||||
app_name = "demo-app"
|
||||
project_id = "aaa-bbb-ccc"
|
||||
}
|
||||
@@ -52,8 +52,8 @@ To fetch all secrets from the HCP Vault Secrets app, skip the `secrets` input.
|
||||
```tf
|
||||
module "vault" {
|
||||
source = "registry.coder.com/coder/hcp-vault-secrets/coder"
|
||||
version = "1.0.34"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.35"
|
||||
agent_id = coder_agent.main.id
|
||||
app_name = "demo-app"
|
||||
project_id = "aaa-bbb-ccc"
|
||||
}
|
||||
@@ -66,8 +66,8 @@ To fetch selective secrets from the HCP Vault Secrets app, set the `secrets` inp
|
||||
```tf
|
||||
module "vault" {
|
||||
source = "registry.coder.com/coder/hcp-vault-secrets/coder"
|
||||
version = "1.0.34"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.35"
|
||||
agent_id = coder_agent.main.id
|
||||
app_name = "demo-app"
|
||||
project_id = "aaa-bbb-ccc"
|
||||
secrets = ["MY_SECRET_1", "MY_SECRET_2"]
|
||||
@@ -81,8 +81,8 @@ Set `client_id` and `client_secret` as module inputs.
|
||||
```tf
|
||||
module "vault" {
|
||||
source = "registry.coder.com/coder/hcp-vault-secrets/coder"
|
||||
version = "1.0.34"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.35"
|
||||
agent_id = coder_agent.main.id
|
||||
app_name = "demo-app"
|
||||
project_id = "aaa-bbb-ccc"
|
||||
client_id = "HCP_CLIENT_ID"
|
||||
|
||||
@@ -16,8 +16,8 @@ JetBrains Fleet is a next-generation IDE that supports collaborative development
|
||||
module "jetbrains_fleet" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-fleet/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -37,8 +37,8 @@ module "jetbrains_fleet" {
|
||||
module "jetbrains_fleet" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-fleet/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -48,8 +48,8 @@ module "jetbrains_fleet" {
|
||||
module "jetbrains_fleet" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-fleet/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -60,8 +60,8 @@ module "jetbrains_fleet" {
|
||||
module "jetbrains_fleet" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-fleet/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
display_name = "Fleet"
|
||||
group = "JetBrains IDEs"
|
||||
order = 1
|
||||
@@ -74,8 +74,8 @@ module "jetbrains_fleet" {
|
||||
module "jetbrains_fleet" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-fleet/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
agent_name = coder_agent.example.name
|
||||
}
|
||||
```
|
||||
|
||||
@@ -20,8 +20,8 @@ Consult the [JetBrains documentation](https://www.jetbrains.com/help/idea/prereq
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-gateway/coder"
|
||||
version = "1.2.5"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.6"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["CL", "GO", "IU", "PY", "WS"]
|
||||
default = "GO"
|
||||
@@ -38,8 +38,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-gateway/coder"
|
||||
version = "1.2.5"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.6"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["GO", "WS"]
|
||||
default = "GO"
|
||||
@@ -52,8 +52,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-gateway/coder"
|
||||
version = "1.2.5"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.6"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["IU", "PY"]
|
||||
default = "IU"
|
||||
@@ -67,8 +67,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-gateway/coder"
|
||||
version = "1.2.5"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.6"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["IU", "PY"]
|
||||
default = "IU"
|
||||
@@ -76,8 +76,9 @@ module "jetbrains_gateway" {
|
||||
jetbrains_ide_versions = {
|
||||
"IU" = {
|
||||
build_number = "243.21565.193"
|
||||
version = "2024.3"
|
||||
version = "1.2.6"
|
||||
}
|
||||
|
||||
"PY" = {
|
||||
build_number = "243.21565.199"
|
||||
version = "2024.3"
|
||||
@@ -92,8 +93,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-gateway/coder"
|
||||
version = "1.2.5"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.6"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["GO", "WS"]
|
||||
default = "GO"
|
||||
@@ -110,8 +111,8 @@ Due to the highest priority of the `ide_download_link` parameter in the `(jetbra
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains-gateway/coder"
|
||||
version = "1.2.5"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.6"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["GO", "WS"]
|
||||
releases_base_link = "https://releases.internal.site/"
|
||||
|
||||
@@ -14,8 +14,8 @@ This module adds JetBrains IDE buttons to launch IDEs directly from the dashboar
|
||||
module "jetbrains" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
# tooltip = "You need to [Install Coder Desktop](https://coder.com/docs/user-guides/desktop#install-coder-desktop) to use this button." # Optional
|
||||
}
|
||||
@@ -40,8 +40,8 @@ When `default` contains IDE codes, those IDEs are created directly without user
|
||||
module "jetbrains" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
default = ["PY", "IU"] # Pre-configure GoLand and IntelliJ IDEA
|
||||
}
|
||||
@@ -53,8 +53,8 @@ module "jetbrains" {
|
||||
module "jetbrains" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
# Show parameter with limited options
|
||||
options = ["IU", "PY"] # Only these IDEs are available for selection
|
||||
@@ -67,8 +67,8 @@ module "jetbrains" {
|
||||
module "jetbrains" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
default = ["IU", "PY"]
|
||||
channel = "eap" # Use Early Access Preview versions
|
||||
@@ -82,8 +82,8 @@ module "jetbrains" {
|
||||
module "jetbrains" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/workspace/project"
|
||||
|
||||
# Custom IDE metadata (display names and icons)
|
||||
@@ -93,6 +93,7 @@ module "jetbrains" {
|
||||
icon = "/custom/icons/intellij.svg"
|
||||
build = "251.26927.53"
|
||||
}
|
||||
|
||||
"PY" = {
|
||||
name = "PyCharm"
|
||||
icon = "/custom/icons/pycharm.svg"
|
||||
@@ -108,8 +109,8 @@ module "jetbrains" {
|
||||
module "jetbrains_pycharm" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/workspace/project"
|
||||
|
||||
default = ["PY"] # Only PyCharm
|
||||
@@ -128,8 +129,8 @@ Add helpful tooltip text that appears when users hover over the IDE app buttons:
|
||||
module "jetbrains" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jetbrains/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
default = ["IU", "PY"]
|
||||
tooltip = "You need to [Install Coder Desktop](https://coder.com/docs/user-guides/desktop#install-coder-desktop) to use this button."
|
||||
|
||||
@@ -16,8 +16,8 @@ Install the JF CLI and authenticate package managers with Artifactory using OAut
|
||||
module "jfrog" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jfrog-oauth/coder"
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
jfrog_url = "https://example.jfrog.io"
|
||||
username_field = "username" # If you are using GitHub to login to both Coder and Artifactory, use username_field = "username"
|
||||
|
||||
@@ -29,6 +29,7 @@ module "jfrog" {
|
||||
conda = ["conda", "conda-local"]
|
||||
maven = ["maven", "maven-local"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -56,14 +57,15 @@ Configure the Python pip package manager to fetch packages from Artifactory whil
|
||||
module "jfrog" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jfrog-oauth/coder"
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
jfrog_url = "https://example.jfrog.io"
|
||||
username_field = "email"
|
||||
|
||||
package_managers = {
|
||||
pypi = ["pypi"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -85,8 +87,8 @@ The [JFrog extension](https://open-vsx.org/extension/JFrog/jfrog-vscode-extensio
|
||||
module "jfrog" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jfrog-oauth/coder"
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.3"
|
||||
agent_id = coder_agent.main.id
|
||||
jfrog_url = "https://example.jfrog.io"
|
||||
username_field = "username" # If you are using GitHub to login to both Coder and Artifactory, use username_field = "username"
|
||||
configure_code_server = true # Add JFrog extension configuration for code-server
|
||||
@@ -95,6 +97,7 @@ module "jfrog" {
|
||||
go = ["go"]
|
||||
pypi = ["pypi"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ Install the JF CLI and authenticate package managers with Artifactory using Arti
|
||||
```tf
|
||||
module "jfrog" {
|
||||
source = "registry.coder.com/coder/jfrog-token/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
jfrog_url = "https://XXXX.jfrog.io"
|
||||
artifactory_access_token = var.artifactory_access_token
|
||||
package_managers = {
|
||||
@@ -25,6 +25,7 @@ module "jfrog" {
|
||||
conda = ["conda", "conda-local"]
|
||||
maven = ["maven", "maven-local"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -42,8 +43,8 @@ For detailed instructions, please see this [guide](https://coder.com/docs/v2/lat
|
||||
```tf
|
||||
module "jfrog" {
|
||||
source = "registry.coder.com/coder/jfrog-token/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
jfrog_url = "https://YYYY.jfrog.io"
|
||||
artifactory_access_token = var.artifactory_access_token # An admin access token
|
||||
package_managers = {
|
||||
@@ -53,6 +54,7 @@ module "jfrog" {
|
||||
conda = ["conda-local"]
|
||||
maven = ["maven-local"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -81,8 +83,8 @@ The [JFrog extension](https://open-vsx.org/extension/JFrog/jfrog-vscode-extensio
|
||||
```tf
|
||||
module "jfrog" {
|
||||
source = "registry.coder.com/coder/jfrog-token/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
jfrog_url = "https://XXXX.jfrog.io"
|
||||
artifactory_access_token = var.artifactory_access_token
|
||||
configure_code_server = true # Add JFrog extension configuration for code-server
|
||||
@@ -91,6 +93,7 @@ module "jfrog" {
|
||||
go = ["go"]
|
||||
pypi = ["pypi"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -101,14 +104,15 @@ data "coder_workspace" "me" {}
|
||||
|
||||
module "jfrog" {
|
||||
source = "registry.coder.com/coder/jfrog-token/coder"
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.2"
|
||||
agent_id = coder_agent.main.id
|
||||
jfrog_url = "https://XXXX.jfrog.io"
|
||||
artifactory_access_token = var.artifactory_access_token
|
||||
token_description = "Token for Coder workspace: ${data.coder_workspace_owner.me.name}/${data.coder_workspace.me.name}"
|
||||
package_managers = {
|
||||
npm = ["npm"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ A module that adds Jupyter Notebook in your Coder template.
|
||||
module "jupyter-notebook" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jupyter-notebook/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -16,8 +16,8 @@ A module that adds JupyterLab in your Coder template.
|
||||
module "jupyterlab" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jupyterlab/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -29,8 +29,8 @@ JupyterLab is automatically configured to work with Coder's iframe embedding. Fo
|
||||
module "jupyterlab" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/jupyterlab/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
config = {
|
||||
ServerApp = {
|
||||
# Required for Coder Tasks iFrame embedding - do not remove
|
||||
@@ -38,6 +38,7 @@ module "jupyterlab" {
|
||||
headers = {
|
||||
"Content-Security-Policy" = "frame-ancestors 'self' ${data.coder_workspace.me.access_url}"
|
||||
}
|
||||
|
||||
}
|
||||
# Your additional configuration here
|
||||
root_dir = "/workspace/notebooks"
|
||||
|
||||
@@ -14,8 +14,8 @@ Automatically install [KasmVNC](https://kasmweb.com/kasmvnc) in a workspace, and
|
||||
module "kasmvnc" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/kasmvnc/coder"
|
||||
version = "1.2.5"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.6"
|
||||
agent_id = coder_agent.main.id
|
||||
desktop_environment = "xfce"
|
||||
subdomain = true
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder)
|
||||
module "kiro" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/kiro/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -31,8 +31,8 @@ module "kiro" {
|
||||
module "kiro" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/kiro/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -47,8 +47,8 @@ The following example configures Kiro to use the GitHub MCP server with authenti
|
||||
module "kiro" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/kiro/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
mcp = jsonencode({
|
||||
mcpServers = {
|
||||
@@ -59,6 +59,7 @@ module "kiro" {
|
||||
},
|
||||
"type" : "http"
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ This module enables Remote Desktop Protocol (RDP) on Windows workspaces and adds
|
||||
module "rdp_desktop" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/local-windows-rdp/coder"
|
||||
version = "1.0.2"
|
||||
version = "1.0.3"
|
||||
agent_id = coder_agent.main.id
|
||||
agent_name = coder_agent.main.name
|
||||
}
|
||||
@@ -57,7 +57,7 @@ Uses default credentials (Username: `Administrator`, Password: `coderRDP!`):
|
||||
module "rdp_desktop" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/local-windows-rdp/coder"
|
||||
version = "1.0.2"
|
||||
version = "1.0.3"
|
||||
agent_id = coder_agent.main.id
|
||||
agent_name = coder_agent.main.name
|
||||
}
|
||||
@@ -71,8 +71,8 @@ Specify a custom display name for the `coder_app` button:
|
||||
module "rdp_desktop" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/local-windows-rdp/coder"
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.windows.id
|
||||
version = "1.0.3"
|
||||
agent_id = coder_agent.main.id
|
||||
agent_name = "windows"
|
||||
display_name = "Windows Desktop"
|
||||
order = 1
|
||||
|
||||
@@ -14,8 +14,8 @@ Automatically install and run mux in a Coder workspace. By default, the module i
|
||||
module "mux" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/mux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -35,8 +35,8 @@ module "mux" {
|
||||
module "mux" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/mux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -46,8 +46,8 @@ module "mux" {
|
||||
module "mux" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/mux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
# Default is "latest"; set to a specific version to pin
|
||||
install_version = "0.4.0"
|
||||
}
|
||||
@@ -59,8 +59,8 @@ module "mux" {
|
||||
module "mux" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/mux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
port = 8080
|
||||
}
|
||||
```
|
||||
@@ -73,8 +73,8 @@ Run an existing copy of mux if found, otherwise install from npm:
|
||||
module "mux" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/mux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
use_cached = true
|
||||
}
|
||||
```
|
||||
@@ -87,8 +87,8 @@ Run without installing from the network (requires mux to be pre-installed):
|
||||
module "mux" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/mux/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
install = false
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,7 +14,7 @@ Run a script on workspace start that allows developers to run custom commands to
|
||||
module "personalize" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/personalize/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -19,7 +19,7 @@ Deploy the Rocker Project distribution of RStudio Server in your Coder workspace
|
||||
module "rstudio-server" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/rstudio-server/coder"
|
||||
version = "0.9.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "0.9.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,8 +14,8 @@ Add the `slackme` command to your workspace that DMs you on Slack when your comm
|
||||
module "slackme" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/slackme/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
auth_provider_id = "slack"
|
||||
}
|
||||
```
|
||||
@@ -74,8 +74,8 @@ slackme npm run long-build
|
||||
module "slackme" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/slackme/coder"
|
||||
version = "1.0.31"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.32"
|
||||
agent_id = coder_agent.main.id
|
||||
auth_provider_id = "slack"
|
||||
slack_message = <<EOF
|
||||
👋 Hey there from Coder! $COMMAND took $DURATION to execute!
|
||||
|
||||
@@ -14,8 +14,8 @@ This module lets you authenticate with [Hashicorp Vault](https://www.vaultprojec
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-github/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
}
|
||||
```
|
||||
@@ -46,8 +46,8 @@ To configure the Vault module, you must set up a Vault GitHub auth method. See t
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-github/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
coder_github_auth_id = "my-github-auth-id"
|
||||
}
|
||||
@@ -59,8 +59,8 @@ module "vault" {
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-github/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
coder_github_auth_id = "my-github-auth-id"
|
||||
vault_github_auth_path = "my-github-auth-path"
|
||||
@@ -73,8 +73,8 @@ module "vault" {
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-github/coder"
|
||||
version = "1.1.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_cli_version = "1.15.0"
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ This module lets you authenticate with [Hashicorp Vault](https://www.vaultprojec
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-jwt/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_jwt_role = "coder" # The Vault role to use for authentication
|
||||
vault_jwt_token = "eyJhbGciOiJIUzI1N..." # optional, if not present, defaults to user's oidc authentication token
|
||||
@@ -42,8 +42,8 @@ curl -H "X-Vault-Token: ${VAULT_TOKEN}" -X GET "${VAULT_ADDR}/v1/coder/secrets/d
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-jwt/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_jwt_auth_path = "oidc"
|
||||
vault_jwt_role = "coder" # The Vault role to use for authentication
|
||||
@@ -58,8 +58,8 @@ data "coder_workspace_owner" "me" {}
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-jwt/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_jwt_role = data.coder_workspace_owner.me.groups[0]
|
||||
}
|
||||
@@ -71,8 +71,8 @@ module "vault" {
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-jwt/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_jwt_role = "coder" # The Vault role to use for authentication
|
||||
vault_cli_version = "1.17.5"
|
||||
@@ -132,8 +132,8 @@ resource "jwt_signed_token" "vault" {
|
||||
module "vault" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vault-jwt/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_jwt_role = "coder" # The Vault role to use for authentication
|
||||
vault_jwt_token = jwt_signed_token.vault[0].token
|
||||
|
||||
@@ -19,8 +19,8 @@ variable "vault_token" {
|
||||
|
||||
module "vault" {
|
||||
source = "registry.coder.com/coder/vault-token/coder"
|
||||
version = "1.3.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.3.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_token = var.token # optional
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_namespace = "prod" # optional, vault enterprise only
|
||||
@@ -73,8 +73,8 @@ variable "vault_token" {
|
||||
|
||||
module "vault" {
|
||||
source = "registry.coder.com/coder/vault-token/coder"
|
||||
version = "1.3.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.3.1"
|
||||
agent_id = coder_agent.main.id
|
||||
vault_addr = "https://vault.example.com"
|
||||
vault_token = var.token
|
||||
vault_cli_version = "1.19.0"
|
||||
|
||||
@@ -16,8 +16,8 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder)
|
||||
module "vscode" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-desktop/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -29,8 +29,8 @@ module "vscode" {
|
||||
module "vscode" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-desktop/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -14,8 +14,8 @@ Automatically install [Visual Studio Code Server](https://code.visualstudio.com/
|
||||
module "vscode-web" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-web/coder"
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.2"
|
||||
agent_id = coder_agent.main.id
|
||||
accept_license = true
|
||||
}
|
||||
```
|
||||
@@ -30,8 +30,8 @@ module "vscode-web" {
|
||||
module "vscode-web" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-web/coder"
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.2"
|
||||
agent_id = coder_agent.main.id
|
||||
install_prefix = "/home/coder/.vscode-web"
|
||||
folder = "/home/coder"
|
||||
accept_license = true
|
||||
@@ -44,8 +44,8 @@ module "vscode-web" {
|
||||
module "vscode-web" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-web/coder"
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.2"
|
||||
agent_id = coder_agent.main.id
|
||||
extensions = ["github.copilot", "ms-python.python", "ms-toolsai.jupyter"]
|
||||
accept_license = true
|
||||
}
|
||||
@@ -59,12 +59,13 @@ Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarte
|
||||
module "vscode-web" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-web/coder"
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.2"
|
||||
agent_id = coder_agent.main.id
|
||||
extensions = ["dracula-theme.theme-dracula"]
|
||||
settings = {
|
||||
"workbench.colorTheme" = "Dracula"
|
||||
}
|
||||
|
||||
accept_license = true
|
||||
}
|
||||
```
|
||||
@@ -77,8 +78,8 @@ By default, this module installs the latest. To pin a specific version, retrieve
|
||||
module "vscode-web" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-web/coder"
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.2"
|
||||
agent_id = coder_agent.main.id
|
||||
commit_id = "e54c774e0add60467559eb0d1e229c6452cf8447"
|
||||
accept_license = true
|
||||
}
|
||||
@@ -93,8 +94,8 @@ Note: Either `workspace` or `folder` can be used, but not both simultaneously. T
|
||||
module "vscode-web" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/vscode-web/coder"
|
||||
version = "1.4.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.4.2"
|
||||
agent_id = coder_agent.main.id
|
||||
workspace = "/home/coder/coder.code-workspace"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -16,7 +16,7 @@ module "windows_rdp" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/windows-rdp/coder"
|
||||
version = "1.3.0"
|
||||
agent_id = resource.coder_agent.main.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -33,7 +33,7 @@ module "windows_rdp" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/windows-rdp/coder"
|
||||
version = "1.3.0"
|
||||
agent_id = resource.coder_agent.main.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -44,7 +44,7 @@ module "windows_rdp" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/windows-rdp/coder"
|
||||
version = "1.3.0"
|
||||
agent_id = resource.coder_agent.main.id
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -55,7 +55,7 @@ module "windows_rdp" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/windows-rdp/coder"
|
||||
version = "1.3.0"
|
||||
agent_id = resource.coder_agent.main.id
|
||||
agent_id = coder_agent.main.id
|
||||
devolutions_gateway_version = "2025.2.2" # Specify a specific version
|
||||
}
|
||||
```
|
||||
|
||||
@@ -16,8 +16,8 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder)
|
||||
module "windsurf" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/windsurf/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -29,8 +29,8 @@ module "windsurf" {
|
||||
module "windsurf" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/windsurf/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -45,8 +45,8 @@ The following example configures Windsurf to use the GitHub MCP server with auth
|
||||
module "windsurf" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/windsurf/coder"
|
||||
version = "1.2.0"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.2.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
mcp = jsonencode({
|
||||
mcpServers = {
|
||||
@@ -57,6 +57,7 @@ module "windsurf" {
|
||||
},
|
||||
"type" : "http"
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -19,8 +19,8 @@ Zed is a high-performance, multiplayer code editor from the creators of Atom and
|
||||
module "zed" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/zed/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -32,8 +32,8 @@ module "zed" {
|
||||
module "zed" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/zed/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
@@ -44,8 +44,8 @@ module "zed" {
|
||||
module "zed" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/zed/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
display_name = "Zed Editor"
|
||||
order = 1
|
||||
}
|
||||
@@ -57,8 +57,8 @@ module "zed" {
|
||||
module "zed" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/zed/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
agent_name = coder_agent.example.name
|
||||
}
|
||||
```
|
||||
@@ -73,8 +73,8 @@ You can declaratively set/merge settings with the `settings` input. Provide a JS
|
||||
module "zed" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/coder/zed/coder"
|
||||
version = "1.1.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.1.2"
|
||||
agent_id = coder_agent.main.id
|
||||
|
||||
settings = jsonencode({
|
||||
context_servers = {
|
||||
@@ -84,6 +84,7 @@ module "zed" {
|
||||
args = ["arg-1", "arg-2"]
|
||||
env = {}
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ module "windows_rdp" {
|
||||
admin_username = local.admin_username
|
||||
admin_password = random_password.admin_password.result
|
||||
|
||||
agent_id = resource.coder_agent.main.id
|
||||
agent_id = coder_agent.main.id
|
||||
agent_name = "main"
|
||||
resource_id = null # Unused, to be removed in a future version
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,12 @@
|
||||
---
|
||||
display_name: "CytoShahar"
|
||||
bio: "Data engineer by day, maker by night"
|
||||
avatar: "./.images/avatar.jpeg"
|
||||
github: "https://github.com/CytoShahar"
|
||||
linkedin: "https://www.linkedin.com/in/shaharzrihen" # Optional
|
||||
status: "community"
|
||||
---
|
||||
|
||||
# Shahar Zrihen
|
||||
|
||||
Data engineer by day, maker by night
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
display_name: Positron Desktop
|
||||
description: Add a one-click button to launch Positron Desktop
|
||||
icon: ../../../../.icons/positron.svg
|
||||
verified: true
|
||||
tags: [ide, positron]
|
||||
---
|
||||
|
||||
# Positron Desktop
|
||||
|
||||
Add a button to open any workspace with a single click.
|
||||
|
||||
Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder).
|
||||
|
||||
```tf
|
||||
module "positron" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/cytoshahar/positron/coder"
|
||||
version = "1.0.0"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Open in a specific directory
|
||||
|
||||
```tf
|
||||
module "positron" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/cytoshahar/positron/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.main.id
|
||||
folder = "/home/coder/project"
|
||||
}
|
||||
```
|
||||
|
||||
Based on the [Coder VS Code Desktop Module](https://github.com/coder/registry/tree/main/registry/coder/modules/vscode-desktop)
|
||||
@@ -0,0 +1,88 @@
|
||||
import { describe, expect, it } from "bun:test";
|
||||
import {
|
||||
runTerraformApply,
|
||||
runTerraformInit,
|
||||
testRequiredVariables,
|
||||
} from "~test";
|
||||
|
||||
describe("positron-desktop", async () => {
|
||||
await runTerraformInit(import.meta.dir);
|
||||
|
||||
testRequiredVariables(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
});
|
||||
|
||||
it("default output", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
});
|
||||
expect(state.outputs.positron_url.value).toBe(
|
||||
"positron://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
|
||||
);
|
||||
|
||||
const coder_app = state.resources.find(
|
||||
(res) => res.type === "coder_app" && res.name === "positron",
|
||||
);
|
||||
|
||||
expect(coder_app).not.toBeNull();
|
||||
expect(coder_app?.instances.length).toBe(1);
|
||||
expect(coder_app?.instances[0].attributes.order).toBeNull();
|
||||
});
|
||||
|
||||
it("adds folder", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
folder: "/foo/bar",
|
||||
});
|
||||
expect(state.outputs.positron_url.value).toBe(
|
||||
"positron://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
|
||||
);
|
||||
});
|
||||
|
||||
it("adds folder and open_recent", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
folder: "/foo/bar",
|
||||
open_recent: "true",
|
||||
});
|
||||
expect(state.outputs.positron_url.value).toBe(
|
||||
"positron://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
|
||||
);
|
||||
});
|
||||
|
||||
it("adds folder but not open_recent", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
folder: "/foo/bar",
|
||||
openRecent: "false",
|
||||
});
|
||||
expect(state.outputs.positron_url.value).toBe(
|
||||
"positron://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
|
||||
);
|
||||
});
|
||||
|
||||
it("adds open_recent", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
open_recent: "true",
|
||||
});
|
||||
expect(state.outputs.positron_url.value).toBe(
|
||||
"positron://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN",
|
||||
);
|
||||
});
|
||||
|
||||
it("expect order to be set", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
order: "22",
|
||||
});
|
||||
|
||||
const coder_app = state.resources.find(
|
||||
(res) => res.type === "coder_app" && res.name === "positron",
|
||||
);
|
||||
|
||||
expect(coder_app).not.toBeNull();
|
||||
expect(coder_app?.instances.length).toBe(1);
|
||||
expect(coder_app?.instances[0].attributes.order).toBe(22);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,74 @@
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = ">= 2.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
icon_url = "/icon/positron.svg"
|
||||
}
|
||||
|
||||
variable "agent_id" {
|
||||
type = string
|
||||
description = "The ID of a Coder agent."
|
||||
}
|
||||
|
||||
variable "folder" {
|
||||
type = string
|
||||
description = "The folder to open in Positron."
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "open_recent" {
|
||||
type = bool
|
||||
description = "Open the most recent workspace or folder. Falls back to the folder if there is no recent workspace or folder to open."
|
||||
default = false
|
||||
}
|
||||
|
||||
variable "order" {
|
||||
type = number
|
||||
description = "The order determines the position of app in the UI presentation. The lowest order is shown first and apps with equal order are sorted by name (ascending order)."
|
||||
default = null
|
||||
}
|
||||
|
||||
variable "group" {
|
||||
type = string
|
||||
description = "The name of a group that this app belongs to."
|
||||
default = null
|
||||
}
|
||||
|
||||
data "coder_workspace" "me" {}
|
||||
data "coder_workspace_owner" "me" {}
|
||||
|
||||
resource "coder_app" "positron" {
|
||||
agent_id = var.agent_id
|
||||
external = true
|
||||
icon = local.icon_url
|
||||
slug = "positron"
|
||||
display_name = "Positron Desktop"
|
||||
order = var.order
|
||||
group = var.group
|
||||
|
||||
url = join("", [
|
||||
"positron://coder.coder-remote/open",
|
||||
"?owner=",
|
||||
data.coder_workspace_owner.me.name,
|
||||
"&workspace=",
|
||||
data.coder_workspace.me.name,
|
||||
var.folder != "" ? join("", ["&folder=", var.folder]) : "",
|
||||
var.open_recent ? "&openRecent" : "",
|
||||
"&url=",
|
||||
data.coder_workspace.me.access_url,
|
||||
"&token=$SESSION_TOKEN",
|
||||
])
|
||||
}
|
||||
|
||||
output "positron_url" {
|
||||
value = coder_app.positron.url
|
||||
description = "Positron Desktop URL."
|
||||
}
|
||||
@@ -17,7 +17,7 @@ This module installs Copyparty, an alternative to Filebrowser.
|
||||
module "copyparty" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/djarbz/copyparty/coder"
|
||||
version = "1.0.1"
|
||||
version = "1.0.2"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -35,8 +35,8 @@ Some basic command line options:
|
||||
module "copyparty" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/djarbz/copyparty/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
arguments = [
|
||||
"-v", "/home/coder/:/home:r", # Share home directory (read-only)
|
||||
"-v", "${local.repo_dir}:/repo:rw", # Share project directory (read-write)
|
||||
@@ -51,8 +51,8 @@ module "copyparty" {
|
||||
module "copyparty" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/djarbz/copyparty/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
subdomain = true
|
||||
arguments = [
|
||||
"-v", "/tmp:/tmp:r", # Share tmp directory (read-only)
|
||||
|
||||
@@ -13,8 +13,8 @@ Configure package managers (Maven, npm, Go, PyPI, Docker) to use [Sonatype Nexus
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
@@ -24,6 +24,7 @@ module "nexus_repository" {
|
||||
pypi = ["pypi-public", "pypi-private"]
|
||||
docker = ["docker-public", "docker-private"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -43,13 +44,14 @@ module "nexus_repository" {
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
maven = ["maven-public", "maven-releases", "maven-snapshots"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -58,13 +60,14 @@ module "nexus_repository" {
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
npm = ["npm-public", "@mycompany:npm-private"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -73,13 +76,14 @@ module "nexus_repository" {
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
go = ["go-public", "go-private"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -88,13 +92,14 @@ module "nexus_repository" {
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
pypi = ["pypi-public", "pypi-private"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -103,13 +108,14 @@ module "nexus_repository" {
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
docker = ["docker-public", "docker-private"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -118,14 +124,15 @@ module "nexus_repository" {
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_username = "custom-user"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
maven = ["maven-public"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -134,8 +141,8 @@ module "nexus_repository" {
|
||||
```tf
|
||||
module "nexus_repository" {
|
||||
source = "registry.coder.com/mavrickrishi/nexus-repository/coder"
|
||||
version = "1.0.1"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.main.id
|
||||
nexus_url = "https://nexus.example.com"
|
||||
nexus_password = var.nexus_api_token
|
||||
package_managers = {
|
||||
@@ -145,5 +152,6 @@ module "nexus_repository" {
|
||||
pypi = ["pypi-public", "pypi-private"]
|
||||
docker = ["docker-public", "docker-private"]
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -15,8 +15,8 @@ Automatically installs [Node.js](https://github.com/nodejs/node) via [`nvm`](htt
|
||||
module "nodejs" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/thezoker/nodejs/coder"
|
||||
version = "1.0.11"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.12"
|
||||
agent_id = coder_agent.main.id
|
||||
}
|
||||
```
|
||||
|
||||
@@ -28,8 +28,8 @@ This installs multiple versions of Node.js:
|
||||
module "nodejs" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/thezoker/nodejs/coder"
|
||||
version = "1.0.11"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.12"
|
||||
agent_id = coder_agent.main.id
|
||||
node_versions = [
|
||||
"18",
|
||||
"20",
|
||||
@@ -47,8 +47,8 @@ A example with all available options:
|
||||
module "nodejs" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/thezoker/nodejs/coder"
|
||||
version = "1.0.11"
|
||||
agent_id = coder_agent.example.id
|
||||
version = "1.0.12"
|
||||
agent_id = coder_agent.main.id
|
||||
nvm_version = "v0.39.7"
|
||||
nvm_install_prefix = "/opt/nvm"
|
||||
node_versions = [
|
||||
|
||||
Reference in New Issue
Block a user