Unverified Commit a18047b6 authored by Pol Dellaiera's avatar Pol Dellaiera Committed by GitHub
Browse files

Merge pull request #312231 from drupol/build-support/php/init-composer-with-plugin

build-support/php: init new builder `php.buildComposerWithPlugin`, refactor `php.packages.composer`, etc
parents 69493a13 c99246f1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
{
  v1 = {
    buildComposerProject = callPackage ./v1/build-composer-project.nix { };
    buildComposerWithPlugin = callPackage ./v1/build-composer-with-plugin.nix { };
    mkComposerRepository = callPackage ./v1/build-composer-repository.nix { };
    composerHooks = callPackages ./v1/hooks { };
  };
+2 −5
Original line number Diff line number Diff line
{
  callPackage,
  nix-update-script,
  stdenvNoCC,
  lib,
@@ -12,8 +11,7 @@ let

    let
      phpDrv = finalAttrs.php or php;
      composer = finalAttrs.composer or phpDrv.packages.composer;
      composer-local-repo-plugin = callPackage ../../pkgs/composer-local-repo-plugin.nix { };
      composer = finalAttrs.composer or phpDrv.packages.composer-local-repo-plugin;
    in
    {
      composerLock = previousAttrs.composerLock or null;
@@ -24,7 +22,6 @@ let

      nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [
        composer
        composer-local-repo-plugin
        phpDrv
        phpDrv.composerHooks.composerInstallHook
      ];
@@ -74,7 +71,7 @@ let

      composerRepository =
        previousAttrs.composerRepository or (phpDrv.mkComposerRepository {
          inherit composer composer-local-repo-plugin;
          inherit composer;
          inherit (finalAttrs)
            patches
            pname
+1 −4
Original line number Diff line number Diff line
{
  callPackage,
  stdenvNoCC,
  lib,
  php,
@@ -23,8 +22,7 @@ let

    let
      phpDrv = finalAttrs.php or php;
      composer = finalAttrs.composer or phpDrv.packages.composer;
      composer-local-repo-plugin = callPackage ../../pkgs/composer-local-repo-plugin.nix { };
      composer = finalAttrs.composer or phpDrv.packages.composer-local-repo-plugin;
    in
    assert (lib.assertMsg (previousAttrs ? src) "mkComposerRepository expects src argument.");
    assert (
@@ -58,7 +56,6 @@ let

      nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [
        composer
        composer-local-repo-plugin
        phpDrv
        phpDrv.composerHooks.composerRepositoryHook
      ];
+161 −0
Original line number Diff line number Diff line
{
  stdenvNoCC,
  writeText,
  lib,
  makeBinaryWrapper,
  php,
  cacert,
  nix-update-script,
}:

let
  composerJsonBuilder =
    pluginName: pluginVersion:
    writeText "composer.json" (
      builtins.toJSON {
        name = "nix/plugin";
        description = "Nix Composer plugin";
        license = "MIT";
        require = {
          "${pluginName}" = "${pluginVersion}";
        };
        config = {
          "allow-plugins" = {
            "${pluginName}" = true;
          };
        };
        repositories = [
          {
            type = "path";
            url = "./src";
            options = {
              versions = {
                "${pluginName}" = "${pluginVersion}";
              };
            };
          }
        ];
      }
    );

  buildComposerWithPluginOverride =
    finalAttrs: previousAttrs:

    let
      phpDrv = finalAttrs.php or php;
      composer = finalAttrs.composer or phpDrv.packages.composer;
    in
    {
      composerLock = previousAttrs.composerLock or null;
      composerNoDev = previousAttrs.composerNoDev or true;
      composerNoPlugins = previousAttrs.composerNoPlugins or true;
      composerNoScripts = previousAttrs.composerNoScripts or true;
      composerStrictValidation = previousAttrs.composerStrictValidation or true;
      composerGlobal = true;

      nativeBuildInputs = (previousAttrs.nativeBuildInputs or [ ]) ++ [
        composer
        phpDrv
        makeBinaryWrapper
      ];

      buildInputs = (previousAttrs.buildInputs or [ ]) ++ [ phpDrv ];

      patches = previousAttrs.patches or [ ];
      strictDeps = previousAttrs.strictDeps or true;

      # Should we keep these empty phases?
      configurePhase =
        previousAttrs.configurePhase or ''
          runHook preConfigure

          runHook postConfigure
        '';

      buildPhase =
        previousAttrs.buildPhase or ''
          runHook preBuild

          runHook postBuild
        '';

      doCheck = previousAttrs.doCheck or true;

      checkPhase =
        previousAttrs.checkPhase or ''
          runHook preCheck

          runHook postCheck
        '';

      installPhase =
        previousAttrs.installPhase or ''
            runHook preInstall

          makeWrapper ${lib.getExe composer} $out/bin/composer \
            --prefix COMPOSER_HOME : ${finalAttrs.vendor}

            runHook postInstall
        '';

      doInstallCheck = previousAttrs.doInstallCheck or false;
      installCheckPhase =
        previousAttrs.installCheckPhase or ''
          runHook preInstallCheck

          composer global show ${finalAttrs.pname}

          runHook postInstallCheck
        '';

      vendor = previousAttrs.vendor or stdenvNoCC.mkDerivation {
        pname = "${finalAttrs.pname}-vendor";
        pluginName = finalAttrs.pname;

        inherit (finalAttrs) version src;

        composerLock = previousAttrs.composerLock or null;
        composerNoDev = previousAttrs.composerNoDev or true;
        composerNoPlugins = previousAttrs.composerNoPlugins or true;
        composerNoScripts = previousAttrs.composerNoScripts or true;
        composerStrictValidation = previousAttrs.composerStrictValidation or true;
        composerGlobal = true;
        composerJson = composerJsonBuilder finalAttrs.pname finalAttrs.version;

        nativeBuildInputs = [
          cacert
          composer
          phpDrv.composerHooks.composerWithPluginVendorHook
        ];

        dontPatchShebangs = true;
        doCheck = true;
        doInstallCheck = true;

        env = {
          COMPOSER_CACHE_DIR = "/dev/null";
          COMPOSER_HTACCESS_PROTECT = "0";
        };

        outputHashMode = "recursive";
        outputHashAlgo = "sha256";
        outputHash = finalAttrs.vendorHash;
      };

      # Projects providing a lockfile from upstream can be automatically updated.
      passthru = previousAttrs.passthru or { } // {
        updateScript =
          previousAttrs.passthru.updateScript
            or (if finalAttrs.vendor.composerLock == null then nix-update-script { } else null);
      };

      env = {
        COMPOSER_CACHE_DIR = "/dev/null";
        COMPOSER_DISABLE_NETWORK = "1";
        COMPOSER_MIRROR_PATH_REPOS = "1";
      };

      meta = previousAttrs.meta or composer.meta;
    };
in
args: (stdenvNoCC.mkDerivation args).overrideAttrs buildComposerWithPluginOverride
+1 −1
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ composerInstallBuildHook() {

    # Since this file cannot be generated in the composer-repository-hook.sh
    # because the file contains hardcoded nix store paths, we generate it here.
    composer-local-repo-plugin --no-ansi build-local-repo-lock -m "${composerRepository}" .
    composer build-local-repo-lock -m "${composerRepository}" .

    echo "Finished composerInstallBuildHook"
}
Loading