Last active
September 20, 2015 08:11
-
-
Save rbao/79d4ee8aa11da304ab2c to your computer and use it in GitHub Desktop.
gulpfile: angular-s3-deploy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var argv = require('yargs').argv; | |
var gulp = require('gulp'); | |
var ngConfig = require('gulp-ng-config'); | |
var ngTemplate = require('gulp-angular-templatecache'); | |
var connect = require('gulp-connect'); | |
var wiredep = require('wiredep').stream; | |
var del = require('del'); | |
var filter = require('gulp-filter'); | |
var useref = require('gulp-useref'); | |
var sourcemaps = require('gulp-sourcemaps'); | |
var concat = require('gulp-concat'); | |
var uglify = require('gulp-uglify'); | |
var minifyCss = require('gulp-minify-css'); | |
var minifyHtml = require('gulp-minify-html'); | |
var flatten = require('gulp-flatten'); | |
var RevAll = require('gulp-rev-all'); | |
var mergeStream = require('merge-stream'); | |
var awspublish = require('gulp-awspublish'); | |
////////// | |
var env = argv.e ? argv.e : 'local'; | |
var credentials = require('./credentials.json')[env]; | |
////////// | |
gulp.task('clean', function() { | |
return del(['build', 'dist']); | |
}); | |
gulp.task('ng:config', function() { | |
return gulp.src('app/constants.json') | |
.pipe(ngConfig('dragonstone', { environment: env, createModule: false })) | |
.pipe(gulp.dest('app/core')) | |
}); | |
gulp.task('ng:template:stub', function() { | |
var ngTemplateOptions = { | |
standalone: true, | |
module: 'dragonstone.templates', | |
templateBody: '"Template not cached for local environment";' | |
}; | |
return gulp.src(['app/**/*.html', '!app/bower_components/**/*.html', '!app/index.html']) | |
.pipe(ngTemplate(ngTemplateOptions)) | |
.pipe(gulp.dest('app/core')); | |
}); | |
gulp.task('ng:template', function() { | |
var ngTemplateOptions = { | |
standalone: true, | |
module: 'dragonstone.templates', | |
transformUrl: function(url) { | |
return '/' + url; | |
} | |
}; | |
return gulp.src(['app/**/*.html', '!app/bower_components/**/*.html', '!app/index.html']) | |
.pipe(ngTemplate(ngTemplateOptions)) | |
.pipe(gulp.dest('app/core')); | |
}); | |
gulp.task('wiredep', function() { | |
return gulp.src('app/index.html') | |
.pipe(wiredep()) | |
.pipe(gulp.dest('app')); | |
}); | |
gulp.task('serve', ['wiredep', 'ng:config', 'ng:template:stub'], function() { | |
connect.server({ | |
root: 'app', | |
port: 9000, | |
middleware: function (connect, options) { | |
var optBase = (typeof options.root === 'string') ? [options.root] : options.root; | |
return [require('connect-modrewrite')(['!(\\..+)$ /index.html [L]'])].concat( | |
optBase.map(function(path){ return connect.static(path); })); | |
} | |
}); | |
}); | |
gulp.task('useref', ['wiredep', 'clean'], function() { | |
var assets = useref.assets({ noconcat: true }); | |
return gulp.src('app/index.html') | |
.pipe(useref()) | |
.pipe(gulp.dest('build')); | |
}); | |
gulp.task('build:scripts:vendor', ['clean'], function() { | |
return gulp.src('app/index.html') | |
.pipe(useref.assets({ noconcat: true })) | |
.pipe(filter(['bower_components/**/*.js', 'vendor/**/*.js'])) | |
.pipe(sourcemaps.init()) | |
.pipe(concat('scripts/dragonstone-vendor.js')) | |
.pipe(uglify()) | |
.pipe(sourcemaps.write('.', { addComment: false })) | |
.pipe(gulp.dest('build')); | |
}); | |
gulp.task('build:scripts:app', ['clean', 'ng:config', 'ng:template'], function() { | |
return gulp.src('app/index.html') | |
.pipe(useref.assets({ noconcat: true })) | |
.pipe(filter(['**/*.js', '!bower_components/**/*.js', '!vendor/**/*.js'])) | |
.pipe(sourcemaps.init()) | |
.pipe(concat('scripts/dragonstone-app.js')) | |
.pipe(uglify()) | |
.pipe(sourcemaps.write('.', { addComment: false })) | |
.pipe(gulp.dest('build')); | |
}); | |
gulp.task('build:styles:vendor', ['clean'], function() { | |
return gulp.src('app/index.html') | |
.pipe(useref.assets({ noconcat: true })) | |
.pipe(filter(['bower_components/**/*.css', 'vendor/**/*.css'])) | |
.pipe(sourcemaps.init()) | |
.pipe(concat('styles/dragonstone-vendor.css')) | |
.pipe(minifyCss({ compatibility: 'ie8' })) | |
.pipe(sourcemaps.write('.', { addComment: false })) | |
.pipe(gulp.dest('build')); | |
}); | |
gulp.task('build:styles:app', ['clean'], function() { | |
return gulp.src('app/index.html') | |
.pipe(useref.assets({ noconcat: true })) | |
.pipe(filter(['**/*.css', '!bower_components/**/*.css', '!vendor/**/*.css'])) | |
.pipe(sourcemaps.init()) | |
.pipe(concat('styles/dragonstone-app.css')) | |
.pipe(minifyCss({ compatibility: 'ie8' })) | |
.pipe(sourcemaps.write('.', { addComment: false })) | |
.pipe(gulp.dest('build')); | |
}); | |
gulp.task('build:fonts', ['clean'], function() { | |
return gulp.src(['app/**/*.eot', 'app/**/*.woff', 'app/**/*.woff2', 'app/**/*.ttf', 'app/**/*.svg']) | |
.pipe(flatten()) | |
.pipe(gulp.dest('build/fonts')); | |
}); | |
gulp.task('build:scripts', ['useref', 'build:scripts:vendor', 'build:scripts:app']); | |
gulp.task('build:styles', ['useref', 'build:styles:vendor', 'build:styles:app']); | |
gulp.task('build', ['build:scripts', 'build:styles', 'build:fonts']) | |
gulp.task('dist', ['build'], function() { | |
var revAll = new RevAll({ | |
dontRenameFile: [/^\/favicon.ico$/g, /^\/index.html/g] | |
}); | |
return gulp.src('build/**/*') | |
.pipe(revAll.revision()) | |
.pipe(gulp.dest('dist')); | |
}); | |
////// | |
gulp.task('deploy:assets', function() { | |
if (!argv.e) { | |
console.error('You must provide environment using -e for this task.'); | |
process.exit(1); | |
} | |
// create a new publisher using S3 options | |
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property | |
var publisher = awspublish.create({ | |
params: { | |
Bucket: credentials.awsBucketName | |
}, | |
accessKeyId: credentials.awsAccessKeyId, | |
secretAccessKey: credentials.awsSecretAccessKey | |
}); | |
// define custom headers | |
var headers = { | |
'Cache-Control': 'max-age=0, s-maxage=86400' | |
}; | |
return gulp.src(['dist/**/*', '!dist/index.html']) | |
.pipe(publisher.publish(headers)) | |
.pipe(publisher.sync()) | |
.pipe(awspublish.reporter()); | |
}); | |
gulp.task('deploy', ['deploy:assets'], function() { | |
if (!argv.e) { | |
console.error('You must provide environment using -e for this task.'); | |
process.exit(1); | |
} | |
// create a new publisher using S3 options | |
// http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property | |
var publisher = awspublish.create({ | |
params: { | |
Bucket: credentials.awsBucketName | |
}, | |
accessKeyId: credentials.awsAccessKeyId, | |
secretAccessKey: credentials.awsSecretAccessKey | |
}); | |
var headers = { | |
'Cache-Control': 'max-age=0, s-maxage=0, no-cache, no-store' | |
}; | |
return gulp.src(['dist/index.html']) | |
.pipe(publisher.publish(headers)) | |
.pipe(awspublish.reporter()); | |
}); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment