From 8cf762c4653d2e7ceab64f3da466e9d95b9a3f06 Mon Sep 17 00:00:00 2001 From: S Date: Sun, 1 Mar 2026 11:39:20 -0500 Subject: [PATCH] refactor: extract set_db_vars and strip_template_block to lib/common.sh Identical copies of _set_db_vars() and _strip_block() existed in phase1, phase2, and phase8. Moved to lib/common.sh as set_db_vars() and strip_template_block() (public API, no underscore prefix). Removed dead _strip_block definition from phase8 (defined but never called). Co-Authored-By: Claude Opus 4.6 --- phase1_gitea_unraid.sh | 55 +++++------------------------------------- phase2_gitea_fedora.sh | 51 +++++---------------------------------- phase8_cutover.sh | 7 ------ 3 files changed, 12 insertions(+), 101 deletions(-) diff --git a/phase1_gitea_unraid.sh b/phase1_gitea_unraid.sh index 1e46673..6ac24ed 100755 --- a/phase1_gitea_unraid.sh +++ b/phase1_gitea_unraid.sh @@ -29,50 +29,7 @@ phase_header 1 "Gitea on Unraid" # works for both Unraid (Phase 1) and Fedora (Phase 2). DATA_PATH="$UNRAID_GITEA_DATA_PATH" -# --------------------------------------------------------------------------- -# DB-specific variables — set based on GITEA_DB_TYPE for template rendering. -# For sqlite3, the DB service blocks are stripped entirely. -# For external DBs, these vars populate the docker-compose DB service. -# --------------------------------------------------------------------------- -_set_db_vars() { - case "${GITEA_DB_TYPE}" in - postgres) - DB_DOCKER_IMAGE="postgres:16-alpine" - DB_ENV_VARS=" - POSTGRES_USER=${GITEA_DB_USER} - - POSTGRES_PASSWORD=${GITEA_DB_PASSWD} - - POSTGRES_DB=${GITEA_DB_NAME}" - DB_HEALTHCHECK='["CMD-SHELL", "pg_isready -U '"${GITEA_DB_USER}"'"]' - DB_DATA_DIR="postgresql/data" - ;; - mysql) - DB_DOCKER_IMAGE="mysql:8.0" - DB_ENV_VARS=" - MYSQL_ROOT_PASSWORD=${GITEA_DB_PASSWD} - - MYSQL_DATABASE=${GITEA_DB_NAME} - - MYSQL_USER=${GITEA_DB_USER} - - MYSQL_PASSWORD=${GITEA_DB_PASSWD}" - DB_HEALTHCHECK='["CMD", "mysqladmin", "ping", "-h", "localhost"]' - DB_DATA_DIR="mysql" - ;; - mssql) - DB_DOCKER_IMAGE="mcr.microsoft.com/mssql/server:2022-latest" - DB_ENV_VARS=" - ACCEPT_EULA=Y - - SA_PASSWORD=${GITEA_DB_PASSWD}" - # shellcheck disable=SC2089,SC2016 - DB_HEALTHCHECK='["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '"'"'${GITEA_DB_PASSWD}'"'"' -Q \"SELECT 1\" -C -N"]' - DB_DATA_DIR="mssql/data" - ;; - esac - # shellcheck disable=SC2090 - export DB_DOCKER_IMAGE DB_ENV_VARS DB_HEALTHCHECK DB_DATA_DIR -} - -# Strip conditional blocks from a rendered file. -# Usage: _strip_block -_strip_block() { - local file="$1" start="$2" end="$3" - sed -i.bak "/${start}/,/${end}/d" "$file" - rm -f "${file}.bak" -} +# DB helpers and strip_template_block are in lib/common.sh # --------------------------------------------------------------------------- # Step 1: Create data directories @@ -123,11 +80,11 @@ else # No DB service needed — render template then strip DB blocks render_template "${SCRIPT_DIR}/templates/docker-compose-gitea.yml.tpl" "$TMPFILE" \ "\${GITEA_VERSION} \${DATA_PATH} \${GITEA_CONTAINER_IP}" - _strip_block "$TMPFILE" "DB_SERVICE_START" "DB_SERVICE_END" - _strip_block "$TMPFILE" "DB_DEPENDS_START" "DB_DEPENDS_END" + strip_template_block "$TMPFILE" "DB_SERVICE_START" "DB_SERVICE_END" + strip_template_block "$TMPFILE" "DB_DEPENDS_START" "DB_DEPENDS_END" else # External DB — set DB-specific vars then render - _set_db_vars + set_db_vars DB_CONTAINER_IP="${UNRAID_DB_IP}" export DB_CONTAINER_IP render_template "${SCRIPT_DIR}/templates/docker-compose-gitea.yml.tpl" "$TMPFILE" \ @@ -154,11 +111,11 @@ else if [[ "$GITEA_DB_TYPE" == "sqlite3" ]]; then render_template "${SCRIPT_DIR}/templates/app.ini.tpl" "$TMPFILE" \ "\${GITEA_DOMAIN} \${GITEA_DB_TYPE} \${GITEA_SECRET_KEY}" - _strip_block "$TMPFILE" "EXTDB_BLOCK_START" "EXTDB_BLOCK_END" + strip_template_block "$TMPFILE" "EXTDB_BLOCK_START" "EXTDB_BLOCK_END" else render_template "${SCRIPT_DIR}/templates/app.ini.tpl" "$TMPFILE" \ "\${GITEA_DOMAIN} \${GITEA_DB_TYPE} \${GITEA_SECRET_KEY} \${GITEA_DB_HOST} \${GITEA_DB_PORT} \${GITEA_DB_NAME} \${GITEA_DB_USER} \${GITEA_DB_PASSWD}" - _strip_block "$TMPFILE" "SQLITE_BLOCK_START" "SQLITE_BLOCK_END" + strip_template_block "$TMPFILE" "SQLITE_BLOCK_START" "SQLITE_BLOCK_END" fi scp_to UNRAID "$TMPFILE" "${DATA_PATH}/config/app.ini" diff --git a/phase2_gitea_fedora.sh b/phase2_gitea_fedora.sh index 7e75876..5d88ef0 100755 --- a/phase2_gitea_fedora.sh +++ b/phase2_gitea_fedora.sh @@ -27,46 +27,7 @@ phase_header 2 "Gitea on Fedora (Backup)" # Alias for template rendering — same template as Phase 1, different values DATA_PATH="$FEDORA_GITEA_DATA_PATH" -# --------------------------------------------------------------------------- -# DB-specific variables — same as phase1 (shared helper functions) -# --------------------------------------------------------------------------- -_set_db_vars() { - case "${GITEA_DB_TYPE}" in - postgres) - DB_DOCKER_IMAGE="postgres:16-alpine" - DB_ENV_VARS=" - POSTGRES_USER=${GITEA_DB_USER} - - POSTGRES_PASSWORD=${GITEA_DB_PASSWD} - - POSTGRES_DB=${GITEA_DB_NAME}" - DB_HEALTHCHECK='["CMD-SHELL", "pg_isready -U '"${GITEA_DB_USER}"'"]' - DB_DATA_DIR="postgresql/data" - ;; - mysql) - DB_DOCKER_IMAGE="mysql:8.0" - DB_ENV_VARS=" - MYSQL_ROOT_PASSWORD=${GITEA_DB_PASSWD} - - MYSQL_DATABASE=${GITEA_DB_NAME} - - MYSQL_USER=${GITEA_DB_USER} - - MYSQL_PASSWORD=${GITEA_DB_PASSWD}" - DB_HEALTHCHECK='["CMD", "mysqladmin", "ping", "-h", "localhost"]' - DB_DATA_DIR="mysql" - ;; - mssql) - DB_DOCKER_IMAGE="mcr.microsoft.com/mssql/server:2022-latest" - DB_ENV_VARS=" - ACCEPT_EULA=Y - - SA_PASSWORD=${GITEA_DB_PASSWD}" - # shellcheck disable=SC2089,SC2016 - DB_HEALTHCHECK='["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '"'"'${GITEA_DB_PASSWD}'"'"' -Q \"SELECT 1\" -C -N"]' - DB_DATA_DIR="mssql/data" - ;; - esac - # shellcheck disable=SC2090 - export DB_DOCKER_IMAGE DB_ENV_VARS DB_HEALTHCHECK DB_DATA_DIR -} - -_strip_block() { - local file="$1" start="$2" end="$3" - sed -i.bak "/${start}/,/${end}/d" "$file" - rm -f "${file}.bak" -} +# DB helpers and strip_template_block are in lib/common.sh # --------------------------------------------------------------------------- # Step 1: Create data directories on Fedora @@ -114,10 +75,10 @@ else if [[ "$GITEA_DB_TYPE" == "sqlite3" ]]; then render_template "${SCRIPT_DIR}/templates/docker-compose-gitea.yml.tpl" "$TMPFILE" \ "\${GITEA_VERSION} \${DATA_PATH} \${GITEA_CONTAINER_IP}" - _strip_block "$TMPFILE" "DB_SERVICE_START" "DB_SERVICE_END" - _strip_block "$TMPFILE" "DB_DEPENDS_START" "DB_DEPENDS_END" + strip_template_block "$TMPFILE" "DB_SERVICE_START" "DB_SERVICE_END" + strip_template_block "$TMPFILE" "DB_DEPENDS_START" "DB_DEPENDS_END" else - _set_db_vars + set_db_vars DB_CONTAINER_IP="${FEDORA_DB_IP}" export DB_CONTAINER_IP render_template "${SCRIPT_DIR}/templates/docker-compose-gitea.yml.tpl" "$TMPFILE" \ @@ -150,11 +111,11 @@ else if [[ "$GITEA_DB_TYPE" == "sqlite3" ]]; then render_template "${SCRIPT_DIR}/templates/app.ini.tpl" "$TMPFILE" \ "\${GITEA_DOMAIN} \${GITEA_DB_TYPE} \${GITEA_SECRET_KEY}" - _strip_block "$TMPFILE" "EXTDB_BLOCK_START" "EXTDB_BLOCK_END" + strip_template_block "$TMPFILE" "EXTDB_BLOCK_START" "EXTDB_BLOCK_END" else render_template "${SCRIPT_DIR}/templates/app.ini.tpl" "$TMPFILE" \ "\${GITEA_DOMAIN} \${GITEA_DB_TYPE} \${GITEA_SECRET_KEY} \${GITEA_DB_HOST} \${GITEA_DB_PORT} \${GITEA_DB_NAME} \${GITEA_DB_USER} \${GITEA_DB_PASSWD}" - _strip_block "$TMPFILE" "SQLITE_BLOCK_START" "SQLITE_BLOCK_END" + strip_template_block "$TMPFILE" "SQLITE_BLOCK_START" "SQLITE_BLOCK_END" fi scp_to FEDORA "$TMPFILE" "${DATA_PATH}/config/app.ini" diff --git a/phase8_cutover.sh b/phase8_cutover.sh index 46042f0..71576e5 100755 --- a/phase8_cutover.sh +++ b/phase8_cutover.sh @@ -38,13 +38,6 @@ read -ra REPOS <<< "$REPO_NAMES" PHASE8_STATE_DIR="$(_project_root)/.manifests" PHASE8_STATE_FILE="${PHASE8_STATE_DIR}/phase8_github_repo_state.json" -# Strip conditional blocks from a rendered file. -_strip_block() { - local file="$1" start="$2" end="$3" - sed -i.bak "/${start}/,/${end}/d" "$file" - rm -f "${file}.bak" -} - # --------------------------------------------------------------------------- # Helper: persist original GitHub repo settings for teardown symmetry # ---------------------------------------------------------------------------