@codigodoleo/wp-kit 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/lib/commands/init.js +19 -10
  2. package/lib/config/versions.js +5 -5
  3. package/lib/prompts/index.js +24 -14
  4. package/lib/utils/git.js +50 -13
  5. package/modules/deploy/.github/workflows/deploy-docker.yml +102 -0
  6. package/modules/deploy/.github/workflows/deploy-ssh.yml +126 -0
  7. package/modules/deploy/.github/workflows/release.yml +55 -0
  8. package/modules/deploy/index.js +39 -0
  9. package/modules/deploy/prompts.js +1 -3
  10. package/modules/deploy/templates/.gitlab/ci/deploy-docker.yml.hbs +35 -0
  11. package/modules/deploy/templates/.gitlab/ci/deploy-ssh.yml.hbs +83 -0
  12. package/modules/deploy/templates/.gitlab/ci/release.yml.hbs +26 -0
  13. package/modules/git/.husky/commit-msg +8 -4
  14. package/modules/git/.husky/pre-commit +0 -3
  15. package/modules/git/index.js +34 -38
  16. package/modules/git/templates/.lando.yml.hbs +13 -5
  17. package/modules/git/templates/package.json.hbs +4 -4
  18. package/modules/git/templates/workspace.json.hbs +114 -28
  19. package/modules/lint/templates/.lando.yml.hbs +10 -2
  20. package/modules/lint/templates/package.json.hbs +4 -4
  21. package/modules/lint/templates/workspace.json.hbs +56 -15
  22. package/modules/php/templates/.lando.yml.hbs +11 -2
  23. package/modules/php/templates/composer.json.hbs +1 -1
  24. package/modules/php/templates/workspace.json.hbs +74 -15
  25. package/modules/redis/templates/.lando.yml.hbs +8 -1
  26. package/modules/sage/index.js +114 -15
  27. package/modules/sage/prompts.js +1 -1
  28. package/modules/sage/templates/.devcontainer/devcontainer.json.hbs +7 -0
  29. package/modules/sage/templates/.devcontainer/docker-compose.override.yml.hbs +6 -0
  30. package/modules/sage/templates/.devcontainer/post-create.sh.hbs +11 -0
  31. package/modules/sage/templates/.lando.yml.hbs +49 -20
  32. package/modules/sage/templates/server/cmd/setup-sage-node.sh.hbs +23 -0
  33. package/modules/sage/templates/server/cmd/setup-sage-php.sh.hbs +24 -0
  34. package/modules/sage/templates/theme/app/Blocks/.gitkeep.hbs +0 -0
  35. package/modules/sage/templates/theme/app/Fields/.gitkeep.hbs +0 -0
  36. package/modules/sage/templates/theme/composer.json.hbs +25 -3
  37. package/modules/sage/templates/theme/package.json.hbs +15 -3
  38. package/modules/sage/templates/theme/resources/views/blocks/.gitkeep.hbs +0 -0
  39. package/modules/sage/templates/theme/vite.config.js.hbs +55 -13
  40. package/modules/sage/templates/workspace.json.hbs +155 -12
  41. package/modules/skills/index.js +18 -0
  42. package/modules/skills/prompts.js +21 -0
  43. package/modules/test/index.js +19 -0
  44. package/modules/test/prompts.js +8 -0
  45. package/modules/test/templates/composer.json.hbs +16 -0
  46. package/modules/test/templates/package.json.hbs +11 -0
  47. package/modules/test/templates/playwright.config.js.hbs +29 -0
  48. package/modules/test/tests/Pest.php +39 -0
  49. package/modules/test/tests/SmokeTest.php +15 -0
  50. package/modules/test/tests/e2e/example.spec.js +11 -0
  51. package/modules/test/tests/e2e/helpers/loginHelper.js +40 -0
  52. package/package.json +1 -1
  53. package/templates/.devcontainer/Dockerfile.hbs +24 -0
  54. package/templates/.devcontainer/config/nginx.conf +23 -0
  55. package/templates/.devcontainer/config/nginx.conf.hbs +23 -0
  56. package/templates/.devcontainer/devcontainer.json.hbs +29 -0
  57. package/templates/.devcontainer/docker-compose.yml.hbs +73 -0
  58. package/templates/.devcontainer/setup.sh.hbs +17 -0
  59. package/templates/.env.hbs +38 -15
  60. package/templates/.gitignore.hbs +2 -2
  61. package/templates/.lando.yml.hbs +88 -11
  62. package/templates/README.md.hbs +23 -7
  63. package/templates/composer.json.hbs +4 -3
  64. package/templates/package.json.hbs +0 -2
  65. package/templates/server/cmd/install-wp.sh.hbs +54 -43
  66. package/templates/server/cmd/setup-node.sh.hbs +11 -0
  67. package/templates/server/cmd/setup-php.sh.hbs +14 -0
  68. package/templates/server/www/vhosts.conf.hbs +54 -17
  69. package/templates/workspace.json.hbs +233 -40
  70. package/templates/wp-cli.yml.hbs +1 -0
@@ -1,43 +1,54 @@
1
- #!/bin/bash # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m'
2
- BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}🔍 Checking WordPress installation
3
- status...${NC}" # Wait for database to be ready (connectivity only) echo -e "${YELLOW}âŗ Waiting for
4
- database connection...${NC}" echo -e "${BLUE}🔧 Debug: DB_HOST=${WORDPRESS_DB_HOST:-database}
5
- DB_NAME=${WORDPRESS_DB_NAME:-wordpress} DB_USER=${WORDPRESS_DB_USER:-wordpress}${NC}" # Show what
6
- WP-CLI reads from wp-config.php wp config get DB_HOST --path=/app/wp 2>/dev/null || true wp config
7
- get DB_NAME --path=/app/wp 2>/dev/null || true wp config get DB_USER --path=/app/wp 2>/dev/null ||
8
- true # Force-disable SSL/TLS for MySQL client connections in environments where server uses
9
- self-signed certs export MYSQL_SSL_MODE=DISABLED export MYSQLI_OPT_SSL_VERIFY_SERVER_CERT=0
10
- MAX_ATTEMPTS=60 ATTEMPT=0 # PHP/mysqli-based readiness check to bypass mysql CLI TLS verification
11
- issues db_ready() { php -d display_errors=1 -r ' $host = getenv("WORDPRESS_DB_HOST") ?: "database";
12
- $user = getenv("WORDPRESS_DB_USER") ?: "wordpress"; $pass = getenv("WORDPRESS_DB_PASSWORD") ?:
13
- "wordpress"; $name = getenv("WORDPRESS_DB_NAME") ?: "wordpress"; $port = getenv("WORDPRESS_DB_PORT")
14
- ?: 3306; $mysqli = mysqli_init(); if (defined("MYSQLI_OPT_SSL_VERIFY_SERVER_CERT")) {
15
- mysqli_options($mysqli, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, false); } $flags =
16
- defined("MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT") ? MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT :
17
- 0; if (!@mysqli_real_connect($mysqli, $host, $user, $pass, null, (int)$port, null, $flags)) {
18
- fwrite(STDERR, "connect_error: ".mysqli_connect_error().PHP_EOL); exit(1); } @mysqli_query($mysqli,
19
- "CREATE DATABASE IF NOT EXISTS `{$name}`"); $ok = @mysqli_query($mysqli, "SELECT 1"); if (!$ok) {
20
- fwrite(STDERR, "query_error: ".mysqli_error($mysqli).PHP_EOL); exit(1); } exit(0); ' } until
21
- db_ready >/dev/null 2>&1; do ATTEMPT=$((ATTEMPT+1)) if [ "$ATTEMPT" -eq 1 ] || [ $((ATTEMPT % 5))
22
- -eq 0 ]; then echo -e "${BLUE}🔧 Debug: attempting connection (#${ATTEMPT})...${NC}" getent hosts
23
- "${WORDPRESS_DB_HOST:-database}" 2>/dev/null || true # Also surface last error from PHP checker
24
- db_ready 2>&1 >/dev/null | tail -n1 || true fi echo -e "${YELLOW}⌛ Database not ready yet,
25
- waiting...${NC}" sleep 2 if [ "$ATTEMPT" -ge "$MAX_ATTEMPTS" ]; then echo -e "${RED}❌ Timeout
26
- waiting for database connectivity. Aborting.${NC}" exit 1 fi done echo -e "${GREEN}✅ Database
27
- connection established${NC}" # Check if WordPress is already installed if wp core is-installed
28
- --path=/app/wp 2>/dev/null; then echo -e "${GREEN}✅ WordPress is already installed${NC}" echo -e
29
- "${BLUE}📊 Current site info:${NC}" wp option get siteurl --path=/app/wp wp option get admin_email
30
- --path=/app/wp exit 0 fi echo -e "${YELLOW}🚀 WordPress not installed. Starting
31
- installation...${NC}" # Download WordPress core if not present if [ ! -d wp-admin ]; then echo -e
32
- "${BLUE}đŸ“Ĩ Downloading WordPress core...${NC}" wp core download --force --path=/app/wp
33
- --skip-content fi # Install WordPress echo -e "${BLUE}đŸ—ī¸ Installing WordPress...${NC}" wp core
34
- install \ --url="${PROJECT_DOMAIN}" \ --title="${PROJECT_NAME:-WordPress Development}" \
35
- --admin_user="${WORDPRESS_ADMIN_USER:-admin}" \
36
- --admin_password="${WORDPRESS_ADMIN_PASSWORD:-admin}" \
37
- --admin_email="${WORDPRESS_ADMIN_EMAIL:-admin@example.com}" \ --skip-email \ --path=/app/wp echo -e
38
- "${GREEN}✅ WordPress installed successfully!${NC}" # Update permalinks wp rewrite structure
39
- '/%postname%/' --hard --path=/app/wp echo -e "${GREEN}🎉 WordPress setup completed
40
- successfully!${NC}" echo -e "${BLUE}📋 Access Details:${NC}" echo -e "${YELLOW}URL:${NC} ${APP_URL}"
41
- echo -e "${YELLOW}Admin User:${NC} ${WORDPRESS_ADMIN_USER:-admin}" echo -e "${YELLOW}Admin
42
- Password:${NC} ${WORDPRESS_ADMIN_PASSWORD:-admin}" echo -e "${YELLOW}Admin Email:${NC}
43
- ${WORDPRESS_ADMIN_EMAIL:-admin@example.com}"
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ PROJECT_ROOT="${PROJECT_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
5
+ WP_PATH="${WP_PATH:-${PROJECT_ROOT}/wp}"
6
+
7
+ # Read a value from .env — used when the variable is not exported into the shell environment
8
+ read_dotenv_var() {
9
+ local key="$1"
10
+ local env_file="${PROJECT_ROOT}/.env"
11
+ [ -f "${env_file}" ] || return 1
12
+ grep -E "^${key}=" "${env_file}" | head -n1 | cut -d'=' -f2- | sed "s/^['\"]//; s/['\"]$//"
13
+ }
14
+
15
+ # Resolve SITE_URL from environment or .env
16
+ SITE_URL="${WORDPRESS_SITE_URL:-${APP_URL:-}}"
17
+ if [ -z "${SITE_URL}" ]; then SITE_URL="$(read_dotenv_var WORDPRESS_SITE_URL || true)"; fi
18
+ if [ -z "${SITE_URL}" ]; then SITE_URL="$(read_dotenv_var APP_URL || true)"; fi
19
+ if [ -z "${SITE_URL}" ]; then SITE_URL="https://${PROJECT_DOMAIN:-$(read_dotenv_var PROJECT_DOMAIN || echo 'localhost')}"; fi
20
+
21
+ # WordPress core files are placed by `composer install` via roots/wordpress — no wp core download needed.
22
+
23
+ # Wait until the database is ready. Use PHP/PDO directly to avoid MariaDB CLI SSL negotiation issues.
24
+ echo "Waiting for database..."
25
+ DB_HOST="${WORDPRESS_DB_HOST:-database}"
26
+ DB_NAME="${WORDPRESS_DB_NAME:-wordpress}"
27
+ DB_USER="${WORDPRESS_DB_USER:-wordpress}"
28
+ DB_PASS="${WORDPRESS_DB_PASSWORD:-wordpress}"
29
+ max=30; i=0
30
+ until php -r "try { new PDO('mysql:host=${DB_HOST};dbname=${DB_NAME}', '${DB_USER}', '${DB_PASS}'); exit(0); } catch(Exception \$e) { exit(1); }" 2>/dev/null; do
31
+ i=$((i + 1))
32
+ [ "$i" -ge "$max" ] && echo "Database timeout after $((max * 2))s. Aborting." && exit 1
33
+ sleep 2
34
+ done
35
+
36
+ if wp core is-installed --path="${WP_PATH}" 2>/dev/null; then
37
+ echo "WordPress already installed at ${SITE_URL}"
38
+ exit 0
39
+ fi
40
+
41
+ echo "Installing WordPress..."
42
+
43
+ wp core install \
44
+ --url="${SITE_URL}" \
45
+ --title="${PROJECT_NAME:-WordPress Development}" \
46
+ --admin_user="${WORDPRESS_ADMIN_USER:-admin}" \
47
+ --admin_password="${WORDPRESS_ADMIN_PASSWORD:-admin}" \
48
+ --admin_email="${WORDPRESS_ADMIN_EMAIL:-admin@example.com}" \
49
+ --skip-email \
50
+ --path="${WP_PATH}"
51
+
52
+ wp rewrite structure '/%postname%/' --hard --path="${WP_PATH}"
53
+
54
+ echo "WordPress installed successfully."
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+ # Installs root Node.js dependencies via npm.
3
+ # Invoked from: Lando (build service build step), Devcontainer (setup.sh), CI/CD.
4
+ set -euo pipefail
5
+
6
+ PROJECT_ROOT="${PROJECT_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
7
+
8
+ echo "Installing Node.js dependencies..."
9
+ cd "${PROJECT_ROOT}"
10
+ npm install
11
+ echo "Node.js dependencies installed."
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bash
2
+ # Installs root PHP dependencies via Composer.
3
+ # Invoked from: Lando (appserver build step), Devcontainer (setup.sh), CI/CD.
4
+ set -euo pipefail
5
+
6
+ PROJECT_ROOT="${PROJECT_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
7
+
8
+ echo "Installing PHP dependencies..."
9
+ composer install \
10
+ --working-dir="${PROJECT_ROOT}" \
11
+ --no-interaction \
12
+ --no-progress \
13
+ --optimize-autoloader
14
+ echo "PHP dependencies installed."
@@ -1,21 +1,58 @@
1
- upstream php { server fpm:9000; } server { listen 80 default_server; listen 443 ssl; server_name
2
- localhost; ssl_certificate /certs/cert.crt; ssl_certificate_key /certs/cert.key; ssl_verify_client
3
- off; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5;
4
- ssl_prefer_server_ciphers on; port_in_redirect off; client_max_body_size 100M; ## Your only path
5
- reference. root "/app"; ## This should be in your http block and if it is, it's not needed here.
6
- index index.php; location = /favicon.ico { log_not_found off; access_log off; } location =
7
- /robots.txt { allow all; log_not_found off; access_log off; } # Add Server-Timing header to track
8
- request time and database response time add_header Server-Timing 'php=$request_time;
9
- db=$upstream_response_time';
1
+ upstream php {
2
+ server fpm:9000;
3
+ }
4
+
5
+ server {
6
+ listen 80 default_server;
7
+ listen 443 ssl;
8
+ server_name localhost;
9
+
10
+ ssl_certificate /certs/cert.crt;
11
+ ssl_certificate_key /certs/cert.key;
12
+ ssl_verify_client off;
13
+ ssl_session_cache shared:SSL:1m;
14
+ ssl_session_timeout 5m;
15
+ ssl_ciphers HIGH:!aNULL:!MD5;
16
+ ssl_prefer_server_ciphers on;
17
+ port_in_redirect off;
18
+ client_max_body_size 100M;
19
+
20
+ root "/app";
21
+ index index.php;
22
+
23
+ location = /favicon.ico {
24
+ log_not_found off;
25
+ access_log off;
26
+ }
27
+
28
+ location = /robots.txt {
29
+ allow all;
30
+ log_not_found off;
31
+ access_log off;
32
+ }
33
+
34
+ add_header Server-Timing 'php=$request_time; db=$upstream_response_time';
10
35
 
11
36
  {{#if useRocket}}
12
- # Include Rocket Nginx configuration include /app/server/www/rocket.conf;
37
+ include /app/server/www/rocket.conf;
13
38
  {{/if}}
14
39
 
15
- location / { # This is cool because no php is touched for static content. # include the "?$args"
16
- part so non-default permalinks doesn't break when using query string try_files $uri $uri/
17
- /index.php?$args; } location ~ \.php$ { #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
18
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_TRANSLATED
19
- $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_intercept_errors on;
20
- fastcgi_pass php; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; } location ~*
21
- \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
40
+ location / {
41
+ try_files $uri $uri/ /index.php?$args;
42
+ }
43
+
44
+ location ~ \.php$ {
45
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
46
+ fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
47
+ include fastcgi_params;
48
+ fastcgi_intercept_errors on;
49
+ fastcgi_pass php;
50
+ fastcgi_buffers 16 16k;
51
+ fastcgi_buffer_size 32k;
52
+ }
53
+
54
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
55
+ expires max;
56
+ log_not_found off;
57
+ }
58
+ }
@@ -1,40 +1,233 @@
1
- { "folders": [ { "name": "đŸŒŋ
2
- {{projectName}}", "path": "." } ], "settings": { "git.inputValidation": "always",
3
- "git.inputValidationLength": 100, "git.inputValidationSubjectLength": 100, "git.confirmSync": false,
4
- "git.autofetch": true, "git.enableSmartCommit": true, "git.suggestSmartCommit": true,
5
- "git.autoStash": true, "git.allowNoVerifyCommit": false, "editor.formatOnSave": false,
6
- "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.organizeImports":
7
- "explicit" }, "editor.tabSize": 4, "editor.insertSpaces": true, "search.exclude": {
8
- "**/node_modules": true, "**/vendor": true, "**/.lando": true, "**/public/build": true, "**/dist":
9
- true, "**/.git": true, "**/wp": true }, "files.exclude": { "**/node_modules": true, "**/vendor":
10
- true, "**/.git": true, "**/.DS_Store": true, "**/Thumbs.db": true },
11
- "extensions.ignoreRecommendations": false, "emmet.includeLanguages": { "blade": "html", "php":
12
- "html" }, "files.autoSave": "onFocusChange", "files.trimTrailingWhitespace": true,
13
- "files.insertFinalNewline": true }, "extensions": { "recommendations": [ "eamodio.gitlens",
14
- "ms-vscode.vscode-json", "streetsidesoftware.code-spell-checker",
15
- "vivaxy.vscode-conventional-commits", "bmewburn.vscode-intelephense-client",
16
- "wordpresstoolbox.wordpress-toolbox", "tungvn.wordpress-snippet", "junstyle.php-cs-fixer",
17
- "felixfbecker.php-debug", "esbenp.prettier-vscode", "dbaeumer.vscode-eslint",
18
- "bradlc.vscode-tailwindcss", "ms-azuretools.vscode-docker", "ms-vscode-remote.remote-containers",
19
- "ms-vscode.vscode-typescript-next", "formulahendry.auto-rename-tag",
20
- "christian-kohler.path-intellisense", "ms-vscode.vscode-todo-highlight", "mhutchie.git-graph",
21
- "pkief.material-icon-theme", "zhuangtongfa.material-theme", "xdebug.php-debug",
22
- "yzhang.markdown-all-in-one", "davidanson.vscode-markdownlint", "editorconfig.editorconfig",
23
- "ms-vscode.js-debug", "johnbillion.vscode-wordpress-hooks", "valeryanm.vscode-phpsab",
24
- "GitHub.copilot", "GitHub.copilot-chat", "ms-vscode-remote.remote-wsl", "Catppuccin.catppuccin-vsc",
25
- "sainnhe.everforest" ] }, "tasks": { "version": "2.0.0", "tasks": [ { "label": "🚀 Lando: Start",
26
- "type": "shell", "command": "lando", "args": ["start"], "group": "build", "presentation": { "echo":
27
- true, "reveal": "always", "focus": false, "panel": "shared" }, "isBackground": true,
28
- "problemMatcher": [] }, { "label": "🛑 Lando: Stop", "type": "shell", "command": "lando", "args":
29
- ["stop"], "group": "build", "presentation": { "echo": true, "reveal": "always", "focus": false,
30
- "panel": "shared" }, "problemMatcher": [] }, { "label": "â„šī¸ Lando: Info", "type": "shell",
31
- "command": "lando", "args": ["info"], "group": "build", "presentation": { "echo": true, "reveal":
32
- "always", "focus": false, "panel": "shared" }, "problemMatcher": [] }, { "label": "🌐 Yarn: Install
33
- (Node)", "type": "shell", "command": "lando", "args": ["yarn", "install"], "group": "build",
34
- "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared" },
35
- "problemMatcher": [] }, { "label": "đŸ“Ļ Composer: Install Dependencies", "type": "shell", "command":
36
- "lando", "args": ["composer", "install"], "group": "build", "presentation": { "echo": true,
37
- "reveal": "always", "focus": false, "panel": "shared" }, "problemMatcher": [] }, { "label": "đŸ—„ī¸
38
- Redis CLI", "type": "shell", "command": "lando", "args": ["redis-cli"], "group": "build",
39
- "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared" },
40
- "problemMatcher": [] } ] } }
1
+ {
2
+ "folders": [
3
+ {
4
+ "name": "đŸŒŋ {{projectName}}",
5
+ "path": "."
6
+ }
7
+ ],
8
+ "settings": {
9
+ "git.inputValidation": "always",
10
+ "git.inputValidationLength": 100,
11
+ "git.inputValidationSubjectLength": 100,
12
+ "git.confirmSync": false,
13
+ "git.autofetch": true,
14
+ "git.enableSmartCommit": true,
15
+ "git.suggestSmartCommit": true,
16
+ "git.autoStash": true,
17
+ "git.allowNoVerifyCommit": false,
18
+ "editor.formatOnSave": false,
19
+ "editor.codeActionsOnSave": {
20
+ "source.fixAll.eslint": "explicit",
21
+ "source.organizeImports": "explicit"
22
+ },
23
+ "editor.tabSize": 4,
24
+ "editor.insertSpaces": true,
25
+ "search.exclude": {
26
+ "**/node_modules": true,
27
+ "**/vendor": true,
28
+ "**/.lando": true,
29
+ "**/public/build": true,
30
+ "**/dist": true,
31
+ "**/.git": true,
32
+ "**/wp": true
33
+ },
34
+ "files.exclude": {
35
+ "**/node_modules": true,
36
+ "**/vendor": true,
37
+ "**/.git": true,
38
+ "**/.DS_Store": true,
39
+ "**/Thumbs.db": true
40
+ },
41
+ "extensions.ignoreRecommendations": false,
42
+ "emmet.includeLanguages": {
43
+ "blade": "html",
44
+ "php": "html"
45
+ },
46
+ "files.autoSave": "onFocusChange",
47
+ "files.trimTrailingWhitespace": true,
48
+ "files.insertFinalNewline": true
49
+ },
50
+ "extensions": {
51
+ "recommendations": [
52
+ "eamodio.gitlens",
53
+ "ms-vscode.vscode-json",
54
+ "streetsidesoftware.code-spell-checker",
55
+ "vivaxy.vscode-conventional-commits",
56
+ "bmewburn.vscode-intelephense-client",
57
+ "wordpresstoolbox.wordpress-toolbox",
58
+ "tungvn.wordpress-snippet",
59
+ "junstyle.php-cs-fixer",
60
+ "felixfbecker.php-debug",
61
+ "esbenp.prettier-vscode",
62
+ "dbaeumer.vscode-eslint",
63
+ "bradlc.vscode-tailwindcss",
64
+ "ms-azuretools.vscode-docker",
65
+ "ms-vscode-remote.remote-containers",
66
+ "ms-vscode.vscode-typescript-next",
67
+ "formulahendry.auto-rename-tag",
68
+ "christian-kohler.path-intellisense",
69
+ "ms-vscode.vscode-todo-highlight",
70
+ "mhutchie.git-graph",
71
+ "pkief.material-icon-theme",
72
+ "zhuangtongfa.material-theme",
73
+ "xdebug.php-debug",
74
+ "yzhang.markdown-all-in-one",
75
+ "davidanson.vscode-markdownlint",
76
+ "editorconfig.editorconfig",
77
+ "ms-vscode.js-debug",
78
+ "johnbillion.vscode-wordpress-hooks",
79
+ "valeryanm.vscode-phpsab",
80
+ "GitHub.copilot",
81
+ "GitHub.copilot-chat",
82
+ "ms-vscode-remote.remote-wsl",
83
+ "Catppuccin.catppuccin-vsc",
84
+ "sainnhe.everforest"
85
+ ]
86
+ },
87
+ "tasks": {
88
+ "version": "2.0.0",
89
+ "tasks": [
90
+ {
91
+ "label": "🚀 Lando: Start",
92
+ "type": "shell",
93
+ "command": "lando",
94
+ "args": ["start"],
95
+ "group": "build",
96
+ "presentation": {
97
+ "echo": true,
98
+ "reveal": "always",
99
+ "focus": false,
100
+ "panel": "shared"
101
+ },
102
+ "isBackground": true,
103
+ "problemMatcher": []
104
+ },
105
+ {
106
+ "label": "🛑 Lando: Stop",
107
+ "type": "shell",
108
+ "command": "lando",
109
+ "args": ["stop"],
110
+ "group": "build",
111
+ "presentation": {
112
+ "echo": true,
113
+ "reveal": "always",
114
+ "focus": false,
115
+ "panel": "shared"
116
+ },
117
+ "problemMatcher": []
118
+ },
119
+ {
120
+ "label": "â„šī¸ Lando: Info",
121
+ "type": "shell",
122
+ "command": "lando",
123
+ "args": ["info"],
124
+ "group": "build",
125
+ "presentation": {
126
+ "echo": true,
127
+ "reveal": "always",
128
+ "focus": false,
129
+ "panel": "shared"
130
+ },
131
+ "problemMatcher": []
132
+ },
133
+ {
134
+ "label": "🌐 Yarn: Install (Node)",
135
+ "type": "shell",
136
+ "command": "lando",
137
+ "args": ["yarn", "install"],
138
+ "group": "build",
139
+ "presentation": {
140
+ "echo": true,
141
+ "reveal": "always",
142
+ "focus": false,
143
+ "panel": "shared"
144
+ },
145
+ "problemMatcher": []
146
+ },
147
+ {
148
+ "label": "đŸ“Ļ Composer: Install Dependencies",
149
+ "type": "shell",
150
+ "command": "lando",
151
+ "args": ["composer", "install"],
152
+ "group": "build",
153
+ "presentation": {
154
+ "echo": true,
155
+ "reveal": "always",
156
+ "focus": false,
157
+ "panel": "shared"
158
+ },
159
+ "problemMatcher": []
160
+ },
161
+ {
162
+ "label": "đŸ—„ī¸ Redis CLI",
163
+ "type": "shell",
164
+ "command": "lando",
165
+ "args": ["redis-cli"],
166
+ "group": "build",
167
+ "presentation": {
168
+ "echo": true,
169
+ "reveal": "always",
170
+ "focus": false,
171
+ "panel": "shared"
172
+ },
173
+ "problemMatcher": []
174
+ },
175
+ {
176
+ "label": "đŸŗ Devcontainer: Up",
177
+ "type": "shell",
178
+ "command": "docker",
179
+ "args": ["compose", "-f", ".devcontainer/docker-compose.yml", "up", "-d", "--build"],
180
+ "group": "build",
181
+ "presentation": {
182
+ "echo": true,
183
+ "reveal": "always",
184
+ "focus": false,
185
+ "panel": "shared"
186
+ },
187
+ "problemMatcher": []
188
+ },
189
+ {
190
+ "label": "đŸŗ Devcontainer: Down",
191
+ "type": "shell",
192
+ "command": "docker",
193
+ "args": ["compose", "-f", ".devcontainer/docker-compose.yml", "down"],
194
+ "group": "build",
195
+ "presentation": {
196
+ "echo": true,
197
+ "reveal": "always",
198
+ "focus": false,
199
+ "panel": "shared"
200
+ },
201
+ "problemMatcher": []
202
+ },
203
+ {
204
+ "label": "đŸŗ Devcontainer: Rebuild",
205
+ "type": "shell",
206
+ "command": "docker",
207
+ "args": ["compose", "-f", ".devcontainer/docker-compose.yml", "up", "-d", "--build", "--force-recreate"],
208
+ "group": "build",
209
+ "presentation": {
210
+ "echo": true,
211
+ "reveal": "always",
212
+ "focus": false,
213
+ "panel": "shared"
214
+ },
215
+ "problemMatcher": []
216
+ },
217
+ {
218
+ "label": "đŸŗ Devcontainer: Bootstrap",
219
+ "type": "shell",
220
+ "command": "docker",
221
+ "args": ["compose", "-f", ".devcontainer/docker-compose.yml", "exec", "wordpress", "bash", ".devcontainer/setup.sh"],
222
+ "group": "build",
223
+ "presentation": {
224
+ "echo": true,
225
+ "reveal": "always",
226
+ "focus": false,
227
+ "panel": "shared"
228
+ },
229
+ "problemMatcher": []
230
+ }
231
+ ]
232
+ }
233
+ }
@@ -0,0 +1 @@
1
+ path: wp