@@ -63,6 +63,12 @@ for var in \
6363 NPP_USER \
6464 NPP_UID \
6565 NPP_GID \
66+ NPP_DEV_ENABLED \
67+ NPP_DEV_PLUGIN_NAME \
68+ NPP_DEV_PLUGIN_DIR \
69+ NPP_DEV_TMP_CLONE_DIR \
70+ NPP_DEV_PLUGIN_FILE \
71+ NPP_DEV_GITHUB_REPO \
6672 WORDPRESS_DB_USER \
6773 WORDPRESS_DB_PASSWORD \
6874 WORDPRESS_DB_NAME \
@@ -183,6 +189,121 @@ else
183189 echo -e " ${COLOR_YELLOW}${COLOR_BOLD} NPP-WP-CLI:${COLOR_RESET} ${COLOR_CYAN} No themes${COLOR_RESET} to install."
184190fi
185191
192+ # Check development deploy wanted
193+ if [[ " ${NPP_DEV_ENABLED} " -eq 1 ]]; then
194+ # Set variables
195+ PLUGIN_NAME=" ${NPP_DEV_PLUGIN_NAME} "
196+ PLUGIN_DIR=" ${NPP_DEV_PLUGIN_DIR} "
197+ TMP_CLONE_DIR=" ${NPP_DEV_TMP_CLONE_DIR} "
198+ PLUGIN_FILE=" ${NPP_DEV_PLUGIN_FILE} "
199+ GITHUB_REPO=" ${NPP_DEV_GITHUB_REPO} "
200+
201+ # -----------------------------------------------------------------------------
202+ # 1. Fetch latest development branch details from GitHub
203+ # -----------------------------------------------------------------------------
204+ TARGET_BRANCH=$( git ls-remote --heads " ${GITHUB_REPO} " \
205+ | awk ' {print $2}' \
206+ | sed ' s#refs/heads/##' \
207+ | grep ' ^v[0-9]' \
208+ | sort -V \
209+ | tail -n1 \
210+ | awk ' {$1=$1;print}' )
211+
212+ LATEST_VERSION=" ${TARGET_BRANCH# v} "
213+ REMOTE_COMMIT_HASH=$( git ls-remote --heads " ${GITHUB_REPO} " " refs/heads/${TARGET_BRANCH} " \
214+ | awk ' {print substr($1,1,7)}' | awk ' {$1=$1;print}' )
215+
216+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Latest branch: ${COLOR_CYAN}${TARGET_BRANCH}${COLOR_RESET} "
217+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Latest dev version: ${COLOR_CYAN}${LATEST_VERSION}${COLOR_RESET} "
218+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Remote commit: ${COLOR_CYAN}${REMOTE_COMMIT_HASH}${COLOR_RESET} "
219+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} ${COLOR_LIGHT_CYAN} ######################${COLOR_RESET} "
220+
221+ # -----------------------------------------------------------------------------
222+ # 2. Retrieve the installed plugin version and commit hash
223+ # -----------------------------------------------------------------------------
224+ CURRENT_VERSION=" 0.0.0"
225+ INSTALLED_COMMIT_HASH=" "
226+
227+ if [[ -f " ${PLUGIN_FILE} " ]]; then
228+ CURRENT_VERSION=$( grep -i " Version:" " ${PLUGIN_FILE} " | head -n1 | awk ' {print $NF}' | awk ' {$1=$1;print}' )
229+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Local version: ${COLOR_CYAN}${CURRENT_VERSION}${COLOR_RESET} "
230+ if grep -qi " Latest Commit:" " ${PLUGIN_FILE} " ; then
231+ INSTALLED_COMMIT_HASH=$( grep -i " Latest Commit:" " ${PLUGIN_FILE} " | head -n1 | awk ' {print $NF}' | awk ' {$1=$1;print}' )
232+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Local commit: ${COLOR_CYAN}${INSTALLED_COMMIT_HASH}${COLOR_RESET} "
233+ else
234+ echo -e " ${COLOR_YELLOW}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} ${COLOR_CYAN} No commit history${COLOR_RESET} in plugin header."
235+ fi
236+ else
237+ echo -e " ${COLOR_YELLOW}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Plugin not installed; proceeding with fresh deployment."
238+ fi
239+
240+ # -----------------------------------------------------------------------------
241+ # 3. Determine if an update is required
242+ # -----------------------------------------------------------------------------
243+ need_update=0
244+
245+ if [[ -f " ${PLUGIN_FILE} " ]]; then
246+ # Check for version mismatch (installed version is older than latest)
247+ if [[ " ${CURRENT_VERSION} " != " ${LATEST_VERSION} " && \
248+ " $( echo -e " ${CURRENT_VERSION} \n${LATEST_VERSION} " | sort -V | head -n1) " != " ${LATEST_VERSION} " ]]; then
249+ echo -e " ${COLOR_YELLOW}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Version discrepancy found..."
250+ need_update=1
251+ fi
252+
253+ # Check for commit hash mismatch
254+ if [[ " ${INSTALLED_COMMIT_HASH} " != " ${REMOTE_COMMIT_HASH} " ]]; then
255+ echo -e " ${COLOR_YELLOW}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Commit hash discrepancy found..."
256+ need_update=1
257+ fi
258+ else
259+ need_update=1
260+ fi
261+
262+ # -----------------------------------------------------------------------------
263+ # 4. Deploy/update the plugin if required
264+ # -----------------------------------------------------------------------------
265+ if [[ " ${need_update} " -eq 1 ]]; then
266+ echo -e " ${COLOR_YELLOW}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Deploying development build ${COLOR_CYAN}${LATEST_VERSION}${COLOR_RESET} ..."
267+
268+ # Remove the current plugin directory (if it exists)
269+ rm -rf " ${PLUGIN_DIR:? } "
270+
271+ # Clone the target branch into a temporary directory
272+ mkdir -p " ${TMP_CLONE_DIR:? } " && cd " ${TMP_CLONE_DIR:? } "
273+ git clone --branch " ${TARGET_BRANCH:? } " " ${GITHUB_REPO:? } " . > /dev/null 2>&1
274+
275+ # Fix line-ending issues
276+ find " ${TMP_CLONE_DIR:? } " -type f -exec dos2unix {} + > /dev/null 2>&1
277+
278+ # Retrieve the commit hash from the clone
279+ CLONED_COMMIT_HASH=$( git rev-parse --short HEAD)
280+
281+ # Move the cloned files to the plugin directory and clean up
282+ mv " ${TMP_CLONE_DIR:? } " " ${PLUGIN_DIR:? } "
283+ rm -rf " ${TMP_CLONE_DIR:? } " > /dev/null 2>&1
284+ rm -rf " ${PLUGIN_DIR:? } /.git" > /dev/null 2>&1
285+ rm -f " ${PLUGIN_DIR:? } /README.md" " ${PLUGIN_DIR:? } /version" > /dev/null 2>&1
286+
287+ # Update the plugin header: Version and Latest Commit
288+ if [[ -f " ${PLUGIN_FILE} " ]]; then
289+ sed -i " s/^\(\s*\*\s*Version:\s*\).*$/\1${LATEST_VERSION} /" " ${PLUGIN_FILE} "
290+ if grep -qi " Latest Commit:" " ${PLUGIN_FILE} " ; then
291+ sed -i " s/^\(\s*\*\s*Latest Commit:\s*\).*$/\1${CLONED_COMMIT_HASH} /" " ${PLUGIN_FILE} "
292+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Updated plugin header commit hash to ${COLOR_CYAN}${CLONED_COMMIT_HASH}${COLOR_RESET} "
293+ else
294+ sed -i " /Version:/a \ * Latest Commit: ${CLONED_COMMIT_HASH} " " ${PLUGIN_FILE} "
295+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Added commit hash ${COLOR_CYAN}${CLONED_COMMIT_HASH}${COLOR_RESET} to plugin header."
296+ fi
297+ fi
298+
299+ # Adjust ownership (ensure NPP_USER is set in the environment)
300+ chown -R " ${NPP_USER} " :" ${NPP_USER} " " ${PLUGIN_DIR} "
301+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Deployed build ${COLOR_CYAN}${TARGET_BRANCH}${COLOR_RESET} with (commit ${COLOR_CYAN}${CLONED_COMMIT_HASH}${COLOR_RESET} )."
302+ else
303+ echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-DEV:${COLOR_RESET} Plugin is up-to-date with commit ${COLOR_CYAN}${REMOTE_COMMIT_HASH}${COLOR_RESET} ."
304+ fi
305+ fi
306+
186307# Listen on dummy port for 'nginx' container health check
187308echo -e " ${COLOR_GREEN}${COLOR_BOLD} NPP-WP-CLI:${COLOR_RESET} Starting to listen on dummy port ${COLOR_CYAN} 9999${COLOR_RESET} ..."
188309if ! nc -zv 127.0.0.1 9999 2> /dev/null; then
0 commit comments