Skip to content

Commit f3af1cb

Browse files
committed
remove composer installation from images
1 parent 497664f commit f3af1cb

File tree

29 files changed

+106
-111
lines changed

29 files changed

+106
-111
lines changed

CHANGELOG.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
* Added logic to allow default `composer` version to be set based on PHP version.
44
* Added `2.2` and `2.2-latest` shorthand options to install the latest stable 2.2 LTS version of `composer`.
5-
* Set default `composer` version to `2.8.3`
6-
* Set default `composer` version to `2.2.24` for PHP 5.3-7.2
7-
* Set default `composer` version to `1.10.27` for PHP <= 5.2
5+
* Set default `composer` version to `2-latest`
6+
* Set default `composer` version to `2.2-latest` for PHP 5.3-7.2
7+
* Set default `composer` version to `1-latest` for PHP <= 5.2
8+
* Removed `composer` installation from images to prefer installing during app build
89
* Fixed bug causing `composer` 2.2.x to be installed when `composer_version` was set to a single digit version such as `1`
910
* Fixed mismatched `libsqlite3-dev` and `libsqlite3-0` versions in PHP 8.3 and 8.4 images
1011

builders/php.js

+50-31
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,25 @@ const path = require('path');
66
const semver = require('semver');
77
const addBuildStep = require('./../utils/add-build-step');
88

9-
const composerVersions = {
10-
'1': '1.10.27',
11-
'2': '2.8.3',
12-
'2.2': '2.2.24',
13-
};
14-
159
/**
1610
* Get the appropriate Composer version based on the PHP version.
17-
* @param {string} phpVersion - The PHP version.
11+
* @param {semver} phpSemver - The PHP semantic version.
1812
* @return {string|boolean} - The Composer version or false if we cannot parse the version.
1913
*/
20-
const getDefaultComposerVersion = phpVersion => {
21-
phpVersion = semver.coerce(phpVersion);
14+
const getDefaultComposerVersion = phpSemver => {
2215
// Don't set a default composer version if we cannot
2316
// parse the version such as with `custom`.
24-
if (!phpVersion) return false;
17+
if (!phpSemver) return false;
2518

26-
if (semver.lt(phpVersion, '5.3.2')) {
19+
if (semver.lt(phpSemver, '5.3.2')) {
2720
// Use Composer 1 for PHP < 5.3.2
28-
return composerVersions['1'];
29-
} else if (semver.lt(phpVersion, '7.3.0')) {
21+
return '1';
22+
} else if (semver.lt(phpSemver, '7.3.0')) {
3023
// Use Composer 2.2 LTS for PHP < 7.3
31-
return composerVersions['2.2'];
24+
return '2.2';
3225
} else {
3326
// Use Composer 2 for PHP >= 7.3
34-
return composerVersions['2'];
27+
return '2';
3528
}
3629
};
3730

@@ -60,13 +53,25 @@ const nginxConfig = options => ({
6053
const xdebugConfig = host => ([
6154
`client_host=${host}`,
6255
'discover_client_host=1',
63-
'log=/tmp/xdebug.log',
64-
'remote_enable=true',
56+
'log=/tmp/xdebug.log',
57+
'remote_enable=true',
6558
`remote_host=${host}`,
6659
].join(' '));
6760

68-
/*
69-
* Helper to build a package string
61+
/**
62+
* Helper function to build a package string by combining package name and version
63+
*
64+
* @param {string} pkg - The package name
65+
* @param {string} version - The package version
66+
* @return {string} The formatted package string, either "pkg:version" or just "pkg" if version is empty
67+
*
68+
* @example
69+
* // Returns "php:7.4"
70+
* pkger('php', '7.4');
71+
*
72+
* @example
73+
* // Returns "mysql"
74+
* pkger('mysql', '');
7075
*/
7176
const pkger = (pkg, version) => (!_.isEmpty(version)) ? `${pkg}:${version}` : pkg;
7277

@@ -172,11 +177,15 @@ module.exports = {
172177
// Merge the user config onto the default options
173178
options = parseConfig(_.merge({}, config, options));
174179

180+
// Get the semver of the PHP version, NULL if we cannot parse it
181+
const phpSemver = semver.coerce(options.version);
182+
phpSemver && debug('Parsed PHP semantic version: %s', phpSemver);
183+
175184
// Mount our default php config
176185
options.volumes.push(`${options.confDest}/${options.defaultFiles._php}:${options.remoteFiles._php}`);
177186
options.volumes.push(`${options.confDest}/${options.defaultFiles.pool}:${options.remoteFiles.pool}`);
178187
// Shift on the docker entrypoint if this is a more recent version
179-
if (options.version !== 'custom' && semver.gt(semver.coerce(options.version), '5.5.0')) {
188+
if (phpSemver && semver.gt(phpSemver, '5.5.0')) {
180189
options.command.unshift('docker-php-entrypoint');
181190
}
182191

@@ -202,28 +211,38 @@ module.exports = {
202211
};
203212
options.info = {via: options.via};
204213

205-
// Add our composer things to run step
206-
if (!_.isEmpty(options.composer)) {
207-
const commands =
208-
require('../utils/get-install-commands')(options.composer, pkger, ['composer', 'global', 'require', '-n']);
209-
addBuildStep(commands, options._app, options.name, 'build_internal');
214+
// Determine the appropriate composer version to install if not specified
215+
if (options.composer_version === true || options.composer_version === '') {
216+
options.composer_version = getDefaultComposerVersion(phpSemver);
217+
} else if (typeof options.composer_version === 'number') {
218+
options.composer_version = options.composer_version.toString();
219+
}
220+
const usingComposer1 = options.composer_version && semver.satisfies(options.composer_version, '1.x');
221+
222+
// Add prestissimo as a global package for Composer 1.x performance improvements. Requires PHP >= 5.3
223+
if (usingComposer1 && phpSemver && semver.gte(phpSemver, '5.3.0')) {
224+
options.composer = options.composer || {};
225+
options.composer = {'hirak/prestissimo': '*', ...options.composer};
210226
}
211227

212-
// Add activate steps for xdebug
228+
// Add build step to enable xdebug
213229
if (options.xdebug) {
214230
addBuildStep(['docker-php-ext-enable xdebug'], options._app, options.name, 'build_as_root_internal');
215231
}
216232

217-
// Determine the appropriate composer version if not already set
218-
if (options.composer_version === true || options.composer_version === '') {
219-
options.composer_version = getDefaultComposerVersion(options.version);
233+
// Add build step to install our Composer global packages
234+
if (!_.isEmpty(options.composer)) {
235+
const commands =
236+
require('../utils/get-install-commands')(options.composer, pkger, ['composer', 'global', 'require', '-n']);
237+
addBuildStep(commands, options._app, options.name, 'build_internal');
220238
}
221239

222-
// Install the desired composer version
240+
// Install the desired composer version as the first `build_internal` build step
223241
if (options.composer_version) {
224242
debug('Installing composer version %s', options.composer_version);
225243
const commands = [`/helpers/install-composer.sh ${options.composer_version}`];
226-
addBuildStep(commands, options._app, options.name, 'build_internal', true);
244+
const firstStep = true;
245+
addBuildStep(commands, options._app, options.name, 'build_internal', firstStep);
227246
}
228247

229248
// Add in nginx if we need to

docs/config.md

+13-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ services:
1818
webroot: .
1919
xdebug: false
2020
composer: []
21-
composer_version: '2.2.12'
21+
composer_version: '2'
2222
# Below only valid for via: cli
2323
command: tail -f /dev/null
2424
config:
@@ -161,16 +161,22 @@ You can use `lando info --deep | grep IPAddress` to help discover the correct ho
161161

162162
## Installing composer
163163

164-
As of Lando `3.0.17` you can configure the version of `composer` you would like to install. This _should_ respect any of the versions listed on the [Composer download page](https://getcomposer.org/download/) but it is required you specify down to the patch version.
164+
Lando automatically installs the latest compatible version of Composer based on your specified PHP version:
165+
166+
- PHP >= 7.3: Composer 2.x
167+
- PHP >= 5.3.2 and < 7.3: Composer 2.2 LTS
168+
- PHP < 5.3.2: Composer 1.x
169+
170+
You can customize the Composer version by specifying either a specific version number or using a channel alias:
165171

166172
```yaml
167173
services:
168174
myservice:
169-
type: php
170-
composer_version: "1.10.1"
175+
type: php:8.2
176+
composer_version: "2.6.5" # Install specific version
171177
```
172178

173-
You can also choose to ignore the `composer` install step by setting `composer_version: false`. This will use whatever version of `composer` was last bundled with our `php` image. The following "convenience flags" are also available:
179+
The following channel aliases are available:
174180

175181
```yaml
176182
# Install the latest stable 1.x version
@@ -192,6 +198,8 @@ composer_version: preview
192198
composer_version: snapshot
193199
```
194200

201+
You can disable Composer installation entirely by setting `composer_version: false`.
202+
195203
## Installing global dependencies
196204

197205
You can also use the `composer` key if you need to require any [global composer dependenices](https://getcomposer.org/doc/03-cli.md#require). This follows the same syntax as your normal [`composer.json`](https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup) except written as YAML instead of JSON.

examples/php-extensions/.lando.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: lando-php-extensions
22
services:
3-
84scripted:
4-
type: php:8.4
3+
83scripted:
4+
type: php:8.3
55
build_as_root:
66
- install-php-extensions swoole
77
buildsteps:

examples/php-extensions/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Run the following commands to validate things are rolling as they should.
2424

2525
```bash
2626
# Should have installed the needed php extensions
27-
lando exec 84scripted -- php -m | grep swoole
27+
lando exec 83scripted -- php -m | grep swoole
2828
lando exec buildsteps -- php -m | grep stats
2929
lando exec buildsteps -- php -m | grep xsl
3030
lando exec dockerfile -- php -m | grep oci8

images/5.6-apache/Dockerfile

-4
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,7 @@ RUN \
7272
intl \
7373
gettext \
7474
pcntl \
75-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
76-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
77-
&& php -r "unlink('composer-setup.php');" \
7875
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
79-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8076
&& apt-get -y clean \
8177
&& apt-get -y autoclean \
8278
&& apt-get -y autoremove \

images/5.6-fpm/Dockerfile

-5
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,7 @@ RUN \
7272
intl \
7373
gettext \
7474
pcntl \
75-
# Install composer
76-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
77-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
78-
&& php -r "unlink('composer-setup.php');" \
7975
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
80-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8176
&& apt-get -y clean \
8277
&& apt-get -y autoclean \
8378
&& apt-get -y autoremove \

images/7.0-apache/Dockerfile

-4
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,7 @@ RUN \
7272
intl \
7373
gettext \
7474
pcntl \
75-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
76-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
77-
&& php -r "unlink('composer-setup.php');" \
7875
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
79-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8076
&& apt-get -y clean \
8177
&& apt-get -y autoclean \
8278
&& apt-get -y autoremove \

images/7.0-fpm/Dockerfile

-4
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,7 @@ RUN \
7272
intl \
7373
gettext \
7474
pcntl \
75-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
76-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
77-
&& php -r "unlink('composer-setup.php');" \
7875
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
79-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8076
&& apt-get -y clean \
8177
&& apt-get -y autoclean \
8278
&& apt-get -y autoremove \

images/7.1-apache/Dockerfile

-4
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,7 @@ RUN \
7575
intl \
7676
gettext \
7777
pcntl \
78-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
79-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
80-
&& php -r "unlink('composer-setup.php');" \
8178
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
82-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8379
&& apt-get -y clean \
8480
&& apt-get -y autoclean \
8581
&& apt-get -y autoremove \

images/7.1-fpm/Dockerfile

-4
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,7 @@ RUN \
7575
intl \
7676
gettext \
7777
pcntl \
78-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
79-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
80-
&& php -r "unlink('composer-setup.php');" \
8178
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
82-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8379
&& apt-get -y clean \
8480
&& apt-get -y autoclean \
8581
&& apt-get -y autoremove \

images/7.2-apache/Dockerfile

-4
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,7 @@ RUN \
7373
intl \
7474
gettext \
7575
pcntl \
76-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
77-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
78-
&& php -r "unlink('composer-setup.php');" \
7976
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
80-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8177
&& apt-get -y clean \
8278
&& apt-get -y autoclean \
8379
&& apt-get -y autoremove \

images/7.2-fpm/Dockerfile

-4
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,7 @@ RUN \
7373
intl \
7474
gettext \
7575
pcntl \
76-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
77-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=1.10.27 \
78-
&& php -r "unlink('composer-setup.php');" \
7976
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
80-
&& su -c "composer global require -n hirak/prestissimo" -s /bin/sh www-data \
8177
&& apt-get -y clean \
8278
&& apt-get -y autoclean \
8379
&& apt-get -y autoremove \

images/7.3-apache/Dockerfile

-3
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ RUN mkdir -p /usr/share/man/man1 /usr/share/man/man7 \
6969
intl \
7070
gettext \
7171
pcntl \
72-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
73-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=2.2.24 \
74-
&& php -r "unlink('composer-setup.php');" \
7572
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
7673
&& apt-get -y clean \
7774
&& apt-get -y autoclean \

images/7.3-fpm/Dockerfile

-3
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ RUN mkdir -p /usr/share/man/man1 /usr/share/man/man7 \
6969
intl \
7070
gettext \
7171
pcntl \
72-
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
73-
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --version=2.2.24 \
74-
&& php -r "unlink('composer-setup.php');" \
7572
&& chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
7673
&& apt-get -y clean \
7774
&& apt-get -y autoclean \

images/7.4-apache/Dockerfile

-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ RUN \
5959
RUN install-php-extensions xdebug \
6060
&& rm -f /usr/local/etc/php/conf.d/*xdebug.ini
6161

62-
RUN install-php-extensions @composer-2.2.24
63-
6462
RUN \
6563
chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
6664
&& apt-get -y clean \

images/7.4-fpm/Dockerfile

-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ RUN \
5959
RUN install-php-extensions xdebug \
6060
&& rm -f /usr/local/etc/php/conf.d/*xdebug.ini
6161

62-
RUN install-php-extensions @composer-2.2.24
63-
6462
RUN \
6563
chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
6664
&& apt-get -y clean \

images/8.0-apache/Dockerfile

-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ RUN \
5959
RUN install-php-extensions xdebug \
6060
&& rm -f /usr/local/etc/php/conf.d/*xdebug.ini
6161

62-
RUN install-php-extensions @composer-2.2.24
63-
6462
RUN \
6563
chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
6664
&& apt-get -y clean \

images/8.0-fpm/Dockerfile

-2
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ RUN \
5959
RUN install-php-extensions xdebug \
6060
&& rm -f /usr/local/etc/php/conf.d/*xdebug.ini
6161

62-
RUN install-php-extensions @composer-2.2.24
63-
6462
RUN \
6563
chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
6664
&& apt-get -y clean \

images/8.1-apache/Dockerfile

-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ RUN \
5757
RUN install-php-extensions xdebug \
5858
&& rm -f /usr/local/etc/php/conf.d/*xdebug.ini
5959

60-
RUN install-php-extensions @composer-2
61-
6260
RUN \
6361
chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
6462
&& apt-get -y clean \

images/8.1-fpm/Dockerfile

-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ RUN \
5757
RUN install-php-extensions xdebug \
5858
&& rm -f /usr/local/etc/php/conf.d/*xdebug.ini
5959

60-
RUN install-php-extensions @composer-2
61-
6260
RUN \
6361
chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
6462
&& apt-get -y clean \

images/8.2-apache/Dockerfile

-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ RUN \
5757
RUN install-php-extensions xdebug \
5858
&& rm -f /usr/local/etc/php/conf.d/*xdebug.ini
5959

60-
RUN install-php-extensions @composer-2
61-
6260
RUN \
6361
chsh -s /bin/bash www-data && mkdir -p /var/www/.composer && chown -R www-data:www-data /var/www \
6462
&& apt-get -y clean \

0 commit comments

Comments
 (0)