build-support/php: refactor build scripts (#386757)

This commit is contained in:
Pol Dellaiera
2025-03-05 09:18:24 +01:00
committed by GitHub
20 changed files with 1367 additions and 1223 deletions
@@ -9,21 +9,21 @@ let
buildComposerProjectOverride =
finalAttrs:
{
php ? toplevel.php,
composer ? toplevel.php.packages.composer,
composerVendor ? null,
vendorHash ? null,
composerLock ? null,
composerNoDev ? true,
composerNoPlugins ? true,
composerNoScripts ? true,
composerStrictValidation ? true,
php ? finalAttrs.php or toplevel.php,
composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer,
composerLock ? finalAttrs.composerLock or null,
vendorHash ? finalAttrs.vendorHash or "",
composerNoDev ? finalAttrs.composerNoDev or true,
composerNoPlugins ? finalAttrs.composerNoPlugins or true,
composerNoScripts ? finalAttrs.composerNoScripts or true,
composerStrictValidation ? finalAttrs.composerStrictValidation or true,
buildInputs ? [ ],
nativeBuildInputs ? [ ],
strictDeps ? true,
patches ? [ ],
doCheck ? true,
doInstallCheck ? true,
dontCheckForBrokenSymlinks ? true,
passthru ? { },
meta ? { },
...
@@ -34,7 +34,9 @@ let
strictDeps
doCheck
doInstallCheck
dontCheckForBrokenSymlinks
;
nativeBuildInputs = nativeBuildInputs ++ [
composer
php
@@ -81,20 +83,21 @@ let
composerVendor =
args.composerVendor or (php.mkComposerVendor {
inherit (finalAttrs)
pname
src
version
;
inherit
php
composer
vendorHash
composerLock
composerNoDev
composerNoPlugins
composerNoScripts
composerStrictValidation
vendorHash
;
inherit (finalAttrs)
patches
pname
src
version
dontCheckForBrokenSymlinks
;
});
@@ -8,33 +8,37 @@ let
mkComposerVendorOverride =
finalAttrs:
{
php ? toplevel.php,
composer ? toplevel.php.packages.composer,
composerLock,
vendorHash ? null,
composerNoDev ? true,
composerNoPlugins ? true,
composerNoScripts ? true,
composerStrictValidation ? true,
php ? finalAttrs.php or toplevel.php,
composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer,
composerLock ? finalAttrs.composerLock or null,
vendorHash ? finalAttrs.vendorHash or "",
composerNoDev ? finalAttrs.composerNoDev or true,
composerNoPlugins ? finalAttrs.composerNoPlugins or true,
composerNoScripts ? finalAttrs.composerNoScripts or true,
composerStrictValidation ? finalAttrs.composerStrictValidation or true,
buildInputs ? [ ],
nativeBuildInputs ? [ ],
dontPatchShebangs ? true,
strictDeps ? true,
doCheck ? true,
doInstallCheck ? false,
dontCheckForBrokenSymlinks ? true,
...
}@args:
assert (lib.assertMsg (args ? src) "mkComposerVendor expects src argument.");
assert (lib.assertMsg (args ? vendorHash) "mkComposerVendor expects vendorHash argument.");
assert (lib.assertMsg (args ? version) "mkComposerVendor expects version argument.");
assert (lib.assertMsg (args ? pname) "mkComposerVendor expects pname argument.");
assert (lib.assertMsg (args ? version) "mkComposerVendor expects version argument.");
assert (lib.assertMsg (args ? src) "mkComposerVendor expects src argument.");
{
name = "${args.pname}-composer-vendor-${args.version}";
# See https://github.com/NixOS/nix/issues/6660
inherit dontPatchShebangs;
inherit buildInputs strictDeps doCheck;
inherit
buildInputs
strictDeps
doCheck
;
nativeBuildInputs = nativeBuildInputs ++ [
composer
@@ -1,8 +1,7 @@
declare composerVendor
declare version
declare composerNoDev
declare composerNoPlugins
declare composerNoScripts
declare -g version
declare -g pname
declare -g composerVendor
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"
preConfigureHooks+=(composerInstallConfigureHook)
preBuildHooks+=(composerInstallBuildHook)
@@ -17,7 +16,7 @@ composerInstallConfigureHook() {
setComposerRootVersion
if [[ ! -e "${composerVendor}" ]]; then
echo "No local composer vendor found."
echo "No local composer vendor found." >&2
exit 1
fi
@@ -60,10 +59,11 @@ composerInstallInstallHook() {
cp -r . "$out"/share/php/"${pname}"/
# Create symlinks for the binaries.
jq -r -c 'try (.bin[] | select(test(".bat$")? | not) )' composer.json | while read -r bin; do
mapfile -t BINS < <(jq -r -c 'try (.bin[] | select(test(".bat$")? | not) )' composer.json)
for bin in "${BINS[@]}"; do
echo -e "\e[32mCreating symlink ${bin}...\e[0m"
mkdir -p "$out"/bin
ln -s "$out"/share/php/"${pname}"/"$bin" "$out"/bin/"$(basename "$bin")"
mkdir -p "$out/bin"
ln -s "$out/share/php/${pname}/${bin}" "$out/bin/$(basename "$bin")"
done
echo "Finished composerInstallInstallHook"
@@ -1,28 +1,28 @@
declare composerLock
declare version
declare composerNoDev
declare composerNoPlugins
declare composerNoScripts
declare composerStrictValidation
source @phpScriptUtils@
declare -g composerNoDev="${composerNoDev:+--no-dev}"
declare -g composerNoPlugins="${composerNoPlugins:+--no-plugins}"
declare -g composerNoScripts="${composerNoScripts:+--no-scripts}"
preConfigureHooks+=(composerVendorConfigureHook)
preBuildHooks+=(composerVendorBuildHook)
preCheckHooks+=(composerVendorCheckHook)
preInstallHooks+=(composerVendorInstallHook)
source @phpScriptUtils@
composerVendorConfigureHook() {
echo "Executing composerVendorConfigureHook"
setComposerRootVersion
if [[ -f "composer.lock" ]]; then
echo -e "\e[32mUsing \`composer.lock\` file from the source package\e[0m"
fi
if [[ -e "$composerLock" ]]; then
echo -e "\e[32mUsing user provided \`composer.lock\` file from \`$composerLock\`\e[0m"
install -Dm644 $composerLock ./composer.lock
fi
if [[ ! -f "composer.lock" ]]; then
composer \
--no-cache \
@@ -30,9 +30,9 @@ composerVendorConfigureHook() {
--no-interaction \
--no-progress \
--optimize-autoloader \
${composerNoDev:+--no-dev} \
${composerNoPlugins:+--no-plugins} \
${composerNoScripts:+--no-scripts} \
${composerNoDev} \
${composerNoPlugins} \
${composerNoScripts} \
update
if [[ -f "composer.lock" ]]; then
@@ -74,9 +74,9 @@ composerVendorBuildHook() {
--no-interaction \
--no-progress \
--optimize-autoloader \
${composerNoDev:+--no-dev} \
${composerNoPlugins:+--no-plugins} \
${composerNoScripts:+--no-scripts} \
${composerNoDev} \
${composerNoPlugins} \
${composerNoScripts} \
install
echo "Finished composerVendorBuildHook"
@@ -96,7 +96,7 @@ composerVendorInstallHook() {
mkdir -p $out
cp -ar composer.json $(composer config vendor-dir) $out/
mapfile -t installer_paths < <(jq -r 'try((.extra."installer-paths") | keys[])' composer.json)
mapfile -t installer_paths < <(jq -r -c 'try((.extra."installer-paths") | keys[])' composer.json)
for installer_path in "${installer_paths[@]}"; do
# Remove everything after {$name} placeholder
@@ -105,6 +105,7 @@ composerVendorInstallHook() {
# Copy the installer path if it exists
if [[ -d "$installer_path" ]]; then
mkdir -p $(dirname "$out_installer_path")
echo -e "\e[32mCopying installer path $installer_path to $out_installer_path\e[0m"
cp -ar "$installer_path" "$out_installer_path"
# Strip out the git repositories
find $out_installer_path -name .git -type d -prune -print -exec rm -rf {} ";"
@@ -1,35 +1,24 @@
declare version
declare composerStrictValidation
declare composerGlobal
declare -g version
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"
setComposerRootVersion() {
set +e # Disable exit on error
if [[ -v version ]]; then
if [[ -n $version ]]; then
echo -e "\e[32mSetting COMPOSER_ROOT_VERSION to $version\e[0m"
export COMPOSER_ROOT_VERSION=$version
export COMPOSER_ROOT_VERSION="$version"
fi
set -e
}
setComposerEnvVariables() {
echo -e "\e[32mSetting some required environment variables for Composer...\e[0m"
export COMPOSER_MIRROR_PATH_REPOS=1
export COMPOSER_CACHE_DIR=/dev/null
export COMPOSER_HTACCESS_PROTECT=0
export COMPOSER_FUND=0
}
checkComposerValidate() {
if [ "1" == "${composerGlobal-}" ]; then
global="global";
else
global="";
fi
command="composer ${global} validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
command="composer validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
if ! $command; then
if [ "1" == "${composerStrictValidation-}" ]; then
if [[ "${composerStrictValidation}" == "1" ]]; then
echo
echo -e "\e[31mERROR: composer files validation failed\e[0m"
echo
@@ -57,9 +46,9 @@ checkComposerValidate() {
fi
fi
command="composer ${global} validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
command="composer validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
if ! $command; then
if [ "1" == "${composerStrictValidation-}" ]; then
if [[ "${composerStrictValidation}" == "1" ]]; then
echo
echo -e "\e[31mERROR: composer files validation failed\e[0m"
echo
+2 -2
View File
@@ -11,14 +11,14 @@ php.buildComposerProject2 (finalAttrs: {
src = fetchFromGitHub {
owner = "laravel";
repo = "installer";
rev = "v${finalAttrs.version}";
tag = "v${finalAttrs.version}";
hash = "sha256-XE1KYOlWehj1peSNj3sKNr6CKchCxRNpIjXHq7slVME=";
};
nativeBuildInputs = [ makeWrapper ];
composerLock = ./composer.lock;
vendorHash = "sha256-jUg0hmkShzK1CAO3+Btqe3/5GFKVxRKDtIxmUuU3EdU=";
vendorHash = "sha256-Kid5Vp42Pme1AO9fI9e/f24Cdzi1uV8qEULFEvQDKnE=";
postInstall = ''
wrapProgram $out/bin/laravel \
+406 -466
View File
File diff suppressed because it is too large Load Diff
+12 -5
View File
@@ -2,22 +2,29 @@
php,
fetchFromGitHub,
lib,
versionCheckHook,
}:
(php.withExtensions ({ enabled, all }: enabled ++ [ all.pcov ])).buildComposerProject2
(finalAttrs: {
pname = "paratest";
version = "7.6.0";
version = "7.8.2";
src = fetchFromGitHub {
owner = "paratestphp";
repo = "paratest";
rev = "v${finalAttrs.version}";
hash = "sha256-p7m/MDHy+NOh+MnoIWy74Ipm/5hevp4x6Qwn4uPIEAM=";
tag = "v${finalAttrs.version}";
hash = "sha256-OCZOpCjFORk5ZcImM8mArQSgK9MLneTC6TxGTNPqvWk=";
};
composerLock = ./composer.lock;
vendorHash = "sha256-NQWwfSYgvAmvWnr563vAKh+IdFRDB/CJZReDUzftOvw=";
vendorHash = "sha256-c2bBhJ9NvNk7Cz5RmNfgN2Q9SUV0iZ3/IhvzuAJtlQk=";
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
meta = {
changelog = "https://github.com/paratestphp/paratest/releases/tag/v${finalAttrs.version}";
@@ -25,6 +32,6 @@
homepage = "https://github.com/paratestphp/paratest";
license = lib.licenses.mit;
mainProgram = "paratest";
maintainers = [ ];
maintainers = lib.teams.php.members;
};
})
+343 -363
View File
File diff suppressed because it is too large Load Diff
+5 -6
View File
@@ -6,18 +6,17 @@
php.buildComposerProject2 (finalAttrs: {
pname = "pest";
version = "3.3.1";
version = "3.7.4";
src = fetchFromGitHub {
owner = "pestphp";
repo = "pest";
rev = "v${finalAttrs.version}";
hash = "sha256-HLUzXL05hcTLcBhKvf/PPJoCmEYdFqNkBbiRAQfR9ik=";
tag = "v${finalAttrs.version}";
hash = "sha256-ddsdVx/Vsg7GG11fGASouBU3HAJLSjs1AQGHx52TWzA=";
};
composerLock = ./composer.lock;
vendorHash = "sha256-rd15W3aHot1MtLGZeU2QREnIE5wtNw28OSpli3Nye5Y=";
vendorHash = "sha256-rOJ6PFp4Xfe89usoH455EAT30d2Tu3zd3+C/6K/kGBw=";
meta = {
changelog = "https://github.com/pestphp/pest/releases/tag/v${finalAttrs.version}";
@@ -25,6 +24,6 @@ php.buildComposerProject2 (finalAttrs: {
homepage = "https://pestphp.com";
license = lib.licenses.mit;
mainProgram = "pest";
maintainers = [ ];
maintainers = lib.teams.php.members;
};
})
+6 -4
View File
@@ -2,6 +2,7 @@
lib,
fetchFromGitHub,
php,
versionCheckHook,
}:
php.buildComposerProject2 (finalAttrs: {
@@ -15,12 +16,13 @@ php.buildComposerProject2 (finalAttrs: {
hash = "sha256-irN1Dnov6vDiU4xGsf2nxz7/kz1YOMq0yOLYt4HY1EM=";
};
vendorHash = "sha256-jcMfGPnGoSP8E1JXPEqKr53amV0d08GvGfe8niwM8Q4=";
vendorHash = "sha256-SDLpl2gBvtVjREfcy1WDFqsGRK1fKr2wKPuBkPhApNI=";
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
postInstallCheck = ''
$out/bin/phel --version
'';
meta = {
changelog = "https://github.com/phel-lang/phel-lang/releases/tag/v${finalAttrs.version}";
+11 -6
View File
@@ -3,23 +3,21 @@
php,
fetchFromGitHub,
makeBinaryWrapper,
versionCheckHook,
}:
php.buildComposerProject2 (finalAttrs: {
pname = "phpdocumentor";
version = "3.6.0";
version = "3.7.1";
src = fetchFromGitHub {
owner = "phpDocumentor";
repo = "phpDocumentor";
tag = "v${finalAttrs.version}";
hash = "sha256-8TQlqXhZ3rHmOAuxsBYa+7JD+SxMQY0NZgCyElStFag=";
hash = "sha256-ylwv+tW5Lyx1rooUy7wjinsutGpbLvIvXuLDGWLv24g=";
};
vendorHash = "sha256-LESUhPjpj1KkFkB+JEOCGU9c6LuDQJB5Dtc/q5Bt3Og=";
# Needed because of the unbound version constraint on phpdocumentor/json-path
composerStrictValidation = false;
vendorHash = "sha256-oPhe4yfOdsguXS3dF62mTr0+J1pfphsVJkMKR++c8go=";
nativeBuildInputs = [ makeBinaryWrapper ];
@@ -29,6 +27,13 @@ php.buildComposerProject2 (finalAttrs: {
--set-default APP_LOG_DIR /tmp/log
'';
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgram = "${placeholder "out"}/bin/${finalAttrs.meta.mainProgram}";
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
meta = {
changelog = "https://github.com/phpDocumentor/phpDocumentor/releases/tag/v${finalAttrs.version}";
description = "PHP documentation generator";
+9 -2
View File
@@ -2,6 +2,7 @@
lib,
php82,
fetchFromGitHub,
versionCheckHook,
}:
php82.buildComposerProject2 (finalAttrs: {
@@ -11,11 +12,17 @@ php82.buildComposerProject2 (finalAttrs: {
src = fetchFromGitHub {
owner = "consolidation";
repo = "robo";
rev = finalAttrs.version;
tag = finalAttrs.version;
hash = "sha256-bAT4jHvqWeYcACeyGtBwVBA2Rz+AvkZcUGLDwSf+fLg=";
};
vendorHash = "sha256-PYtZy6c/Z1GTcYyfU77uJjXCzQSfBaNkon8kqGyVq+o=";
vendorHash = "sha256-vketnTu5VEgt3HBbtnTppWl3+sSSIsCB2MpvL27bxv4=";
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
meta = {
changelog = "https://github.com/consolidation/robo/blob/${finalAttrs.version}/CHANGELOG.md";
@@ -7,18 +7,19 @@
php82.buildComposerProject2 (finalAttrs: {
pname = "box";
version = "4.6.2";
version = "4.6.6";
src = fetchFromGitHub {
owner = "box-project";
repo = "box";
tag = finalAttrs.version;
hash = "sha256-gYIAP9pTjahNkpNNXx0c8sQm+9Kaq6/IAo/xI5bNy7Y=";
hash = "sha256-giJAcH2R9hAlUTbwRi7rbmUP+WV8Nfb9XmoHHs4RcbI=";
};
vendorHash = "sha256-TAubvl+rsdQdqKz+lRg1oX/ENuRyHoJQVmL1ELz24fg=";
vendorHash = "sha256-7oZtuQ7PhB7q9vNO2TLI46kg2q9BgdLjGUduGXAHc0E=";
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
meta = {
@@ -1,21 +1,21 @@
{
lib,
fetchFromGitHub,
php,
fetchFromGitHub,
}:
php.buildComposerProject2 (finalAttrs: {
pname = "deployer";
version = "7.4.0";
version = "7.5.12";
src = fetchFromGitHub {
owner = "deployphp";
repo = "deployer";
rev = "v${finalAttrs.version}^";
hash = "sha256-nSrW4o0Tb8H056AAjjMzbsAVvWY2z1pdWmPFZDpDr1k=";
rev = "7b108897baa94b8ac438c821ec1fb815d95eba77";
hash = "sha256-wtkixHexsJNKsLnnlHssh0IzxwWYMPKDcaf/D0zUNKk=";
};
vendorHash = "sha256-APzJQTeSNbWvF/RtfNL7XuXIY0Xa0VNbJdSggFicpSQ=";
vendorHash = "sha256-0uBI30n31W0eDVA9/W366O0Qo2jWZBqEL+YbJx4J7P0=";
meta = {
changelog = "https://github.com/deployphp/deployer/releases/tag/v${finalAttrs.version}";
@@ -2,6 +2,7 @@
lib,
fetchgit,
php,
versionCheckHook,
}:
(php.withExtensions ({ enabled, all }: enabled ++ (with all; [ xsl ]))).buildComposerProject2
@@ -16,7 +17,13 @@
hash = "sha256-eVDHwG8UPvQPrhD3KuO4ZONsnGGbclVs4kNVG+Ac1/E=";
};
vendorHash = "sha256-NqCzrVZRsyiOjxXtSE7DeiAq21S8sjFgFNMmP99KUSE=";
vendorHash = "sha256-os5ljzAAxpFfpfAlYNboIj0VX8/otI14JbjV8FSo0yg=";
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "-version" ];
doInstallCheck = true;
meta = {
description = "PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant";
File diff suppressed because it is too large Load Diff
@@ -6,7 +6,7 @@
php.buildComposerProject2 (finalAttrs: {
pname = "php-cs-fixer";
version = "3.67.0";
version = "3.70.1";
src = fetchFromGitHub {
owner = "PHP-CS-Fixer";
@@ -18,7 +18,7 @@ php.buildComposerProject2 (finalAttrs: {
# Upstream doesn't provide a composer.lock.
# More info at https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/7590
composerLock = ./composer.lock;
vendorHash = "sha256-/Vn4hyX3XTAdnPPwiKGluuE3Cl56nZ3eVozLnhZ3RJM=";
vendorHash = "sha256-4MrmdAiBruOF68KVrsnDPTKe9hrHvUmzfvyrG6rt7L0=";
meta = {
changelog = "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases/tag/v${finalAttrs.version}";
@@ -2,6 +2,7 @@
lib,
fetchFromGitHub,
php,
versionCheckHook,
}:
php.buildComposerProject2 (finalAttrs: {
@@ -11,20 +12,26 @@ php.buildComposerProject2 (finalAttrs: {
src = fetchFromGitHub {
owner = "nunomaduro";
repo = "phpinsights";
rev = "v${finalAttrs.version}";
tag = "v${finalAttrs.version}";
hash = "sha256-XuvwO/MkGBMWo2hjDPDDYS3JmfWJH75mbNn6oKsMWps=";
};
vendorHash = "sha256-xeruE3oCrl6usg/7Wmop/w/CrIZfT+zMTQiQJXtBExw=";
composerLock = ./composer.lock;
vendorHash = "sha256-CwIfRmwJREz24Qj6J2PKQp+ix+/ZXo1oamcHc1fPUoc=";
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
meta = {
broken = lib.versionOlder php.version "8.2";
changelog = "https://github.com/nunomaduro/phpinsights/releases/tag/v${finalAttrs.version}";
description = "Instant PHP quality checks from your console";
homepage = "https://phpinsights.com/";
license = lib.licenses.mit;
mainProgram = "phpinsights";
maintainers = [ ];
maintainers = lib.teams.php.members;
};
})
@@ -3,6 +3,7 @@
fetchurl,
lib,
php,
versionCheckHook,
}:
let
@@ -26,7 +27,6 @@ php.buildComposerProject2 (finalAttrs: {
inherit
pname
version
composerLock
src
;
@@ -45,9 +45,15 @@ php.buildComposerProject2 (finalAttrs: {
composer update --lock --no-install
'';
vendorHash = "sha256-ODUfR7PsM1YKkEIl4KEAHcY2irqlqMGlpvmEYV1M2jk=";
vendorHash = "sha256-8l5bQ+VnLOtPUspMN1f+iXo7LldPTuYqyrAeW2aVoH8=";
};
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
meta = {
changelog = "https://github.com/bobthecow/psysh/releases/tag/v${finalAttrs.version}";
description = "PsySH is a runtime developer console, interactive debugger and REPL for PHP";