@@ -24,10 +24,10 @@ variable "enabled_frameworks" {
2424 description = " List of frameworks to detect and auto-start. Available: nodejs, rails, django, flask, fastapi, spring, go, rust, php"
2525 type = list (string )
2626 default = [" nodejs" , " rails" , " django" , " flask" , " fastapi" , " spring" , " go" , " rust" , " php" ]
27-
27+
2828 validation {
2929 condition = alltrue ([
30- for framework in var . enabled_frameworks :
30+ for framework in var . enabled_frameworks :
3131 contains ([" nodejs" , " rails" , " django" , " flask" , " fastapi" , " spring" , " go" , " rust" , " php" ], framework)
3232 ])
3333 error_message = " Invalid framework. Allowed values: nodejs, rails, django, flask, fastapi, spring, go, rust, php"
@@ -44,7 +44,7 @@ variable "log_level" {
4444 description = " Log level for auto-dev-server. Options: DEBUG, INFO, WARN, ERROR"
4545 type = string
4646 default = " INFO"
47-
47+
4848 validation {
4949 condition = contains ([" DEBUG" , " INFO" , " WARN" , " ERROR" ], var. log_level )
5050 error_message = " Log level must be one of: DEBUG, INFO, WARN, ERROR"
@@ -66,50 +66,63 @@ variable "custom_commands" {
6666locals {
6767 # Default commands for each framework
6868 default_commands = {
69- nodejs = " npm start"
70- rails = " rails server"
71- django = " python manage.py runserver 0.0.0.0:8000"
72- flask = " flask run --host=0.0.0.0"
73- fastapi = " uvicorn main:app --host 0.0.0.0 --port 8000"
74- spring = " ./mvnw spring-boot:run"
75- go = " go run ."
76- rust = " cargo run"
77- php = " php -S 0.0.0.0:8000"
69+ nodejs = " npm start"
70+ rails = " rails server"
71+ django = " python manage.py runserver 0.0.0.0:8000"
72+ flask = " flask run --host=0.0.0.0"
73+ fastapi = " uvicorn main:app --host 0.0.0.0 --port 8000"
74+ spring = " ./mvnw spring-boot:run"
75+ go = " go run ."
76+ rust = " cargo run"
77+ php = " php -S 0.0.0.0:8000"
7878 }
79-
79+
8080 # Merge custom commands with defaults
8181 framework_commands = merge (local. default_commands , var. custom_commands )
82-
82+
8383 # Detection patterns for each framework
8484 detection_patterns = {
85- nodejs = " package.json"
86- rails = " Gemfile|config.ru|app/controllers"
87- django = " manage.py|settings.py"
88- flask = " app.py|application.py|wsgi.py"
89- fastapi = " main.py|app.py"
90- spring = " pom.xml|build.gradle|src/main/java"
91- go = " go.mod|main.go"
92- rust = " Cargo.toml|src/main.rs"
93- php = " index.php|composer.json"
85+ nodejs = " package.json"
86+ rails = " Gemfile|config.ru|app/controllers"
87+ django = " manage.py|settings.py"
88+ flask = " app.py|application.py|wsgi.py"
89+ fastapi = " main.py|app.py"
90+ spring = " pom.xml|build.gradle|src/main/java"
91+ go = " go.mod|main.go"
92+ rust = " Cargo.toml|src/main.rs"
93+ php = " index.php|composer.json"
9494 }
9595}
9696
9797resource "coder_script" "auto_dev_server" {
98- agent_id = var. agent_id
99- display_name = " Auto Development Server"
100- icon = " /icon/play.svg"
101- script = templatefile (" ${ path . module } /scripts/auto-dev-server.sh" , {
102- project_dir = var.project_dir
103- enabled_frameworks = jsonencode (var. enabled_frameworks )
104- framework_commands = jsonencode (local. framework_commands )
105- detection_patterns = jsonencode (local. detection_patterns )
106- start_delay = var.start_delay
107- log_level = var.log_level
108- use_devcontainer = var.use_devcontainer
109- })
110- run_on_start = true
111- run_on_stop = false
112- timeout = 300
98+ agent_id = var. agent_id
99+ display_name = " Auto Development Server"
100+ icon = " /icon/play.svg"
101+ script = replace (
102+ replace (
103+ replace (
104+ replace (
105+ replace (
106+ replace (
107+ replace (
108+ file (" ${ path . module } /scripts/auto-dev-server.sh" ),
109+ " PROJECT_DIR_PLACEHOLDER" , var. project_dir
110+ ),
111+ " ENABLED_FRAMEWORKS_PLACEHOLDER" , jsonencode (var. enabled_frameworks )
112+ ),
113+ " FRAMEWORK_COMMANDS_PLACEHOLDER" , jsonencode (local. framework_commands )
114+ ),
115+ " DETECTION_PATTERNS_PLACEHOLDER" , jsonencode (local. detection_patterns )
116+ ),
117+ " START_DELAY_PLACEHOLDER" , tostring (var. start_delay )
118+ ),
119+ " LOG_LEVEL_PLACEHOLDER" , var. log_level
120+ ),
121+ " USE_DEVCONTAINER_PLACEHOLDER" , tostring (var. use_devcontainer )
122+ )
123+ run_on_start = true
124+ run_on_stop = false
125+ timeout = 300
113126}
114127
115128# Output useful information
0 commit comments