@lando/drupal 1.14.0 → 1.15.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  ## {{ UNRELEASED_VERSION }} - [{{ UNRELEASED_DATE }}]({{ UNRELEASED_LINK }})
2
2
 
3
+ ## v1.15.0 - [March 11, 2026](https://github.com/lando/drupal/releases/tag/v1.15.0)
4
+
5
+ * Fixed `drush_uri` to include non-standard proxy ports [#180](https://github.com/lando/drupal/pull/180)
6
+ * Removed `--ansi` flag from composer tooling command to prevent escape codes in redirected output [#157](https://github.com/lando/drupal/issues/157)
7
+ * Updated to [@lando/php@1.12.0](https://github.com/lando/php/releases/tag/v1.12.0) to enable mod_headers/mod_expires by default and fix xdebug log ownership
8
+
9
+ ## v1.14.1 - [February 20, 2026](https://github.com/lando/drupal/releases/tag/v1.14.1)
10
+
11
+ * Updated to [@lando/php@1.11.1](https://github.com/lando/php/releases/tag/v1.11.1)
12
+
3
13
  ## v1.14.0 - [February 19, 2026](https://github.com/lando/drupal/releases/tag/v1.14.0)
4
14
 
5
15
  * Added `drush_uri` configuration option to set `DRUSH_OPTIONS_URI` environment variable in the appserver service with SSL support
package/README.md CHANGED
@@ -18,7 +18,7 @@ Of course, once a user is running their Drupal project with Lando they can take
18
18
  Add a `drupal11` recipe to your Landofile
19
19
 
20
20
  ```yaml
21
- name: Drupal 11
21
+ name: my-cms
22
22
  recipe: drupal11
23
23
  config:
24
24
  php: 8.3
@@ -82,7 +82,7 @@ npm release
82
82
 
83
83
  * [@pirog](https://github.com/pirog)
84
84
  * [@reynoldsalec](https://github.com/reynoldsalec)
85
- * [@AaronFeledy](https://github.com/AaronFeledy)
85
+ * [@aaronfeledy](https://github.com/AaronFeledy)
86
86
 
87
87
  ## Contributors
88
88
 
@@ -16,7 +16,7 @@ const DRUSH7 = '7.4.0';
16
16
  const toolingDefaults = {
17
17
  'composer': {
18
18
  service: 'appserver',
19
- cmd: 'composer --ansi',
19
+ cmd: 'composer',
20
20
  },
21
21
  'db-import <file>': {
22
22
  service: ':host',
@@ -299,7 +299,17 @@ module.exports = {
299
299
  // Check SSL setting for the proxy service
300
300
  const proxyServiceSsl = options.services[options.proxyService]?.ssl;
301
301
  const ssl = proxyServiceSsl !== undefined ? proxyServiceSsl : options.services.appserver?.ssl;
302
- drushUri = ssl ? `https://${proxyUrl}` : `http://${proxyUrl}`;
302
+ const protocol = ssl ? 'https' : 'http';
303
+ // Include port if non-standard (e.g. proxy on 444 instead of 443)
304
+ const ports = _.get(options, '_app._config.proxyLastPorts');
305
+ let port = '';
306
+ if (ports) {
307
+ const activePort = ssl ? ports.https : ports.http;
308
+ if (activePort && ((ssl && activePort !== 443) || (!ssl && activePort !== 80))) {
309
+ port = `:${activePort}`;
310
+ }
311
+ }
312
+ drushUri = `${protocol}://${proxyUrl}${port}`;
303
313
  }
304
314
  }
305
315
 
package/netlify.toml CHANGED
@@ -16,7 +16,8 @@
16
16
  "x.com",
17
17
  "twitter.com",
18
18
  "drupal.org",
19
- "/v/"
19
+ "/v/",
20
+ "hub.docker.com",
20
21
  ]
21
22
  skipPatterns = [ ".rss", ".gif", ".jpg" ]
22
23
  checkExternal = true
@@ -1,5 +1,22 @@
1
1
  ## {{ UNRELEASED_VERSION }} - [{{ UNRELEASED_DATE }}]({{ UNRELEASED_LINK }})
2
2
 
3
+ ## v1.12.0 - [March 8, 2026](https://github.com/lando/php/releases/tag/v1.12.0)
4
+
5
+ * Enabled `mod_headers` and `mod_expires` Apache modules by default [#243](https://github.com/lando/php/issues/243)
6
+ * Fixed xdebug log file ownership issue when `build_as_root` or `run_as_root` creates `/tmp/xdebug.log` as root [#242](https://github.com/lando/php/pull/242)
7
+
8
+ ## v1.11.2 - [February 25, 2026](https://github.com/lando/php/releases/tag/v1.11.2)
9
+
10
+ * Fixed composer install crash caused by legacy prestissimo removal running as wrong user
11
+ * Improved composer install script to default to latest stable
12
+ * Fixed `mysqldump` warning for unknown option on MariaDB 11.4/11.8 [#237](https://github.com/lando/php/issues/237)
13
+ * Updated to [@lando/nginx@1.6.0](https://github.com/lando/nginx/releases/tag/v1.6.0)
14
+
15
+ ## v1.11.1 - [February 20, 2026](https://github.com/lando/php/releases/tag/v1.11.1)
16
+
17
+ * Fixed database type detection when no version is specified
18
+ * Added npm edge-to-latest tag promotion on release
19
+
3
20
  ## v1.11.0 - [February 19, 2026](https://github.com/lando/php/releases/tag/v1.11.0)
4
21
 
5
22
  * Fixed database client auto-detection for recipe-based services [#223](https://github.com/lando/php/pull/223)
@@ -68,12 +68,12 @@ const detectDatabaseClient = (options, debug = () => {}) => {
68
68
 
69
69
  for (const service of Object.values(services)) {
70
70
  const type = service?.type || '';
71
- // Match mysql:X or recipe-mysql:X (e.g., backdrop-mysql:8.0, drupal-mysql:8.4)
72
- const mysqlMatch = type.match(/(?:^|-)mysql:(\d+(?:\.\d+)?)/);
73
- if (mysqlMatch && !mysqlVersion) mysqlVersion = mysqlMatch[1];
74
- // Match mariadb:X or recipe-mariadb:X (e.g., backdrop-mariadb:10.6, drupal-mariadb:11.4)
75
- const mariaMatch = type.match(/(?:^|-)mariadb:(\d+(?:\.\d+)?)/);
76
- if (mariaMatch && !mariaVersion) mariaVersion = mariaMatch[1];
71
+ // Match mysql or mysql:X, including recipe prefixes (e.g., backdrop-mysql, backdrop-mysql:8.0)
72
+ const mysqlMatch = type.match(/(?:^|-)mysql(?::(\d+(?:\.\d+)?))?(?:$|[^a-z])/);
73
+ if (mysqlMatch && !mysqlVersion) mysqlVersion = mysqlMatch[1] || '8.0';
74
+ // Match mariadb or mariadb:X, including recipe prefixes (e.g., backdrop-mariadb:10.6)
75
+ const mariaMatch = type.match(/(?:^|-)mariadb(?::(\d+(?:\.\d+)?))?(?:$|[^a-z])/);
76
+ if (mariaMatch && !mariaVersion) mariaVersion = mariaMatch[1] || '11.4';
77
77
  }
78
78
 
79
79
  if (mariaVersion && mysqlVersion) {
@@ -170,7 +170,7 @@ module.exports = {
170
170
  '/helpers',
171
171
  ],
172
172
  confSrc: path.resolve(__dirname, '..', 'config'),
173
- command: ['sh -c \'a2enmod rewrite && apache2-foreground\''],
173
+ command: ['sh -c \'a2enmod rewrite headers expires && apache2-foreground\''],
174
174
  composer_version: true,
175
175
  phpServer: 'apache',
176
176
  defaultFiles: {
@@ -248,6 +248,10 @@ module.exports = {
248
248
  options.composer_version = options.composer_version.toString();
249
249
  }
250
250
 
251
+ // Pre-create xdebug log with world-writable permissions so root-owned builds
252
+ // don't block www-data from writing to it later
253
+ addBuildStep(['touch /tmp/xdebug.log && chmod 666 /tmp/xdebug.log'], options._app, options.name, 'build_as_root_internal');
254
+
251
255
  // Add build step to enable xdebug
252
256
  if (options.xdebug) {
253
257
  addBuildStep(['docker-php-ext-enable xdebug'], options._app, options.name, 'build_as_root_internal');
@@ -1,5 +1,7 @@
1
1
  ## {{ UNRELEASED_VERSION }} - [{{ UNRELEASED_DATE }}]({{ UNRELEASED_LINK }})
2
2
 
3
+ ## v1.6.0 - [February 23, 2026](https://github.com/lando/nginx/releases/tag/v1.6.0)
4
+
3
5
  ## v1.5.0 - [August 31, 2025](https://github.com/lando/nginx/releases/tag/v1.5.0)
4
6
 
5
7
  * Switched images to [bitnamilegacy](https://github.com/bitnami/containers/issues/83267) namespace
@@ -47,6 +47,15 @@ fi
47
47
  lando_info "Rendered template /tmp/vhosts.lando to /opt/bitnami/nginx/conf/vhosts/lando.conf"
48
48
  lando_debug $(cat /opt/bitnami/nginx/conf/vhosts/lando.conf)
49
49
 
50
+ # Set nginx worker user to www-data so it can serve files created by PHP
51
+ # Bitnami's nginx-env.sh hardcodes NGINX_DAEMON_USER=daemon which overwrites
52
+ # any env var we set, so we patch it before the entrypoint runs
53
+ # See: https://github.com/lando/drupal/issues/124
54
+ if [ -f "/opt/bitnami/scripts/nginx-env.sh" ]; then
55
+ sed -i 's/export NGINX_DAEMON_USER="daemon"/export NGINX_DAEMON_USER="www-data"/' /opt/bitnami/scripts/nginx-env.sh
56
+ sed -i 's/export NGINX_DAEMON_GROUP="daemon"/export NGINX_DAEMON_GROUP="www-data"/' /opt/bitnami/scripts/nginx-env.sh
57
+ fi
58
+
50
59
  # Detect and run the correct entrypoint script. THANKS BITNAMI!
51
60
  if [ -f "/opt/bitnami/scripts/nginx/entrypoint.sh" ]; then
52
61
  /opt/bitnami/scripts/nginx/entrypoint.sh /opt/bitnami/scripts/nginx/run.sh
@@ -10,7 +10,7 @@
10
10
  [[context.deploy-preview.plugins]]
11
11
  package = "netlify-plugin-checklinks"
12
12
  [context.deploy-preview.plugins.inputs]
13
- todoPatterns = [ "load", "CHANGELOG.html", "x.com", "twitter.com", "/v/" ]
13
+ todoPatterns = [ "load", "CHANGELOG.html", "x.com", "twitter.com", "/v/", "hub.docker.com" ]
14
14
  skipPatterns = [ ".rss", ".gif", ".jpg" ]
15
15
  checkExternal = true
16
16
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lando/nginx",
3
3
  "description": "A Lando plugin that provides a tight integration with NGINX.",
4
- "version": "1.5.0",
4
+ "version": "1.6.0",
5
5
  "author": "Mike Pirog @pirog",
6
6
  "license": "MIT",
7
7
  "repository": "lando/nginx",
@@ -62,9 +62,9 @@
62
62
  "lodash"
63
63
  ],
64
64
  "dist": {
65
- "integrity": "sha512-5ucFuVSujqYHcrRYfp7h7hJoeB4hDIykCa3jCSrOzXEh9yJA5tOoIHWZ6sA5bVWMZ+fmVjJwN4ECq5bCSL4fXQ==",
66
- "shasum": "4f17dd1cd473fd82fffc629a87f09b695826bf75",
67
- "filename": "lando-nginx-1.5.0.tgz",
68
- "unpackedSize": 1438911
65
+ "integrity": "sha512-hFMXf957vKd++pvHh08Ywc8h2Aftg1uDg+4Pt4HqsTQxYSnlN8ayoOVYphV7cUe2WV1gRIbFCLz5pKAPak/bYQ==",
66
+ "shasum": "648e64c6fc22418c8cd65b6ebe3274d16a6dc115",
67
+ "filename": "lando-nginx-1.6.0.tgz",
68
+ "unpackedSize": 1439572
69
69
  }
70
70
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lando/php",
3
3
  "description": "A Lando plugin that provides a tight integration with PHP.",
4
- "version": "1.11.0",
4
+ "version": "1.12.0",
5
5
  "author": "Mike Pirog @pirog",
6
6
  "license": "MIT",
7
7
  "repository": "lando/php",
@@ -50,7 +50,7 @@
50
50
  "devDependencies": {
51
51
  "@babel/eslint-parser": "^7.25.9",
52
52
  "@lando/leia": "0.6.7",
53
- "@lando/vitepress-theme-default-plus": "^1.1.1",
53
+ "@lando/vitepress-theme-default-plus": "^1.1.5",
54
54
  "chai": "^4.3.4",
55
55
  "command-line-test": "^1.0.10",
56
56
  "eslint": "^7.32.0",
@@ -66,9 +66,9 @@
66
66
  "semver"
67
67
  ],
68
68
  "dist": {
69
- "integrity": "sha512-DXgh9l91jzrUk7wGgfTLLdlHzWnILc+VNJzPqtiTLa6sx9APcbUTQO4ns4efDjto64+cyRYqiyMSGAxrEmP/TA==",
70
- "shasum": "bbaaf72ebdb5eaf2e8f94157cbad92022356e662",
71
- "filename": "lando-php-1.11.0.tgz",
72
- "unpackedSize": 3058868
69
+ "integrity": "sha512-nsB/0TpunQiov9qAnACEcJi3vlduFJjxTkQtkci0jHjG1clPKFUCDPPzwGTfnJl4J0TxJ48dZDMAMcAHRkTttA==",
70
+ "shasum": "92efcddcc2f1b59017a440b2a4d545353496f847",
71
+ "filename": "lando-php-1.12.0.tgz",
72
+ "unpackedSize": 3060783
73
73
  }
74
74
  }
@@ -24,17 +24,11 @@ elif [ "$VERSION" = 'preview' ]; then
24
24
  php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer --preview
25
25
  elif [ "$VERSION" = 'snapshot' ]; then
26
26
  php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer --snapshot
27
- else
27
+ elif [ -n "$VERSION" ]; then
28
28
  php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer --version="$VERSION"
29
+ else
30
+ php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
29
31
  fi
30
32
 
31
33
  # Remove the setup script
32
34
  php -r "unlink('/tmp/composer-setup.php');"
33
-
34
- # Check if anything is installed globally
35
- if [ -f /var/www/.composer/composer.json ]; then
36
- # If this is version 2 then let's make sure hirak/prestissimo is removed
37
- if composer --version 2>/dev/null | grep -E "Composer (version )?2." > /dev/null; then
38
- composer global remove hirak/prestissimo
39
- fi
40
- fi
@@ -34,9 +34,6 @@ default-character-set=utf8mb4
34
34
  # Prevent SSL errors when connecting to servers without SSL
35
35
  disable-ssl-verify-server-cert
36
36
 
37
- [mysqldump]
38
- # MySQL 8 uses this; MariaDB safely ignores it via loose- prefix
39
- loose-skip-column-statistics
40
37
  MYCNF
41
38
 
42
39
  echo "MariaDB compatibility wrappers installed"
@@ -50,10 +50,15 @@ mkdir -p /etc/mysql/conf.d
50
50
  cat > /etc/mysql/conf.d/lando.cnf << 'MYCNF'
51
51
  [client]
52
52
  default-character-set=utf8mb4
53
+ # Use PREFERRED so SSL is used when available but self-signed certs
54
+ # (e.g. MySQL 5.7 defaults) don't cause verification failures.
55
+ # Preserves SSL for servers that support it
56
+ ssl-mode=PREFERRED
53
57
 
54
58
  [mysqldump]
55
59
  # Prevent column-statistics errors with newer mysqldump
56
60
  skip-column-statistics
61
+ ssl-mode=PREFERRED
57
62
  MYCNF
58
63
 
59
64
  if ! mysql --version 2>/dev/null; then
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lando/drupal",
3
3
  "description": "A Lando plugin that provides a tight integration with Drupal.",
4
- "version": "1.14.0",
4
+ "version": "1.15.0",
5
5
  "author": "Mike Pirog @pirog",
6
6
  "license": "MIT",
7
7
  "repository": "lando/drupal",
@@ -46,7 +46,7 @@
46
46
  "@lando/mariadb": "^1.8.0",
47
47
  "@lando/mssql": "^1.4.3",
48
48
  "@lando/mysql": "^1.6.0",
49
- "@lando/php": "^1.11.0",
49
+ "@lando/php": "^1.12.0",
50
50
  "@lando/postgres": "^1.6.0",
51
51
  "lodash": "^4.17.21",
52
52
  "semver": "^7.7.2"
@@ -54,7 +54,7 @@
54
54
  "devDependencies": {
55
55
  "@babel/eslint-parser": "^7.16.0",
56
56
  "@lando/leia": "^1.0.0-beta.3",
57
- "@lando/vitepress-theme-default-plus": "^1.1.1",
57
+ "@lando/vitepress-theme-default-plus": "^1.1.5",
58
58
  "chai": "^4.3.4",
59
59
  "command-line-test": "^1.0.10",
60
60
  "eslint": "^7.32.0",
@@ -75,9 +75,9 @@
75
75
  "semver"
76
76
  ],
77
77
  "dist": {
78
- "integrity": "sha512-Mgd7jSGj9fr9dOcPdKqoC4BRk/gXLkOTY7MlfwveMIiAZrybU4zpxphzji3f94FdiuFrPr+U2fEWKe4ons8t9Q==",
79
- "shasum": "8ac87472662a3150a13d983c6617a4ed68883898",
80
- "filename": "lando-drupal-1.14.0.tgz",
81
- "unpackedSize": 10429789
78
+ "integrity": "sha512-heWji6NOqsne1Yoif3/6RLgyrvqk7VL9Sqeeu6dzUKfMOB7afZD+nBYKsJARib3t9gH/PECPTjzzN+lLLqdECA==",
79
+ "shasum": "e0213ff47cdfed4cff2fc7b540dd2dcc750516bb",
80
+ "filename": "lando-drupal-1.15.0.tgz",
81
+ "unpackedSize": 10432844
82
82
  }
83
83
  }