Created
December 8, 2015 17:31
-
-
Save dkarchmer/bfe9c49b28315f537cfb to your computer and use it in GitHub Desktop.
Example of a Gulp file for processing a Django base template and releasing statics to cloudfront
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
/* Assumes the following directory structure: | |
* ./images # With original images | |
* ./base # With the index.html, css, js to be used to create a base template | |
* # This directory containts its own gulpfile (maybe coming from a yeoman or similar) | |
* ./server # Actual Django project, with a templates subdirectory | |
*/ | |
var gulp = require('gulp'); | |
var chug = require( 'gulp-chug' ); | |
var awspublish = require('gulp-awspublish'); | |
var cloudfront = require("gulp-cloudfront"); | |
var del = require('del'); | |
var responsive = require('gulp-responsive'); | |
var replace = require('gulp-replace'); | |
var rename = require('gulp-rename'); | |
var es = require('event-stream'); | |
var debug = require('gulp-debug'); | |
gulp.paths = { | |
src: { | |
base: './DjangoBase', | |
images: './images' | |
}, | |
dist: 'dist', | |
templates: 'server/templates/dist' | |
}; | |
var aws = { | |
params: { | |
Bucket: "myBucket", | |
Region: "us-east-1" | |
}, | |
"distributionId": "myCloudFrontDistributionID" | |
}; | |
var genStream = function(app) { | |
return gulp.src(gulp.paths.dist + '/' + app + '/index.html') | |
.pipe(replace(/href="([^h/]\S*)"/g, 'href="{% static \'dist/' + app + '/$1\' %}"')) | |
.pipe(replace(/src="([^h/]\S*)"/g, 'src="{% static \'dist/' + app + '/$1\' %}"')) | |
.pipe(gulp.dest(gulp.paths.templates + '/' + app)); | |
}; | |
var publisher = awspublish.create(aws); | |
// One week = 604,800 | |
var headers = {'Cache-Control': 'max-age=604800, no-transform, public'}; | |
var index_header = {'Cache-Control': 'public, must-revalidate, proxy-revalidate, max-age=0'}; | |
gulp.task('clean', function(cb) { | |
return del([gulp.paths.dist + '/*'], cb) | |
}); | |
gulp.task('images', [], function () { | |
var images = [{ | |
// Logo with name (Horizontal) | |
name: 'logo-horizontal.png', | |
width: 200 | |
},{ | |
// Fine Uploader image | |
name: 'waiting-generic.png', | |
width: 100, | |
rename: 'fineuploader/waiting-generic.png' | |
}]; | |
var options = { | |
errorOnUnusedImage: false | |
}; | |
return gulp.src([gulp.paths.images + '/**.png',gulp.paths.images + '/**.jpg']) | |
.pipe(responsive(images, options)) | |
.pipe(gulp.dest(gulp.paths.dist + '/images')); | |
}); | |
gulp.task( 'base', ['images'], function () { | |
return gulp.src( gulp.paths.src.base +'/gulpfile.js', { read: false } ) | |
.pipe( chug({ | |
tasks: [ 'build' ] | |
}) ) | |
}); | |
// Use 'gulp build_local_base' for local debugging | |
gulp.task( 'build_local_base', ['images', 'base'], function () { | |
return genStream('base'); | |
}); | |
gulp.task('deploy', ['build_local_base'], function () { | |
return gulp.src([gulp.paths.dist + '/**', '!'+ gulp.paths.dist + '/**/index.html']) | |
.pipe(rename(function (path) { | |
path.dirname = 'static/dist/' + path.dirname; | |
})) | |
.pipe(awspublish.gzip()) | |
.pipe(publisher.publish(headers)) | |
.pipe(publisher.cache()) | |
.pipe(awspublish.reporter()) | |
.pipe(cloudfront(aws)); | |
}); | |
gulp.task('default', ['deploy']); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment