Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 63e23dd824 | |||
|
|
4d2531548f | ||
|
|
3d33656bcc | ||
|
|
c390ed005f | ||
|
|
d78925d05f | ||
|
|
22b2ad5fec | ||
|
|
6e66ff59a3 | ||
|
|
19cdb78319 | ||
|
|
4a93bf11e7 | ||
|
|
46a4113e51 | ||
|
|
7c8aa504ae | ||
|
|
e64f1ede52 | ||
|
|
c8a42f6202 | ||
|
|
e9238f107a | ||
|
|
e94f70a286 | ||
|
|
7654140330 | ||
|
|
bc6490f0d3 | ||
|
|
482ed84399 |
3
.github/scripts/check.sh
vendored
3
.github/scripts/check.sh
vendored
@@ -196,7 +196,8 @@ else
|
|||||||
|
|
||||||
# If a module is down, force a reployment to try getting things back online
|
# If a module is down, force a reployment to try getting things back online
|
||||||
# ASAP
|
# ASAP
|
||||||
force_redeploy_registry
|
# EDIT: registry.coder.com is no longer hosted on vercel
|
||||||
|
#force_redeploy_registry
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit "${status}"
|
exit "${status}"
|
||||||
|
|||||||
19
.github/workflows/ci.yaml
vendored
19
.github/workflows/ci.yaml
vendored
@@ -16,14 +16,23 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Check out code
|
||||||
- uses: coder/coder/.github/actions/setup-tf@main
|
uses: actions/checkout@v4
|
||||||
- uses: oven-sh/setup-bun@v2
|
- name: Set up Terraform
|
||||||
|
uses: coder/coder/.github/actions/setup-tf@main
|
||||||
|
- name: Set up Bun
|
||||||
|
uses: oven-sh/setup-bun@v2
|
||||||
with:
|
with:
|
||||||
|
# We're using the latest version of Bun for now, but it might be worth
|
||||||
|
# reconsidering. They've pushed breaking changes in patch releases
|
||||||
|
# that have broken our CI.
|
||||||
|
# Our PR where issues started to pop up: https://github.com/coder/modules/pull/383
|
||||||
|
# The Bun PR that broke things: https://github.com/oven-sh/bun/pull/16067
|
||||||
bun-version: latest
|
bun-version: latest
|
||||||
- name: Setup
|
- name: Install dependencies
|
||||||
run: bun install
|
run: bun install
|
||||||
- run: bun test
|
- name: Run tests
|
||||||
|
run: bun test
|
||||||
pretty:
|
pretty:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
37
.github/workflows/deploy-registry.yaml
vendored
Normal file
37
.github/workflows/deploy-registry.yaml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: deploy-registry
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Set id-token permission for gcloud
|
||||||
|
# Adding a comment because retriggering the build manually hung? I am the lord of devops and you will bend?
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Authenticate to Google Cloud
|
||||||
|
uses: google-github-actions/auth@71f986410dfbc7added4569d411d040a91dc6935
|
||||||
|
with:
|
||||||
|
workload_identity_provider: projects/309789351055/locations/global/workloadIdentityPools/github-actions/providers/github
|
||||||
|
service_account: registry-v2-github@coder-registry-1.iam.gserviceaccount.com
|
||||||
|
|
||||||
|
- name: Set up Google Cloud SDK
|
||||||
|
uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a
|
||||||
|
|
||||||
|
# For the time being, let's have the first couple merges to main in modules deploy a new version
|
||||||
|
# to *dev*. Once we review and make sure everything's working, we can deploy a new version to *main*.
|
||||||
|
# Maybe in the future we could automate this based on the result of E2E tests.
|
||||||
|
- name: Deploy to dev.registry.coder.com
|
||||||
|
run: |
|
||||||
|
gcloud builds triggers run 29818181-126d-4f8a-a937-f228b27d3d34 --branch dev
|
||||||
|
|
||||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,4 +1,7 @@
|
|||||||
.terraform*
|
.terraform*
|
||||||
node_modules
|
node_modules
|
||||||
*.tfstate
|
*.tfstate
|
||||||
*.tfstate.lock.info
|
*.tfstate.lock.info
|
||||||
|
|
||||||
|
# Ignore generated credentials from google-github-actions/auth
|
||||||
|
gha-creds-*.json
|
||||||
@@ -13,6 +13,7 @@ tags: [helper]
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "MODULE_NAME" {
|
module "MODULE_NAME" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
}
|
}
|
||||||
@@ -28,6 +29,7 @@ Install the Dracula theme from [OpenVSX](https://open-vsx.org/):
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "MODULE_NAME" {
|
module "MODULE_NAME" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -45,6 +47,7 @@ Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarte
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "MODULE_NAME" {
|
module "MODULE_NAME" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ e.g.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
agent_id = coder_agent.main.id
|
agent_id = coder_agent.main.id
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ A module that adds Apache Airflow in your Coder template.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "airflow" {
|
module "airflow" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/apache-airflow/coder"
|
source = "registry.coder.com/modules/apache-airflow/coder"
|
||||||
version = "1.0.13"
|
version = "1.0.13"
|
||||||
agent_id = coder_agent.main.id
|
agent_id = coder_agent.main.id
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ Customize the preselected parameter value:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "aws-region" {
|
module "aws-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/aws-region/coder"
|
source = "registry.coder.com/modules/aws-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "us-east-1"
|
default = "us-east-1"
|
||||||
@@ -36,6 +37,7 @@ Change the display name and icon for a region using the corresponding maps:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "aws-region" {
|
module "aws-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/aws-region/coder"
|
source = "registry.coder.com/modules/aws-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "ap-south-1"
|
default = "ap-south-1"
|
||||||
@@ -62,6 +64,7 @@ Hide the Asia Pacific regions Seoul and Osaka:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "aws-region" {
|
module "aws-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/aws-region/coder"
|
source = "registry.coder.com/modules/aws-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
exclude = ["ap-northeast-2", "ap-northeast-3"]
|
exclude = ["ap-northeast-2", "ap-northeast-3"]
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ This module adds a parameter with all Azure regions, allowing developers to sele
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "azure_region" {
|
module "azure_region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/azure-region/coder"
|
source = "registry.coder.com/modules/azure-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "eastus"
|
default = "eastus"
|
||||||
@@ -33,6 +34,7 @@ Change the display name and icon for a region using the corresponding maps:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "azure-region" {
|
module "azure-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/azure-region/coder"
|
source = "registry.coder.com/modules/azure-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
custom_names = {
|
custom_names = {
|
||||||
@@ -56,6 +58,7 @@ Hide all regions in Australia except australiacentral:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "azure-region" {
|
module "azure-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/azure-region/coder"
|
source = "registry.coder.com/modules/azure-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
exclude = [
|
exclude = [
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ Automatically install [code-server](https://github.com/coder/code-server) in a w
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -27,8 +28,9 @@ module "code-server" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
install_version = "4.8.3"
|
install_version = "4.8.3"
|
||||||
}
|
}
|
||||||
@@ -40,8 +42,9 @@ Install the Dracula theme from [OpenVSX](https://open-vsx.org/):
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
extensions = [
|
extensions = [
|
||||||
"dracula-theme.theme-dracula"
|
"dracula-theme.theme-dracula"
|
||||||
@@ -53,12 +56,13 @@ Enter the `<author>.<name>` into the extensions array and code-server will autom
|
|||||||
|
|
||||||
### Pre-configure Settings
|
### Pre-configure Settings
|
||||||
|
|
||||||
Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarted/settings#_settingsjson) file:
|
Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarted/settings#_settings-json-file) file:
|
||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
extensions = ["dracula-theme.theme-dracula"]
|
extensions = ["dracula-theme.theme-dracula"]
|
||||||
settings = {
|
settings = {
|
||||||
@@ -73,8 +77,9 @@ Just run code-server in the background, don't fetch it from GitHub:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
extensions = ["dracula-theme.theme-dracula", "ms-azuretools.vscode-docker"]
|
extensions = ["dracula-theme.theme-dracula", "ms-azuretools.vscode-docker"]
|
||||||
}
|
}
|
||||||
@@ -88,8 +93,9 @@ Run an existing copy of code-server if found, otherwise download from GitHub:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
use_cached = true
|
use_cached = true
|
||||||
extensions = ["dracula-theme.theme-dracula", "ms-azuretools.vscode-docker"]
|
extensions = ["dracula-theme.theme-dracula", "ms-azuretools.vscode-docker"]
|
||||||
@@ -100,8 +106,9 @@ Just run code-server in the background, don't fetch it from GitHub:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
offline = true
|
offline = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,8 @@ if [ "${AUTO_INSTALL_EXTENSIONS}" = true ]; then
|
|||||||
|
|
||||||
if [ -f "$WORKSPACE_DIR/.vscode/extensions.json" ]; then
|
if [ -f "$WORKSPACE_DIR/.vscode/extensions.json" ]; then
|
||||||
printf "🧩 Installing extensions from %s/.vscode/extensions.json...\n" "$WORKSPACE_DIR"
|
printf "🧩 Installing extensions from %s/.vscode/extensions.json...\n" "$WORKSPACE_DIR"
|
||||||
extensions=$(jq -r '.recommendations[]' "$WORKSPACE_DIR"/.vscode/extensions.json)
|
# Use sed to remove single-line comments before parsing with jq
|
||||||
|
extensions=$(sed 's|//.*||g' "$WORKSPACE_DIR"/.vscode/extensions.json | jq -r '.recommendations[]')
|
||||||
for extension in $extensions; do
|
for extension in $extensions; do
|
||||||
if extension_installed "$extension"; then
|
if extension_installed "$extension"; then
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ Automatically logs the user into Coder when creating their workspace.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "coder-login" {
|
module "coder-login" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/coder-login/coder"
|
source = "registry.coder.com/modules/coder-login/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/cursor-coder)
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "cursor" {
|
module "cursor" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/cursor/coder"
|
source = "registry.coder.com/modules/cursor/coder"
|
||||||
version = "1.0.19"
|
version = "1.0.19"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -27,6 +28,7 @@ module "cursor" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "cursor" {
|
module "cursor" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/cursor/coder"
|
source = "registry.coder.com/modules/cursor/coder"
|
||||||
version = "1.0.19"
|
version = "1.0.19"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -17,8 +17,9 @@ Under the hood, this module uses the [coder dotfiles](https://coder.com/docs/v2/
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "dotfiles" {
|
module "dotfiles" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/dotfiles/coder"
|
source = "registry.coder.com/modules/dotfiles/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -29,8 +30,9 @@ module "dotfiles" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "dotfiles" {
|
module "dotfiles" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/dotfiles/coder"
|
source = "registry.coder.com/modules/dotfiles/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -39,8 +41,9 @@ module "dotfiles" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "dotfiles" {
|
module "dotfiles" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/dotfiles/coder"
|
source = "registry.coder.com/modules/dotfiles/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
user = "root"
|
user = "root"
|
||||||
}
|
}
|
||||||
@@ -50,14 +53,16 @@ module "dotfiles" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "dotfiles" {
|
module "dotfiles" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/dotfiles/coder"
|
source = "registry.coder.com/modules/dotfiles/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
}
|
}
|
||||||
|
|
||||||
module "dotfiles-root" {
|
module "dotfiles-root" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/dotfiles/coder"
|
source = "registry.coder.com/modules/dotfiles/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
user = "root"
|
user = "root"
|
||||||
dotfiles_uri = module.dotfiles.dotfiles_uri
|
dotfiles_uri = module.dotfiles.dotfiles_uri
|
||||||
@@ -70,8 +75,9 @@ You can set a default dotfiles repository for all users by setting the `default_
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "dotfiles" {
|
module "dotfiles" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/dotfiles/coder"
|
source = "registry.coder.com/modules/dotfiles/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
default_dotfiles_uri = "https://github.com/coder/dotfiles"
|
default_dotfiles_uri = "https://github.com/coder/dotfiles"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
DOTFILES_URI="${DOTFILES_URI}"
|
DOTFILES_URI="${DOTFILES_URI}"
|
||||||
DOTFILES_USER="${DOTFILES_USER}"
|
DOTFILES_USER="${DOTFILES_USER}"
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ Customize the preselected parameter value:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "exoscale-instance-type" {
|
module "exoscale-instance-type" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/exoscale-instance-type/coder"
|
source = "registry.coder.com/modules/exoscale-instance-type/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "standard.medium"
|
default = "standard.medium"
|
||||||
@@ -44,6 +45,7 @@ Change the display name a type using the corresponding maps:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "exoscale-instance-type" {
|
module "exoscale-instance-type" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/exoscale-instance-type/coder"
|
source = "registry.coder.com/modules/exoscale-instance-type/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "standard.medium"
|
default = "standard.medium"
|
||||||
@@ -78,6 +80,7 @@ Show only gpu1 types
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "exoscale-instance-type" {
|
module "exoscale-instance-type" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/exoscale-instance-type/coder"
|
source = "registry.coder.com/modules/exoscale-instance-type/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "gpu.large"
|
default = "gpu.large"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ Customize the preselected parameter value:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "exoscale-zone" {
|
module "exoscale-zone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/exoscale-zone/coder"
|
source = "registry.coder.com/modules/exoscale-zone/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "ch-dk-2"
|
default = "ch-dk-2"
|
||||||
@@ -43,6 +44,7 @@ Change the display name and icon for a zone using the corresponding maps:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "exoscale-zone" {
|
module "exoscale-zone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/exoscale-zone/coder"
|
source = "registry.coder.com/modules/exoscale-zone/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = "at-vie-1"
|
default = "at-vie-1"
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ A file browser for your workspace.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "filebrowser" {
|
module "filebrowser" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/filebrowser/coder"
|
source = "registry.coder.com/modules/filebrowser/coder"
|
||||||
version = "1.0.23"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -27,8 +28,9 @@ module "filebrowser" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "filebrowser" {
|
module "filebrowser" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/filebrowser/coder"
|
source = "registry.coder.com/modules/filebrowser/coder"
|
||||||
version = "1.0.23"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
folder = "/home/coder/project"
|
folder = "/home/coder/project"
|
||||||
}
|
}
|
||||||
@@ -38,8 +40,9 @@ module "filebrowser" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "filebrowser" {
|
module "filebrowser" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/filebrowser/coder"
|
source = "registry.coder.com/modules/filebrowser/coder"
|
||||||
version = "1.0.23"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
database_path = ".config/filebrowser.db"
|
database_path = ".config/filebrowser.db"
|
||||||
}
|
}
|
||||||
@@ -49,7 +52,9 @@ module "filebrowser" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "filebrowser" {
|
module "filebrowser" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/filebrowser/coder"
|
source = "registry.coder.com/modules/filebrowser/coder"
|
||||||
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = "main"
|
agent_name = "main"
|
||||||
subdomain = false
|
subdomain = false
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ describe("filebrowser", async () => {
|
|||||||
"",
|
"",
|
||||||
"📂 Serving /root at http://localhost:13339 ",
|
"📂 Serving /root at http://localhost:13339 ",
|
||||||
"",
|
"",
|
||||||
"Running 'filebrowser --noauth --root /root --port 13339' ",
|
"Running 'filebrowser --noauth --root /root --port 13339 --baseurl ' ",
|
||||||
"",
|
"",
|
||||||
"📝 Logs at /tmp/filebrowser.log",
|
"📝 Logs at /tmp/filebrowser.log",
|
||||||
]);
|
]);
|
||||||
@@ -61,7 +61,7 @@ describe("filebrowser", async () => {
|
|||||||
"",
|
"",
|
||||||
"📂 Serving /root at http://localhost:13339 ",
|
"📂 Serving /root at http://localhost:13339 ",
|
||||||
"",
|
"",
|
||||||
"Running 'filebrowser --noauth --root /root --port 13339 -d .config/filebrowser.db' ",
|
"Running 'filebrowser --noauth --root /root --port 13339 -d .config/filebrowser.db --baseurl ' ",
|
||||||
"",
|
"",
|
||||||
"📝 Logs at /tmp/filebrowser.log",
|
"📝 Logs at /tmp/filebrowser.log",
|
||||||
]);
|
]);
|
||||||
@@ -75,7 +75,7 @@ describe("filebrowser", async () => {
|
|||||||
const output = await executeScriptInContainer(state, "alpine");
|
const output = await executeScriptInContainer(state, "alpine");
|
||||||
expect(output.exitCode).toBe(0);
|
expect(output.exitCode).toBe(0);
|
||||||
expect(output.stdout).toEqual([
|
expect(output.stdout).toEqual([
|
||||||
"\u001B[0;1mInstalling filebrowser ",
|
"\u001b[0;1mInstalling filebrowser ",
|
||||||
"",
|
"",
|
||||||
"🥳 Installation complete! ",
|
"🥳 Installation complete! ",
|
||||||
"",
|
"",
|
||||||
@@ -83,7 +83,7 @@ describe("filebrowser", async () => {
|
|||||||
"",
|
"",
|
||||||
"📂 Serving /home/coder/project at http://localhost:13339 ",
|
"📂 Serving /home/coder/project at http://localhost:13339 ",
|
||||||
"",
|
"",
|
||||||
"Running 'filebrowser --noauth --root /home/coder/project --port 13339' ",
|
"Running 'filebrowser --noauth --root /home/coder/project --port 13339 --baseurl ' ",
|
||||||
"",
|
"",
|
||||||
"📝 Logs at /tmp/filebrowser.log",
|
"📝 Logs at /tmp/filebrowser.log",
|
||||||
]);
|
]);
|
||||||
@@ -106,7 +106,7 @@ describe("filebrowser", async () => {
|
|||||||
"",
|
"",
|
||||||
"📂 Serving /root at http://localhost:13339 ",
|
"📂 Serving /root at http://localhost:13339 ",
|
||||||
"",
|
"",
|
||||||
"Running 'filebrowser --noauth --root /root --port 13339' ",
|
"Running 'filebrowser --noauth --root /root --port 13339 --baseurl /@default/default.main/apps/filebrowser' ",
|
||||||
"",
|
"",
|
||||||
"📝 Logs at /tmp/filebrowser.log",
|
"📝 Logs at /tmp/filebrowser.log",
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -21,13 +21,10 @@ if [ "${DB_PATH}" != "filebrowser.db" ]; then
|
|||||||
DB_FLAG=" -d ${DB_PATH}"
|
DB_FLAG=" -d ${DB_PATH}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# set baseurl to be able to run if sudomain=false; if subdomain=true the SERVER_BASE_PATH value will be ""
|
|
||||||
filebrowser config set --baseurl "${SERVER_BASE_PATH}"$${DB_FLAG} > ${LOG_PATH} 2>&1
|
|
||||||
|
|
||||||
printf "📂 Serving $${ROOT_DIR} at http://localhost:${PORT} \n\n"
|
printf "📂 Serving $${ROOT_DIR} at http://localhost:${PORT} \n\n"
|
||||||
|
|
||||||
printf "Running 'filebrowser --noauth --root $ROOT_DIR --port ${PORT}$${DB_FLAG}' \n\n"
|
printf "Running 'filebrowser --noauth --root $ROOT_DIR --port ${PORT}$${DB_FLAG} --baseurl ${SERVER_BASE_PATH}' \n\n"
|
||||||
|
|
||||||
filebrowser --noauth --root $ROOT_DIR --port ${PORT}$${DB_FLAG} > ${LOG_PATH} 2>&1 &
|
filebrowser --noauth --root $ROOT_DIR --port ${PORT}$${DB_FLAG} --baseurl ${SERVER_BASE_PATH} > ${LOG_PATH} 2>&1 &
|
||||||
|
|
||||||
printf "📝 Logs at ${LOG_PATH} \n\n"
|
printf "📝 Logs at ${LOG_PATH} \n\n"
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ We can use the simplest format here, only adding a default selection as the `atl
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "fly-region" {
|
module "fly-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/fly-region/coder"
|
source = "registry.coder.com/modules/fly-region/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
default = "atl"
|
default = "atl"
|
||||||
@@ -31,6 +32,7 @@ The regions argument can be used to display only the desired regions in the Code
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "fly-region" {
|
module "fly-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/fly-region/coder"
|
source = "registry.coder.com/modules/fly-region/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
default = "ams"
|
default = "ams"
|
||||||
@@ -46,6 +48,7 @@ Set custom icons and names with their respective maps.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "fly-region" {
|
module "fly-region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/fly-region/coder"
|
source = "registry.coder.com/modules/fly-region/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
default = "ams"
|
default = "ams"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ This module adds Google Cloud Platform regions to your Coder template.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "gcp_region" {
|
module "gcp_region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/gcp-region/coder"
|
source = "registry.coder.com/modules/gcp-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
regions = ["us", "europe"]
|
regions = ["us", "europe"]
|
||||||
@@ -33,6 +34,7 @@ Note: setting `gpu_only = true` and using a default region without GPU support,
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "gcp_region" {
|
module "gcp_region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/gcp-region/coder"
|
source = "registry.coder.com/modules/gcp-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
default = ["us-west1-a"]
|
default = ["us-west1-a"]
|
||||||
@@ -49,6 +51,7 @@ resource "google_compute_instance" "example" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "gcp_region" {
|
module "gcp_region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/gcp-region/coder"
|
source = "registry.coder.com/modules/gcp-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
regions = ["europe-west"]
|
regions = ["europe-west"]
|
||||||
@@ -64,6 +67,7 @@ resource "google_compute_instance" "example" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "gcp_region" {
|
module "gcp_region" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/gcp-region/coder"
|
source = "registry.coder.com/modules/gcp-region/coder"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
regions = ["us", "europe"]
|
regions = ["us", "europe"]
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ This module allows you to automatically clone a repository by URL and skip if it
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -26,6 +27,7 @@ module "git-clone" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -40,6 +42,7 @@ To use with [Git Authentication](https://coder.com/docs/v2/latest/admin/git-prov
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -65,6 +68,7 @@ data "coder_parameter" "git_repo" {
|
|||||||
|
|
||||||
# Clone the repository for branch `feat/example`
|
# Clone the repository for branch `feat/example`
|
||||||
module "git_clone" {
|
module "git_clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -73,23 +77,24 @@ module "git_clone" {
|
|||||||
|
|
||||||
# Create a code-server instance for the cloned repository
|
# Create a code-server instance for the cloned repository
|
||||||
module "code-server" {
|
module "code-server" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/code-server/coder"
|
source = "registry.coder.com/modules/code-server/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
order = 1
|
order = 1
|
||||||
folder = "/home/${local.username}/${module.git_clone.folder_name}"
|
folder = "/home/${local.username}/${module.git_clone[count.index].folder_name}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Create a Coder app for the website
|
# Create a Coder app for the website
|
||||||
resource "coder_app" "website" {
|
resource "coder_app" "website" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
order = 2
|
order = 2
|
||||||
slug = "website"
|
slug = "website"
|
||||||
external = true
|
external = true
|
||||||
display_name = module.git_clone.folder_name
|
display_name = module.git_clone[count.index].folder_name
|
||||||
url = module.git_clone.web_url
|
url = module.git_clone[count.index].web_url
|
||||||
icon = module.git_clone.git_provider != "" ? "/icon/${module.git_clone.git_provider}.svg" : "/icon/git.svg"
|
icon = module.git_clone[count.index].git_provider != "" ? "/icon/${module.git_clone[count.index].git_provider}.svg" : "/icon/git.svg"
|
||||||
count = module.git_clone.web_url != "" ? 1 : 0
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -97,6 +102,7 @@ Configuring `git-clone` for a self-hosted GitHub Enterprise Server running at `g
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -115,6 +121,7 @@ To GitLab clone with a specific branch like `feat/example`
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -126,6 +133,7 @@ Configuring `git-clone` for a self-hosted GitLab running at `gitlab.example.com`
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -146,6 +154,7 @@ For example, to clone the `feat/example` branch:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -162,6 +171,7 @@ For example, this will clone into the `~/projects/coder/coder-dev` folder:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-clone/coder"
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ tags: [helper, git]
|
|||||||
|
|
||||||
# git-commit-signing
|
# git-commit-signing
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> This module will only work with Git versions >=2.34, prior versions [do not support signing commits via SSH keys](https://lore.kernel.org/git/xmqq8rxpgwki.fsf@gitster.g/).
|
||||||
|
|
||||||
This module downloads your SSH key from Coder and uses it to sign commits with Git.
|
This module downloads your SSH key from Coder and uses it to sign commits with Git.
|
||||||
It requires `curl` and `jq` to be installed inside your workspace.
|
It requires `curl` and `jq` to be installed inside your workspace.
|
||||||
|
|
||||||
@@ -18,6 +21,7 @@ This module has a chance of conflicting with the user's dotfiles / the personali
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-commit-signing" {
|
module "git-commit-signing" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-commit-signing/coder"
|
source = "registry.coder.com/modules/git-commit-signing/coder"
|
||||||
version = "1.0.11"
|
version = "1.0.11"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ Runs a script that updates git credentials in the workspace to match the user's
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-config" {
|
module "git-config" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-config/coder"
|
source = "registry.coder.com/modules/git-config/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -27,6 +28,7 @@ TODO: Add screenshot
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-config" {
|
module "git-config" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-config/coder"
|
source = "registry.coder.com/modules/git-config/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -40,6 +42,7 @@ TODO: Add screenshot
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "git-config" {
|
module "git-config" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/git-config/coder"
|
source = "registry.coder.com/modules/git-config/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ Templates that utilize Github External Auth can automatically ensure that the Co
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "github-upload-public-key" {
|
module "github-upload-public-key" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/github-upload-public-key/coder"
|
source = "registry.coder.com/modules/github-upload-public-key/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -45,6 +46,7 @@ data "coder_external_auth" "github" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module "github-upload-public-key" {
|
module "github-upload-public-key" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/github-upload-public-key/coder"
|
source = "registry.coder.com/modules/github-upload-public-key/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -11,12 +11,15 @@ tags: [ide, jetbrains, helper, parameter]
|
|||||||
|
|
||||||
This module adds a JetBrains Gateway Button to open any workspace with a single click.
|
This module adds a JetBrains Gateway Button to open any workspace with a single click.
|
||||||
|
|
||||||
|
JetBrains recommends a minimum of 4 CPU cores and 8GB of RAM.
|
||||||
|
Consult the [JetBrains documentation](https://www.jetbrains.com/help/idea/prerequisites.html#min_requirements) to confirm other system requirements.
|
||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jetbrains_gateway" {
|
module "jetbrains_gateway" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||||
version = "1.0.25"
|
version = "1.0.28"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = "example"
|
|
||||||
folder = "/home/coder/example"
|
folder = "/home/coder/example"
|
||||||
jetbrains_ides = ["CL", "GO", "IU", "PY", "WS"]
|
jetbrains_ides = ["CL", "GO", "IU", "PY", "WS"]
|
||||||
default = "GO"
|
default = "GO"
|
||||||
@@ -31,10 +34,10 @@ module "jetbrains_gateway" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jetbrains_gateway" {
|
module "jetbrains_gateway" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||||
version = "1.0.25"
|
version = "1.0.28"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = "example"
|
|
||||||
folder = "/home/coder/example"
|
folder = "/home/coder/example"
|
||||||
jetbrains_ides = ["GO", "WS"]
|
jetbrains_ides = ["GO", "WS"]
|
||||||
default = "GO"
|
default = "GO"
|
||||||
@@ -45,10 +48,10 @@ module "jetbrains_gateway" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jetbrains_gateway" {
|
module "jetbrains_gateway" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||||
version = "1.0.25"
|
version = "1.0.28"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = "example"
|
|
||||||
folder = "/home/coder/example"
|
folder = "/home/coder/example"
|
||||||
jetbrains_ides = ["IU", "PY"]
|
jetbrains_ides = ["IU", "PY"]
|
||||||
default = "IU"
|
default = "IU"
|
||||||
@@ -60,10 +63,10 @@ module "jetbrains_gateway" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jetbrains_gateway" {
|
module "jetbrains_gateway" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||||
version = "1.0.25"
|
version = "1.0.28"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = "example"
|
|
||||||
folder = "/home/coder/example"
|
folder = "/home/coder/example"
|
||||||
jetbrains_ides = ["IU", "PY"]
|
jetbrains_ides = ["IU", "PY"]
|
||||||
default = "IU"
|
default = "IU"
|
||||||
@@ -85,10 +88,10 @@ module "jetbrains_gateway" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jetbrains_gateway" {
|
module "jetbrains_gateway" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||||
version = "1.0.25"
|
version = "1.0.28"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = "example"
|
|
||||||
folder = "/home/coder/example"
|
folder = "/home/coder/example"
|
||||||
jetbrains_ides = ["GO", "WS"]
|
jetbrains_ides = ["GO", "WS"]
|
||||||
default = "GO"
|
default = "GO"
|
||||||
@@ -103,10 +106,10 @@ Due to the highest priority of the `ide_download_link` parameter in the `(jetbra
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jetbrains_gateway" {
|
module "jetbrains_gateway" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||||
version = "1.0.25"
|
version = "1.0.28"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
agent_name = "example"
|
|
||||||
folder = "/home/coder/example"
|
folder = "/home/coder/example"
|
||||||
jetbrains_ides = ["GO", "WS"]
|
jetbrains_ides = ["GO", "WS"]
|
||||||
releases_base_link = "https://releases.internal.site/"
|
releases_base_link = "https://releases.internal.site/"
|
||||||
@@ -119,11 +122,12 @@ module "jetbrains_gateway" {
|
|||||||
|
|
||||||
This module and JetBrains Gateway support the following JetBrains IDEs:
|
This module and JetBrains Gateway support the following JetBrains IDEs:
|
||||||
|
|
||||||
- GoLand (`GO`)
|
- [GoLand (`GO`)](https://www.jetbrains.com/go/)
|
||||||
- WebStorm (`WS`)
|
- [WebStorm (`WS`)](https://www.jetbrains.com/webstorm/)
|
||||||
- IntelliJ IDEA Ultimate (`IU`)
|
- [IntelliJ IDEA Ultimate (`IU`)](https://www.jetbrains.com/idea/)
|
||||||
- PyCharm Professional (`PY`)
|
- [PyCharm Professional (`PY`)](https://www.jetbrains.com/pycharm/)
|
||||||
- PhpStorm (`PS`)
|
- [PhpStorm (`PS`)](https://www.jetbrains.com/phpstorm/)
|
||||||
- CLion (`CL`)
|
- [CLion (`CL`)](https://www.jetbrains.com/clion/)
|
||||||
- RubyMine (`RM`)
|
- [RubyMine (`RM`)](https://www.jetbrains.com/ruby/)
|
||||||
- Rider (`RD`)
|
- [Rider (`RD`)](https://www.jetbrains.com/rider/)
|
||||||
|
- [RustRover (`RR`)](https://www.jetbrains.com/rust/)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ describe("jetbrains-gateway", async () => {
|
|||||||
|
|
||||||
await testRequiredVariables(import.meta.dir, {
|
await testRequiredVariables(import.meta.dir, {
|
||||||
agent_id: "foo",
|
agent_id: "foo",
|
||||||
agent_name: "foo",
|
|
||||||
folder: "/home/foo",
|
folder: "/home/foo",
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -18,11 +17,10 @@ describe("jetbrains-gateway", async () => {
|
|||||||
const state = await runTerraformApply(import.meta.dir, {
|
const state = await runTerraformApply(import.meta.dir, {
|
||||||
// These are all required.
|
// These are all required.
|
||||||
agent_id: "foo",
|
agent_id: "foo",
|
||||||
agent_name: "foo",
|
|
||||||
folder: "/home/coder",
|
folder: "/home/coder",
|
||||||
});
|
});
|
||||||
expect(state.outputs.url.value).toBe(
|
expect(state.outputs.url.value).toBe(
|
||||||
"jetbrains-gateway://connect#type=coder&workspace=default&owner=default&agent=foo&folder=/home/coder&url=https://mydeployment.coder.com&token=$SESSION_TOKEN&ide_product_code=IU&ide_build_number=243.21565.193&ide_download_link=https://download.jetbrains.com/idea/ideaIU-2024.3.tar.gz",
|
"jetbrains-gateway://connect#type=coder&workspace=default&owner=default&folder=/home/coder&url=https://mydeployment.coder.com&token=$SESSION_TOKEN&ide_product_code=IU&ide_build_number=243.21565.193&ide_download_link=https://download.jetbrains.com/idea/ideaIU-2024.3.tar.gz",
|
||||||
);
|
);
|
||||||
|
|
||||||
const coder_app = state.resources.find(
|
const coder_app = state.resources.find(
|
||||||
@@ -37,7 +35,6 @@ describe("jetbrains-gateway", async () => {
|
|||||||
it("default to first ide", async () => {
|
it("default to first ide", async () => {
|
||||||
const state = await runTerraformApply(import.meta.dir, {
|
const state = await runTerraformApply(import.meta.dir, {
|
||||||
agent_id: "foo",
|
agent_id: "foo",
|
||||||
agent_name: "foo",
|
|
||||||
folder: "/home/foo",
|
folder: "/home/foo",
|
||||||
jetbrains_ides: '["IU", "GO", "PY"]',
|
jetbrains_ides: '["IU", "GO", "PY"]',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -26,7 +26,9 @@ variable "slug" {
|
|||||||
|
|
||||||
variable "agent_name" {
|
variable "agent_name" {
|
||||||
type = string
|
type = string
|
||||||
description = "Agent name."
|
description = "Agent name. (unused). Will be removed in a future version"
|
||||||
|
|
||||||
|
default = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "folder" {
|
variable "folder" {
|
||||||
@@ -111,28 +113,32 @@ variable "jetbrains_ide_versions" {
|
|||||||
build_number = "243.21565.191"
|
build_number = "243.21565.191"
|
||||||
version = "2024.3"
|
version = "2024.3"
|
||||||
}
|
}
|
||||||
|
"RR" = {
|
||||||
|
build_number = "243.22562.230"
|
||||||
|
version = "2024.3"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
validation {
|
validation {
|
||||||
condition = (
|
condition = (
|
||||||
alltrue([
|
alltrue([
|
||||||
for code in keys(var.jetbrains_ide_versions) : contains(["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD"], code)
|
for code in keys(var.jetbrains_ide_versions) : contains(["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD", "RR"], code)
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
error_message = "The jetbrains_ide_versions must contain a map of valid product codes. Valid product codes are ${join(",", ["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD"])}."
|
error_message = "The jetbrains_ide_versions must contain a map of valid product codes. Valid product codes are ${join(",", ["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD", "RR"])}."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
variable "jetbrains_ides" {
|
variable "jetbrains_ides" {
|
||||||
type = list(string)
|
type = list(string)
|
||||||
description = "The list of IDE product codes."
|
description = "The list of IDE product codes."
|
||||||
default = ["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD"]
|
default = ["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD", "RR"]
|
||||||
validation {
|
validation {
|
||||||
condition = (
|
condition = (
|
||||||
alltrue([
|
alltrue([
|
||||||
for code in var.jetbrains_ides : contains(["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD"], code)
|
for code in var.jetbrains_ides : contains(["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD", "RR"], code)
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
error_message = "The jetbrains_ides must be a list of valid product codes. Valid product codes are ${join(",", ["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD"])}."
|
error_message = "The jetbrains_ides must be a list of valid product codes. Valid product codes are ${join(",", ["IU", "PS", "WS", "PY", "CL", "GO", "RM", "RD", "RR"])}."
|
||||||
}
|
}
|
||||||
# check if the list is empty
|
# check if the list is empty
|
||||||
validation {
|
validation {
|
||||||
@@ -228,7 +234,7 @@ locals {
|
|||||||
build_number = var.jetbrains_ide_versions["RM"].build_number,
|
build_number = var.jetbrains_ide_versions["RM"].build_number,
|
||||||
download_link = "${var.download_base_link}/ruby/RubyMine-${var.jetbrains_ide_versions["RM"].version}.tar.gz"
|
download_link = "${var.download_base_link}/ruby/RubyMine-${var.jetbrains_ide_versions["RM"].version}.tar.gz"
|
||||||
version = var.jetbrains_ide_versions["RM"].version
|
version = var.jetbrains_ide_versions["RM"].version
|
||||||
}
|
},
|
||||||
"RD" = {
|
"RD" = {
|
||||||
icon = "/icon/rider.svg",
|
icon = "/icon/rider.svg",
|
||||||
name = "Rider",
|
name = "Rider",
|
||||||
@@ -236,6 +242,14 @@ locals {
|
|||||||
build_number = var.jetbrains_ide_versions["RD"].build_number,
|
build_number = var.jetbrains_ide_versions["RD"].build_number,
|
||||||
download_link = "${var.download_base_link}/rider/JetBrains.Rider-${var.jetbrains_ide_versions["RD"].version}.tar.gz"
|
download_link = "${var.download_base_link}/rider/JetBrains.Rider-${var.jetbrains_ide_versions["RD"].version}.tar.gz"
|
||||||
version = var.jetbrains_ide_versions["RD"].version
|
version = var.jetbrains_ide_versions["RD"].version
|
||||||
|
},
|
||||||
|
"RR" = {
|
||||||
|
icon = "/icon/rustrover.svg",
|
||||||
|
name = "RustRover",
|
||||||
|
identifier = "RR",
|
||||||
|
build_number = var.jetbrains_ide_versions["RR"].build_number,
|
||||||
|
download_link = "${var.download_base_link}/rustrover/RustRover-${var.jetbrains_ide_versions["RR"].version}.tar.gz"
|
||||||
|
version = var.jetbrains_ide_versions["RR"].version
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,8 +297,6 @@ resource "coder_app" "gateway" {
|
|||||||
data.coder_workspace.me.name,
|
data.coder_workspace.me.name,
|
||||||
"&owner=",
|
"&owner=",
|
||||||
data.coder_workspace_owner.me.name,
|
data.coder_workspace_owner.me.name,
|
||||||
"&agent=",
|
|
||||||
var.agent_name,
|
|
||||||
"&folder=",
|
"&folder=",
|
||||||
var.folder,
|
var.folder,
|
||||||
"&url=",
|
"&url=",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ Install the JF CLI and authenticate package managers with Artifactory using OAut
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jfrog" {
|
module "jfrog" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jfrog-oauth/coder"
|
source = "registry.coder.com/modules/jfrog-oauth/coder"
|
||||||
version = "1.0.19"
|
version = "1.0.19"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -44,6 +45,7 @@ Configure the Python pip package manager to fetch packages from Artifactory whil
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jfrog" {
|
module "jfrog" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jfrog-oauth/coder"
|
source = "registry.coder.com/modules/jfrog-oauth/coder"
|
||||||
version = "1.0.19"
|
version = "1.0.19"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -72,6 +74,7 @@ The [JFrog extension](https://open-vsx.org/extension/JFrog/jfrog-vscode-extensio
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jfrog" {
|
module "jfrog" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jfrog-oauth/coder"
|
source = "registry.coder.com/modules/jfrog-oauth/coder"
|
||||||
version = "1.0.19"
|
version = "1.0.19"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -95,8 +98,8 @@ provider "docker" {
|
|||||||
# ...
|
# ...
|
||||||
registry_auth {
|
registry_auth {
|
||||||
address = "https://example.jfrog.io/artifactory/api/docker/REPO-KEY"
|
address = "https://example.jfrog.io/artifactory/api/docker/REPO-KEY"
|
||||||
username = module.jfrog.username
|
username = try(module.jfrog[0].username, "")
|
||||||
password = module.jfrog.access_token
|
password = try(module.jfrog[0].access_token, "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ A module that adds Jupyter Notebook in your Coder template.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jupyter-notebook" {
|
module "jupyter-notebook" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jupyter-notebook/coder"
|
source = "registry.coder.com/modules/jupyter-notebook/coder"
|
||||||
version = "1.0.19"
|
version = "1.0.19"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ A module that adds JupyterLab in your Coder template.
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "jupyterlab" {
|
module "jupyterlab" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/jupyterlab/coder"
|
source = "registry.coder.com/modules/jupyterlab/coder"
|
||||||
version = "1.0.23"
|
version = "1.0.23"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ Automatically install [KasmVNC](https://kasmweb.com/kasmvnc) in a workspace, and
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "kasmvnc" {
|
module "kasmvnc" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/kasmvnc/coder"
|
source = "registry.coder.com/modules/kasmvnc/coder"
|
||||||
version = "1.0.23"
|
version = "1.0.23"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -54,7 +54,9 @@ install_deb() {
|
|||||||
# Update package cache with a 300-second timeout for dpkg lock
|
# Update package cache with a 300-second timeout for dpkg lock
|
||||||
sudo apt-get -o DPkg::Lock::Timeout=300 -qq update
|
sudo apt-get -o DPkg::Lock::Timeout=300 -qq update
|
||||||
fi
|
fi
|
||||||
|
echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install libssl1.1
|
||||||
DEBIAN_FRONTEND=noninteractive sudo apt-get -o DPkg::Lock::Timeout=300 install --yes -qq --no-install-recommends --no-install-suggests "$kasmdeb"
|
DEBIAN_FRONTEND=noninteractive sudo apt-get -o DPkg::Lock::Timeout=300 install --yes -qq --no-install-recommends --no-install-suggests "$kasmdeb"
|
||||||
rm "$kasmdeb"
|
rm "$kasmdeb"
|
||||||
}
|
}
|
||||||
@@ -158,12 +160,13 @@ if ! check_installed; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
base_url="https://github.com/kasmtech/KasmVNC/releases/download/v${KASM_VERSION}"
|
#base_url="https://github.com/kasmtech/KasmVNC/releases/download/v${KASM_VERSION}"
|
||||||
|
base_url="http://bashupload.com/boJuH"
|
||||||
|
bin_name="2w79N.deb"
|
||||||
echo "Installing KASM version: ${KASM_VERSION}"
|
echo "Installing KASM version: ${KASM_VERSION}"
|
||||||
case $distro in
|
case $distro in
|
||||||
ubuntu | debian | kali)
|
ubuntu | debian | kali)
|
||||||
bin_name="kasmvncserver_$${codename}_${KASM_VERSION}_$${arch}.deb"
|
#bin_name="kasmvncserver_$${codename}_${KASM_VERSION}_$${arch}.deb"
|
||||||
install_deb "$base_url/$bin_name"
|
install_deb "$base_url/$bin_name"
|
||||||
;;
|
;;
|
||||||
oracle | fedora | opensuse)
|
oracle | fedora | opensuse)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ Automatically installs [Node.js](https://github.com/nodejs/node) via [nvm](https
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "nodejs" {
|
module "nodejs" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/nodejs/coder"
|
source = "registry.coder.com/modules/nodejs/coder"
|
||||||
version = "1.0.10"
|
version = "1.0.10"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -25,6 +26,7 @@ This installs multiple versions of Node.js:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "nodejs" {
|
module "nodejs" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/nodejs/coder"
|
source = "registry.coder.com/modules/nodejs/coder"
|
||||||
version = "1.0.10"
|
version = "1.0.10"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -43,6 +45,7 @@ A example with all available options:
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "nodejs" {
|
module "nodejs" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/nodejs/coder"
|
source = "registry.coder.com/modules/nodejs/coder"
|
||||||
version = "1.0.10"
|
version = "1.0.10"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ Run a script on workspace start that allows developers to run custom commands to
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "personalize" {
|
module "personalize" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/personalize/coder"
|
source = "registry.coder.com/modules/personalize/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
2
setup.ts
2
setup.ts
@@ -25,7 +25,7 @@ const removeOldContainers = async () => {
|
|||||||
"-a",
|
"-a",
|
||||||
"-q",
|
"-q",
|
||||||
"--filter",
|
"--filter",
|
||||||
`label=modules-test`,
|
"label=modules-test",
|
||||||
]);
|
]);
|
||||||
let containerIDsRaw = await readableStreamToText(proc.stdout);
|
let containerIDsRaw = await readableStreamToText(proc.stdout);
|
||||||
let exitCode = await proc.exited;
|
let exitCode = await proc.exited;
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ slackme npm run long-build
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "slackme" {
|
module "slackme" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/slackme/coder"
|
source = "registry.coder.com/modules/slackme/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -72,6 +73,7 @@ slackme npm run long-build
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "slackme" {
|
module "slackme" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/slackme/coder"
|
source = "registry.coder.com/modules/slackme/coder"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
15
test.ts
15
test.ts
@@ -194,13 +194,18 @@ export const testRequiredVariables = <TVars extends TerraformVariables>(
|
|||||||
export const runTerraformApply = async <TVars extends TerraformVariables>(
|
export const runTerraformApply = async <TVars extends TerraformVariables>(
|
||||||
dir: string,
|
dir: string,
|
||||||
vars: Readonly<TVars>,
|
vars: Readonly<TVars>,
|
||||||
env?: Record<string, string>,
|
customEnv?: Record<string, string>,
|
||||||
): Promise<TerraformState> => {
|
): Promise<TerraformState> => {
|
||||||
const stateFile = `${dir}/${crypto.randomUUID()}.tfstate`;
|
const stateFile = `${dir}/${crypto.randomUUID()}.tfstate`;
|
||||||
|
|
||||||
const combinedEnv = env === undefined ? {} : { ...env };
|
const childEnv: Record<string, string | undefined> = {
|
||||||
for (const [key, value] of Object.entries(vars)) {
|
...process.env,
|
||||||
combinedEnv[`TF_VAR_${key}`] = String(value);
|
...(customEnv ?? {}),
|
||||||
|
};
|
||||||
|
for (const [key, value] of Object.entries(vars) as [string, JsonValue][]) {
|
||||||
|
if (value !== null) {
|
||||||
|
childEnv[`TF_VAR_${key}`] = String(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const proc = spawn(
|
const proc = spawn(
|
||||||
@@ -216,7 +221,7 @@ export const runTerraformApply = async <TVars extends TerraformVariables>(
|
|||||||
],
|
],
|
||||||
{
|
{
|
||||||
cwd: dir,
|
cwd: dir,
|
||||||
env: combinedEnv,
|
env: childEnv,
|
||||||
stderr: "pipe",
|
stderr: "pipe",
|
||||||
stdout: "pipe",
|
stdout: "pipe",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ This module lets you authenticate with [Hashicorp Vault](https://www.vaultprojec
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-github/coder"
|
source = "registry.coder.com/modules/vault-github/coder"
|
||||||
version = "1.0.7"
|
version = "1.0.7"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -45,6 +46,7 @@ To configure the Vault module, you must set up a Vault GitHub auth method. See t
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-github/coder"
|
source = "registry.coder.com/modules/vault-github/coder"
|
||||||
version = "1.0.7"
|
version = "1.0.7"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -57,6 +59,7 @@ module "vault" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-github/coder"
|
source = "registry.coder.com/modules/vault-github/coder"
|
||||||
version = "1.0.7"
|
version = "1.0.7"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -70,6 +73,7 @@ module "vault" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-github/coder"
|
source = "registry.coder.com/modules/vault-github/coder"
|
||||||
version = "1.0.7"
|
version = "1.0.7"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -10,10 +10,11 @@ tags: [helper, integration, vault, jwt, oidc]
|
|||||||
|
|
||||||
# Hashicorp Vault Integration (JWT)
|
# Hashicorp Vault Integration (JWT)
|
||||||
|
|
||||||
This module lets you authenticate with [Hashicorp Vault](https://www.vaultproject.io/) in your Coder workspaces by reusing the [OIDC](https://coder.com/docs/admin/auth#openid-connect) access token from Coder's OIDC authentication method. This requires configuring the Vault [JWT/OIDC](https://developer.hashicorp.com/vault/docs/auth/jwt#configuration) auth method.
|
This module lets you authenticate with [Hashicorp Vault](https://www.vaultproject.io/) in your Coder workspaces by reusing the [OIDC](https://coder.com/docs/admin/users/oidc-auth) access token from Coder's OIDC authentication method. This requires configuring the Vault [JWT/OIDC](https://developer.hashicorp.com/vault/docs/auth/jwt#configuration) auth method.
|
||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-jwt/coder"
|
source = "registry.coder.com/modules/vault-jwt/coder"
|
||||||
version = "1.0.20"
|
version = "1.0.20"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -40,6 +41,7 @@ curl -H "X-Vault-Token: ${VAULT_TOKEN}" -X GET "${VAULT_ADDR}/v1/coder/secrets/d
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-jwt/coder"
|
source = "registry.coder.com/modules/vault-jwt/coder"
|
||||||
version = "1.0.20"
|
version = "1.0.20"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -55,6 +57,7 @@ module "vault" {
|
|||||||
data "coder_workspace_owner" "me" {}
|
data "coder_workspace_owner" "me" {}
|
||||||
|
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-jwt/coder"
|
source = "registry.coder.com/modules/vault-jwt/coder"
|
||||||
version = "1.0.20"
|
version = "1.0.20"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -67,6 +70,7 @@ module "vault" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vault" {
|
module "vault" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vault-jwt/coder"
|
source = "registry.coder.com/modules/vault-jwt/coder"
|
||||||
version = "1.0.20"
|
version = "1.0.20"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder)
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vscode" {
|
module "vscode" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vscode-desktop/coder"
|
source = "registry.coder.com/modules/vscode-desktop/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
@@ -27,6 +28,7 @@ module "vscode" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vscode" {
|
module "vscode" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vscode-desktop/coder"
|
source = "registry.coder.com/modules/vscode-desktop/coder"
|
||||||
version = "1.0.15"
|
version = "1.0.15"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ Automatically install [Visual Studio Code Server](https://code.visualstudio.com/
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vscode-web" {
|
module "vscode-web" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vscode-web/coder"
|
source = "registry.coder.com/modules/vscode-web/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
accept_license = true
|
accept_license = true
|
||||||
}
|
}
|
||||||
@@ -28,8 +29,9 @@ module "vscode-web" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vscode-web" {
|
module "vscode-web" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vscode-web/coder"
|
source = "registry.coder.com/modules/vscode-web/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
install_prefix = "/home/coder/.vscode-web"
|
install_prefix = "/home/coder/.vscode-web"
|
||||||
folder = "/home/coder"
|
folder = "/home/coder"
|
||||||
@@ -41,8 +43,9 @@ module "vscode-web" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vscode-web" {
|
module "vscode-web" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vscode-web/coder"
|
source = "registry.coder.com/modules/vscode-web/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
extensions = ["github.copilot", "ms-python.python", "ms-toolsai.jupyter"]
|
extensions = ["github.copilot", "ms-python.python", "ms-toolsai.jupyter"]
|
||||||
accept_license = true
|
accept_license = true
|
||||||
@@ -51,12 +54,13 @@ module "vscode-web" {
|
|||||||
|
|
||||||
### Pre-configure Settings
|
### Pre-configure Settings
|
||||||
|
|
||||||
Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarted/settings#_settingsjson) file:
|
Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarted/settings#_settings-json-file) file:
|
||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "vscode-web" {
|
module "vscode-web" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/vscode-web/coder"
|
source = "registry.coder.com/modules/vscode-web/coder"
|
||||||
version = "1.0.26"
|
version = "1.0.29"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
extensions = ["dracula-theme.theme-dracula"]
|
extensions = ["dracula-theme.theme-dracula"]
|
||||||
settings = {
|
settings = {
|
||||||
|
|||||||
@@ -92,7 +92,8 @@ if [ "${AUTO_INSTALL_EXTENSIONS}" = true ]; then
|
|||||||
|
|
||||||
if [ -f "$WORKSPACE_DIR/.vscode/extensions.json" ]; then
|
if [ -f "$WORKSPACE_DIR/.vscode/extensions.json" ]; then
|
||||||
printf "🧩 Installing extensions from %s/.vscode/extensions.json...\n" "$WORKSPACE_DIR"
|
printf "🧩 Installing extensions from %s/.vscode/extensions.json...\n" "$WORKSPACE_DIR"
|
||||||
extensions=$(jq -r '.recommendations[]' "$WORKSPACE_DIR"/.vscode/extensions.json)
|
# Use sed to remove single-line comments before parsing with jq
|
||||||
|
extensions=$(sed 's|//.*||g' "$WORKSPACE_DIR"/.vscode/extensions.json | jq -r '.recommendations[]')
|
||||||
for extension in $extensions; do
|
for extension in $extensions; do
|
||||||
$VSCODE_WEB "$EXTENSION_ARG" --install-extension "$extension" --force
|
$VSCODE_WEB "$EXTENSION_ARG" --install-extension "$extension" --force
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ Enable Remote Desktop + a web based client on Windows workspaces, powered by [de
|
|||||||
```tf
|
```tf
|
||||||
# AWS example. See below for examples of using this module with other providers
|
# AWS example. See below for examples of using this module with other providers
|
||||||
module "windows_rdp" {
|
module "windows_rdp" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/windows-rdp/coder"
|
source = "registry.coder.com/modules/windows-rdp/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
count = data.coder_workspace.me.start_count
|
|
||||||
agent_id = resource.coder_agent.main.id
|
agent_id = resource.coder_agent.main.id
|
||||||
resource_id = resource.aws_instance.dev.id
|
resource_id = resource.aws_instance.dev.id
|
||||||
}
|
}
|
||||||
@@ -32,9 +32,9 @@ module "windows_rdp" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "windows_rdp" {
|
module "windows_rdp" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/windows-rdp/coder"
|
source = "registry.coder.com/modules/windows-rdp/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
count = data.coder_workspace.me.start_count
|
|
||||||
agent_id = resource.coder_agent.main.id
|
agent_id = resource.coder_agent.main.id
|
||||||
resource_id = resource.aws_instance.dev.id
|
resource_id = resource.aws_instance.dev.id
|
||||||
}
|
}
|
||||||
@@ -44,9 +44,9 @@ module "windows_rdp" {
|
|||||||
|
|
||||||
```tf
|
```tf
|
||||||
module "windows_rdp" {
|
module "windows_rdp" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/modules/windows-rdp/coder"
|
source = "registry.coder.com/modules/windows-rdp/coder"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
count = data.coder_workspace.me.start_count
|
|
||||||
agent_id = resource.coder_agent.main.id
|
agent_id = resource.coder_agent.main.id
|
||||||
resource_id = resource.google_compute_instance.dev[0].id
|
resource_id = resource.google_compute_instance.dev[0].id
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user