Skip to content

Commit 291001c

Browse files
author
Yorick
committed
create xdebug debugger plugin
1 parent 6b8ba6b commit 291001c

4 files changed

Lines changed: 177 additions & 15 deletions

File tree

.led/plugins/php.plugin.sh

Lines changed: 90 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,26 @@ _php_plugin_desc()
55
}
66

77
# get env key from a service starting with "php" or "apache"
8-
# _php_get_service_env_key "ENV_VARIABLE"
9-
_php_get_service_env_key()
8+
# _php_get_service_key "ENV_VARIABLE"
9+
_php_get_service_key()
1010
{
11-
local env_var=$1
11+
local service_key=$1
12+
local service_value=$2
1213

13-
local service_keys service_key
14+
local services service
1415
local dc_key
1516

16-
service_keys=$(${VENDORS_BIN_JYPARSER} "${dc_file}" get ".services | keys" | cut -c3-)
17-
for service_key in ${service_keys}
17+
services=$(${VENDORS_BIN_JYPARSER} "${dc_file}" get ".services | keys" | cut -c3-)
18+
for service in ${services}
1819
do
1920
# if a service start with "php" or "apache", stop and get his env key
20-
if [[ "${service_key}" == php* ]] || [[ "${service_key}" == apache* ]]; then
21-
dc_key=".services.${service_key}.environment.${env_var}"
21+
if [[ "${service}" == php* ]] || [[ "${service}" == apache* ]]; then
22+
dc_key=".services.${service}.${service_key}"
23+
24+
if [ ! -z "${service_value}" ]; then
25+
dc_key="${dc_key}.${service_value}"
26+
fi
27+
2228
break
2329
fi
2430
done
@@ -114,7 +120,7 @@ php_xdebug()
114120
exit 1
115121
fi
116122

117-
if ! dc_key=$(_php_get_service_env_key "PHP_XDEBUG"); then
123+
if ! dc_xdebug_key=$(_php_get_service_key "environment" "PHP_XDEBUG"); then
118124
exit 1
119125
fi
120126

@@ -123,33 +129,102 @@ php_xdebug()
123129
enable) xdebug_value=1;;
124130
disable) xdebug_value=0;;
125131
switch)
126-
xdebug_value=$(${VENDORS_BIN_JYPARSER} "${dc_file}" get "${dc_key}")
132+
xdebug_value=$(${VENDORS_BIN_JYPARSER} "${dc_file}" get "${dc_xdebug_key}")
127133
[ "${xdebug_value}" == "null" ] && xdebug_value=0
128134
# value can be 1 or 0, so substract to reverse
129135
xdebug_value=$((1 - xdebug_value))
130136
;;
131137
esac
132138

133-
139+
local dc_xdebug_value=$(${VENDORS_BIN_JYPARSER} "${dc_file}" get "${dc_xdebug_key}")
134140
if [ ${xdebug_value} -eq 0 ]; then
135-
${VENDORS_BIN_JYPARSER} "${dc_file}" del "${dc_key}" > "${dc_file_tmp}" \
141+
_check_xdebug_state ${dc_xdebug_value} ${xdebug_value}
142+
143+
${VENDORS_BIN_JYPARSER} "${dc_file}" del "${dc_xdebug_key}" > "${dc_file_tmp}" \
136144
&& mv "${dc_file_tmp}" "${dc_file}"
145+
_disable_debugger
137146
ret=$?
138147
message="XDebug disabled"
139148
else
140-
${VENDORS_BIN_JYPARSER} "${dc_file}" set "${dc_key}" 1 > "${dc_file_tmp}" \
149+
_check_xdebug_state ${dc_xdebug_value} ${xdebug_value}
150+
151+
${VENDORS_BIN_JYPARSER} "${dc_file}" set "${dc_xdebug_key}" 1 > "${dc_file_tmp}" \
141152
&& mv "${dc_file_tmp}" "${dc_file}"
153+
_enable_debugger
142154
ret=$?
143155
message="XDebug enabled"
144156
fi
145157

146158
# refresh container
147159
if [ $ret -eq 0 ]; then
148160
echo "${message}"
149-
$0 up
161+
# $0 up
150162
fi
163+
}
151164

165+
_enable_debugger()
166+
{
167+
local phpstorm_ip
168+
local plugin_dir="$(_plugin_files_dir "php")"
169+
local origin_xdebug_config_file="${plugin_dir}/90-xdebug-config.ini"
170+
local dc_volumes_key=$(_php_get_service_key "volumes")
171+
local dc_ide_config_key=$(_php_get_service_key "environment" "PHP_IDE_CONFIG")
172+
local dc_volumes_length
173+
local dc_xdebug_env_value
174+
175+
if [[ -f "${origin_xdebug_config_file}" ]]; then
176+
target_xdebug_config=".led/90-xdebug-config.ini"
177+
178+
#get the ip of docker network
179+
phpstorm_ip=$(docker network inspect bridge | jq -r '.[].IPAM.Config[].Gateway')
180+
#put it into xdebug config file
181+
sed "s/DOCKER_IP/${phpstorm_ip}/" "${origin_xdebug_config_file}" > "${target_xdebug_config}"
182+
dc_xdebug_env_value="${target_xdebug_config}:/etc/php.d/90-xdebug-config.ini"
183+
184+
dc_volumes_length=$(${VENDORS_BIN_JYPARSER} "${dc_file}" get "${dc_volumes_key} | length")
185+
#edit docker-compose file
186+
${VENDORS_BIN_JYPARSER} "${dc_file}" set "${dc_volumes_key}[${dc_volumes_length}]" \"${dc_xdebug_env_value}\" > "${dc_file_tmp}" \
187+
&& mv "${dc_file_tmp}" "${dc_file}"
188+
${VENDORS_BIN_JYPARSER} "${dc_file}" set "${dc_ide_config_key}" \"serverName=localhost\" > "${dc_file_tmp}" \
189+
&& mv "${dc_file_tmp}" "${dc_file}"
190+
fi
191+
}
152192

193+
_disable_debugger()
194+
{
195+
local dc_volumes_key=$(_php_get_service_key "volumes")
196+
local dc_ide_config_key=$(_php_get_service_key "environment" "PHP_IDE_CONFIG")
197+
local dc_volumes_length
198+
target_xdebug_config=".led/90-xdebug-config.ini"
199+
dc_volumes_length=$(${VENDORS_BIN_JYPARSER} "${dc_file}" get "${dc_volumes_key} | length")
200+
201+
#edit docker-compose file
202+
${VENDORS_BIN_JYPARSER} "${dc_file}" del "${dc_volumes_key}[${dc_volumes_length} - 1]" > "${dc_file_tmp}" \
203+
&& mv "${dc_file_tmp}" "${dc_file}"
204+
${VENDORS_BIN_JYPARSER} "${dc_file}" del "${dc_ide_config_key}" > "${dc_file_tmp}" \
205+
&& mv "${dc_file_tmp}" "${dc_file}"
206+
207+
if [[ -e "${target_xdebug_config}" ]]; then
208+
rm "${target_xdebug_config}"
209+
fi
210+
}
211+
212+
# Checks the state of xDebug in led, in order to avoid that some
213+
# manipulations are performed several times in a row
214+
_check_xdebug_state()
215+
{
216+
local dc_xdebug_value=$1
217+
local xdebug_arg_value=$2
218+
219+
if [[ "${dc_xdebug_value}" -eq 0 && "${xdebug_arg_value}" -eq 0 ]]; then
220+
echo "Xdebug is already disabled"
221+
exit 1;
222+
fi
223+
224+
if [[ "${dc_xdebug_value}" -eq 1 && "${xdebug_arg_value}" -eq 1 ]]; then
225+
echo "Xdebug is already enabled"
226+
exit 1;
227+
fi
153228
}
154229

155230
# memory
@@ -182,7 +257,7 @@ php_memory()
182257
exit 1
183258
fi
184259

185-
if ! dc_key=$(_php_get_service_env_key "PHP_MEMORY_LIMIT"); then
260+
if ! dc_key=$(_php_get_service_key "environment" "PHP_MEMORY_LIMIT"); then
186261
exit 1
187262
fi
188263

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
xdebug.client_port = 9000
2+
xdebug.mode = debug
3+
xdebug.client_host = DOCKER_IP
4+
xdebug.start_with_request = yes

docker-compose.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
version: '2'
2+
services:
3+
metabase:
4+
container_name: cizeta-backend-metabase
5+
hostname: metabase
6+
image: gitlab.prestaconcept.net:7443/docker/metabase
7+
environment:
8+
LED_VHOSTS: "metabase.localhost:3000"
9+
volumes:
10+
- ./.led/storage/metabase:/metabase-data
11+
extends:
12+
file: ~/.led/docker-base.yaml
13+
service: localuser
14+
node:
15+
container_name: cizeta-backend-node
16+
hostname: node
17+
image: gitlab.prestaconcept.net:7443/docker/node:12
18+
working_dir: /src
19+
volumes:
20+
- .:/src/
21+
command: yarn run led
22+
extends:
23+
file: ~/.led/docker-base.yaml
24+
service: localuser
25+
maildev:
26+
container_name: cizeta-backend-maildev
27+
hostname: maildev
28+
image: ledup/maildev
29+
command: node bin/maildev --web 80 --smtp 25 --hide-extensions STARTTLS
30+
ports:
31+
- "1080:80"
32+
extends:
33+
file: ~/.led/docker-base.yaml
34+
service: localuser
35+
mysql:
36+
container_name: cizeta-backend-mysql
37+
hostname: mysql
38+
image: gitlab.prestaconcept.net:7443/docker/mysql:8.0
39+
ports:
40+
- "3306:3306"
41+
environment:
42+
- TZ=Europe/Paris
43+
volumes:
44+
- ./.led/storage/mysql:/home/data
45+
- ./.led/storage/dump:/dump
46+
extends:
47+
file: ~/.led/docker-base.yaml
48+
service: localuser
49+
nginx:
50+
container_name: cizeta-backend-nginx
51+
hostname: nginx
52+
image: ledup/nginx:stable
53+
volumes:
54+
- .:/src
55+
working_dir: /src
56+
environment:
57+
LED_DOCROOT: public
58+
LED_VHOSTS: admin.cizeta-backend.localhost api.cizeta-backend.localhost
59+
LED_PHPFPM_SOCKET: php:9000
60+
extends:
61+
file: ~/.led/docker-base.yaml
62+
service: localuser
63+
php:
64+
container_name: cizeta-backend-php
65+
hostname: php
66+
image: ledup/php:7.4
67+
volumes:
68+
- .:/src
69+
- /home/yferlin/workspace/cizeta/backend/.led/90-xdebug-config.ini:/etc/php.d/90-xdebug-config.ini
70+
working_dir: /src
71+
environment:
72+
PHP_XDEBUG: 1
73+
PHP_IDE_CONFIG: serverName=localhost
74+
extends:
75+
file: ~/.led/docker-base.yaml
76+
service: localuser

public/index.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
$test = 'xdebug';
4+
5+
$anotherTest = 'will it work ?';
6+
7+
$result = 'Ow Yeah!';

0 commit comments

Comments
 (0)