Skip to content

Instantly share code, notes, and snippets.

@rbao
Last active September 20, 2015 08:11
Show Gist options
  • Save rbao/79d4ee8aa11da304ab2c to your computer and use it in GitHub Desktop.
Save rbao/79d4ee8aa11da304ab2c to your computer and use it in GitHub Desktop.
gulpfile: angular-s3-deploy
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