##// END OF EJS Templates
nix: updated to 18.03 nix packages...
marcink -
r2824:5ac461b5 default
parent child
Show More
@@ -0,0 +1,55
1
2 ==============================
3 Generate the Nix expressions
4 ==============================
5
6 Details can be found in the repository of `RhodeCode Enterprise CE`_ inside of
7 the file `docs/contributing/dependencies.rst`.
8
9 Start the environment as follows:
10
11 .. code:: shell
12
13 nix-shell pkgs/shell-generate.nix
14
15
16
17 Python dependencies
18 ===================
19
20 .. code:: shell
21
22 pip2nix generate --licenses
23 # or
24 nix-shell pkgs/shell-generate.nix --command "pip2nix generate --licenses"
25
26
27 NodeJS dependencies
28 ===================
29
30 .. code:: shell
31
32 # switch to pkgs dir
33 pushd pkgs
34 node2nix --input ../package.json \
35 -o node-packages.nix \
36 -e node-env.nix \
37 -c node-default.nix \
38 -d --flatten --nodejs-6
39 popd
40
41
42
43 Bower dependencies
44 ==================
45
46 .. code:: shell
47
48 bower2nix bower.json pkgs/bower-packages.nix
49 # or
50 nix-shell pkgs/shell-generate.nix --command "bower2nix bower.json pkgs/bower-packages.nix"
51
52
53 .. Links
54
55 .. _RhodeCode Enterprise CE: https://code.rhodecode.com/rhodecode-enterprise-ce
@@ -0,0 +1,17
1 { pkgs
2 , pythonPackages
3 }:
4
5 rec {
6 pip2nix-src = pkgs.fetchzip {
7 url = https://github.com/johbo/pip2nix/archive/51e6fdae34d0e8ded9efeef7a8601730249687a6.tar.gz;
8 sha256 = "02a4jjgi7lsvf8mhrxsd56s9a3yg20081rl9bgc2m84w60v2gbz2";
9 };
10
11 pip2nix = import pip2nix-src {
12 inherit
13 pkgs
14 pythonPackages;
15 };
16
17 }
@@ -0,0 +1,52
1 { pkgs ? (import <nixpkgs> {})
2 , pythonPackages ? "python27Packages"
3 }:
4
5 with pkgs.lib;
6
7 let _pythonPackages = pythonPackages; in
8 let
9 pythonPackages = getAttr _pythonPackages pkgs;
10
11 pip2nix = import ./nix-common/pip2nix.nix {
12 inherit
13 pkgs
14 pythonPackages;
15 };
16
17 in
18
19 pkgs.stdenv.mkDerivation {
20 name = "pip2nix-generated";
21 buildInputs = [
22 # Allows to generate python packages
23 pip2nix.pip2nix
24 pythonPackages.pip-tools
25
26 # Allows to generate bower dependencies
27 pkgs.nodePackages.bower2nix
28
29 # Allows to generate node dependencies
30 pkgs.nodePackages.node2nix
31
32 # We need mysql_config to be around
33 pkgs.mysql
34
35 # We need postgresql to be around
36 pkgs.postgresql
37
38 # Curl is needed for pycurl
39 pkgs.curl
40 ];
41
42 shellHook = ''
43 runHook preShellHook
44 runHook postShellHook
45 '';
46
47 preShellHook = ''
48 echo "Starting Generate Shell"
49 # Custom prompt to distinguish from other dev envs.
50 export PS1="\n\[\033[1;32m\][Generate-shell:\w]$\[\033[0m\] "
51 '';
52 }
@@ -10,7 +10,7
10 "paper-tooltip": "PolymerElements/paper-tooltip#^1.1.2",
10 "paper-tooltip": "PolymerElements/paper-tooltip#^1.1.2",
11 "paper-toast": "PolymerElements/paper-toast#^1.3.0",
11 "paper-toast": "PolymerElements/paper-toast#^1.3.0",
12 "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.2.0",
12 "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.2.0",
13 "iron-ajax": "PolymerElements/iron-ajax#^1.4.3",
13 "iron-ajax": "PolymerElements/iron-ajax#^1.4.4",
14 "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.13",
14 "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.13",
15 "iron-a11y-keys": "PolymerElements/iron-a11y-keys#^1.0.6"
15 "iron-a11y-keys": "PolymerElements/iron-a11y-keys#^1.0.6"
16 }
16 }
@@ -1,41 +1,40
1 # Nix environment for the community edition
1 # Nix environment for the community edition
2 #
2 #
3 # This shall be as lean as possible, just producing the Enterprise
3 # This shall be as lean as possible, just producing the enterprise-ce
4 # derivation. For advanced tweaks to pimp up the development environment we use
4 # derivation. For advanced tweaks to pimp up the development environment we use
5 # "shell.nix" so that it does not have to clutter this file.
5 # "shell.nix" so that it does not have to clutter this file.
6 #
7 # Configuration, set values in "~/.nixpkgs/config.nix".
8 # example
9 # {
10 # # Thoughts on how to configure the dev environment
11 # rc = {
12 # codeInternalUrl = "https://usr:token@internal-code.rhodecode.com";
13 # sources = {
14 # rhodecode-vcsserver = "/home/user/work/rhodecode-vcsserver";
15 # rhodecode-enterprise-ce = "/home/user/work/rhodecode-enterprise-ce";
16 # rhodecode-enterprise-ee = "/home/user/work/rhodecode-enterprise-ee";
17 # };
18 # };
19 # }
6
20
7 args@
21 args@
8 { pythonPackages ? "python27Packages"
22 { pythonPackages ? "python27Packages"
9 , pythonExternalOverrides ? self: super: {}
23 , pythonExternalOverrides ? self: super: {}
10 , doCheck ? true
24 , doCheck ? false
11 , ...
25 , ...
12 }:
26 }:
13
27
14 let
28 let
15
16 # Use nixpkgs from args or import them. We use this indirect approach
29 # Use nixpkgs from args or import them. We use this indirect approach
17 # through args to be able to use the name `pkgs` for our customized packages.
30 # through args to be able to use the name `pkgs` for our customized packages.
18 # Otherwise we will end up with an infinite recursion.
31 # Otherwise we will end up with an infinite recursion.
19 nixpkgs = args.pkgs or (import <nixpkgs> { });
32 pkgs = args.pkgs or (import <nixpkgs> { });
20
33
21 # johbo: Interim bridge which allows us to build with the upcoming
34 # Works with the new python-packages, still can fallback to the old
22 # nixos.16.09 branch (unstable at the moment of writing this note) and the
35 # variant.
23 # current stable nixos-16.03.
36 basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
24 backwardsCompatibleFetchgit = { ... }@args:
37 self: basePythonPackages.override (a: { inherit self; }));
25 let
26 origSources = nixpkgs.fetchgit args;
27 in
28 nixpkgs.lib.overrideDerivation origSources (oldAttrs: {
29 NIX_PREFETCH_GIT_CHECKOUT_HOOK = ''
30 find $out -name '.git*' -print0 | xargs -0 rm -rf
31 '';
32 });
33
34 # Create a customized version of nixpkgs which should be used throughout the
35 # rest of this file.
36 pkgs = nixpkgs.overridePackages (self: super: {
37 fetchgit = backwardsCompatibleFetchgit;
38 });
39
38
40 # Evaluates to the last segment of a file system path.
39 # Evaluates to the last segment of a file system path.
41 basename = path: with pkgs.lib; last (splitString "/" path);
40 basename = path: with pkgs.lib; last (splitString "/" path);
@@ -46,7 +45,7 let
46 ext = last (splitString "." path);
45 ext = last (splitString "." path);
47 in
46 in
48 !builtins.elem (basename path) [
47 !builtins.elem (basename path) [
49 ".git" ".hg" "__pycache__" ".eggs"
48 ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev"
50 "bower_components" "node_modules"
49 "bower_components" "node_modules"
51 "build" "data" "result" "tmp"] &&
50 "build" "data" "result" "tmp"] &&
52 !builtins.elem ext ["egg-info" "pyc"] &&
51 !builtins.elem ext ["egg-info" "pyc"] &&
@@ -54,18 +53,20 let
54 # it would still be good to restore it since we want to ignore "result-*".
53 # it would still be good to restore it since we want to ignore "result-*".
55 !hasPrefix "result" path;
54 !hasPrefix "result" path;
56
55
57 basePythonPackages = with builtins; if isAttrs pythonPackages
56 sources =
58 then pythonPackages
57 let
59 else getAttr pythonPackages pkgs;
58 inherit (pkgs.lib) all isString attrValues;
59 sourcesConfig = pkgs.config.rc.sources or {};
60 in
61 # Ensure that sources are configured as strings. Using a path
62 # would result in a copy into the nix store.
63 assert all isString (attrValues sourcesConfig);
64 sourcesConfig;
60
65
61 buildBowerComponents =
66 version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION";
62 pkgs.buildBowerComponents or
63 (import ./pkgs/backport-16.03-build-bower-components.nix { inherit pkgs; });
64
65 sources = pkgs.config.rc.sources or {};
66 version = builtins.readFile ./rhodecode/VERSION;
67 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
67 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
68
68
69 buildBowerComponents = pkgs.buildBowerComponents;
69 nodeEnv = import ./pkgs/node-default.nix {
70 nodeEnv = import ./pkgs/node-default.nix {
70 inherit pkgs;
71 inherit pkgs;
71 };
72 };
@@ -77,133 +78,145 let
77 src = rhodecode-enterprise-ce-src;
78 src = rhodecode-enterprise-ce-src;
78 };
79 };
79
80
80 pythonGeneratedPackages = self: basePythonPackages.override (a: {
81 rhodecode-testdata-src = sources.rhodecode-testdata or (
81 inherit self;
82 pkgs.fetchhg {
82 })
83 url = "https://code.rhodecode.com/upstream/rc_testdata";
83 // (scopedImport {
84 rev = "v0.10.0";
84 self = self;
85 sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0";
85 super = basePythonPackages;
86 });
86 inherit pkgs;
87 inherit (pkgs) fetchurl fetchgit;
88 } ./pkgs/python-packages.nix);
89
87
90 pythonOverrides = import ./pkgs/python-packages-overrides.nix {
88 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
91 inherit
89 inherit
92 basePythonPackages
90 doCheck
93 pkgs;
91 pkgs
92 pythonPackages;
94 };
93 };
95
94
96 pythonLocalOverrides = self: super: {
95 pythonLocalOverrides = self: super: {
97 rhodecode-enterprise-ce =
96 rhodecode-enterprise-ce =
98 let
97 let
99 linkNodeAndBowerPackages = ''
98 linkNodeAndBowerPackages = ''
100 echo "Export RhodeCode CE path"
101 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
99 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
102 echo "Link node packages"
100
101 echo "[BEGIN]: Link node packages"
103 rm -fr node_modules
102 rm -fr node_modules
104 mkdir node_modules
103 mkdir node_modules
105 # johbo: Linking individual packages allows us to run "npm install"
104 # johbo: Linking individual packages allows us to run "npm install"
106 # inside of a shell to try things out. Re-entering the shell will
105 # inside of a shell to try things out. Re-entering the shell will
107 # restore a clean environment.
106 # restore a clean environment.
108 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
107 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
108 echo "[DONE]: Link node packages"
109
109
110 echo "DONE: Link node packages"
110 echo "[BEGIN]: Link bower packages"
111
112 echo "Link bower packages"
113 rm -fr bower_components
111 rm -fr bower_components
114 mkdir bower_components
112 mkdir bower_components
113 ln -s ${bowerComponents}/bower_components/* bower_components/
114 echo "[DONE]: Link bower packages"
115 '';
115
116
116 ln -s ${bowerComponents}/bower_components/* bower_components/
117 releaseName = "RhodeCodeEnterpriseCE-${version}";
117 echo "DONE: Link bower packages"
118 '';
119 in super.rhodecode-enterprise-ce.override (attrs: {
118 in super.rhodecode-enterprise-ce.override (attrs: {
120
121 inherit
119 inherit
122 doCheck
120 doCheck
123 version;
121 version;
122
124 name = "rhodecode-enterprise-ce-${version}";
123 name = "rhodecode-enterprise-ce-${version}";
125 releaseName = "RhodeCodeEnterpriseCE-${version}";
124 releaseName = releaseName;
126 src = rhodecode-enterprise-ce-src;
125 src = rhodecode-enterprise-ce-src;
127 dontStrip = true; # prevent strip, we don't need it.
126 dontStrip = true; # prevent strip, we don't need it.
128
127
129 buildInputs =
128 # expose following attributed outside
130 attrs.buildInputs ++
131 (with self; [
132 pkgs.nodePackages.bower
133 pkgs.nodePackages.grunt-cli
134 pkgs.subversion
135 rhodecode-testdata
136 ]);
137
138 #TODO: either move this into overrides, OR use the new machanics from
139 # pip2nix and requiremtn.txt file
140 propagatedBuildInputs = attrs.propagatedBuildInputs ++ (with self; [
141 rhodecode-tools
142 ]);
143
144 # TODO: johbo: Make a nicer way to expose the parts. Maybe
145 # pkgs/default.nix?
146 passthru = {
129 passthru = {
147 inherit
130 inherit
131 rhodecode-testdata
148 bowerComponents
132 bowerComponents
149 linkNodeAndBowerPackages
133 linkNodeAndBowerPackages
150 myPythonPackagesUnfix
134 myPythonPackagesUnfix
151 pythonLocalOverrides;
135 pythonLocalOverrides
136 pythonCommunityOverrides;
137
152 pythonPackages = self;
138 pythonPackages = self;
153 };
139 };
154
140
141 buildInputs =
142 attrs.buildInputs or [] ++ [
143 rhodecode-testdata
144 pkgs.nodePackages.bower
145 pkgs.nodePackages.grunt-cli
146 ];
147
148 #NOTE: option to inject additional propagatedBuildInputs
149 propagatedBuildInputs =
150 attrs.propagatedBuildInputs or [] ++ [
151
152 ];
153
155 LC_ALL = "en_US.UTF-8";
154 LC_ALL = "en_US.UTF-8";
156 LOCALE_ARCHIVE =
155 LOCALE_ARCHIVE =
157 if pkgs.stdenv ? glibc
156 if pkgs.stdenv.isLinux
158 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
157 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
159 else "";
158 else "";
160
159
160 # Add bin directory to path so that tests can find 'rhodecode'.
161 preCheck = ''
161 preCheck = ''
162 export PATH="$out/bin:$PATH"
162 export PATH="$out/bin:$PATH"
163 '';
163 '';
164
164
165 # custom check phase for testing
166 checkPhase = ''
167 runHook preCheck
168 PYTHONHASHSEED=random py.test -vv -p no:sugar -r xw --cov-config=.coveragerc --cov=rhodecode --cov-report=term-missing rhodecode
169 runHook postCheck
170 '';
171
165 postCheck = ''
172 postCheck = ''
166 rm -rf $out/lib/${self.python.libPrefix}/site-packages/pytest_pylons
173 echo "Cleanup of rhodecode/tests"
167 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
174 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
168 '';
175 '';
169
176
170 preBuild = linkNodeAndBowerPackages + ''
177 preBuild = ''
178
179 echo "Building frontend assets"
180 ${linkNodeAndBowerPackages}
171 grunt
181 grunt
172 rm -fr node_modules
182 rm -fr node_modules
173 '';
183 '';
174
184
175 postInstall = ''
185 postInstall = ''
176 echo "Writing meta information for rccontrol to nix-support/rccontrol"
186 echo "Writing enterprise-ce meta information for rccontrol to nix-support/rccontrol"
177 mkdir -p $out/nix-support/rccontrol
187 mkdir -p $out/nix-support/rccontrol
178 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
188 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
179 echo "DONE: Meta information for rccontrol written"
189 echo "[DONE]: enterprise-ce meta information for rccontrol written"
190
191 mkdir -p $out/etc
192 cp configs/production.ini $out/etc
193 echo "[DONE]: saved enterprise-ce production.ini into $out/etc"
180
194
181 # python based programs need to be wrapped
195 # python based programs need to be wrapped
182 #ln -s ${self.python}/bin/* $out/bin/
196 mkdir -p $out/bin
197 # rhodecode-tools
198 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
199
200 # required binaries from dependencies
201 #ln -s ${self.python}/bin/python $out/bin
183 ln -s ${self.pyramid}/bin/* $out/bin/
202 ln -s ${self.pyramid}/bin/* $out/bin/
184 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
203 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
185 ln -s ${self.supervisor}/bin/supervisor* $out/bin/
204 ln -s ${self.supervisor}/bin/supervisor* $out/bin/
186 ln -s ${self.pastescript}/bin/paster $out/bin/
205 ln -s ${self.pastescript}/bin/paster $out/bin/
187 ln -s ${self.channelstream}/bin/channelstream $out/bin/
206 ln -s ${self.channelstream}/bin/channelstream $out/bin/
188 ln -s ${self.celery}/bin/celery $out/bin/
207 ln -s ${self.celery}/bin/celery $out/bin/
208 echo "[DONE]: created symlinks into $out/bin"
189
209
190 # rhodecode-tools
191 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
192
193 # note that condition should be restricted when adding further tools
194 for file in $out/bin/*;
210 for file in $out/bin/*;
195 do
211 do
196 wrapProgram $file \
212 wrapProgram $file \
197 --prefix PATH : $PATH \
213 --prefix PATH : $PATH \
198 --prefix PYTHONPATH : $PYTHONPATH \
214 --prefix PYTHONPATH : $PYTHONPATH \
199 --set PYTHONHASHSEED random
215 --set PYTHONHASHSEED random
200 done
216 done
201
217
202 mkdir $out/etc
218 echo "[DONE]: enterprise-ce binary wrapping"
203 cp configs/production.ini $out/etc
204
219
205
206 # TODO: johbo: Make part of ac-tests
207 if [ ! -f rhodecode/public/js/scripts.js ]; then
220 if [ ! -f rhodecode/public/js/scripts.js ]; then
208 echo "Missing scripts.js"
221 echo "Missing scripts.js"
209 exit 1
222 exit 1
@@ -213,31 +226,33 let
213 exit 1
226 exit 1
214 fi
227 fi
215 '';
228 '';
216
217 });
229 });
218
230
219 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
220 inherit
221 doCheck
222 pkgs
223 pythonPackages;
224 };
225
226 };
231 };
227
232
228 rhodecode-testdata-src = sources.rhodecode-testdata or (
233 basePythonPackages = with builtins;
229 pkgs.fetchhg {
234 if isAttrs pythonPackages then
230 url = "https://code.rhodecode.com/upstream/rc_testdata";
235 pythonPackages
231 rev = "v0.10.0";
236 else
232 sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0";
237 getAttr pythonPackages pkgs;
233 });
238
239 pythonGeneratedPackages = import ./pkgs/python-packages.nix {
240 inherit pkgs;
241 inherit (pkgs) fetchurl fetchgit fetchhg;
242 };
243
244 pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix {
245 inherit pkgs basePythonPackages;
246 };
234
247
235 # Apply all overrides and fix the final package set
248 # Apply all overrides and fix the final package set
236 myPythonPackagesUnfix = with pkgs.lib;
249 myPythonPackagesUnfix = with pkgs.lib;
237 (extends pythonExternalOverrides
250 (extends pythonExternalOverrides
238 (extends pythonLocalOverrides
251 (extends pythonLocalOverrides
239 (extends pythonOverrides
252 (extends pythonCommunityOverrides
240 pythonGeneratedPackages)));
253 (extends pythonGeneratedPackages
254 basePythonPackagesUnfix))));
255
241 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
256 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
242
257
243 in myPythonPackages.rhodecode-enterprise-ce
258 in myPythonPackages.rhodecode-enterprise-ce
@@ -47,7 +47,7 Switch nix to the latest STABLE channel
47
47
48 run::
48 run::
49
49
50 nix-channel --add https://nixos.org/channels/nixos-16.03 nixpkgs
50 nix-channel --add https://nixos.org/channels/nixos-18.03 nixpkgs
51
51
52 Followed by::
52 Followed by::
53
53
@@ -1,6 +1,13
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "0.0.1",
3 "version": "1.0.0",
4 "private": true,
5 "description" : "RhodeCode JS packaged",
6 "license": "SEE LICENSE IN LICENSE.txt",
7 "repository" : {
8 "type" : "hg",
9 "url" : "https://code.rhodecode.com/rhodecode-enterprise-ce"
10 },
4 "devDependencies": {
11 "devDependencies": {
5 "grunt": "^0.4.5",
12 "grunt": "^0.4.5",
6 "grunt-contrib-copy": "^1.0.0",
13 "grunt-contrib-copy": "^1.0.0",
@@ -14,7 +21,7
14 "grunt-vulcanize": "^1.0.0",
21 "grunt-vulcanize": "^1.0.0",
15 "node2nix": "^1.0.0",
22 "node2nix": "^1.0.0",
16 "jshint": "^2.9.1-rc3",
23 "jshint": "^2.9.1-rc3",
17 "bower": "^1.7.9",
24 "bower": "^1.8.4",
18 "jquery": "1.11.3",
25 "jquery": "1.11.3",
19 "favico.js": "^0.3.10",
26 "favico.js": "^0.3.10",
20 "clipboard": "^1.7.1",
27 "clipboard": "^1.7.1",
@@ -1,33 +1,34
1 # Generated by bower2nix v3.2.0 (https://github.com/rvl/bower2nix)
1 { fetchbower, buildEnv }:
2 { fetchbower, buildEnv }:
2 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
3 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
3 (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "0ggh3k8ssafd056ib1m5bvzi7cpz3ry7gr5176d79na1w0c3i7dz")
4 (fetchbower "webcomponentsjs" "0.7.24" "^0.7.22" "0d6hfsd51n7qykzci9cw5vlsrajvffaf5ic3azlp2rfz76m651qj")
4 (fetchbower "polymer" "Polymer/polymer#1.6.1" "Polymer/polymer#^1.6.1" "09mm0jgk457gvwqlc155swch7gjr6fs3g7spnvhi6vh5b6518540")
5 (fetchbower "polymer" "Polymer/polymer#1.11.3" "Polymer/polymer#^1.6.1" "0n11ag2pmczw5yv3m76bh0a7hvicqvcaiv7knixx1r704pw107s6")
5 (fetchbower "paper-button" "PolymerElements/paper-button#1.0.13" "PolymerElements/paper-button#^1.0.13" "0i3y153nqk06pn0gk282vyybnl3g1w3w41d5i9z659cgn27g3fvm")
6 (fetchbower "paper-button" "PolymerElements/paper-button#1.0.15" "PolymerElements/paper-button#^1.0.13" "0zabrp8p4s9md1hlwg0rqmbx0k87a41lsg9pzk747hcb349gblg0")
6 (fetchbower "paper-spinner" "PolymerElements/paper-spinner#1.2.0" "PolymerElements/paper-spinner#^1.2.0" "1av1m6y81jw3hjhz1yqy3rwcgxarjzl58ldfn4q6sn51pgzngfqb")
7 (fetchbower "paper-spinner" "PolymerElements/paper-spinner#1.2.1" "PolymerElements/paper-spinner#^1.2.0" "0d6xc9fd2ipcli7w77yrn1k0z9j373c9y1f16db2840cyb4rvii8")
7 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.3" "PolymerElements/paper-tooltip#^1.1.2" "0vmrm1n8k9sk9nvqy03q177axy22pia6i3j1gxbk72j3pqiqvg6k")
8 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.4" "PolymerElements/paper-tooltip#^1.1.2" "0j8s09dxqql8mgnvb7x382scq98xk2vjgylk06bsd1gphp3d3qzm")
8 (fetchbower "paper-toast" "PolymerElements/paper-toast#1.3.0" "PolymerElements/paper-toast#^1.3.0" "0x9rqxsks5455s8pk4aikpp99ijdn6kxr9gvhwh99nbcqdzcxq1m")
9 (fetchbower "paper-toast" "PolymerElements/paper-toast#1.3.1" "PolymerElements/paper-toast#^1.3.0" "1s0csv8dwgdyg4psq1zrd6vivlpsgzi4sjqllwqmlwhfnxfl5ql4")
9 (fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#1.2.0" "PolymerElements/paper-toggle-button#^1.2.0" "0mphcng3ngspbpg4jjn0mb91nvr4xc1phq3qswib15h6sfww1b2w")
10 (fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#1.3.0" "PolymerElements/paper-toggle-button#^1.2.0" "0hvv2y406lzlrkkcmv9nnd99bmcgcrhcx86q3axxv8k3580gqq97")
10 (fetchbower "iron-ajax" "PolymerElements/iron-ajax#1.4.4" "PolymerElements/iron-ajax#^1.4.4" "0jpi7ik3zljw8yh2ccc85r26lcpzmkc2nl1kn6fqdx57zkzk9v5b")
11 (fetchbower "iron-ajax" "PolymerElements/iron-ajax#1.4.4" "PolymerElements/iron-ajax#^1.4.4" "0vs4dqcw5y02kj11ivzs901s5nwn97fk01xz2jmpy2fgh6l9q5yr")
11 (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#1.0.13" "PolymerElements/iron-autogrow-textarea#^1.0.13" "0zwhpl97vii1s8k0lgain8i9dnw29b0mxc5ixdscx9las13n2lqq")
12 (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#1.0.15" "PolymerElements/iron-autogrow-textarea#^1.0.13" "1jw40ki5w21il0i9pwjywk4y6mk9lrj8fm57vfg9nlpbiqm2vswb")
12 (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1.0.6" "PolymerElements/iron-a11y-keys#^1.0.6" "1xz3mgghfcxixq28sdb654iaxj4nyi1bzcwf77ydkms6fviqs9mv")
13 (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1.0.9" "PolymerElements/iron-a11y-keys#^1.0.6" "07c2wm1p9g52qidl67a43yb7pzd88ygycgghlwzjbh2vkwrs40kp")
13 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl")
14 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.9" "PolymerElements/iron-flex-layout#^1.0.0" "1r54la4n8n0lq97vdxnlpdrarxsiwp2b3vfvby9il3j4y4s8vi4h")
14 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8")
15 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.13" "PolymerElements/paper-behaviors#^1.0.0" "0yljykkdg9p67dinplmp6hc5ma6sp95ykah8kz6id5z8gjmsd05b")
15 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh")
16 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.7" "PolymerElements/paper-material#^1.0.0" "1q9r3i5f61y6hmd18h3fcmn7y29yznraz83f9256z8cc0vglfjdb")
16 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.1.4" "PolymerElements/paper-styles#^1.0.0" "0j8vg74xrcxlni8i93dsab3y80f34kk30lv4yblqpkp9c3nrilf7")
17 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.3.1" "PolymerElements/paper-styles#^1.0.0" "11fcxp9kx6sqp2yq0883psn8xyw5d3i753mimqbx8aqa5abvrk4q")
17 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j")
18 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.5" "PolymerElements/neon-animation#^1.0.0" "144sq9ijw1nnp2jagpa1ammrc018kp1y6nlmgq1v1iishv4ylsl5")
18 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d")
19 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.6" "PolymerElements/iron-a11y-announcer#^1.0.0" "1az02v91s17v9bir868pifv0s2lwxchm0i4l20176f98366813zk")
19 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.8.6" "PolymerElements/iron-overlay-behavior#^1.0.9" "14brn9gz6qqskarg3fxk91xs7vg02vgcsz9a9743kidxr0l0413m")
20 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.10.4" "PolymerElements/iron-overlay-behavior#^1.0.9" "0px6s756cgqzxzq53fgk1297j07gyfykqkhdzmj9fwyyrwiv1g8z")
20 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf")
21 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.7" "PolymerElements/iron-fit-behavior#^1.1.0" "0b864x9cdxadvzkdcn1d3yvi32kqccfv8j467337rgcq193l60jb")
21 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.5" "PolymerElements/iron-checked-element-behavior#^1.0.0" "0l0yy4ah454s8bzfv076s8by7h67zy9ni6xb932qwyhx8br6c1m7")
22 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.6" "PolymerElements/iron-checked-element-behavior#^1.0.0" "165nh5vkdsr4d5vkq4sj1sz0igfy6vgx844ys164mqg8gkjncvxm")
22 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb")
23 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "0warxr9fk2d3cvgiq81djxwiky73gxxr5s3xa97d3c83q1lidlzy")
23 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.17" "PolymerElements/iron-behaviors#^1.0.0" "021qvkmbk32jrrmmphpmwgby4bzi5jyf47rh1bxmq2ip07ly4bpr")
24 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.18" "PolymerElements/iron-behaviors#^1.0.0" "1icx212kh1cfdvk3v7pdqic9c48pdhnknq8ajx0dlps1l5sm69xh")
24 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv")
25 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.2" "PolymerElements/iron-validatable-behavior#^1.0.0" "1gjjn08y5s43p7aizif24i2yvkd1sasy77dix62irkwzig3favqr")
25 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1")
26 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.7" "PolymerElements/iron-form-element-behavior#^1.0.0" "02qbxqsqxjzy086cqbv6pgibmi0888q757p95ig6x3nc62xk81an")
26 (fetchbower "iron-a11y-keys-behavior" "polymerelements/iron-a11y-keys-behavior#1.1.9" "polymerelements/iron-a11y-keys-behavior#^1.0.0" "1imm4gc84qizihhbyhfa8lwjh3myhj837f79i5m04xjgwrjmkaf6")
27 (fetchbower "iron-a11y-keys-behavior" "PolymerElements/iron-a11y-keys-behavior#1.1.9" "PolymerElements/iron-a11y-keys-behavior#^1.0.0" "0dy1ca1nb9v9y968q998vgs147fkmn4irnnrdfl40ln1bln45qx9")
27 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns")
28 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.10" "PolymerElements/paper-ripple#^1.0.0" "0d5gjf7cw7hk520h6xnav1xrpd948qc8mzvqgqycqkad4j4vdck7")
28 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj")
29 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.1.0" "PolymerElements/font-roboto#^1.0.1" "0z4msvaa5pnr84j2r957g313fmdbdbrknhdw1axy5g48845yv04s")
29 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl")
30 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.3" "PolymerElements/iron-meta#^1.0.0" "13lsj648ibkyw3lha6g6r7afmk4yxvgdi63bkpy54wx63gfx7xir")
30 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn")
31 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.6" "PolymerElements/iron-resizable-behavior#^1.0.0" "1r8qk670nigqpw50x1m5yvbx7p9sahiwlf0f9z71v508d63vrbi1")
31 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r")
32 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.3" "PolymerElements/iron-selector#^1.0.0" "1362pq6vy113h4y6hn31hhp52hh8g269s5aj7vsq266v7y59igf6")
32 (fetchbower "web-animations-js" "web-animations/web-animations-js#2.2.2" "web-animations/web-animations-js#^2.2.0" "1izfvm3l67vwys0bqbhidi9rqziw2f8wv289386sc6jsxzgkzhga")
33 (fetchbower "web-animations-js" "web-animations/web-animations-js#2.3.1" "web-animations/web-animations-js#^2.2.0" "16haz886711qrcf9h9wrjwf5hrz2c69l4jxlq0iyzar823c51qkq")
33 ]; }
34 ]; }
@@ -1,12 +1,14
1 # This file has been generated by node2nix 1.0.0. Do not edit!
1 # This file has been generated by node2nix 1.5.3. Do not edit!
2
2
3 {pkgs ? import <nixpkgs> {
3 {pkgs ? import <nixpkgs> {
4 inherit system;
4 inherit system;
5 }, system ? builtins.currentSystem}:
5 }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-6_x"}:
6
6
7 let
7 let
8 nodeEnv = import ./node-env.nix {
8 nodeEnv = import ./node-env.nix {
9 inherit (pkgs) stdenv python utillinux runCommand writeTextFile nodejs;
9 inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
10 inherit nodejs;
11 libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
10 };
12 };
11 in
13 in
12 import ./node-packages.nix {
14 import ./node-packages.nix {
@@ -1,24 +1,26
1 # This file originates from node2nix
1 # This file originates from node2nix
2
2
3 {stdenv, python, nodejs, utillinux, runCommand, writeTextFile}:
3 {stdenv, nodejs, python2, utillinux, libtool, runCommand, writeTextFile}:
4
4
5 let
5 let
6 python = if nodejs ? python then nodejs.python else python2;
7
6 # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
8 # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
7 tarWrapper = runCommand "tarWrapper" {} ''
9 tarWrapper = runCommand "tarWrapper" {} ''
8 mkdir -p $out/bin
10 mkdir -p $out/bin
9
11
10 cat > $out/bin/tar <<EOF
12 cat > $out/bin/tar <<EOF
11 #! ${stdenv.shell} -e
13 #! ${stdenv.shell} -e
12 $(type -p tar) "\$@" --warning=no-unknown-keyword
14 $(type -p tar) "\$@" --warning=no-unknown-keyword
13 EOF
15 EOF
14
16
15 chmod +x $out/bin/tar
17 chmod +x $out/bin/tar
16 '';
18 '';
17
19
18 # Function that generates a TGZ file from a NPM project
20 # Function that generates a TGZ file from a NPM project
19 buildNodeSourceDist =
21 buildNodeSourceDist =
20 { name, version, src, ... }:
22 { name, version, src, ... }:
21
23
22 stdenv.mkDerivation {
24 stdenv.mkDerivation {
23 name = "node-tarball-${name}-${version}";
25 name = "node-tarball-${name}-${version}";
24 inherit src;
26 inherit src;
@@ -42,151 +44,311 let
42 # Bundle the dependencies of the package
44 # Bundle the dependencies of the package
43 mkdir -p node_modules
45 mkdir -p node_modules
44 cd node_modules
46 cd node_modules
45
47
46 # Only include dependencies if they don't exist. They may also be bundled in the package.
48 # Only include dependencies if they don't exist. They may also be bundled in the package.
47 if [ ! -e "${dependency.name}" ]
49 if [ ! -e "${dependency.name}" ]
48 then
50 then
49 ${composePackage dependency}
51 ${composePackage dependency}
50 fi
52 fi
51
53
52 cd ..
54 cd ..
53 ''
55 ''
54 ) dependencies);
56 ) dependencies);
55
57
56 # Recursively composes the dependencies of a package
58 # Recursively composes the dependencies of a package
57 composePackage = { name, packageName, src, dependencies ? [], ... }@args:
59 composePackage = { name, packageName, src, dependencies ? [], ... }@args:
58 let
59 fixImpureDependencies = writeTextFile {
60 name = "fixDependencies.js";
61 text = ''
62 var fs = require('fs');
63 var url = require('url');
64
65 /*
66 * Replaces an impure version specification by *
67 */
68 function replaceImpureVersionSpec(versionSpec) {
69 var parsedUrl = url.parse(versionSpec);
70
71 if(versionSpec == "latest" || versionSpec == "unstable" ||
72 versionSpec.substr(0, 2) == ".." || dependency.substr(0, 2) == "./" || dependency.substr(0, 2) == "~/" || dependency.substr(0, 1) == '/')
73 return '*';
74 else if(parsedUrl.protocol == "git:" || parsedUrl.protocol == "git+ssh:" || parsedUrl.protocol == "git+http:" || parsedUrl.protocol == "git+https:" ||
75 parsedUrl.protocol == "http:" || parsedUrl.protocol == "https:")
76 return '*';
77 else
78 return versionSpec;
79 }
80
81 var packageObj = JSON.parse(fs.readFileSync('./package.json'));
82
83 /* Replace dependencies */
84 if(packageObj.dependencies !== undefined) {
85 for(var dependency in packageObj.dependencies) {
86 var versionSpec = packageObj.dependencies[dependency];
87 packageObj.dependencies[dependency] = replaceImpureVersionSpec(versionSpec);
88 }
89 }
90
91 /* Replace development dependencies */
92 if(packageObj.devDependencies !== undefined) {
93 for(var dependency in packageObj.devDependencies) {
94 var versionSpec = packageObj.devDependencies[dependency];
95 packageObj.devDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
96 }
97 }
98
99 /* Replace optional dependencies */
100 if(packageObj.optionalDependencies !== undefined) {
101 for(var dependency in packageObj.optionalDependencies) {
102 var versionSpec = packageObj.optionalDependencies[dependency];
103 packageObj.optionalDependencies[dependency] = replaceImpureVersionSpec(versionSpec);
104 }
105 }
106
107 /* Write the fixed JSON file */
108 fs.writeFileSync("package.json", JSON.stringify(packageObj));
109 '';
110 };
111 in
112 ''
60 ''
113 DIR=$(pwd)
61 DIR=$(pwd)
114 cd $TMPDIR
62 cd $TMPDIR
115
63
116 unpackFile ${src}
64 unpackFile ${src}
117
65
118 # Make the base dir in which the target dependency resides first
66 # Make the base dir in which the target dependency resides first
119 mkdir -p "$(dirname "$DIR/${packageName}")"
67 mkdir -p "$(dirname "$DIR/${packageName}")"
120
68
121 if [ -f "${src}" ]
69 if [ -f "${src}" ]
122 then
70 then
123 # Figure out what directory has been unpacked
71 # Figure out what directory has been unpacked
124 packageDir=$(find . -type d -maxdepth 1 | tail -1)
72 packageDir="$(find . -maxdepth 1 -type d | tail -1)"
125
73
126 # Restore write permissions to make building work
74 # Restore write permissions to make building work
75 find "$packageDir" -type d -print0 | xargs -0 chmod u+x
127 chmod -R u+w "$packageDir"
76 chmod -R u+w "$packageDir"
128
77
129 # Move the extracted tarball into the output folder
78 # Move the extracted tarball into the output folder
130 mv "$packageDir" "$DIR/${packageName}"
79 mv "$packageDir" "$DIR/${packageName}"
131 elif [ -d "${src}" ]
80 elif [ -d "${src}" ]
132 then
81 then
82 # Get a stripped name (without hash) of the source directory.
83 # On old nixpkgs it's already set internally.
84 if [ -z "$strippedName" ]
85 then
86 strippedName="$(stripHash ${src})"
87 fi
88
133 # Restore write permissions to make building work
89 # Restore write permissions to make building work
134 chmod -R u+w $strippedName
90 chmod -R u+w "$strippedName"
135
91
136 # Move the extracted directory into the output folder
92 # Move the extracted directory into the output folder
137 mv $strippedName "$DIR/${packageName}"
93 mv "$strippedName" "$DIR/${packageName}"
138 fi
94 fi
139
95
140 # Unset the stripped name to not confuse the next unpack step
96 # Unset the stripped name to not confuse the next unpack step
141 unset strippedName
97 unset strippedName
142
98
143 # Some version specifiers (latest, unstable, URLs, file paths) force NPM to make remote connections or consult paths outside the Nix store.
99 # Include the dependencies of the package
144 # The following JavaScript replaces these by * to prevent that
145 cd "$DIR/${packageName}"
100 cd "$DIR/${packageName}"
146 node ${fixImpureDependencies}
147
148 # Include the dependencies of the package
149 ${includeDependencies { inherit dependencies; }}
101 ${includeDependencies { inherit dependencies; }}
150 cd ..
102 cd ..
151 ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
103 ${stdenv.lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
152 '';
104 '';
153
105
106 pinpointDependencies = {dependencies, production}:
107 let
108 pinpointDependenciesFromPackageJSON = writeTextFile {
109 name = "pinpointDependencies.js";
110 text = ''
111 var fs = require('fs');
112 var path = require('path');
113
114 function resolveDependencyVersion(location, name) {
115 if(location == process.env['NIX_STORE']) {
116 return null;
117 } else {
118 var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
119
120 if(fs.existsSync(dependencyPackageJSON)) {
121 var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
122
123 if(dependencyPackageObj.name == name) {
124 return dependencyPackageObj.version;
125 }
126 } else {
127 return resolveDependencyVersion(path.resolve(location, ".."), name);