about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWeijia Wang <9713184+wegank@users.noreply.github.com>2024-04-23 13:38:04 +0200
committerGitHub <noreply@github.com>2024-04-23 13:38:04 +0200
commit4c62c9792c90c78a6029b49d3a91f1bb733afaba (patch)
tree12470d739c180986aee82e4be160221af8bd3783
parent3b797493a8cffaeb74ef52b373c9978fc7a70db7 (diff)
parentd6c7fa914e08e0161f4ba4ccd3ffa45bb5ddd105 (diff)
Merge pull request #296686 from LeSuisse/grocy-4.2.0
grocy: 4.0.3 -> 4.2.0, build from sources
-rw-r--r--pkgs/servers/grocy/0001-Define-configs-with-env-vars.patch29
-rw-r--r--pkgs/servers/grocy/0002-Remove-check-for-config-file-as-it-s-stored-in-etc-g.patch7
-rw-r--r--pkgs/servers/grocy/default.nix65
3 files changed, 72 insertions, 29 deletions
diff --git a/pkgs/servers/grocy/0001-Define-configs-with-env-vars.patch b/pkgs/servers/grocy/0001-Define-configs-with-env-vars.patch
index 8afef1211f80..75aa54f9c9c2 100644
--- a/pkgs/servers/grocy/0001-Define-configs-with-env-vars.patch
+++ b/pkgs/servers/grocy/0001-Define-configs-with-env-vars.patch
@@ -11,7 +11,7 @@ Subject: [PATCH 1/2] Define configs with env vars
  4 files changed, 6 insertions(+), 6 deletions(-)

 

 diff --git a/app.php b/app.php

-index bc5b1b39..26f7687e 100644

+index bc5b1b3..26f7687 100644

 --- a/app.php

 +++ b/app.php

 @@ -12,7 +12,7 @@ use Slim\Views\Blade;

@@ -41,11 +41,24 @@ index bc5b1b39..26f7687e 100644
  

  ob_clean(); // No response output before here

  $app->run();

+diff --git a/controllers/BaseApiController.php b/controllers/BaseApiController.php

+index 5941e348..e5b02af4 100644

+--- a/controllers/BaseApiController.php

++++ b/controllers/BaseApiController.php

+@@ -162,7 +162,7 @@ class BaseApiController extends BaseController

+ 		if (self::$htmlPurifierInstance == null)

+ 		{

+ 			$htmlPurifierConfig = \HTMLPurifier_Config::createDefault();

+-			$htmlPurifierConfig->set('Cache.SerializerPath', GROCY_DATAPATH . '/viewcache');

++			$htmlPurifierConfig->set('Cache.SerializerPath', getenv('GROCY_CACHE_DIR'));

+ 			$htmlPurifierConfig->set('HTML.Allowed', 'div,b,strong,i,em,u,a[href|title|target],iframe[src|width|height|frameborder],ul,ol,li,p[style],br,span[style],img[style|width|height|alt|src],table[border|width|style],tbody,tr,td,th,blockquote,*[style|class|id],h1,h2,h3,h4,h5,h6');

+ 			$htmlPurifierConfig->set('Attr.EnableID', true);

+ 			$htmlPurifierConfig->set('HTML.SafeIframe', true);

 diff --git a/services/DatabaseService.php b/services/DatabaseService.php

-index 4a05bda1..ce41ed17 100644

+index ba79a73..12a851a 100644

 --- a/services/DatabaseService.php

 +++ b/services/DatabaseService.php

-@@ -125,6 +125,6 @@ class DatabaseService

+@@ -137,6 +137,6 @@ class DatabaseService

  			return GROCY_DATAPATH . '/grocy_' . $dbSuffix . '.db';

  		}

  

@@ -54,7 +67,7 @@ index 4a05bda1..ce41ed17 100644
  	}

  }

 diff --git a/services/FilesService.php b/services/FilesService.php

-index 7d070350..a6dd4b08 100644

+index 7d07035..a6dd4b0 100644

 --- a/services/FilesService.php

 +++ b/services/FilesService.php

 @@ -10,7 +10,7 @@ class FilesService extends BaseService

@@ -67,18 +80,18 @@ index 7d070350..a6dd4b08 100644
  		{

  			mkdir($this->StoragePath);

 diff --git a/services/StockService.php b/services/StockService.php

-index 7265e82b..13af591a 100644

+index 9f034a5..fd3c0b7 100644

 --- a/services/StockService.php

 +++ b/services/StockService.php

-@@ -1761,7 +1761,7 @@ class StockService extends BaseService

+@@ -1707,7 +1707,7 @@ class StockService extends BaseService

  			throw new \Exception('No barcode lookup plugin defined');

  		}

  

 -		$path = GROCY_DATAPATH . "/plugins/$pluginName.php";

 +		$path = getenv('GROCY_PLUGIN_DIR') . "/$pluginName.php";

- 

  		if (file_exists($path))

  		{

+ 			require_once $path;

 -- 

-2.41.0

+2.42.0

 

diff --git a/pkgs/servers/grocy/0002-Remove-check-for-config-file-as-it-s-stored-in-etc-g.patch b/pkgs/servers/grocy/0002-Remove-check-for-config-file-as-it-s-stored-in-etc-g.patch
index f239ca06dd09..24050f782c48 100644
--- a/pkgs/servers/grocy/0002-Remove-check-for-config-file-as-it-s-stored-in-etc-g.patch
+++ b/pkgs/servers/grocy/0002-Remove-check-for-config-file-as-it-s-stored-in-etc-g.patch
@@ -8,10 +8,10 @@ Subject: [PATCH 2/2] Remove check for config-file as it's stored in /etc/grocy
  1 file changed, 1 deletion(-)

 

 diff --git a/helpers/PrerequisiteChecker.php b/helpers/PrerequisiteChecker.php

-index da431b4b..6b878627 100644

+index 8e12a5c..37b433d 100644

 --- a/helpers/PrerequisiteChecker.php

 +++ b/helpers/PrerequisiteChecker.php

-@@ -17,7 +17,6 @@ class PrerequisiteChecker

+@@ -18,7 +18,6 @@ class PrerequisiteChecker

  	public function checkRequirements()

  	{

  		self::checkForPhpVersion();

@@ -20,5 +20,4 @@ index da431b4b..6b878627 100644
  		self::checkForComposer();

  		self::checkForPhpExtensions();

 -- 

-2.41.0

-

+2.42.0
\ No newline at end of file
diff --git a/pkgs/servers/grocy/default.nix b/pkgs/servers/grocy/default.nix
index 296aba9e1fb3..dbca9773ab65 100644
--- a/pkgs/servers/grocy/default.nix
+++ b/pkgs/servers/grocy/default.nix
@@ -1,40 +1,71 @@
-{ lib, stdenv, fetchurl, unzip, nixosTests }:
+{ lib
+, fetchFromGitHub
+, fetchYarnDeps
+, php
+, yarn
+, fixup-yarn-lock
+, nixosTests
+}:
 
-stdenv.mkDerivation rec {
+php.buildComposerProject (finalAttrs: {
   pname = "grocy";
-  version = "4.0.3";
+  version = "4.2.0";
 
-  src = fetchurl {
-    url = "https://github.com/grocy/grocy/releases/download/v${version}/grocy_${version}.zip";
-    hash = "sha256-KBTsi634SolgA01eRthMuWx7DIF7rhvJSPxiHyuKSR8=";
+  src = fetchFromGitHub {
+    owner = "grocy";
+    repo = "grocy";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-aX3DMy9Jv8rNp1/VIvUtNXYXGBrCgBMs5GsDf4XXSj0=";
   };
 
-  nativeBuildInputs = [ unzip ];
-  unpackPhase = ''
-    unzip ${src} -d .
-  '';
+  vendorHash = "sha256-KaYvA0Rd4pd1s/L8QbVUgkE+SjH+jv4+6RvIaGOpews=";
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/yarn.lock";
+    hash = "sha256-UvWY8+qSRvzJbm7z3CmLyeUHxemzNUB7dHYP95ZVtcI=";
+  };
+
+  nativeBuildInputs = [
+    yarn
+    fixup-yarn-lock
+  ];
+
+  # Upstream composer.json file is missing the name, description and license fields
+  composerStrictValidation = false;
 
   # NOTE: if patches are created from a git checkout, those should be modified
-  # with `unixdos` to make sure those apply here.
+  # with `unix2dos` to make sure those apply here.
   patches = [
     ./0001-Define-configs-with-env-vars.patch
     ./0002-Remove-check-for-config-file-as-it-s-stored-in-etc-g.patch
   ];
-  patchFlags = [ "--binary" "-p1" ];
 
-  dontBuild = true;
+  configurePhase = ''
+    runHook preConfigure
 
-  passthru.tests = { inherit (nixosTests) grocy; };
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup-yarn-lock yarn.lock
+    yarn install --offline --frozen-lockfile --no-progress --non-interactive
+
+    runHook postConfigure
+  '';
 
   installPhase = ''
-    mkdir -p $out/
-    cp -R . $out/
+    runHook preInstall
+
+    mv $out/share/php/grocy/* $out
+    rm -r $out/share
+
+    runHook postInstall
   '';
 
+  passthru.tests = { inherit (nixosTests) grocy; };
+
   meta = with lib; {
     license = licenses.mit;
     maintainers = with maintainers; [ n0emis ];
     description = "ERP beyond your fridge - grocy is a web-based self-hosted groceries & household management solution for your home";
     homepage = "https://grocy.info/";
   };
-}
+})