diff --git a/.gitignore b/.gitignore index 375322f..9cf6a6a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,8 @@ apiref bower_components report .DS_Store -browser + + +bitcore.js +bitcore.min.js +tests.js diff --git a/bower.json b/bower.json index ac4c444..8ec416b 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "bitcore", - "main": "browser/bitcore.min.js", + "main": "./bitcore.min.js", "version": "0.8.6", "homepage": "http://bitcore.io", "authors": [ diff --git a/gulpfile.js b/gulpfile.js index 012a2b8..53191d2 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,330 +1,5 @@ -/** - * @file gulpfile.js - * - * Defines tasks that can be run on gulp. - * - * Summary: - */ -'use strict'; - -var gulp = require('gulp'); - -var bump = require('gulp-bump'); -var coveralls = require('gulp-coveralls'); -var git = require('gulp-git'); -var gutil = require('gulp-util'); -var jsdoc2md = require('jsdoc-to-markdown'); -var jshint = require('gulp-jshint'); -var mfs = require('more-fs'); -var mocha = require('gulp-mocha'); -var rename = require('gulp-rename'); -var runSequence = require('run-sequence'); -var shell = require('gulp-shell'); -var through = require('through2'); -var uglify = require('gulp-uglify'); -var files = ['lib/**/*.js']; -var tests = ['test/**/*.js']; -var alljs = files.concat(tests); +var gulp_bitcore = require('gulp-bitcore'); - -function ignoreError() { - /* jshint ignore:start */ // using `this` in this context is weird - this.emit('end'); - /* jshint ignore:end */ -} - -var testMocha = function() { - return gulp.src(tests).pipe(new mocha({ - reporter: 'spec' - })); -}; - -var testKarma = shell.task([ - './node_modules/karma/bin/karma start' -]); - -/** - * Testing - */ - -gulp.task('test:node', testMocha); - -gulp.task('test:node:nofail', function() { - return testMocha().on('error', ignoreError); -}); - -gulp.task('test:browser', ['browser:uncompressed', 'browser:maketests'], testKarma); - -gulp.task('test', function(callback) { - runSequence(['test:node'], ['test:browser'], callback); -}); - -/** - * File generation - */ - -gulp.task('browser:makefolder', shell.task([ - 'if [ ! -d "browser" ]; then mkdir browser; fi' -])); - -gulp.task('browser:uncompressed', ['browser:makefolder'], shell.task([ - './node_modules/.bin/browserify index.js --insert-global-vars=true --standalone=bitcore -o browser/bitcore.js' -])); - -gulp.task('browser:compressed', ['browser:uncompressed'], function() { - return gulp.src('browser/bitcore.js') - .pipe(uglify({ - mangle: true, - compress: true - })) - .pipe(rename('bitcore.min.js')) - .pipe(gulp.dest('browser')) - .on('error', gutil.log); -}); - -gulp.task('browser:maketests', ['browser:makefolder'], shell.task([ - 'find test/ -type f -name "*.js" | xargs ./node_modules/.bin/browserify -t brfs -o browser/tests.js' -])); - -gulp.task('browser', function(callback) { - runSequence(['browser:compressed'], ['browser:maketests'], callback); -}); - -/** - * Code quality and documentation - */ - -gulp.task('lint', function() { - return gulp.src(alljs) - .pipe(jshint()) - .pipe(jshint.reporter('default')); -}); - -gulp.task('plato', shell.task(['plato -d report -r -l .jshintrc -t bitcore lib'])); - -gulp.task('jsdoc', function() { - - function jsdoc() { - return through.obj(function(file, enc, cb) { - - if (file.isNull()) { - cb(null, file); - return; - } - if (file.isStream()) { - cb(new gutil.PluginError('gulp-jsdoc2md', 'Streaming not supported')); - return; - } - var destination = 'docs/api/' + file.path.replace(file.base, '').replace(/\.js$/, '.md'); - jsdoc2md.render(file.path, {}) - .on('error', function(err) { - gutil.log(gutil.colors.red('jsdoc2md failed', err.message)); - }) - .pipe(mfs.writeStream(destination)); - cb(null, file); - }); - } - - return gulp.src(files).pipe(jsdoc()); - -}); - -gulp.task('coverage', shell.task(['node_modules/.bin/./istanbul cover node_modules/.bin/_mocha -- --recursive'])); - -gulp.task('coveralls', ['coverage'], function() { - gulp.src('coverage/lcov.info').pipe(coveralls()); -}); - -/** - * Watch tasks - */ - -gulp.task('watch:test', function() { - // TODO: Only run tests that are linked to file changes by doing - // something smart like reading through the require statements - return gulp.watch(alljs, ['test']); -}); - -gulp.task('watch:test:node', function() { - // TODO: Only run tests that are linked to file changes by doing - // something smart like reading through the require statements - return gulp.watch(alljs, ['test:node']); -}); - -gulp.task('watch:test:browser', function() { - // TODO: Only run tests that are linked to file changes by doing - // something smart like reading through the require statements - return gulp.watch(alljs, ['test:browser']); -}); - -gulp.task('watch:jsdoc', function() { - // TODO: Only run tests that are linked to file changes by doing - // something smart like reading through the require statements - return gulp.watch(alljs, ['jsdoc']); -}); - -gulp.task('watch:coverage', function() { - // TODO: Only run tests that are linked to file changes by doing - // something smart like reading through the require statements - return gulp.watch(alljs, ['coverage']); -}); - -gulp.task('watch:lint', function() { - // TODO: Only lint files that are linked to file changes by doing - // something smart like reading through the require statements - return gulp.watch(alljs, ['lint']); -}); - -gulp.task('watch:browser', function() { - return gulp.watch(alljs, ['browser']); -}); - -/** - * Release automation - */ - -gulp.task('release:install', function() { - return shell.task([ - 'npm install', - ]); -}); - -gulp.task('release:bump', function() { - return gulp.src(['./bower.json', './package.json']) - .pipe(bump({ - type: 'patch' - })) - .pipe(gulp.dest('./')); -}); - -gulp.task('release:checkout-releases', function(cb) { - git.checkout('releases', { - args: '' - }, cb); -}); - -gulp.task('release:merge-master', function(cb) { - git.merge('master', { - args: '' - }, cb); -}); - -gulp.task('release:checkout-master', function(cb) { - git.checkout('master', { - args: '' - }, cb); -}); - -gulp.task('release:add-built-files', function() { - return gulp.src(['./browser/bitcore.js', './browser/bitcore.min.js', './package.json', './bower.json']) - .pipe(git.add({ - args: '-f' - })); -}); - -gulp.task('release:build-commit', ['release:add-built-files'], function() { - var pjson = require('./package.json'); - return gulp.src(['./browser/bitcore.js', './browser/bitcore.min.js', './package.json', './bower.json']) - .pipe(git.commit('Build: ' + pjson.version, { - args: '' - })); -}); - -gulp.task('release:version-commit', function() { - var pjson = require('./package.json'); - var files = ['./package.json', './bower.json']; - return gulp.src(files) - .pipe(git.commit('Bump package version to ' + pjson.version, { - args: '' - })); -}); - -gulp.task('release:push-releases', function(cb) { - git.push('bitpay', 'releases', { - args: '' - }, cb); -}); - -gulp.task('release:push', function(cb) { - git.push('bitpay', 'master', { - args: '' - }, cb); -}); - -gulp.task('release:push-tag', function(cb) { - var pjson = require('./package.json'); - var name = 'v' + pjson.version; - git.tag(name, 'Release ' + name, function() { - git.push('bitpay', name, cb); - }); -}); - -gulp.task('release:publish', shell.task([ - 'npm publish' -])); - -// requires https://hub.github.com/ -gulp.task('release', function(cb) { - runSequence( - // Checkout the `releases` branch - ['release:checkout-releases'], - // Merge the master branch - ['release:merge-master'], - // Run npm install - ['release:install'], - // Build browser bundle - ['browser:compressed'], - // Run tests with gulp test - ['test'], - // Update package.json and bower.json - ['release:bump'], - // Commit - ['release:build-commit'], - // Run git push bitpay $VERSION - ['release:push-tag'], - // Push to releases branch - ['release:push-releases'], - // Run npm publish - ['release:publish'], - // Checkout the `master` branch - ['release:checkout-master'], - // Bump package.json and bower.json, again - ['release:bump'], - // Version commit with no binary files to master - ['release:version-commit'], - // Push to master - ['release:push'], - cb); -}); - - -/* Default task */ -gulp.task('default', function(callback) { - return runSequence(['lint', 'jsdoc'], ['browser:uncompressed', 'test'], ['coverage', 'browser:compressed'], - callback); -}); +gulp_bitcore(); diff --git a/karma.conf.js b/karma.conf.js index acc9eac..dc5d597 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -23,7 +23,7 @@ module.exports = function(config) { }, singleRun: true, files: [ - 'browser/tests.js' + 'tests.js' ], plugins: [ 'karma-mocha', diff --git a/package.json b/package.json index 60baac5..7a451cc 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,7 @@ "lint": "gulp lint", "test": "gulp test", "coverage": "gulp coverage", - "build": "gulp", - "postinstall": "node ./lib/errors/build.js" + "build": "gulp" }, "contributors": [ { @@ -92,6 +91,7 @@ "chai": "~1.10.0", "closure-compiler-jar": "git://github.com/eordano/closure-compiler-jar.git", "gulp": "^3.8.10", + "gulp-bitcore": "git://github.com/maraoz/gulp-bitcore.git", "gulp-bump": "^0.1.11", "gulp-closure-compiler": "^0.2.9", "gulp-coveralls": "^0.1.3",