Merge lp:~teknico/juju-gui/harden-npm-dependencies into lp:juju-gui/experimental

Proposed by Nicola Larosa
Status: Merged
Merged at revision: 548
Proposed branch: lp:~teknico/juju-gui/harden-npm-dependencies
Merge into: lp:juju-gui/experimental
Diff against target: 1174 lines (+1085/-23)
3 files modified
HACKING (+45/-9)
npm-shrinkwrap.json (+1032/-0)
package.json (+8/-14)
To merge this branch: bzr merge lp:~teknico/juju-gui/harden-npm-dependencies
Reviewer Review Type Date Requested Status
Juju GUI Hackers Pending
Review via email: mp+158659@code.launchpad.net

Description of the change

Freeze the versions of all nodejs dependencies.

Add a generated npm-shrinkwrap.json file that freezes the current versions
of all nodejs dependecies, even the recursive ones.

Update the package.json file keeping the currently fixed package versions.
Also remove the misleading "engines" entry (see
<https://npmjs.org/doc/json.html#engines>), and remove the useless distinction
between "dependencies" and "devDependencies" (see
<https://npmjs.org/doc/json.html#devDependencies>).

Add a documentation section, "Updating the nodejs dependencies" at the
bottom of the docs/hacking.rst file, explaining how this works and how to
update dependencies to new versions. Please check that the whole thing is
understandable and workable: you will use this stuff, after all. :-)

Sorry for the change size: it's mainly due to the 1k+ lines of the generated
npm-shrinkwrap.json file. No need to go over that one, just look at the
changes in the docs/hacking.rst and package.json files.

https://codereview.appspot.com/8714043/

To post a comment you must log in.
Revision history for this message
Nicola Larosa (teknico) wrote :

Reviewers: mp+158659_code.launchpad.net,

Message:
Please take a look.

Description:
Freeze the versions of all nodejs dependencies.

Add a generated npm-shrinkwrap.json file that freezes the current
versions
of all nodejs dependecies, even the recursive ones.

Update the package.json file keeping the currently fixed package
versions, and
making all other ones have some leeway over the micro version by using
Tilde
Version Ranges (see
<https://npmjs.org/doc/json.html#Tilde-Version-Ranges>).
Also remove the misleading "engines" entry (see
<https://npmjs.org/doc/json.html#engines>), and remove the useless
distinction
between "dependencies" and "devDependencies" (see
<https://npmjs.org/doc/json.html#devDependencies>).

Add a documentation section, "Updating the nodejs dependencies" at the
bottom of the HACKING file, explaining how this works and how to update
dependencies to new versions. Please check that the whole thing is
understandable and workable: you will use this stuff, after all. :-)

Sorry for the change size: it's mainly due to the 1k+ lines of the
generated
npm-shrinkwrap.json file. No need to go over that one, just look at the
changes in the HACKING and package.json files.

https://code.launchpad.net/~teknico/juju-gui/harden-npm-dependencies/+merge/158659

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/8714043/

Affected files:
   M HACKING
   A [revision details]
   A npm-shrinkwrap.json
   M package.json

Revision history for this message
Gary Poster (gary) wrote :

LGTM. I tried this in the charm (PyJuju) and it worked great. Thank
you!

Gary

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (left):

https://codereview.appspot.com/8714043/diff/1/package.json#oldcode17
package.json:17: "devDependencies": {
I still think that collapsing dependencies and devDependencies makes
sense. Thank you.

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (right):

https://codereview.appspot.com/8714043/diff/1/package.json#newcode13
package.json:13: "d3": "~2.10.3",
Why don't we keep the values we had before, instead? They were working
pretty well for us, and now the shrinkwrap actually hardens. Perhaps
this is a misunderstanding--I only intended to suggest that we nail down
our dependencies when we didn't have the shrinkwrap functionality.

https://codereview.appspot.com/8714043/

Revision history for this message
Nicola Larosa (teknico) wrote :

Thanks for the review. No remarks on the docs?

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (left):

https://codereview.appspot.com/8714043/diff/1/package.json#oldcode17
package.json:17: "devDependencies": {
gary.poster wrote:
> I still think that collapsing dependencies and devDependencies
> makes sense. Thank you.

That's good. :-)

https://codereview.appspot.com/8714043/diff/1/package.json
File package.json (right):

https://codereview.appspot.com/8714043/diff/1/package.json#newcode13
package.json:13: "d3": "~2.10.3",
gary.poster wrote:
> Why don't we keep the values we had before, instead?
> They were working pretty well for us, and now the
> shrinkwrap actually hardens. Perhaps this is a
> misunderstanding--I only intended to suggest that we
> nail down our dependencies when we didn't have the
> shrinkwrap functionality.

Yes, it makes sense, I'm reverting most of these changes.

https://codereview.appspot.com/8714043/

540. By Nicola Larosa

Merge from trunk.

541. By Nicola Larosa

Revert most version constraint changes.

Revision history for this message
Nicola Larosa (teknico) wrote :
Revision history for this message
Francesco Banconi (frankban) wrote :

LGTM, see just a minor below.
Thank you.

https://codereview.appspot.com/8714043/diff/5001/HACKING
File HACKING (right):

https://codereview.appspot.com/8714043/diff/5001/HACKING#newcode57
HACKING:57: sudo apt-get install nodejs imagemagick lbox python-sphinx
python-yaml python-tz \
I know this preexisted, but, while you are here, you could wrap this
line at 80?

https://codereview.appspot.com/8714043/diff/5001/HACKING#newcode423
HACKING:423: 4) check that everything works well;
Very clear.

https://codereview.appspot.com/8714043/diff/5001/package.json
File package.json (right):

https://codereview.appspot.com/8714043/diff/5001/package.json#newcode9
package.json:9: "url": "lp:juju-gui"
Thank you!

https://codereview.appspot.com/8714043/

Revision history for this message
Nicola Larosa (teknico) wrote :

https://codereview.appspot.com/8714043/diff/5001/HACKING
File HACKING (right):

https://codereview.appspot.com/8714043/diff/5001/HACKING#newcode57
HACKING:57: sudo apt-get install nodejs imagemagick lbox python-sphinx
python-yaml python-tz \
frankban wrote:
> I know this preexisted, but, while you are here,
> you could wrap this line at 80?

Oh right, doing it, thanks.

https://codereview.appspot.com/8714043/

542. By Nicola Larosa

Fix wrapping of one doc line.

Revision history for this message
Nicola Larosa (teknico) wrote :

*** Submitted:

Freeze the versions of all nodejs dependencies.

Add a generated npm-shrinkwrap.json file that freezes the current
versions
of all nodejs dependecies, even the recursive ones.

Update the package.json file keeping the currently fixed package
versions.
Also remove the misleading "engines" entry (see
<https://npmjs.org/doc/json.html#engines>), and remove the useless
distinction
between "dependencies" and "devDependencies" (see
<https://npmjs.org/doc/json.html#devDependencies>).

Add a documentation section, "Updating the nodejs dependencies" at the
bottom of the docs/hacking.rst file, explaining how this works and how
to
update dependencies to new versions. Please check that the whole thing
is
understandable and workable: you will use this stuff, after all. :-)

Sorry for the change size: it's mainly due to the 1k+ lines of the
generated
npm-shrinkwrap.json file. No need to go over that one, just look at the
changes in the docs/hacking.rst and package.json files.

R=gary.poster, frankban
CC=
https://codereview.appspot.com/8714043

https://codereview.appspot.com/8714043/

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'HACKING'
2--- HACKING 2013-02-21 23:16:30 +0000
3+++ HACKING 2013-04-15 10:53:24 +0000
4@@ -44,8 +44,8 @@
5
6 python improv.py -f sample.json
7
8-Now it is time to actually get the GUI itself set up. Juju GUI uses nodejs-
9-based development tools, so you will need ``nodejs`` and ``npm`` from Chris
10+Now it is time to actually get the GUI itself set up. Juju GUI uses
11+nodejs-based development tools, so you will need ``nodejs`` from Chris
12 Lea's node PPA. You also need ImageMagick for sprite generation, lbox to
13 propose branches, python-sphinx and python-yaml to build docs, PyTZ to make
14 releases, python-shelltoolbox and python-selenium for browser tests, and
15@@ -54,7 +54,8 @@
16 sudo add-apt-repository ppa:chris-lea/node.js
17 sudo add-apt-repository ppa:gophers/go
18 sudo apt-get update
19- sudo apt-get install nodejs npm imagemagick lbox python-sphinx python-yaml python-tz python-virtualenv python-shelltoolbox python-selenium
20+ sudo apt-get install nodejs imagemagick lbox python-sphinx python-yaml \
21+ python-tz python-virtualenv python-shelltoolbox python-selenium
22
23 See docs/browser-testing.rst if you are curious about the reason for
24 python-shelltoolbox and python-selenium
25@@ -272,16 +273,16 @@
26 =============
27
28 The ``make docs`` command generates the code and the project documentation
29-together.
30+together. The ``make view-docs`` command does the above and also opens both
31+docs in the browser.
32
33 Code Documentation
34 ------------------
35
36-Generated documentation for the JavaScript code is available in the ``yuidoc``
37+Generated documentation for the JavaScript code is available in the ``yuidoc/``
38 directory. You can build and view the docs by running::
39
40- make yuidoc
41- xdg-open yuidoc/index.html
42+ make view-code-doc
43
44 See the :ref:`style guide <embedded-docs>` document for details on how to
45 write the embedded documentation.
46@@ -293,8 +294,7 @@
47 mentioned in the developer installation instructions above, it needs Sphinx
48 and Python-yaml. To build and view the documentation, use these commands::
49
50- make sphinx
51- xdg-open docs/_build/html/index.html
52+ make view-main-doc
53
54 Filing Bugs
55 ===========
56@@ -399,3 +399,39 @@
57 ``IS_TRUNK_BRANCH`` and ``BRANCH_IS_CLEAN``. Example usage::
58
59 BRANCH_IS_GOOD=1 make dist
60+
61+Updating the ``nodejs`` dependencies
62+====================================
63+
64+The ranges of allowed versions for the ``nodejs`` dependency packages are
65+specified in the top-level ``package.json`` file. However, the actual installed
66+versions are frozen in the top-level ``npm-shrinkwap.json`` file, which
67+overrides the former.
68+
69+The ``npm-shrinkwap.json`` file is generated by the ``npm shrinkwrap`` command
70+(see `shrinkwrap - Lock down dependency versions`_) on the basis of the
71+packages currently installed by any of the ``make build-[something]`` commands.
72+
73+The procedure for updating the dependency versions is described in the
74+`Building shrinkwrapped packages`_ section of the aforementioned document. In
75+a nutshell:
76+
77+1) review the ``package.json`` file and see whether any constraints may be
78+ updated, in order to allow using newer package versions;
79+2) delete the ``npm-shrinkwrap.json`` file;
80+3) run ``make``, getting all new dependencies;
81+4) check that everything works well;
82+
83+If everything is fine, regenerate the ``npm-shrinkwap.json`` file by running
84+the ``npm shrinkwrap`` command.
85+
86+If something is broken find the culprit, adjust the ``package.json`` file
87+accordingly, and go back to step #3.
88+
89+Alternatively, you might use the ``npm outdated`` command to get the update
90+candidates, and do the job one step at a time rather than all at once.
91+
92+.. _`shrinkwrap - Lock down dependency versions`:
93+ https://npmjs.org/doc/shrinkwrap.html
94+.. _`Building shrinkwrapped packages`:
95+ https://npmjs.org/doc/shrinkwrap.html#Building-shrinkwrapped-packages
96
97=== added file 'npm-shrinkwrap.json'
98--- npm-shrinkwrap.json 1970-01-01 00:00:00 +0000
99+++ npm-shrinkwrap.json 2013-04-15 10:53:24 +0000
100@@ -0,0 +1,1032 @@
101+{
102+ "name": "juju-ui",
103+ "version": "0.0.1",
104+ "dependencies": {
105+ "cryptojs": {
106+ "version": "2.5.3",
107+ "from": "cryptojs@2.5.x"
108+ },
109+ "chai": {
110+ "version": "1.5.0",
111+ "from": "chai@1.5.x"
112+ },
113+ "expect.js": {
114+ "version": "0.1.2",
115+ "from": "expect.js@0.1.2"
116+ },
117+ "graceful-fs": {
118+ "version": "1.1.14",
119+ "from": "graceful-fs@1.1.x"
120+ },
121+ "node-markdown": {
122+ "version": "0.1.1",
123+ "from": "node-markdown@0.1.x"
124+ },
125+ "rimraf": {
126+ "version": "2.0.3",
127+ "from": "rimraf@2.0.x"
128+ },
129+ "should": {
130+ "version": "1.2.2",
131+ "from": "should@1.2.x"
132+ },
133+ "less": {
134+ "version": "1.3.3",
135+ "from": "less@1.3.x",
136+ "dependencies": {
137+ "ycssmin": {
138+ "version": "1.0.1",
139+ "from": "ycssmin@>=1.0.1"
140+ }
141+ }
142+ },
143+ "minimatch": {
144+ "version": "0.2.11",
145+ "from": "minimatch@0.2.x",
146+ "dependencies": {
147+ "lru-cache": {
148+ "version": "2.3.0",
149+ "from": "lru-cache@2"
150+ },
151+ "sigmund": {
152+ "version": "1.0.0",
153+ "from": "sigmund@~1.0.0"
154+ }
155+ }
156+ },
157+ "node-minify": {
158+ "version": "0.7.2",
159+ "from": "node-minify@0.7.x",
160+ "dependencies": {
161+ "sqwish": {
162+ "version": "0.2.1",
163+ "from": "sqwish@*"
164+ }
165+ }
166+ },
167+ "express": {
168+ "version": "3.1.1",
169+ "from": "express@3.1.x",
170+ "dependencies": {
171+ "connect": {
172+ "version": "2.7.4",
173+ "from": "connect@2.7.4",
174+ "dependencies": {
175+ "qs": {
176+ "version": "0.5.1",
177+ "from": "qs@0.5.1"
178+ },
179+ "formidable": {
180+ "version": "1.0.11",
181+ "from": "formidable@1.0.11"
182+ },
183+ "buffer-crc32": {
184+ "version": "0.1.1",
185+ "from": "buffer-crc32@0.1.1"
186+ },
187+ "bytes": {
188+ "version": "0.2.0",
189+ "from": "bytes@0.2.0"
190+ },
191+ "pause": {
192+ "version": "0.0.1",
193+ "from": "pause@0.0.1"
194+ }
195+ }
196+ },
197+ "commander": {
198+ "version": "0.6.1",
199+ "from": "commander@0.6.1"
200+ },
201+ "range-parser": {
202+ "version": "0.0.4",
203+ "from": "range-parser@0.0.4"
204+ },
205+ "mkdirp": {
206+ "version": "0.3.5",
207+ "from": "mkdirp@~0.3.4"
208+ },
209+ "cookie": {
210+ "version": "0.0.5",
211+ "from": "cookie@0.0.5"
212+ },
213+ "buffer-crc32": {
214+ "version": "0.2.1",
215+ "from": "buffer-crc32@~0.2.1"
216+ },
217+ "fresh": {
218+ "version": "0.1.0",
219+ "from": "fresh@0.1.0"
220+ },
221+ "methods": {
222+ "version": "0.0.1",
223+ "from": "methods@0.0.1"
224+ },
225+ "send": {
226+ "version": "0.1.0",
227+ "from": "send@0.1.0",
228+ "dependencies": {
229+ "mime": {
230+ "version": "1.2.6",
231+ "from": "mime@1.2.6"
232+ }
233+ }
234+ },
235+ "cookie-signature": {
236+ "version": "0.0.1",
237+ "from": "cookie-signature@0.0.1"
238+ },
239+ "debug": {
240+ "version": "0.7.2",
241+ "from": "debug@*"
242+ }
243+ }
244+ },
245+ "mocha": {
246+ "version": "1.8.2",
247+ "from": "mocha@1.8.x",
248+ "dependencies": {
249+ "commander": {
250+ "version": "0.6.1",
251+ "from": "commander@0.6.1"
252+ },
253+ "growl": {
254+ "version": "1.7.0",
255+ "from": "growl@1.7.x"
256+ },
257+ "jade": {
258+ "version": "0.26.3",
259+ "from": "jade@0.26.3",
260+ "dependencies": {
261+ "mkdirp": {
262+ "version": "0.3.0",
263+ "from": "mkdirp@0.3.0"
264+ }
265+ }
266+ },
267+ "diff": {
268+ "version": "1.0.2",
269+ "from": "diff@1.0.2"
270+ },
271+ "debug": {
272+ "version": "0.7.2",
273+ "from": "debug@*"
274+ },
275+ "mkdirp": {
276+ "version": "0.3.3",
277+ "from": "mkdirp@0.3.3"
278+ },
279+ "ms": {
280+ "version": "0.3.0",
281+ "from": "ms@0.3.0"
282+ }
283+ }
284+ },
285+ "recess": {
286+ "version": "1.1.6",
287+ "from": "recess@1.1.x",
288+ "dependencies": {
289+ "colors": {
290+ "version": "0.6.0-1",
291+ "from": "colors@>= 0.3.0"
292+ },
293+ "nopt": {
294+ "version": "2.1.1",
295+ "from": "nopt@>= 1.0.10",
296+ "dependencies": {
297+ "abbrev": {
298+ "version": "1.0.4",
299+ "from": "abbrev@1"
300+ }
301+ }
302+ },
303+ "underscore": {
304+ "version": "1.4.4",
305+ "from": "underscore@>= 1.2.1"
306+ },
307+ "watch": {
308+ "version": "0.7.0",
309+ "from": "watch@>= 0.5.1"
310+ }
311+ }
312+ },
313+ "uglify-js": {
314+ "version": "2.2.5",
315+ "from": "uglify-js@2.2.x",
316+ "dependencies": {
317+ "source-map": {
318+ "version": "0.1.22",
319+ "from": "source-map@~0.1.7",
320+ "dependencies": {
321+ "amdefine": {
322+ "version": "0.0.4",
323+ "from": "amdefine@>=0.0.4"
324+ }
325+ }
326+ },
327+ "optimist": {
328+ "version": "0.3.7",
329+ "from": "optimist@~0.3.5",
330+ "dependencies": {
331+ "wordwrap": {
332+ "version": "0.0.2",
333+ "from": "wordwrap@~0.0.2"
334+ }
335+ }
336+ }
337+ }
338+ },
339+ "yuidocjs": {
340+ "version": "0.3.42",
341+ "from": "yuidocjs@0.3.x",
342+ "dependencies": {
343+ "express": {
344+ "version": "2.5.11",
345+ "from": "express@~2.5.0",
346+ "dependencies": {
347+ "connect": {
348+ "version": "1.9.2",
349+ "from": "connect@1.x",
350+ "dependencies": {
351+ "formidable": {
352+ "version": "1.0.13",
353+ "from": "formidable@1.0.x"
354+ }
355+ }
356+ },
357+ "mime": {
358+ "version": "1.2.4",
359+ "from": "mime@1.2.4"
360+ },
361+ "qs": {
362+ "version": "0.4.2",
363+ "from": "qs@0.4.x"
364+ },
365+ "mkdirp": {
366+ "version": "0.3.0",
367+ "from": "mkdirp@0.3.0"
368+ }
369+ }
370+ }
371+ }
372+ },
373+ "jshint": {
374+ "version": "0.9.1",
375+ "from": "jshint@0.9.1",
376+ "dependencies": {
377+ "cli": {
378+ "version": "0.4.3",
379+ "from": "cli@0.4.3",
380+ "dependencies": {
381+ "glob": {
382+ "version": "3.1.21",
383+ "from": "glob@>= 3.1.4",
384+ "dependencies": {
385+ "minimatch": {
386+ "version": "0.2.11",
387+ "from": "minimatch@~0.2.11",
388+ "dependencies": {
389+ "lru-cache": {
390+ "version": "2.3.0",
391+ "from": "lru-cache@2"
392+ },
393+ "sigmund": {
394+ "version": "1.0.0",
395+ "from": "sigmund@~1.0.0"
396+ }
397+ }
398+ },
399+ "graceful-fs": {
400+ "version": "1.2.0",
401+ "from": "graceful-fs@~1.2.0"
402+ },
403+ "inherits": {
404+ "version": "1.0.0",
405+ "from": "inherits@1"
406+ }
407+ }
408+ }
409+ }
410+ },
411+ "minimatch": {
412+ "version": "0.0.5",
413+ "from": "minimatch@0.0.x",
414+ "dependencies": {
415+ "lru-cache": {
416+ "version": "1.0.6",
417+ "from": "lru-cache@~1.0.2"
418+ }
419+ }
420+ }
421+ }
422+ },
423+ "yui": {
424+ "version": "3.9.1",
425+ "from": "yui@3.9.1",
426+ "dependencies": {
427+ "request": {
428+ "version": "2.12.0",
429+ "from": "request@~2.12.0",
430+ "dependencies": {
431+ "form-data": {
432+ "version": "0.0.3",
433+ "from": "form-data",
434+ "dependencies": {
435+ "combined-stream": {
436+ "version": "0.0.3",
437+ "from": "combined-stream@0.0.3",
438+ "dependencies": {
439+ "delayed-stream": {
440+ "version": "0.0.5",
441+ "from": "delayed-stream@0.0.5"
442+ }
443+ }
444+ },
445+ "async": {
446+ "version": "0.1.9",
447+ "from": "async@0.1.9"
448+ }
449+ }
450+ },
451+ "mime": {
452+ "version": "1.2.7",
453+ "from": "mime"
454+ }
455+ }
456+ }
457+ }
458+ },
459+ "d3": {
460+ "version": "2.10.3",
461+ "from": "d3@2.10.x",
462+ "dependencies": {
463+ "jsdom": {
464+ "version": "0.2.14",
465+ "from": "jsdom@0.2.14",
466+ "dependencies": {
467+ "htmlparser": {
468+ "version": "1.7.6",
469+ "from": "htmlparser@1.x"
470+ },
471+ "request": {
472+ "version": "2.16.6",
473+ "from": "request@2.x",
474+ "dependencies": {
475+ "form-data": {
476+ "version": "0.0.7",
477+ "from": "form-data@~0.0.3",
478+ "dependencies": {
479+ "combined-stream": {
480+ "version": "0.0.4",
481+ "from": "combined-stream@~0.0.4",
482+ "dependencies": {
483+ "delayed-stream": {
484+ "version": "0.0.5",
485+ "from": "delayed-stream@0.0.5"
486+ }
487+ }
488+ },
489+ "async": {
490+ "version": "0.1.22",
491+ "from": "async@~0.1.9"
492+ }
493+ }
494+ },
495+ "mime": {
496+ "version": "1.2.9",
497+ "from": "mime@~1.2.7"
498+ },
499+ "hawk": {
500+ "version": "0.10.2",
501+ "from": "hawk@~0.10.2",
502+ "dependencies": {
503+ "hoek": {
504+ "version": "0.7.6",
505+ "from": "hoek@0.7.x"
506+ },
507+ "boom": {
508+ "version": "0.3.8",
509+ "from": "boom@0.3.x"
510+ },
511+ "cryptiles": {
512+ "version": "0.1.3",
513+ "from": "cryptiles@0.1.x"
514+ },
515+ "sntp": {
516+ "version": "0.1.4",
517+ "from": "sntp@0.1.x"
518+ }
519+ }
520+ },
521+ "node-uuid": {
522+ "version": "1.4.0",
523+ "from": "node-uuid@~1.4.0"
524+ },
525+ "cookie-jar": {
526+ "version": "0.2.0",
527+ "from": "cookie-jar@~0.2.0"
528+ },
529+ "aws-sign": {
530+ "version": "0.2.0",
531+ "from": "aws-sign@~0.2.0"
532+ },
533+ "oauth-sign": {
534+ "version": "0.2.0",
535+ "from": "oauth-sign@~0.2.0"
536+ },
537+ "forever-agent": {
538+ "version": "0.2.0",
539+ "from": "forever-agent@~0.2.0"
540+ },
541+ "tunnel-agent": {
542+ "version": "0.2.0",
543+ "from": "tunnel-agent@~0.2.0"
544+ },
545+ "json-stringify-safe": {
546+ "version": "3.0.0",
547+ "from": "json-stringify-safe@~3.0.0"
548+ },
549+ "qs": {
550+ "version": "0.5.6",
551+ "from": "qs@~0.5.4"
552+ }
553+ }
554+ },
555+ "cssom": {
556+ "version": "0.2.5",
557+ "from": "cssom@0.2.x"
558+ },
559+ "contextify": {
560+ "version": "0.1.5",
561+ "from": "contextify@0.1.x",
562+ "dependencies": {
563+ "bindings": {
564+ "version": "1.1.0",
565+ "from": "bindings@*"
566+ }
567+ }
568+ }
569+ }
570+ },
571+ "sizzle": {
572+ "version": "1.1.0",
573+ "from": "sizzle@1.1.x"
574+ }
575+ }
576+ },
577+ "node-spritesheet": {
578+ "version": "0.4.0",
579+ "from": "node-spritesheet@0.4.0",
580+ "dependencies": {
581+ "async": {
582+ "version": "0.1.22",
583+ "from": "async@~0.1.22"
584+ },
585+ "q-fs": {
586+ "version": "0.1.36",
587+ "from": "q-fs@~0.1.32",
588+ "dependencies": {
589+ "q": {
590+ "version": "0.8.12",
591+ "from": "q@0.8.x"
592+ },
593+ "q-io": {
594+ "version": "0.0.18",
595+ "from": "q-io@0.0.x"
596+ },
597+ "fs-boot": {
598+ "version": "0.0.9",
599+ "from": "fs-boot@0.0.x"
600+ }
601+ }
602+ },
603+ "grunt-contrib": {
604+ "version": "0.2.0",
605+ "from": "grunt-contrib@~0.2.0",
606+ "dependencies": {
607+ "grunt-contrib-clean": {
608+ "version": "0.2.0",
609+ "from": "grunt-contrib-clean@~0.2.0",
610+ "dependencies": {
611+ "grunt-contrib-lib": {
612+ "version": "0.1.0",
613+ "from": "grunt-contrib-lib@~0.1.0"
614+ }
615+ }
616+ },
617+ "grunt-contrib-coffee": {
618+ "version": "0.2.0",
619+ "from": "grunt-contrib-coffee@~0.2.0",
620+ "dependencies": {
621+ "coffee-script": {
622+ "version": "1.3.3",
623+ "from": "coffee-script@~1.3.3"
624+ },
625+ "grunt-contrib-lib": {
626+ "version": "0.2.1",
627+ "from": "grunt-contrib-lib@~0.2.0"
628+ }
629+ }
630+ },
631+ "grunt-contrib-compress": {
632+ "version": "0.2.2",
633+ "from": "grunt-contrib-compress@~0.2.0",
634+ "dependencies": {
635+ "tar": {
636+ "version": "0.1.17",
637+ "from": "tar@~0.1.13",
638+ "dependencies": {
639+ "inherits": {
640+ "version": "1.0.0",
641+ "from": "inherits@1.x"
642+ },
643+ "block-stream": {
644+ "version": "0.0.6",
645+ "from": "block-stream@*"
646+ }
647+ }
648+ },
649+ "fstream": {
650+ "version": "0.1.22",
651+ "from": "fstream@~0.1.18",
652+ "dependencies": {
653+ "mkdirp": {
654+ "version": "0.3.5",
655+ "from": "mkdirp@0.3.x"
656+ },
657+ "graceful-fs": {
658+ "version": "1.2.0",
659+ "from": "graceful-fs@~1.2.0"
660+ },
661+ "inherits": {
662+ "version": "1.0.0",
663+ "from": "inherits@1.x"
664+ }
665+ }
666+ },
667+ "zipstream-ctalkington": {
668+ "version": "0.3.4",
669+ "from": "zipstream-ctalkington@~0.3.0"
670+ },
671+ "grunt-contrib-lib": {
672+ "version": "0.2.1",
673+ "from": "grunt-contrib-lib@~0.2.0"
674+ }
675+ }
676+ },
677+ "grunt-contrib-copy": {
678+ "version": "0.2.4",
679+ "from": "grunt-contrib-copy@~0.2.0",
680+ "dependencies": {
681+ "grunt-contrib-lib": {
682+ "version": "0.2.1",
683+ "from": "grunt-contrib-lib@~0.2.0"
684+ }
685+ }
686+ },
687+ "grunt-contrib-handlebars": {
688+ "version": "0.2.4",
689+ "from": "grunt-contrib-handlebars@~0.2.0",
690+ "dependencies": {
691+ "handlebars": {
692+ "version": "1.0.10",
693+ "from": "handlebars@~1.0.4",
694+ "dependencies": {
695+ "optimist": {
696+ "version": "0.3.7",
697+ "from": "optimist@~0.3",
698+ "dependencies": {
699+ "wordwrap": {
700+ "version": "0.0.2",
701+ "from": "wordwrap@~0.0.2"
702+ }
703+ }
704+ },
705+ "uglify-js": {
706+ "version": "1.2.6",
707+ "from": "uglify-js@~1.2"
708+ }
709+ }
710+ },
711+ "grunt-contrib-lib": {
712+ "version": "0.2.1",
713+ "from": "grunt-contrib-lib@~0.2.0"
714+ }
715+ }
716+ },
717+ "grunt-contrib-jade": {
718+ "version": "0.2.0",
719+ "from": "grunt-contrib-jade@~0.2.0",
720+ "dependencies": {
721+ "jade": {
722+ "version": "0.27.7",
723+ "from": "jade@~0.27.2",
724+ "dependencies": {
725+ "commander": {
726+ "version": "0.6.1",
727+ "from": "commander@0.6.1"
728+ },
729+ "mkdirp": {
730+ "version": "0.3.5",
731+ "from": "mkdirp@0.3.x"
732+ },
733+ "coffee-script": {
734+ "version": "1.4.0",
735+ "from": "coffee-script@~1.4.0"
736+ }
737+ }
738+ },
739+ "grunt-contrib-lib": {
740+ "version": "0.2.1",
741+ "from": "grunt-contrib-lib@~0.2.0"
742+ }
743+ }
744+ },
745+ "grunt-contrib-jst": {
746+ "version": "0.2.4",
747+ "from": "grunt-contrib-jst@~0.2.0",
748+ "dependencies": {
749+ "underscore": {
750+ "version": "1.3.3",
751+ "from": "underscore@~1.3.3"
752+ },
753+ "grunt-contrib-lib": {
754+ "version": "0.2.1",
755+ "from": "grunt-contrib-lib@~0.2.0"
756+ }
757+ }
758+ },
759+ "grunt-contrib-less": {
760+ "version": "0.2.2",
761+ "from": "grunt-contrib-less@~0.2.0",
762+ "dependencies": {
763+ "grunt-contrib-lib": {
764+ "version": "0.2.1",
765+ "from": "grunt-contrib-lib@~0.2.0"
766+ }
767+ }
768+ },
769+ "grunt-contrib-mincss": {
770+ "version": "0.2.0",
771+ "from": "grunt-contrib-mincss@~0.2.0",
772+ "dependencies": {
773+ "clean-css": {
774+ "version": "0.4.2",
775+ "from": "clean-css@~0.4.1",
776+ "dependencies": {
777+ "optimist": {
778+ "version": "0.3.7",
779+ "from": "optimist@0.3.x",
780+ "dependencies": {
781+ "wordwrap": {
782+ "version": "0.0.2",
783+ "from": "wordwrap@~0.0.2"
784+ }
785+ }
786+ }
787+ }
788+ },
789+ "grunt-contrib-lib": {
790+ "version": "0.2.1",
791+ "from": "grunt-contrib-lib@~0.2.0"
792+ }
793+ }
794+ },
795+ "grunt-contrib-requirejs": {
796+ "version": "0.2.0",
797+ "from": "grunt-contrib-requirejs@~0.2.0",
798+ "dependencies": {
799+ "requirejs": {
800+ "version": "2.0.6",
801+ "from": "requirejs@~2.0.6"
802+ },
803+ "grunt-contrib-lib": {
804+ "version": "0.2.1",
805+ "from": "grunt-contrib-lib@~0.2.0"
806+ }
807+ }
808+ },
809+ "grunt-contrib-stylus": {
810+ "version": "0.2.2",
811+ "from": "grunt-contrib-stylus@~0.2.0",
812+ "dependencies": {
813+ "stylus": {
814+ "version": "0.29.0",
815+ "from": "stylus@~0.29.0",
816+ "dependencies": {
817+ "cssom": {
818+ "version": "0.2.5",
819+ "from": "cssom@0.2.x"
820+ },
821+ "mkdirp": {
822+ "version": "0.3.5",
823+ "from": "mkdirp@0.3.x"
824+ },
825+ "debug": {
826+ "version": "0.7.2",
827+ "from": "debug@*"
828+ }
829+ }
830+ },
831+ "nib": {
832+ "version": "0.8.2",
833+ "from": "nib@~0.8.2"
834+ },
835+ "grunt-contrib-lib": {
836+ "version": "0.2.1",
837+ "from": "grunt-contrib-lib@~0.2.0"
838+ }
839+ }
840+ },
841+ "grunt-contrib-yuidoc": {
842+ "version": "0.2.0",
843+ "from": "grunt-contrib-yuidoc@~0.2.0",
844+ "dependencies": {
845+ "grunt-contrib-lib": {
846+ "version": "0.2.1",
847+ "from": "grunt-contrib-lib@~0.2.0"
848+ }
849+ }
850+ }
851+ }
852+ },
853+ "grunt-lib-contrib": {
854+ "version": "0.3.1",
855+ "from": "grunt-lib-contrib@~0.3.0"
856+ },
857+ "underscore": {
858+ "version": "1.4.4",
859+ "from": "underscore@>= 1.2.1"
860+ }
861+ }
862+ },
863+ "grunt": {
864+ "version": "0.3.17",
865+ "from": "grunt@0.3.17",
866+ "dependencies": {
867+ "async": {
868+ "version": "0.1.22",
869+ "from": "async@~0.1.18"
870+ },
871+ "colors": {
872+ "version": "0.6.0-1",
873+ "from": "colors@~0.6.0"
874+ },
875+ "connect": {
876+ "version": "2.4.6",
877+ "from": "connect@~2.4.4",
878+ "dependencies": {
879+ "qs": {
880+ "version": "0.5.1",
881+ "from": "qs@0.5.1"
882+ },
883+ "formidable": {
884+ "version": "1.0.11",
885+ "from": "formidable@1.0.11"
886+ },
887+ "crc": {
888+ "version": "0.2.0",
889+ "from": "crc@0.2.0"
890+ },
891+ "cookie": {
892+ "version": "0.0.4",
893+ "from": "cookie@0.0.4"
894+ },
895+ "bytes": {
896+ "version": "0.1.0",
897+ "from": "bytes@0.1.0"
898+ },
899+ "send": {
900+ "version": "0.0.4",
901+ "from": "send@0.0.4",
902+ "dependencies": {
903+ "mime": {
904+ "version": "1.2.6",
905+ "from": "mime@1.2.6"
906+ },
907+ "range-parser": {
908+ "version": "0.0.4",
909+ "from": "range-parser@0.0.4"
910+ }
911+ }
912+ },
913+ "fresh": {
914+ "version": "0.1.0",
915+ "from": "fresh@0.1.0"
916+ },
917+ "pause": {
918+ "version": "0.0.1",
919+ "from": "pause@0.0.1"
920+ },
921+ "debug": {
922+ "version": "0.7.2",
923+ "from": "debug@*"
924+ }
925+ }
926+ },
927+ "dateformat": {
928+ "version": "1.0.2-1.2.3",
929+ "from": "dateformat@1.0.2-1.2.3"
930+ },
931+ "glob-whatev": {
932+ "version": "0.1.8",
933+ "from": "glob-whatev@~0.1.4"
934+ },
935+ "hooker": {
936+ "version": "0.2.3",
937+ "from": "hooker@~0.2.3"
938+ },
939+ "nodeunit": {
940+ "version": "0.7.4",
941+ "from": "nodeunit@~0.7.4",
942+ "dependencies": {
943+ "tap": {
944+ "version": "0.4.1",
945+ "from": "tap@>=0.2.3",
946+ "dependencies": {
947+ "inherits": {
948+ "version": "1.0.0"
949+ },
950+ "yamlish": {
951+ "version": "0.0.5"
952+ },
953+ "slide": {
954+ "version": "1.1.3",
955+ "from": "slide@*"
956+ },
957+ "runforcover": {
958+ "version": "0.0.2",
959+ "from": "runforcover@~0.0.2",
960+ "dependencies": {
961+ "bunker": {
962+ "version": "0.1.2",
963+ "from": "bunker@0.1.X",
964+ "dependencies": {
965+ "burrito": {
966+ "version": "0.2.12",
967+ "from": "burrito@>=0.2.5 <0.3",
968+ "dependencies": {
969+ "traverse": {
970+ "version": "0.5.2",
971+ "from": "traverse@~0.5.1"
972+ },
973+ "uglify-js": {
974+ "version": "1.1.1",
975+ "from": "uglify-js@~1.1.1"
976+ }
977+ }
978+ }
979+ }
980+ }
981+ }
982+ },
983+ "nopt": {
984+ "version": "2.1.1",
985+ "from": "nopt@~2",
986+ "dependencies": {
987+ "abbrev": {
988+ "version": "1.0.4",
989+ "from": "abbrev@1"
990+ }
991+ }
992+ },
993+ "mkdirp": {
994+ "version": "0.3.5",
995+ "from": "mkdirp@~0.3"
996+ },
997+ "difflet": {
998+ "version": "0.2.3",
999+ "from": "difflet@~0.2.0",
1000+ "dependencies": {
1001+ "traverse": {
1002+ "version": "0.6.3",
1003+ "from": "traverse@0.6.x"
1004+ },
1005+ "charm": {
1006+ "version": "0.0.8",
1007+ "from": "charm@0.0.x"
1008+ }
1009+ }
1010+ },
1011+ "deep-equal": {
1012+ "version": "0.0.0",
1013+ "from": "deep-equal@~0.0.0"
1014+ },
1015+ "buffer-equal": {
1016+ "version": "0.0.0",
1017+ "from": "buffer-equal@~0.0.0"
1018+ },
1019+ "glob": {
1020+ "version": "3.1.21",
1021+ "from": "glob@~3.1.14",
1022+ "dependencies": {
1023+ "graceful-fs": {
1024+ "version": "1.2.0",
1025+ "from": "graceful-fs@~1.2.0"
1026+ },
1027+ "inherits": {
1028+ "version": "1.0.0",
1029+ "from": "inherits@1"
1030+ }
1031+ }
1032+ }
1033+ }
1034+ }
1035+ }
1036+ },
1037+ "nopt": {
1038+ "version": "1.0.10",
1039+ "from": "nopt@~1.0.10",
1040+ "dependencies": {
1041+ "abbrev": {
1042+ "version": "1.0.4",
1043+ "from": "abbrev@1"
1044+ }
1045+ }
1046+ },
1047+ "prompt": {
1048+ "version": "0.1.12",
1049+ "from": "prompt@~0.1.12",
1050+ "dependencies": {
1051+ "pkginfo": {
1052+ "version": "0.3.0",
1053+ "from": "pkginfo@0.x.x"
1054+ },
1055+ "winston": {
1056+ "version": "0.5.11",
1057+ "from": "winston@0.5.x",
1058+ "dependencies": {
1059+ "eyes": {
1060+ "version": "0.1.8",
1061+ "from": "eyes@0.1.x"
1062+ },
1063+ "loggly": {
1064+ "version": "0.3.11",
1065+ "from": "loggly@0.3.x >=0.3.7",
1066+ "dependencies": {
1067+ "request": {
1068+ "version": "2.9.203",
1069+ "from": "request@2.9.x"
1070+ },
1071+ "timespan": {
1072+ "version": "2.2.0",
1073+ "from": "timespan@2.x.x"
1074+ }
1075+ }
1076+ },
1077+ "pkginfo": {
1078+ "version": "0.2.3",
1079+ "from": "pkginfo@0.2.x"
1080+ },
1081+ "stack-trace": {
1082+ "version": "0.0.6",
1083+ "from": "stack-trace@0.0.x"
1084+ }
1085+ }
1086+ }
1087+ }
1088+ },
1089+ "semver": {
1090+ "version": "1.0.14",
1091+ "from": "semver@~1.0.13"
1092+ },
1093+ "uglify-js": {
1094+ "version": "1.3.4",
1095+ "from": "uglify-js@~1.3.3"
1096+ },
1097+ "underscore": {
1098+ "version": "1.2.4",
1099+ "from": "underscore@~1.2.4"
1100+ },
1101+ "underscore.string": {
1102+ "version": "2.1.1",
1103+ "from": "underscore.string@~2.1.1"
1104+ },
1105+ "temporary": {
1106+ "version": "0.0.5",
1107+ "from": "temporary@~0.0.4",
1108+ "dependencies": {
1109+ "package": {
1110+ "version": "1.0.1",
1111+ "from": "package@>= 1.0.0 < 1.2.0"
1112+ }
1113+ }
1114+ },
1115+ "gzip-js": {
1116+ "version": "0.3.1",
1117+ "from": "gzip-js@~0.3.1",
1118+ "dependencies": {
1119+ "crc32": {
1120+ "version": "0.2.2",
1121+ "from": "crc32@>= 0.2.2"
1122+ },
1123+ "deflate-js": {
1124+ "version": "0.2.2",
1125+ "from": "deflate-js@>= 0.2.2"
1126+ }
1127+ }
1128+ }
1129+ }
1130+ }
1131+ }
1132+}
1133
1134=== modified file 'package.json'
1135--- package.json 2013-04-08 11:13:07 +0000
1136+++ package.json 2013-04-15 10:53:24 +0000
1137@@ -1,22 +1,17 @@
1138 {
1139 "author": "Juju Developers",
1140- "name": "juju-ui",
1141- "description": "Juju GUI",
1142- "version": "0.0.1",
1143- "homepage": "http://launchpad.net/juju-ui",
1144+ "name": "juju-gui",
1145+ "description": "Juju GUI build dependencies",
1146+ "version": "0.1.0",
1147+ "homepage": "http://launchpad.net/juju-gui",
1148 "repository": {
1149 "type": "bzr",
1150- "url": "lp:juju-ui"
1151- },
1152- "engines": {
1153- "node": ">=0.10"
1154+ "url": "lp:juju-gui"
1155 },
1156 "dependencies": {
1157- "cryptojs": ">= 2.5.3"
1158- },
1159- "devDependencies": {
1160+ "cryptojs": ">= 2.5.3",
1161 "d3": "<3.0.0",
1162- "yui": "==3.9.1",
1163+ "yui": "3.9.1",
1164 "mocha": "1.8.x",
1165 "express": "3.x",
1166 "expect.js": "0.1.2",
1167@@ -34,6 +29,5 @@
1168 "grunt": "0.3.17",
1169 "node-spritesheet": "0.4.0",
1170 "node-minify": "0.7.x"
1171- },
1172- "optionalDependencies": {}
1173+ }
1174 }

Subscribers

People subscribed via source and target branches