diff --git a/node/erpnext-app.nix b/node/erpnext-app.nix new file mode 100644 index 0000000..2c12d3b --- /dev/null +++ b/node/erpnext-app.nix @@ -0,0 +1,19 @@ +{ fetchFromGitHub +, fetchYarnDeps +, runCommand +, nodejs +, yarn +, path +, nodePackages +}: +let + src = import ../srcs/erpnext.nix {inherit fetchFromGitHub; }; + offlineCache = fetchYarnDeps { + yarnLock = "${src}/yarn.lock"; + sha256 = "sha256-Vho4BSbxcsVYExLvUaeoc3xIpbXoCUP/4jw4RwGnWGY="; + }; + + mkApp = import ./mk-app.nix { + inherit path runCommand nodejs yarn nodePackages; + }; +in mkApp "erpnext" src offlineCache diff --git a/node/erpnext-apps-sites.nix b/node/erpnext-apps-sites.nix deleted file mode 100644 index a728abd..0000000 --- a/node/erpnext-apps-sites.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ fetchFromGitHub -, fetchYarnDeps -, runCommand -, nodejs -, yarn -, path -, nodePackages -}: -let - erpnextSrc = import ../srcs/erpnext.nix {inherit fetchFromGitHub; }; - erpnextOfflineCache = fetchYarnDeps { - yarnLock = "${erpnextSrc}/yarn.lock"; - sha256 = "sha256-Vho4BSbxcsVYExLvUaeoc3xIpbXoCUP/4jw4RwGnWGY="; - }; - - frappeSrc = import ../srcs/frappe.nix {inherit fetchFromGitHub; }; - frappeOfflineCache = fetchYarnDeps { - yarnLock = "${frappeSrc}/yarn.lock"; - sha256 = "sha256-PBdMUz9gJIoQaqQYbdk+xnd8CyZPmdeyz/9WznCb4Ss="; - }; - - # Copied from nixpkgs:pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix - fixup_yarn_lock = runCommand "fixup_yarn_lock" {buildInputs = [ nodejs ];} '' - mkdir -p $out/lib - mkdir -p $out/bin - - cp ${path}/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js $out/lib/urlToName.js - cp ${path}/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js $out/bin/fixup_yarn_lock - - patchShebangs $out - ''; - - mkApp = name: src: yarnOfflineCache: runCommand "${name}-app" { - buildInputs = [fixup_yarn_lock yarn nodePackages.node-gyp-build]; - } '' - mkdir -p $out/share/apps - cp -r ${src} $out/share/apps/${name} - chmod -R +w $out/share/apps/${name} - - export HOME=$(mktemp -d) - yarn config --offline set yarn-offline-mirror ${yarnOfflineCache} - - cd $out/share/apps/${name} - fixup_yarn_lock yarn.lock - yarn --offline --ignore-scripts install - ''; - - frappeApp = mkApp "frappe" frappeSrc frappeOfflineCache; - erpnextApp = mkApp "erpnext" erpnextSrc erpnextOfflineCache; -in runCommand "frappe-erpnext-apps-sites" {buildInputs = [yarn]; } '' - mkdir -p $out/share/sites $out/share/apps - - # Cannot symlink because the code which traverses path to find sites - # directory gets confused. - cp -r ${frappeApp}/share/apps/frappe $out/share/apps/frappe - cp -r ${erpnextApp}/share/apps/erpnext $out/share/apps/erpnext - - cat > $out/share/sites/apps.txt < sites/apps.txt < /dev/null + yarn --offline production + popd > /dev/null + + symlinkPublic() { + find $1/share/apps/$2/$2/public -type d -mindepth 1 -maxdepth 1 | xargs -I '{}' bash -c "ln -s {} sites/assets/$2/"'$(basename {})' + } + + symlinkPublic ${frappe-app} frappe + symlinkPublic ${erpnext-app} erpnext + + mkdir -p $out/share/sites + cp -r sites/assets $out/share/sites/assets + '' diff --git a/node/mk-app.nix b/node/mk-app.nix new file mode 100644 index 0000000..910ec95 --- /dev/null +++ b/node/mk-app.nix @@ -0,0 +1,32 @@ +{ runCommand +, path +, nodejs +, yarn +, nodePackages +}: +let + # Copied from nixpkgs:pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix + fixup_yarn_lock = runCommand "fixup_yarn_lock" {buildInputs = [ nodejs ];} '' + mkdir -p $out/lib + mkdir -p $out/bin + + cp ${path}/pkgs/development/tools/yarn2nix-moretea/yarn2nix/lib/urlToName.js $out/lib/urlToName.js + cp ${path}/pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js $out/bin/fixup_yarn_lock + + patchShebangs $out + ''; + +in name: src: yarnOfflineCache: runCommand "${name}-app" { + buildInputs = [fixup_yarn_lock yarn nodePackages.node-gyp-build]; + } '' + mkdir -p $out/share/apps + cp -r ${src} $out/share/apps/${name} + chmod -R +w $out/share/apps/${name} + + export HOME=$(mktemp -d) + yarn config --offline set yarn-offline-mirror ${yarnOfflineCache} + + cd $out/share/apps/${name} + fixup_yarn_lock yarn.lock + yarn --offline --ignore-scripts install + '' diff --git a/overlay.nix b/overlay.nix index 8925d74..175cfcf 100644 --- a/overlay.nix +++ b/overlay.nix @@ -1,5 +1,7 @@ self: super: { run-erpnext = self.callPackage ./scripts/run-erpnext.nix {}; - erpnext-apps-sites = self.callPackage ./node/erpnext-apps-sites.nix {}; + frappe-erpnext-assets = self.callPackage ./node/frappe-erpnext-assets.nix {}; + erpnext-app = self.callPackage ./node/erpnext-app.nix {}; + frappe-app = self.callPackage ./node/frappe-app.nix {}; erpnext-nginx-conf = self.callPackage ./nginx-erpnext-conf.nix {}; } diff --git a/scripts/run-erpnext.nix b/scripts/run-erpnext.nix index bd08e0f..e9cd4dd 100644 --- a/scripts/run-erpnext.nix +++ b/scripts/run-erpnext.nix @@ -2,7 +2,9 @@ , python3 , nodejs , writeShellApplication -, erpnext-apps-sites +, frappe-app +, erpnext-app +, frappe-erpnext-assets , erpnext-nginx-conf }: let @@ -21,13 +23,18 @@ in writeShellApplication { tmp=/tmp/erpnext - mkdir -p $tmp/sites $tmp/config/pids $tmp/logs/nginx $tmp/env/bin + mkdir -p $tmp/apps $tmp/sites $tmp/config/pids $tmp/logs/nginx $tmp/env/bin - ln -s ${erpnext-apps-sites}/share/apps $tmp/apps + ln -s ${frappe-app}/share/apps/frappe $tmp/apps/frappe + ln -s ${erpnext-app}/share/apps/erpnext $tmp/apps/erpnext + ln -s ${frappe-erpnext-assets}/share/sites/assets $tmp/sites/assets + ln -s ${penv} $tmp/env + ln -s ${erpnext-nginx-conf} $tmp/nginx-erpnext.conf - for f in ${erpnext-apps-sites}/share/sites/*; do - ln -s "$f" "$tmp/sites/$(basename "$f")" - done + cat > $tmp/sites/apps.txt <$tmp/sites/common_site_config.json <