forked from bkonkle/reactifier
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
111 lines (90 loc) · 2.56 KB
/
gulpfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import {uploadToS3} from './src/s3-utils'
import AWS from 'aws-sdk'
import babel from 'gulp-babel'
import {exec} from 'child_process'
import dotenv from 'dotenv'
import fs from 'fs'
import gulp from 'gulp'
import gutil from 'gulp-util'
import install from 'gulp-install'
import pkg from './package'
import reactifier from './src/reactifier'
import rename from 'gulp-rename'
import runSequence from 'run-sequence'
import sass from 'gulp-sass'
import zip from 'gulp-zip'
const LAMBDA_FUNCTION = 'reactifier'
dotenv.load()
gulp.task('default', ['build', 'run'])
gulp.task('build', done => {
runSequence(
'build:clean',
[
'build:js',
'build:media',
'build:sass',
'build:deps',
'build:copy',
],
'build:zip',
done)
})
gulp.task('deploy', done => {
runSequence('build', 'deploy:upload', done)
})
gulp.task('run', ['build:js'], () => {
// The reactifier function returns a promise, which we can pass to gulp
return reactifier()
})
gulp.task('build:clean', done => {
exec(`rm -rf ${__dirname + '/dist'}`, done)
})
gulp.task('build:js', () => {
// Transpile es6 to the dist directory
return gulp.src(['src/**/*.js?(x)', 'lambda.js'], {base: '.'})
.pipe(babel())
.pipe(gulp.dest('dist'))
})
gulp.task('build:media', () => {
return gulp.src(['media/**/*.*', '!media/sass/*'])
// Upload the files to S3
.pipe(uploadToS3())
})
gulp.task('build:sass', () => {
return gulp.src('media/sass/**/*.scss', {base: '.'})
// First compile the sass
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
// Rename the file to change the directory to 'css'
.pipe(rename(path => {
path.dirname = path.dirname.replace('/sass', '/css')
}))
// Then upload the files to S3
.pipe(uploadToS3())
})
gulp.task('build:deps', () => {
return gulp.src('package.json')
.pipe(gulp.dest('dist'))
.pipe(install({production: true}))
})
gulp.task('build:copy', () => {
return gulp.src(['.env', 'subscriptions.json'])
.pipe(gulp.dest('dist'))
})
gulp.task('build:zip', () => {
return gulp.src(['dist/**/*', 'dist/.*'])
.pipe(zip(`reactifier.${pkg.version}.zip`))
.pipe(gulp.dest('build'))
})
gulp.task('deploy:upload', done => {
AWS.config.region = 'us-east-1'
const lambda = new AWS.Lambda()
fs.readFile(`./build/reactifier.${pkg.version}.zip`, (readError, zipFile) => {
if (readError) {
throw new gutil.PluginError('Error reading package zip', readError)
}
lambda.updateFunctionCode({
FunctionName: LAMBDA_FUNCTION,
ZipFile: zipFile,
}, done)
})
})