Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 19 additions & 16 deletions pkgs/build-support/php/builders/v2/build-composer-project.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 ? { },
...
Expand All @@ -34,7 +34,9 @@ let
strictDeps
doCheck
doInstallCheck
dontCheckForBrokenSymlinks
;

nativeBuildInputs = nativeBuildInputs ++ [
composer
php
Expand Down Expand Up @@ -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
;
});

Expand Down
28 changes: 16 additions & 12 deletions pkgs/build-support/php/builders/v2/build-composer-vendor.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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

Expand Down Expand Up @@ -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"
Expand Down
45 changes: 30 additions & 15 deletions pkgs/build-support/php/builders/v2/hooks/composer-vendor-hook.sh
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
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 \
--no-install \
--no-interaction \
--no-progress \
--optimize-autoloader \
${composerNoDev:+--no-dev} \
${composerNoPlugins:+--no-plugins} \
${composerNoScripts:+--no-scripts} \
${composerNoDev} \
${composerNoPlugins} \
${composerNoScripts} \
update

if [[ -f "composer.lock" ]]; then
Expand Down Expand Up @@ -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"
Expand All @@ -96,6 +96,21 @@ composerVendorInstallHook() {
mkdir -p $out

cp -ar composer.json $(composer config vendor-dir) $out/
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
installer_path="${installer_path/\{\$name\}*/}";
out_installer_path="$out/${installer_path/\{\$name\}*/}";
# 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 {} ";"
fi
done

if [[ -f "composer.lock" ]]; then
cp -ar composer.lock $(composer config vendor-dir) $out/
Expand Down
29 changes: 9 additions & 20 deletions pkgs/build-support/php/builders/v2/hooks/php-script-utils.bash
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions pkgs/by-name/la/laravel/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
Loading