##// END OF EJS Templates
build: fix 32bit builds
marcink -
r3449:7c3af07c default
parent child Browse files
Show More
@@ -1,294 +1,296 b''
1 1 # Nix environment for the community edition
2 2 #
3 3 # This shall be as lean as possible, just producing the enterprise-ce
4 4 # derivation. For advanced tweaks to pimp up the development environment we use
5 5 # "shell.nix" so that it does not have to clutter this file.
6 6 #
7 7 # Configuration, set values in "~/.nixpkgs/config.nix".
8 8 # example
9 9 # {
10 10 # # Thoughts on how to configure the dev environment
11 11 # rc = {
12 12 # codeInternalUrl = "https://usr:token@code.rhodecode.com/internal";
13 13 # sources = {
14 14 # rhodecode-vcsserver = "/home/user/work/rhodecode-vcsserver";
15 15 # rhodecode-enterprise-ce = "/home/user/work/rhodecode-enterprise-ce";
16 16 # rhodecode-enterprise-ee = "/home/user/work/rhodecode-enterprise-ee";
17 17 # };
18 18 # };
19 19 # }
20 20
21 21 args@
22 { pythonPackages ? "python27Packages"
22 { system ? builtins.currentSystem
23 , pythonPackages ? "python27Packages"
23 24 , pythonExternalOverrides ? self: super: {}
24 25 , doCheck ? false
25 26 , ...
26 27 }:
27 28
28 29 let
29 pkgs_ = (import <nixpkgs> {});
30 pkgs_ = args.pkgs or (import <nixpkgs> { inherit system; });
30 31 in
31 32
32 33 let
33 34 pkgs = import <nixpkgs> {
34 35 overlays = [
35 36 (import ./pkgs/overlays.nix)
36 37 ];
37 38 inherit
38 39 (pkgs_)
39 40 system;
40 41 };
41 42
42 43 # Works with the new python-packages, still can fallback to the old
43 44 # variant.
44 45 basePythonPackagesUnfix = basePythonPackages.__unfix__ or (
45 46 self: basePythonPackages.override (a: { inherit self; }));
46 47
47 48 # Evaluates to the last segment of a file system path.
48 49 basename = path: with pkgs.lib; last (splitString "/" path);
49 50
50 51 # source code filter used as arugment to builtins.filterSource.
51 52 src-filter = path: type: with pkgs.lib;
52 53 let
53 54 ext = last (splitString "." path);
54 55 in
55 56 !builtins.elem (basename path) [
56 57 ".git" ".hg" "__pycache__" ".eggs" ".idea" ".dev"
57 58 "node_modules" "node_binaries"
58 59 "build" "data" "result" "tmp"] &&
59 60 !builtins.elem ext ["egg-info" "pyc"] &&
60 61 # TODO: johbo: This check is wrong, since "path" contains an absolute path,
61 62 # it would still be good to restore it since we want to ignore "result-*".
62 63 !hasPrefix "result" path;
63 64
64 65 sources =
65 66 let
66 67 inherit
67 68 (pkgs.lib)
68 69 all
69 70 isString
70 71 attrValues;
71 72 sourcesConfig = pkgs.config.rc.sources or {};
72 73 in
73 74 # Ensure that sources are configured as strings. Using a path
74 75 # would result in a copy into the nix store.
75 76 assert all isString (attrValues sourcesConfig);
76 77 sourcesConfig;
77 78
78 79 version = builtins.readFile "${rhodecode-enterprise-ce-src}/rhodecode/VERSION";
79 80 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
80 81
81 82 nodeEnv = import ./pkgs/node-default.nix {
82 83 inherit
83 pkgs;
84 pkgs
85 system;
84 86 };
85 87 nodeDependencies = nodeEnv.shell.nodeDependencies;
86 88
87 89 rhodecode-testdata-src = sources.rhodecode-testdata or (
88 90 pkgs.fetchhg {
89 91 url = "https://code.rhodecode.com/upstream/rc_testdata";
90 92 rev = "v0.10.0";
91 93 sha256 = "0zn9swwvx4vgw4qn8q3ri26vvzgrxn15x6xnjrysi1bwmz01qjl0";
92 94 });
93 95
94 96 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
95 97 inherit
96 98 doCheck
97 99 pkgs
98 100 pythonPackages;
99 101 };
100 102
101 103 pythonLocalOverrides = self: super: {
102 104 rhodecode-enterprise-ce =
103 105 let
104 106 linkNodePackages = ''
105 107 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
106 108
107 109 echo "[BEGIN]: Link node packages and binaries"
108 110 # johbo: Linking individual packages allows us to run "npm install"
109 111 # inside of a shell to try things out. Re-entering the shell will
110 112 # restore a clean environment.
111 113 rm -fr node_modules
112 114 mkdir node_modules
113 115 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
114 116 export NODE_PATH=./node_modules
115 117
116 118 rm -fr node_binaries
117 119 mkdir node_binaries
118 120 ln -s ${nodeDependencies}/bin/* node_binaries/
119 121 echo "[DONE ]: Link node packages and binaries"
120 122 '';
121 123
122 124 releaseName = "RhodeCodeEnterpriseCE-${version}";
123 125 in super.rhodecode-enterprise-ce.override (attrs: {
124 126 inherit
125 127 doCheck
126 128 version;
127 129
128 130 name = "rhodecode-enterprise-ce-${version}";
129 131 releaseName = releaseName;
130 132 src = rhodecode-enterprise-ce-src;
131 133 dontStrip = true; # prevent strip, we don't need it.
132 134
133 135 # expose following attributed outside
134 136 passthru = {
135 137 inherit
136 138 rhodecode-testdata
137 139 linkNodePackages
138 140 myPythonPackagesUnfix
139 141 pythonLocalOverrides
140 142 pythonCommunityOverrides;
141 143
142 144 pythonPackages = self;
143 145 };
144 146
145 147 buildInputs =
146 148 attrs.buildInputs or [] ++ [
147 149 rhodecode-testdata
148 150 ];
149 151
150 152 #NOTE: option to inject additional propagatedBuildInputs
151 153 propagatedBuildInputs =
152 154 attrs.propagatedBuildInputs or [] ++ [
153 155
154 156 ];
155 157
156 158 LC_ALL = "en_US.UTF-8";
157 159 LOCALE_ARCHIVE =
158 160 if pkgs.stdenv.isLinux
159 161 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
160 162 else "";
161 163
162 164 # Add bin directory to path so that tests can find 'rhodecode'.
163 165 preCheck = ''
164 166 export PATH="$out/bin:$PATH"
165 167 '';
166 168
167 169 # custom check phase for testing
168 170 checkPhase = ''
169 171 runHook preCheck
170 172 PYTHONHASHSEED=random py.test -vv -p no:sugar -r xw --cov-config=.coveragerc --cov=rhodecode --cov-report=term-missing rhodecode
171 173 runHook postCheck
172 174 '';
173 175
174 176 postCheck = ''
175 177 echo "Cleanup of rhodecode/tests"
176 178 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
177 179 '';
178 180
179 181 preBuild = ''
180 182 echo "[BEGIN]: Building frontend assets"
181 183 ${linkNodePackages}
182 184 make web-build
183 185 rm -fr node_modules
184 186 rm -fr node_binaries
185 187 echo "[DONE ]: Building frontend assets"
186 188 '';
187 189
188 190 postInstall = ''
189 191 # check required files
190 192 STATIC_CHECK="/robots.txt /502.html
191 193 /js/scripts.js /js/rhodecode-components.js
192 194 /css/style.css /css/style-polymer.css"
193 195
194 196 for file in $STATIC_CHECK;
195 197 do
196 198 if [ ! -f rhodecode/public/$file ]; then
197 199 echo "Missing $file"
198 200 exit 1
199 201 fi
200 202 done
201 203
202 204 echo "Writing enterprise-ce meta information for rccontrol to nix-support/rccontrol"
203 205 mkdir -p $out/nix-support/rccontrol
204 206 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
205 207 echo "[DONE ]: enterprise-ce meta information for rccontrol written"
206 208
207 209 mkdir -p $out/etc
208 210 cp configs/production.ini $out/etc
209 211 echo "[DONE ]: saved enterprise-ce production.ini into $out/etc"
210 212
211 213 cp -Rf rhodecode/config/rcextensions $out/etc/rcextensions.tmpl
212 214 echo "[DONE ]: saved enterprise-ce rcextensions into $out/etc/rcextensions.tmpl"
213 215
214 216 # python based programs need to be wrapped
215 217 mkdir -p $out/bin
216 218
217 219 # required binaries from dependencies
218 220 ln -s ${self.supervisor}/bin/supervisorctl $out/bin/
219 221 ln -s ${self.supervisor}/bin/supervisord $out/bin/
220 222 ln -s ${self.pastescript}/bin/paster $out/bin/
221 223 ln -s ${self.channelstream}/bin/channelstream $out/bin/
222 224 ln -s ${self.celery}/bin/celery $out/bin/
223 225 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
224 226 ln -s ${self.pyramid}/bin/prequest $out/bin/
225 227 ln -s ${self.pyramid}/bin/pserve $out/bin/
226 228
227 229 echo "[DONE ]: created symlinks into $out/bin"
228 230 DEPS="$out/bin/supervisorctl \
229 231 $out/bin/supervisord \
230 232 $out/bin/paster \
231 233 $out/bin/channelstream \
232 234 $out/bin/celery \
233 235 $out/bin/gunicorn \
234 236 $out/bin/prequest \
235 237 $out/bin/pserve"
236 238
237 239 # wrap only dependency scripts, they require to have full PYTHONPATH set
238 240 # to be able to import all packages
239 241 for file in $DEPS;
240 242 do
241 243 wrapProgram $file \
242 244 --prefix PATH : $PATH \
243 245 --prefix PYTHONPATH : $PYTHONPATH \
244 246 --set PYTHONHASHSEED random
245 247 done
246 248
247 249 echo "[DONE ]: enterprise-ce binary wrapping"
248 250
249 251 # rhodecode-tools don't need wrapping
250 252 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
251 253
252 254 # expose sources of CE
253 255 ln -s $out $out/etc/rhodecode_enterprise_ce_source
254 256
255 257 # expose static files folder
256 258 cp -Rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/public/ $out/etc/static
257 259 chmod 755 -R $out/etc/static
258 260
259 261 '';
260 262 });
261 263
262 264 };
263 265
264 266 basePythonPackages = with builtins;
265 267 if isAttrs pythonPackages then
266 268 pythonPackages
267 269 else
268 270 getAttr pythonPackages pkgs;
269 271
270 272 pythonGeneratedPackages = import ./pkgs/python-packages.nix {
271 273 inherit
272 274 pkgs;
273 275 inherit
274 276 (pkgs)
275 277 fetchurl
276 278 fetchgit
277 279 fetchhg;
278 280 };
279 281
280 282 pythonCommunityOverrides = import ./pkgs/python-packages-overrides.nix {
281 283 inherit pkgs basePythonPackages;
282 284 };
283 285
284 286 # Apply all overrides and fix the final package set
285 287 myPythonPackagesUnfix = with pkgs.lib;
286 288 (extends pythonExternalOverrides
287 289 (extends pythonLocalOverrides
288 290 (extends pythonCommunityOverrides
289 291 (extends pythonGeneratedPackages
290 292 basePythonPackagesUnfix))));
291 293
292 294 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
293 295
294 296 in myPythonPackages.rhodecode-enterprise-ce
@@ -1,19 +1,22 b''
1 1 # This file defines how to "build" for packaging.
2 2
3 { doCheck ? false
3 { pkgs ? import <nixpkgs> {}
4 , system ? builtins.currentSystem
5 , doCheck ? false
4 6 }:
5 7
6 8 let
7 9 enterprise_ce = import ./default.nix {
8 10 inherit
9 doCheck;
11 doCheck
12 system;
10 13
11 14 # disable checkPhase for build
12 15 checkPhase = ''
13 16 '';
14 17
15 18 };
16 19
17 20 in {
18 21 build = enterprise_ce;
19 22 }
General Comments 0
You need to be logged in to leave comments. Login now