{"action":"created","issue":{"url":"https://api.github.com/repos/mesosphere/marathon-ui/issues/30","labels_url":"https://api.github.com/repos/mesosphere/marathon-ui/issues/30/labels{/name}","comments_url":"https://api.github.com/repos/mesosphere/marathon-ui/issues/30/comments","events_url":"https://api.github.com/repos/mesosphere/marathon-ui/issues/30/events","html_url":"https://github.com/mesosphere/marathon-ui/pull/30","id":89056242,"number":30,"title":"Replace Broccoli with gulp","user":{"login":"pierlo-upitup","id":1078545,"avatar_url":"https://avatars.githubusercontent.com/u/1078545?v=3","gravatar_id":"","url":"https://api.github.com/users/pierlo-upitup","html_url":"https://github.com/pierlo-upitup","followers_url":"https://api.github.com/users/pierlo-upitup/followers","following_url":"https://api.github.com/users/pierlo-upitup/following{/other_user}","gists_url":"https://api.github.com/users/pierlo-upitup/gists{/gist_id}","starred_url":"https://api.github.com/users/pierlo-upitup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pierlo-upitup/subscriptions","organizations_url":"https://api.github.com/users/pierlo-upitup/orgs","repos_url":"https://api.github.com/users/pierlo-upitup/repos","events_url":"https://api.github.com/users/pierlo-upitup/events{/privacy}","received_events_url":"https://api.github.com/users/pierlo-upitup/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/mesosphere/marathon-ui/labels/in%20progress","name":"in progress","color":"ededed"}],"state":"open","locked":false,"assignee":{"login":"mlunoe","id":1097941,"avatar_url":"https://avatars.githubusercontent.com/u/1097941?v=3","gravatar_id":"","url":"https://api.github.com/users/mlunoe","html_url":"https://github.com/mlunoe","followers_url":"https://api.github.com/users/mlunoe/followers","following_url":"https://api.github.com/users/mlunoe/following{/other_user}","gists_url":"https://api.github.com/users/mlunoe/gists{/gist_id}","starred_url":"https://api.github.com/users/mlunoe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mlunoe/subscriptions","organizations_url":"https://api.github.com/users/mlunoe/orgs","repos_url":"https://api.github.com/users/mlunoe/repos","events_url":"https://api.github.com/users/mlunoe/events{/privacy}","received_events_url":"https://api.github.com/users/mlunoe/received_events","type":"User","site_admin":false},"milestone":null,"comments":6,"created_at":"2015-06-17T15:54:17Z","updated_at":"2015-06-18T09:56:47Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/mesosphere/marathon-ui/pulls/30","html_url":"https://github.com/mesosphere/marathon-ui/pull/30","diff_url":"https://github.com/mesosphere/marathon-ui/pull/30.diff","patch_url":"https://github.com/mesosphere/marathon-ui/pull/30.patch"},"body":"Hey guys, \r\n\r\nthis is an initial attempt at replacing our beloved broccoli in favor of gulp. \r\nWhat I have accomplished so far:\r\n\r\n- use webpack (+ babel-loader for jsx transform) for all the JS modules \r\n- use eslint with .eslintrc (updated rule definitions)\r\n- less (with automatic import path resolution) + autoprefixer\r\n- copy images to `dist/img`\r\n- copy `index.html` from `src/` -> `dist/`\r\n- `gulp serve` using `gulp-connect` (I ran into problems with `webpack-dev-server`, any takers?)\r\n- `gulp watch` (build + serve + watch for changes)\r\n- production environment (via `GULP_ENV`) : minify css & js\r\n\r\nI also introduced various npm script entries:\r\n\r\n- `npm run build` : development environment build\r\n- `npm run dist `: mocha tests + production environment build \r\n- `npm run test `: mocha tests\r\n- `npm run watch`: watch `src` folders for changes\r\n\r\nThis is basically is a _rewrite_ of what we had so far with broccoli, but in gulp. It's meant to be a base for further discussion, so please let me know your thoughts/comments/concerns.\r\n"},"comment":{"url":"https://api.github.com/repos/mesosphere/marathon-ui/issues/comments/113096506","html_url":"https://github.com/mesosphere/marathon-ui/pull/30#issuecomment-113096506","issue_url":"https://api.github.com/repos/mesosphere/marathon-ui/issues/30","id":113096506,"user":{"login":"pierlo-upitup","id":1078545,"avatar_url":"https://avatars.githubusercontent.com/u/1078545?v=3","gravatar_id":"","url":"https://api.github.com/users/pierlo-upitup","html_url":"https://github.com/pierlo-upitup","followers_url":"https://api.github.com/users/pierlo-upitup/followers","following_url":"https://api.github.com/users/pierlo-upitup/following{/other_user}","gists_url":"https://api.github.com/users/pierlo-upitup/gists{/gist_id}","starred_url":"https://api.github.com/users/pierlo-upitup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pierlo-upitup/subscriptions","organizations_url":"https://api.github.com/users/pierlo-upitup/orgs","repos_url":"https://api.github.com/users/pierlo-upitup/repos","events_url":"https://api.github.com/users/pierlo-upitup/events{/privacy}","received_events_url":"https://api.github.com/users/pierlo-upitup/received_events","type":"User","site_admin":false},"created_at":"2015-06-18T09:56:47Z","updated_at":"2015-06-18T09:56:47Z","body":"@mlunoe Here is a comparative benchmark for the `npm run dist` task in Broccoli / Gulp\r\n\r\n### Gulp\r\n\r\n```\r\n time npm run dist\r\n\r\n> marathon-ui@0.9.0 dist /Users/pierlo/Development/marathon-ui\r\n> export GULP_ENV=\"production\" && npm run clean && npm run test && npm run build\r\n\r\n\r\n> marathon-ui@0.9.0 clean /Users/pierlo/Development/marathon-ui\r\n> rm -rf dist\r\n\r\n\r\n> marathon-ui@0.9.0 test /Users/pierlo/Development/marathon-ui\r\n> mocha --ui exports --reporter spec --compilers jsx:src/test/helpers/compiler.js src/test/helpers/object-assign-polyfill.js src/test/**/*.test.* src/test/*.test.*\r\n\r\n\r\n\r\n  AppList\r\n    ✓ should render the component populated with data\r\n\r\n  AppCollection\r\n    ✓ should be populated with data\r\n\r\n  Deployments\r\n    on request\r\n      ✓ updates the DeploymentStore on success\r\n      ✓ handles failure gracefully\r\n    on revert (rollback)\r\n      ✓ reverts (rollback) a deployment on success\r\n      ✓ receives a revert error\r\n    on stop\r\n      ✓ forcefully stops a deployment\r\n      ✓ receives a stop error\r\n\r\n  Deployment component\r\nWarning: Failed propType: Required prop `destroyDeployment` was not specified in `DeploymentComponent`.\r\n    ✓ has the correct deployment id\r\n    ✓ has correct apps in list element\r\n    ✓ has correct actions in list element\r\n    ✓ it shows the current step\r\n    ✓ has correct number of total steps\r\n    ✓ has Stop-button\r\n    ✓ has Rollback-button\r\n\r\n\r\n  15 passing (86ms)\r\n\r\n\r\n> marathon-ui@0.9.0 build /Users/pierlo/Development/marathon-ui\r\n> export GULP_ENV=\"development\" && gulp\r\n\r\n[11:52:21] Using gulpfile ~/Development/marathon-ui/gulpfile.js\r\n[11:52:21] Starting 'eslint'...\r\n[11:52:21] Starting 'less'...\r\n[11:52:21] Starting 'images'...\r\n[11:52:21] Starting 'index'...\r\n[11:52:21] Finished 'index' after 14 ms\r\n[11:52:22] Finished 'less' after 241 ms\r\n[11:52:22] Finished 'images' after 238 ms\r\n[11:52:22] Finished 'eslint' after 1.08 s\r\n[11:52:22] Starting 'webpack'...\r\n[11:52:27] Finished 'webpack' after 4.47 s\r\n[11:52:27] Starting 'default'...\r\n[11:52:27] Finished 'default' after 4.68 μs\r\nnpm run dist  7.66s user 0.51s system 94% cpu 8.676 total\r\n``` \r\n#### Gulp: 7.66 Seconds\r\n\r\n### Broccoli\r\n```\r\n time npm run dist\r\n\r\n> marathon-ui@0.9.0 dist /Users/pierlo/Development/marathon-ui\r\n> export BROCCOLI_ENV=\"production\" && npm run clean && npm run test && npm run build\r\n\r\n\r\n> marathon-ui@0.9.0 clean /Users/pierlo/Development/marathon-ui\r\n> rm -rf dist tmp\r\n\r\n\r\n> marathon-ui@0.9.0 test /Users/pierlo/Development/marathon-ui\r\n> mocha --ui exports --reporter spec --compilers jsx:src/test/helpers/compiler.js src/test/helpers/object-assign-polyfill.js src/test/**/*.test.* src/test/*.test.*\r\n\r\n\r\n\r\n  AppList\r\n    ✓ should render the component populated with data\r\n\r\n  AppCollection\r\n    ✓ should be populated with data\r\n\r\n  Deployments\r\n    on request\r\n      ✓ updates the DeploymentStore on success\r\n      ✓ handles failure gracefully\r\n    on revert (rollback)\r\n      ✓ reverts (rollback) a deployment on success\r\n      ✓ receives a revert error\r\n    on stop\r\n      ✓ forcefully stops a deployment\r\n      ✓ receives a stop error\r\n\r\n  Deployment component\r\n    ✓ has the correct deployment id\r\n    ✓ has correct apps in list element\r\n    ✓ has correct actions in list element\r\n    ✓ it shows the current step\r\n    ✓ has correct number of total steps\r\n    ✓ has Stop-button\r\n    ✓ has Rollback-button\r\n\r\n\r\n  15 passing (83ms)\r\n\r\n\r\n> marathon-ui@0.9.0 build /Users/pierlo/Development/marathon-ui\r\n> broccoli build dist\r\n\r\nnpm run dist  8.74s user 0.52s system 100% cpu 9.238 total\r\n```\r\n\r\n#### Broccoli: 8.74s\r\n\r\nDayum!\r\n"}}