Add new `nodejs` module (#165)
Co-authored-by: Mathias Fredriksson <mafredri@gmail.com>pull/182/head
							parent
							
								
									8ed13be726
								
							
						
					
					
						commit
						f335a62891
					
				| @ -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: nodejs | ||||
| description: Install Node.js via nvm | ||||
| icon: ../.icons/node.svg | ||||
| maintainer_github: TheZoker | ||||
| verified: false | ||||
| tags: [helper] | ||||
| --- | ||||
| 
 | ||||
| # nodejs | ||||
| 
 | ||||
| Automatically installs [Node.js](https://github.com/nodejs/node) via [nvm](https://github.com/nvm-sh/nvm). It can also install multiple versions of node and set a default version. If no options are specified, the latest version is installed. | ||||
| 
 | ||||
| ```tf | ||||
| module "nodejs" { | ||||
|   source   = "registry.coder.com/modules/nodejs/coder" | ||||
|   version  = "1.0.2" | ||||
|   agent_id = coder_agent.example.id | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ### Install multiple versions | ||||
| 
 | ||||
| This installs multiple versions of Node.js: | ||||
| 
 | ||||
| ```tf | ||||
| module "nodejs" { | ||||
|   source   = "registry.coder.com/modules/nodejs/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 "nodejs" { | ||||
|   source             = "registry.coder.com/modules/nodejs/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("nodejs", async () => { | ||||
|   await runTerraformInit(import.meta.dir); | ||||
| 
 | ||||
|   testRequiredVariables(import.meta.dir, { | ||||
|     agent_id: "foo", | ||||
|   }); | ||||
| 
 | ||||
|   // More tests depend on shebang refactors
 | ||||
| }); | ||||
| @ -0,0 +1,52 @@ | ||||
| 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.js versions to install." | ||||
|   default     = ["node"] | ||||
| } | ||||
| 
 | ||||
| variable "default_node_version" { | ||||
|   type        = string | ||||
|   description = "The default Node.js version" | ||||
|   default     = "node" | ||||
| } | ||||
| 
 | ||||
| resource "coder_script" "nodejs" { | ||||
|   agent_id     = var.agent_id | ||||
|   display_name = "Node.js:" | ||||
|   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 | ||||
|   start_blocks_login = true | ||||
| } | ||||
| @ -0,0 +1,50 @@ | ||||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| NVM_VERSION='${NVM_VERSION}' | ||||
| NODE_VERSIONS='${NODE_VERSIONS}' | ||||
| INSTALL_PREFIX='${INSTALL_PREFIX}' | ||||
| DEFAULT='${DEFAULT}' | ||||
| BOLD='\033[0;1m' | ||||
| CODE='\033[36;40;1m' | ||||
| RESET='\033[0m' | ||||
| 
 | ||||
| printf "$${BOLD}Installing nvm!$${RESET}\n" | ||||
| 
 | ||||
| export NVM_DIR="$${INSTALL_PREFIX}/nvm" | ||||
| 
 | ||||
| script="$(curl -sS -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$${NVM_VERSION}/install.sh" 2>&1)" | ||||
| if [ $? -ne 0 ]; then | ||||
|   echo "Failed to download nvm installation script: $script" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| output="$(bash <<< "$script" 2>&1)" | ||||
| if [ $? -ne 0 ]; then | ||||
|   echo "Failed to install nvm: $output" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| printf "🥳 nvm has been installed\n\n" | ||||
| 
 | ||||
| # Set up nvm for the rest of the script. | ||||
| [ -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" 2>&1) | ||||
|   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 2>&1) | ||||
| fi | ||||
					Loading…
					
					
				
		Reference in New Issue
	
	 Florian Gareis
						Florian Gareis