Add initial version of the node-via-nvm module
							parent
							
								
									8ed13be726
								
							
						
					
					
						commit
						8a9482690f
					
				@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<svg width="2270" height="2500" viewBox="0 0 256 282" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet"><g fill="#8CC84B"><path d="M116.504 3.58c6.962-3.985 16.03-4.003 22.986 0 34.995 19.774 70.001 39.517 104.99 59.303 6.581 3.707 10.983 11.031 10.916 18.614v118.968c.049 7.897-4.788 15.396-11.731 19.019-34.88 19.665-69.742 39.354-104.616 59.019-7.106 4.063-16.356 3.75-23.24-.646-10.457-6.062-20.932-12.094-31.39-18.15-2.137-1.274-4.546-2.288-6.055-4.36 1.334-1.798 3.719-2.022 5.657-2.807 4.365-1.388 8.374-3.616 12.384-5.778 1.014-.694 2.252-.428 3.224.193 8.942 5.127 17.805 10.403 26.777 15.481 1.914 1.105 3.852-.362 5.488-1.274 34.228-19.345 68.498-38.617 102.72-57.968 1.268-.61 1.969-1.956 1.866-3.345.024-39.245.006-78.497.012-117.742.145-1.576-.767-3.025-2.192-3.67-34.759-19.575-69.5-39.18-104.253-58.76a3.621 3.621 0 0 0-4.094-.006C91.2 39.257 56.465 58.88 21.712 78.454c-1.42.646-2.373 2.071-2.204 3.653.006 39.245 0 78.497 0 117.748a3.329 3.329 0 0 0 1.89 3.303c9.274 5.259 18.56 10.481 27.84 15.722 5.228 2.814 11.647 4.486 17.407 2.33 5.083-1.823 8.646-7.01 8.549-12.407.048-39.016-.024-78.038.036-117.048-.127-1.732 1.516-3.163 3.2-3 4.456-.03 8.918-.06 13.374.012 1.86-.042 3.14 1.823 2.91 3.568-.018 39.263.048 78.527-.03 117.79.012 10.464-4.287 21.85-13.966 26.97-11.924 6.177-26.662 4.867-38.442-1.056-10.198-5.09-19.93-11.097-29.947-16.55C5.368 215.886.555 208.357.604 200.466V81.497c-.073-7.74 4.504-15.197 11.29-18.85C46.768 42.966 81.636 23.27 116.504 3.58z"/><path d="M146.928 85.99c15.21-.979 31.493-.58 45.18 6.913 10.597 5.742 16.472 17.793 16.659 29.566-.296 1.588-1.956 2.464-3.472 2.355-4.413-.006-8.827.06-13.24-.03-1.872.072-2.96-1.654-3.195-3.309-1.268-5.633-4.34-11.212-9.642-13.929-8.139-4.075-17.576-3.87-26.451-3.785-6.479.344-13.446.905-18.935 4.715-4.214 2.886-5.494 8.712-3.99 13.404 1.418 3.369 5.307 4.456 8.489 5.458 18.33 4.794 37.754 4.317 55.734 10.626 7.444 2.572 14.726 7.572 17.274 15.366 3.333 10.446 1.872 22.932-5.56 31.318-6.027 6.901-14.805 10.657-23.56 12.697-11.647 2.597-23.734 2.663-35.562 1.51-11.122-1.268-22.696-4.19-31.282-11.768-7.342-6.375-10.928-16.308-10.572-25.895.085-1.619 1.697-2.748 3.248-2.615 4.444-.036 8.888-.048 13.332.006 1.775-.127 3.091 1.407 3.182 3.08.82 5.367 2.837 11 7.517 14.182 9.032 5.827 20.365 5.428 30.707 5.591 8.568-.38 18.186-.495 25.178-6.158 3.689-3.23 4.782-8.634 3.785-13.283-1.08-3.925-5.186-5.754-8.712-6.95-18.095-5.724-37.736-3.647-55.656-10.12-7.275-2.571-14.31-7.432-17.105-14.906-3.9-10.578-2.113-23.662 6.098-31.765 8.006-8.06 19.563-11.164 30.551-12.275z"/></g></svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 2.5 KiB  | 
@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					display_name: node-via-nvm
 | 
				
			||||||
 | 
					description: Install node via nvm
 | 
				
			||||||
 | 
					icon: ../.icons/node.svg
 | 
				
			||||||
 | 
					maintainer_github: coder
 | 
				
			||||||
 | 
					verified: true
 | 
				
			||||||
 | 
					tags: [node, nvm, nodejs]
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# node-via-nvm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Automatically installs the latest version of [node](https://github.com/nodejs/node) versions via [nvm](https://github.com/nvm-sh/nvm). It can also install multiple versions of node and set a default version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```tf
 | 
				
			||||||
 | 
					module "node-via-nvm" {
 | 
				
			||||||
 | 
					  source   = "registry.coder.com/modules/node-via-nvm/coder"
 | 
				
			||||||
 | 
					  version  = "1.0.2"
 | 
				
			||||||
 | 
					  agent_id = coder_agent.example.id
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Install multiple versions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This installs multiple versions of node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```tf
 | 
				
			||||||
 | 
					module "node-via-nvm" {
 | 
				
			||||||
 | 
					  source   = "registry.coder.com/modules/node-via-nvm/coder"
 | 
				
			||||||
 | 
					  version  = "1.0.2"
 | 
				
			||||||
 | 
					  agent_id = coder_agent.example.id
 | 
				
			||||||
 | 
					  node_versions = [
 | 
				
			||||||
 | 
					    "18"
 | 
				
			||||||
 | 
					    "20"
 | 
				
			||||||
 | 
					    "node"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					  default_node_version = "20"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Full example
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A example with all available options:
 | 
				
			||||||
 | 
					```tf
 | 
				
			||||||
 | 
					module "node-via-nvm" {
 | 
				
			||||||
 | 
					  source   = "registry.coder.com/modules/node-via-nvm/coder"
 | 
				
			||||||
 | 
					  version  = "1.0.2"
 | 
				
			||||||
 | 
					  agent_id = coder_agent.example.id
 | 
				
			||||||
 | 
					  nvm_version = "v0.39.7"
 | 
				
			||||||
 | 
					  nvm_install_prefix = "/opt/nvm"
 | 
				
			||||||
 | 
					  node_versions = [
 | 
				
			||||||
 | 
					    "16"
 | 
				
			||||||
 | 
					    "18"
 | 
				
			||||||
 | 
					    "node"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					  default_node_version = "16"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					import { describe, expect, it } from "bun:test";
 | 
				
			||||||
 | 
					import { runTerraformInit, testRequiredVariables } from "../test";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe("code-server", async () => {
 | 
				
			||||||
 | 
					  await runTerraformInit(import.meta.dir);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  testRequiredVariables(import.meta.dir, {
 | 
				
			||||||
 | 
					    agent_id: "foo",
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // More tests depend on shebang refactors
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					terraform {
 | 
				
			||||||
 | 
					  required_version = ">= 1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  required_providers {
 | 
				
			||||||
 | 
					    coder = {
 | 
				
			||||||
 | 
					      source  = "coder/coder"
 | 
				
			||||||
 | 
					      version = ">= 0.12"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variable "agent_id" {
 | 
				
			||||||
 | 
					  type        = string
 | 
				
			||||||
 | 
					  description = "The ID of a Coder agent."
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variable "nvm_version" {
 | 
				
			||||||
 | 
					  type        = string
 | 
				
			||||||
 | 
					  description = "The version of nvm to install."
 | 
				
			||||||
 | 
					  default     = "master"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variable "nvm_install_prefix" {
 | 
				
			||||||
 | 
					  type        = string
 | 
				
			||||||
 | 
					  description = "The prefix to install nvm to."
 | 
				
			||||||
 | 
					  default     = "$HOME/.nvm"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variable "node_versions" {
 | 
				
			||||||
 | 
					  type        = list(string)
 | 
				
			||||||
 | 
					  description = "A list of node versions to install."
 | 
				
			||||||
 | 
					  default   	= ["node"]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variable "default_node_version" {
 | 
				
			||||||
 | 
					  type        = string
 | 
				
			||||||
 | 
					  description = "The default node version"
 | 
				
			||||||
 | 
					  default     = "node"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					resource "coder_script" "node" {
 | 
				
			||||||
 | 
					  agent_id     = var.agent_id
 | 
				
			||||||
 | 
					  script = templatefile("${path.module}/run.sh", {
 | 
				
			||||||
 | 
					    NVM_VERSION : var.nvm_version,
 | 
				
			||||||
 | 
					    INSTALL_PREFIX : var.nvm_install_prefix,
 | 
				
			||||||
 | 
					    NODE_VERSIONS : join(",", var.node_versions),
 | 
				
			||||||
 | 
					    DEFAULT : var.default_node_version,
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  run_on_start = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NODE_VERSIONS=("${NODE_VERSIONS}")
 | 
				
			||||||
 | 
					BOLD='\033[0;1m'
 | 
				
			||||||
 | 
					CODE='\033[36;40;1m'
 | 
				
			||||||
 | 
					RESET='\033[0m'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					printf "${BOLD}Installing nvm!${RESET}\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					output=$(curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh | NVM_DIR=${INSTALL_PREFIX} bash)
 | 
				
			||||||
 | 
					if [ $? -ne 0 ]; then
 | 
				
			||||||
 | 
					  echo "Failed to install nvm: $output"
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					printf "🥳 nvm has been installed\n\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NVM="${INSTALL_PREFIX}/nvm.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set up nvm in the current shell session
 | 
				
			||||||
 | 
					export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
 | 
				
			||||||
 | 
					[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install each node version...
 | 
				
			||||||
 | 
					IFS=',' read -r -a VERSIONLIST <<< "${NODE_VERSIONS}"
 | 
				
			||||||
 | 
					for version in "${VERSIONLIST[@]}"; do
 | 
				
			||||||
 | 
					  if [ -z "$version" ]; then
 | 
				
			||||||
 | 
					    continue
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  printf "🛠️ Installing node version ${CODE}$version${RESET}...\n"
 | 
				
			||||||
 | 
					  output=$(nvm install "$version")
 | 
				
			||||||
 | 
					  if [ $? -ne 0 ]; then
 | 
				
			||||||
 | 
					    echo "Failed to install version: $version: $output"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set default if provided
 | 
				
			||||||
 | 
					if [ -n "${DEFAULT}" ]; then
 | 
				
			||||||
 | 
					  printf "🛠️ Setting default node version ${CODE}$DEFAULT${RESET}...\n"
 | 
				
			||||||
 | 
					  output=$(nvm alias default $DEFAULT)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue