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