From 93059b88307db7665a50d98c68cbecf37eb49df3 Mon Sep 17 00:00:00 2001 From: Jash Date: Sat, 12 Jul 2025 14:15:56 +0000 Subject: [PATCH 1/9] feat(pgadmin): add new module for pgAdmin --- registry/AJ0070/.images/avtar.jpeg | Bin 0 -> 65076 bytes registry/AJ0070/New Text Document.txt | 0 registry/AJ0070/README.md | 7 +++ registry/AJ0070/modules/pgadmin/README.md | 21 +++++++++ registry/AJ0070/modules/pgadmin/main.test.ts | 10 +++++ registry/AJ0070/modules/pgadmin/main.tf | 44 +++++++++++++++++++ registry/AJ0070/modules/pgadmin/run.sh | 25 +++++++++++ 7 files changed, 107 insertions(+) create mode 100644 registry/AJ0070/.images/avtar.jpeg create mode 100644 registry/AJ0070/New Text Document.txt create mode 100644 registry/AJ0070/README.md create mode 100644 registry/AJ0070/modules/pgadmin/README.md create mode 100644 registry/AJ0070/modules/pgadmin/main.test.ts create mode 100644 registry/AJ0070/modules/pgadmin/main.tf create mode 100644 registry/AJ0070/modules/pgadmin/run.sh diff --git a/registry/AJ0070/.images/avtar.jpeg b/registry/AJ0070/.images/avtar.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d47bfb80f9cf096563fa283eb5c54ae8ba30044e GIT binary patch literal 65076 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%0D<&M=vGKJX7sLT&f|X%0M8mqW+rB`Q;ERBC%Keg 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 cIF1$17$lEc { + await runTerraformInit(import.meta.dir); + + testRequiredVariables(import.meta.dir, { + agent_id: "foo", + }); +}); \ No newline at end of file diff --git a/registry/AJ0070/modules/pgadmin/main.tf b/registry/AJ0070/modules/pgadmin/main.tf new file mode 100644 index 00000000..1a71721c --- /dev/null +++ b/registry/AJ0070/modules/pgadmin/main.tf @@ -0,0 +1,44 @@ +terraform { + required_providers { + coder = { + source = "coder/coder" + } + } +} + +variable "agent_id" { + type = string + description = "The agent to install pgAdmin on." +} + +variable "port" { + type = number + description = "The port to run pgAdmin on." + default = 5050 +} + +variable "log_path" { + type = string + description = "The path to the log file." + default = "/tmp/pgadmin.log" +} + +resource "coder_app" "pgadmin" { + agent_id = var.agent_id + display_name = "pgAdmin" + slug = "pgadmin" + icon = "/icon/postgres.svg" + url = "http://localhost:${var.port}" + share = "owner" +} + +resource "coder_script" "pgadmin" { + agent_id = var.agent_id + display_name = "Install pgAdmin" + icon = "/icon/postgres.svg" + run_on_start = true + script = templatefile("${path.module}/run.sh", { + PORT = var.port, + LOG_PATH = var.log_path, + }) +} \ No newline at end of file diff --git a/registry/AJ0070/modules/pgadmin/run.sh b/registry/AJ0070/modules/pgadmin/run.sh new file mode 100644 index 00000000..1094762b --- /dev/null +++ b/registry/AJ0070/modules/pgadmin/run.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env sh + +PORT=${PORT} +LOG_PATH=${LOG_PATH} + +BOLD='\033[0;1m' + +printf "$${BOLD}Installing pgAdmin!\n" + +if ! command -v pip > /dev/null 2>&1; then + echo "pip is not installed" + echo "Please install pip in your Dockerfile/VM image before using this module" + exit 1 +fi + +if ! command -v pgadmin4 > /dev/null 2>&1; then + pip install pgadmin4-web + echo "pgAdmin has been installed\n\n" +else + echo "pgAdmin is already installed\n\n" +fi + +echo "Starting pgAdmin in background..." +echo "check logs at $${LOG_PATH}" +pgadmin4 > $${LOG_PATH} 2>&1 & \ No newline at end of file From af160969250314a55624b0bedacfc5767c9a421b Mon Sep 17 00:00:00 2001 From: Jash Date: Sat, 12 Jul 2025 14:23:54 +0000 Subject: [PATCH 2/9] changed display name --- registry/AJ0070/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/AJ0070/README.md b/registry/AJ0070/README.md index c2a3e8a9..fefac11f 100644 --- a/registry/AJ0070/README.md +++ b/registry/AJ0070/README.md @@ -1,5 +1,5 @@ --- -display_name: Ajithpalotte +display_name: Jash bio: Coder user and contributor. github: AJ0070 avatar: ./.images/avatar.png From 6319e67866ca580e7820e05add69949876295077 Mon Sep 17 00:00:00 2001 From: Jash Date: Sat, 12 Jul 2025 14:32:49 +0000 Subject: [PATCH 3/9] Removed unnecessary Document --- registry/AJ0070/New Text Document.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 registry/AJ0070/New Text Document.txt diff --git a/registry/AJ0070/New Text Document.txt b/registry/AJ0070/New Text Document.txt deleted file mode 100644 index e69de29b..00000000 From 0338bd7821dbf9205521ea44f920db5b149a8ce8 Mon Sep 17 00:00:00 2001 From: Jash Date: Wed, 16 Jul 2025 14:25:52 +0000 Subject: [PATCH 4/9] served over the subdomain by default, and then fallback to localhost --- registry/AJ0070/modules/pgadmin/main.tf | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/registry/AJ0070/modules/pgadmin/main.tf b/registry/AJ0070/modules/pgadmin/main.tf index 1a71721c..ea27eadd 100644 --- a/registry/AJ0070/modules/pgadmin/main.tf +++ b/registry/AJ0070/modules/pgadmin/main.tf @@ -17,28 +17,31 @@ variable "port" { default = 5050 } -variable "log_path" { - type = string - description = "The path to the log file." - default = "/tmp/pgadmin.log" +variable "subdomain" { + type = bool + description = "If true, the app will be served on a subdomain." + default = true } +data "coder_workspace" "me" {} + resource "coder_app" "pgadmin" { + count = data.coder_workspace.me.start_count agent_id = var.agent_id display_name = "pgAdmin" slug = "pgadmin" icon = "/icon/postgres.svg" - url = "http://localhost:${var.port}" + url = var.subdomain ? "https://pgadmin-${data.coder_workspace.me.id}.${data.coder_workspace.me.access_url}" : "http://localhost:${var.port}" share = "owner" } resource "coder_script" "pgadmin" { agent_id = var.agent_id - display_name = "Install pgAdmin" + display_name = "Install and run pgAdmin" icon = "/icon/postgres.svg" run_on_start = true script = templatefile("${path.module}/run.sh", { PORT = var.port, - LOG_PATH = var.log_path, + LOG_PATH = "/tmp/pgadmin.log" }) } \ No newline at end of file From 8f19fd9daf4677cf182c80017cc55dc014ef6931 Mon Sep 17 00:00:00 2001 From: Jash Date: Wed, 16 Jul 2025 14:52:07 +0000 Subject: [PATCH 5/9] improved this based on review --- registry/AJ0070/modules/pgadmin/README.md | 31 ++++++++++++++++++----- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/registry/AJ0070/modules/pgadmin/README.md b/registry/AJ0070/modules/pgadmin/README.md index 0ee2be23..527c5d65 100644 --- a/registry/AJ0070/modules/pgadmin/README.md +++ b/registry/AJ0070/modules/pgadmin/README.md @@ -1,15 +1,17 @@ --- -display_name: pgAdmin -description: A module to add pgAdmin to your Coder workspace for easy access to PostgreSQL databases. -icon: ../../../../.icons/postgres.svg -maintainer_github: AJ0070 +display_name: "pgAdmin" +description: "A web-based interface for managing PostgreSQL databases in your Coder workspace." +icon: "../../../../.icons/postgres.svg" +maintainer_github: "AJ0070" verified: false -tags: [helper, database, postgres, pgadmin] +tags: ["database", "postgres", "pgadmin", "web-ide"] --- # pgAdmin -This module adds a pgAdmin app to your Coder workspace, providing a web-based interface for managing PostgreSQL databases. +This module adds a pgAdmin app to your Coder workspace, providing a powerful web-based interface for managing PostgreSQL databases. + +It can be served on a Coder subdomain for easy access, or on `localhost` if you prefer to use port-forwarding. ```tf module "pgadmin" { @@ -19,3 +21,20 @@ module "pgadmin" { agent_id = coder_agent.example.id } ``` + +# Examples + +### Serve on a Localhost Port + +To access pgAdmin via `localhost` and a port-forward, set the `subdomain` variable to `false`. + +```tf +module "pgadmin" { + count = data.coder_workspace.me.start_count + source = "[registry.coder.com/AJ0070/pgadmin/coder](https://registry.coder.com/AJ0070/pgadmin/coder)" + version = "1.0.0" + agent_id = coder_agent.example.id + subdomain = false + port = 8080 # Optional: specify a custom port +} +``` \ No newline at end of file From db8df71aa057da090635d518ddc46895a07e05c5 Mon Sep 17 00:00:00 2001 From: Jash Date: Wed, 16 Jul 2025 14:55:53 +0000 Subject: [PATCH 6/9] ran fmt on the change --- registry/AJ0070/modules/pgadmin/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/AJ0070/modules/pgadmin/README.md b/registry/AJ0070/modules/pgadmin/README.md index 527c5d65..6a8fa3e3 100644 --- a/registry/AJ0070/modules/pgadmin/README.md +++ b/registry/AJ0070/modules/pgadmin/README.md @@ -37,4 +37,4 @@ module "pgadmin" { subdomain = false port = 8080 # Optional: specify a custom port } -``` \ No newline at end of file +``` From 9947034d9850db20b1f7d2eb851974e6cc92ec38 Mon Sep 17 00:00:00 2001 From: Jash Date: Wed, 16 Jul 2025 15:06:43 +0000 Subject: [PATCH 7/9] added correct implementation of the review --- registry/AJ0070/modules/pgadmin/README.md | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/registry/AJ0070/modules/pgadmin/README.md b/registry/AJ0070/modules/pgadmin/README.md index 6a8fa3e3..397e11f2 100644 --- a/registry/AJ0070/modules/pgadmin/README.md +++ b/registry/AJ0070/modules/pgadmin/README.md @@ -16,25 +16,8 @@ It can be served on a Coder subdomain for easy access, or on `localhost` if you ```tf module "pgadmin" { count = data.coder_workspace.me.start_count - source = "[registry.coder.com/AJ0070/pgadmin/coder](https://registry.coder.com/AJ0070/pgadmin/coder)" + source = "registry.coder.com/AJ0070/pgadmin/coder" version = "1.0.0" agent_id = coder_agent.example.id } ``` - -# Examples - -### Serve on a Localhost Port - -To access pgAdmin via `localhost` and a port-forward, set the `subdomain` variable to `false`. - -```tf -module "pgadmin" { - count = data.coder_workspace.me.start_count - source = "[registry.coder.com/AJ0070/pgadmin/coder](https://registry.coder.com/AJ0070/pgadmin/coder)" - version = "1.0.0" - agent_id = coder_agent.example.id - subdomain = false - port = 8080 # Optional: specify a custom port -} -``` From f9b33595f013ef966010b0e3fdd9f36dfe453617 Mon Sep 17 00:00:00 2001 From: Jash Date: Thu, 17 Jul 2025 03:12:08 +0000 Subject: [PATCH 8/9] incorporated the changes of forked repo --- registry/AJ0070/modules/pgadmin/main.tf | 67 +++++++++++++++++++++- registry/AJ0070/modules/pgadmin/run.sh | 75 +++++++++++++++++++++---- 2 files changed, 127 insertions(+), 15 deletions(-) diff --git a/registry/AJ0070/modules/pgadmin/main.tf b/registry/AJ0070/modules/pgadmin/main.tf index ea27eadd..b111c871 100644 --- a/registry/AJ0070/modules/pgadmin/main.tf +++ b/registry/AJ0070/modules/pgadmin/main.tf @@ -23,7 +23,20 @@ variable "subdomain" { default = true } +variable "config" { + type = any + description = "A map of pgAdmin configuration settings." + default = { + DEFAULT_EMAIL = "admin@coder.com" + DEFAULT_PASSWORD = "coderPASSWORD" + SERVER_MODE = false + MASTER_PASSWORD_REQUIRED = false + LISTEN_ADDRESS = "127.0.0.1" + } +} + data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} resource "coder_app" "pgadmin" { count = data.coder_workspace.me.start_count @@ -31,8 +44,15 @@ resource "coder_app" "pgadmin" { display_name = "pgAdmin" slug = "pgadmin" icon = "/icon/postgres.svg" - url = var.subdomain ? "https://pgadmin-${data.coder_workspace.me.id}.${data.coder_workspace.me.access_url}" : "http://localhost:${var.port}" + url = local.url + subdomain = var.subdomain share = "owner" + + healthcheck { + url = local.healthcheck_url + interval = 5 + threshold = 6 + } } resource "coder_script" "pgadmin" { @@ -41,7 +61,48 @@ resource "coder_script" "pgadmin" { icon = "/icon/postgres.svg" run_on_start = true script = templatefile("${path.module}/run.sh", { - PORT = var.port, - LOG_PATH = "/tmp/pgadmin.log" + PORT = var.port, + LOG_PATH = "/tmp/pgadmin.log", + SERVER_BASE_PATH = local.server_base_path, + CONFIG = local.config_content, + PGADMIN_DATA_DIR = local.pgadmin_data_dir, + PGADMIN_LOG_DIR = local.pgadmin_log_dir, + PGADMIN_VENV_DIR = local.pgadmin_venv_dir }) +} + +locals { + server_base_path = var.subdomain ? "" : format("/@%s/%s/apps/%s", data.coder_workspace_owner.me.name, data.coder_workspace.me.name, "pgadmin") + url = "http://localhost:${var.port}${local.server_base_path}" + healthcheck_url = "http://localhost:${var.port}${local.server_base_path}/" + + # pgAdmin data directories (user-local paths) + pgadmin_data_dir = "$HOME/.pgadmin" + pgadmin_log_dir = "$HOME/.pgadmin/logs" + pgadmin_venv_dir = "$HOME/.pgadmin/venv" + + base_config = merge(var.config, { + LISTEN_PORT = var.port + # Override paths for user installation + DATA_DIR = local.pgadmin_data_dir + LOG_FILE = "${local.pgadmin_log_dir}/pgadmin4.log" + SQLITE_PATH = "${local.pgadmin_data_dir}/pgadmin4.db" + SESSION_DB_PATH = "${local.pgadmin_data_dir}/sessions" + STORAGE_DIR = "${local.pgadmin_data_dir}/storage" + # Disable initial setup prompts for automated deployment + SETUP_AUTH = false + }) + + config_with_path = var.subdomain ? local.base_config : merge(local.base_config, { + APPLICATION_ROOT = local.server_base_path + }) + + config_content = join("\n", [ + for key, value in local.config_with_path : + format("%s = %s", key, + can(regex("^(true|false)$", tostring(value))) ? (value ? "True" : "False") : + can(tonumber(value)) ? tostring(value) : + format("'%s'", tostring(value)) + ) + ]) } \ No newline at end of file diff --git a/registry/AJ0070/modules/pgadmin/run.sh b/registry/AJ0070/modules/pgadmin/run.sh index 1094762b..ee6d64ec 100644 --- a/registry/AJ0070/modules/pgadmin/run.sh +++ b/registry/AJ0070/modules/pgadmin/run.sh @@ -1,25 +1,76 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash + +set -euo pipefail PORT=${PORT} LOG_PATH=${LOG_PATH} +SERVER_BASE_PATH=${SERVER_BASE_PATH} BOLD='\033[0;1m' printf "$${BOLD}Installing pgAdmin!\n" -if ! command -v pip > /dev/null 2>&1; then - echo "pip is not installed" - echo "Please install pip in your Dockerfile/VM image before using this module" - exit 1 +# Check if Python 3 is available +if ! command -v python3 > /dev/null 2>&1; then + echo "⚠️ Warning: Python 3 is not installed. Please install Python 3 before using this module." + exit 0 fi -if ! command -v pgadmin4 > /dev/null 2>&1; then - pip install pgadmin4-web - echo "pgAdmin has been installed\n\n" +# Setup pgAdmin directories (from Terraform configuration) +PGADMIN_DATA_DIR="${PGADMIN_DATA_DIR}" +PGADMIN_LOG_DIR="${PGADMIN_LOG_DIR}" +PGADMIN_VENV_DIR="${PGADMIN_VENV_DIR}" + +printf "Setting up pgAdmin directories...\n" +mkdir -p "$PGADMIN_DATA_DIR" +mkdir -p "$PGADMIN_LOG_DIR" + +# Check if pgAdmin virtual environment already exists and is working +if [ -f "$PGADMIN_VENV_DIR/bin/pgadmin4" ] && [ -f "$PGADMIN_VENV_DIR/bin/activate" ]; then + printf "🥳 pgAdmin virtual environment already exists\n\n" else - echo "pgAdmin is already installed\n\n" + printf "Creating Python virtual environment for pgAdmin...\n" + if ! python3 -m venv "$PGADMIN_VENV_DIR"; then + echo "⚠️ Warning: Failed to create virtual environment" + exit 0 + fi + + printf "Installing pgAdmin 4 in virtual environment...\n" + if ! "$PGADMIN_VENV_DIR/bin/pip" install pgadmin4; then + echo "⚠️ Warning: Failed to install pgAdmin4" + exit 0 + fi + + printf "🥳 pgAdmin has been installed successfully\n\n" fi -echo "Starting pgAdmin in background..." -echo "check logs at $${LOG_PATH}" -pgadmin4 > $${LOG_PATH} 2>&1 & \ No newline at end of file +printf "$${BOLD}Configuring pgAdmin...\n" + +if [ -f "$PGADMIN_VENV_DIR/bin/pgadmin4" ]; then + # pgAdmin installs to a predictable location in the virtual environment + PYTHON_VERSION=$("$PGADMIN_VENV_DIR/bin/python" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')") + PGADMIN_INSTALL_DIR="$PGADMIN_VENV_DIR/lib/python$PYTHON_VERSION/site-packages/pgadmin4" + + # Create pgAdmin config file in the correct location (next to config.py) + cat > "$PGADMIN_INSTALL_DIR/config_local.py" << EOF +# pgAdmin configuration for Coder workspace +${CONFIG} +EOF + + printf "📄 Config written to $PGADMIN_INSTALL_DIR/config_local.py\n" + + printf "$${BOLD}Starting pgAdmin in background...\n" + printf "📝 Check logs at $${LOG_PATH}\n" + printf "🌐 Serving at http://localhost:${PORT}${SERVER_BASE_PATH}\n" + + # Create required directories + mkdir -p "$PGADMIN_DATA_DIR/sessions" + mkdir -p "$PGADMIN_DATA_DIR/storage" + + # Start pgadmin4 from the virtual environment with proper environment + cd "$PGADMIN_DATA_DIR" + PYTHONPATH="$PGADMIN_INSTALL_DIR:$${PYTHONPATH:-}" "$PGADMIN_VENV_DIR/bin/pgadmin4" > "$${LOG_PATH}" 2>&1 & +else + printf "⚠️ Warning: pgAdmin4 virtual environment not found\n" + printf "📝 Installation may have failed - check logs above\n" +fi From 542f8ec9173fbfd4645992feb90083cb9add1427 Mon Sep 17 00:00:00 2001 From: Jash Date: Sat, 19 Jul 2025 04:30:06 +0000 Subject: [PATCH 9/9] fix failure workflow --- registry/coder/modules/filebrowser/main.test.ts | 3 +++ registry/coder/modules/filebrowser/run.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/registry/coder/modules/filebrowser/main.test.ts b/registry/coder/modules/filebrowser/main.test.ts index 1d925c35..3d157c52 100644 --- a/registry/coder/modules/filebrowser/main.test.ts +++ b/registry/coder/modules/filebrowser/main.test.ts @@ -100,6 +100,9 @@ describe("filebrowser", async () => { "apk add bash", ); + const expectedUrl = "http://localhost:13339/@default/default/apps/filebrowser"; + const expectedLogLine = `📂 Serving /root at ${expectedUrl} `; + testBaseLine(output); }, 15000); }); diff --git a/registry/coder/modules/filebrowser/run.sh b/registry/coder/modules/filebrowser/run.sh index ea4b857a..dbeb8932 100644 --- a/registry/coder/modules/filebrowser/run.sh +++ b/registry/coder/modules/filebrowser/run.sh @@ -32,7 +32,7 @@ filebrowser config set --baseurl=${SERVER_BASE_PATH} --port=${PORT} --auth.metho printf "👷 Starting filebrowser in background... \n\n" -printf "📂 Serving $${ROOT_DIR} at http://localhost:${PORT} \n\n" +printf "📂 Serving $${ROOT_DIR} at http://localhost:${PORT}${SERVER_BASE_PATH} \n\n" filebrowser >>${LOG_PATH} 2>&1 &