Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c8aa504ae | ||
|
|
e64f1ede52 | ||
|
|
c8a42f6202 |
19
.github/workflows/ci.yaml
vendored
19
.github/workflows/ci.yaml
vendored
@@ -16,14 +16,23 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: coder/coder/.github/actions/setup-tf@main
|
||||
- uses: oven-sh/setup-bun@v2
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Terraform
|
||||
uses: coder/coder/.github/actions/setup-tf@main
|
||||
- name: Set up Bun
|
||||
uses: oven-sh/setup-bun@v2
|
||||
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
|
||||
- name: Setup
|
||||
- name: Install dependencies
|
||||
run: bun install
|
||||
- run: bun test
|
||||
- name: Run tests
|
||||
run: bun test
|
||||
pretty:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
@@ -15,9 +15,8 @@ This module adds a JetBrains Gateway Button to open any workspace with a single
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||
version = "1.0.27"
|
||||
version = "1.0.28"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_name = "example"
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["CL", "GO", "IU", "PY", "WS"]
|
||||
default = "GO"
|
||||
@@ -34,9 +33,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||
version = "1.0.27"
|
||||
version = "1.0.28"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_name = "example"
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["GO", "WS"]
|
||||
default = "GO"
|
||||
@@ -49,9 +47,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||
version = "1.0.27"
|
||||
version = "1.0.28"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_name = "example"
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["IU", "PY"]
|
||||
default = "IU"
|
||||
@@ -65,9 +62,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||
version = "1.0.27"
|
||||
version = "1.0.28"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_name = "example"
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["IU", "PY"]
|
||||
default = "IU"
|
||||
@@ -91,9 +87,8 @@ module "jetbrains_gateway" {
|
||||
module "jetbrains_gateway" {
|
||||
count = data.coder_workspace.me.start_count
|
||||
source = "registry.coder.com/modules/jetbrains-gateway/coder"
|
||||
version = "1.0.27"
|
||||
version = "1.0.28"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_name = "example"
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["GO", "WS"]
|
||||
default = "GO"
|
||||
@@ -110,9 +105,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/modules/jetbrains-gateway/coder"
|
||||
version = "1.0.27"
|
||||
version = "1.0.28"
|
||||
agent_id = coder_agent.example.id
|
||||
agent_name = "example"
|
||||
folder = "/home/coder/example"
|
||||
jetbrains_ides = ["GO", "WS"]
|
||||
releases_base_link = "https://releases.internal.site/"
|
||||
|
||||
@@ -10,7 +10,6 @@ describe("jetbrains-gateway", async () => {
|
||||
|
||||
await testRequiredVariables(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
agent_name: "foo",
|
||||
folder: "/home/foo",
|
||||
});
|
||||
|
||||
@@ -18,11 +17,10 @@ describe("jetbrains-gateway", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
// These are all required.
|
||||
agent_id: "foo",
|
||||
agent_name: "foo",
|
||||
folder: "/home/coder",
|
||||
});
|
||||
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(
|
||||
@@ -37,7 +35,6 @@ describe("jetbrains-gateway", async () => {
|
||||
it("default to first ide", async () => {
|
||||
const state = await runTerraformApply(import.meta.dir, {
|
||||
agent_id: "foo",
|
||||
agent_name: "foo",
|
||||
folder: "/home/foo",
|
||||
jetbrains_ides: '["IU", "GO", "PY"]',
|
||||
});
|
||||
|
||||
@@ -26,7 +26,9 @@ variable "slug" {
|
||||
|
||||
variable "agent_name" {
|
||||
type = string
|
||||
description = "Agent name."
|
||||
description = "Agent name. (unused). Will be removed in a future version"
|
||||
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "folder" {
|
||||
@@ -295,8 +297,6 @@ resource "coder_app" "gateway" {
|
||||
data.coder_workspace.me.name,
|
||||
"&owner=",
|
||||
data.coder_workspace_owner.me.name,
|
||||
"&agent=",
|
||||
var.agent_name,
|
||||
"&folder=",
|
||||
var.folder,
|
||||
"&url=",
|
||||
|
||||
2
setup.ts
2
setup.ts
@@ -25,7 +25,7 @@ const removeOldContainers = async () => {
|
||||
"-a",
|
||||
"-q",
|
||||
"--filter",
|
||||
`label=modules-test`,
|
||||
"label=modules-test",
|
||||
]);
|
||||
let containerIDsRaw = await readableStreamToText(proc.stdout);
|
||||
let exitCode = await proc.exited;
|
||||
|
||||
15
test.ts
15
test.ts
@@ -194,13 +194,18 @@ export const testRequiredVariables = <TVars extends TerraformVariables>(
|
||||
export const runTerraformApply = async <TVars extends TerraformVariables>(
|
||||
dir: string,
|
||||
vars: Readonly<TVars>,
|
||||
env?: Record<string, string>,
|
||||
customEnv?: Record<string, string>,
|
||||
): Promise<TerraformState> => {
|
||||
const stateFile = `${dir}/${crypto.randomUUID()}.tfstate`;
|
||||
|
||||
const combinedEnv = env === undefined ? {} : { ...env };
|
||||
for (const [key, value] of Object.entries(vars)) {
|
||||
combinedEnv[`TF_VAR_${key}`] = String(value);
|
||||
const childEnv: Record<string, string | undefined> = {
|
||||
...process.env,
|
||||
...(customEnv ?? {}),
|
||||
};
|
||||
for (const [key, value] of Object.entries(vars) as [string, JsonValue][]) {
|
||||
if (value !== null) {
|
||||
childEnv[`TF_VAR_${key}`] = String(value);
|
||||
}
|
||||
}
|
||||
|
||||
const proc = spawn(
|
||||
@@ -216,7 +221,7 @@ export const runTerraformApply = async <TVars extends TerraformVariables>(
|
||||
],
|
||||
{
|
||||
cwd: dir,
|
||||
env: combinedEnv,
|
||||
env: childEnv,
|
||||
stderr: "pipe",
|
||||
stdout: "pipe",
|
||||
},
|
||||
|
||||
@@ -10,7 +10,7 @@ tags: [helper, integration, vault, jwt, oidc]
|
||||
|
||||
# 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
|
||||
module "vault" {
|
||||
|
||||
Reference in New Issue
Block a user