-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
119 lines (100 loc) · 3.91 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
112
113
114
115
116
117
118
119
let gulp = require( 'gulp' ),
markdown = require( 'gulp-markdown' ),
concat = require( 'gulp-concat' ),
wrap = require( 'gulp-wrap' ),
debug = require( 'gulp-debug' ),
del = require( 'del' ),
opn = require( 'opn' ),
fs = require( 'fs' ),
minimist = require( 'minimist' );
let exercises = 'exercises/',
begin = '/begin/',
solution = '/solution/',
src = 'src/',
publicFolder = 'public/',
instructions = '-instructions.md',
instructionsOut = `instructions-${Date.now()}.html`,
images = 'images/',
imageFiles = '**/*.+(png|jpg|gif)',
files = '**/*.+(js|ts|tsx|html)',
notData = '!' + src + 'data/**/*',
allFiles = '**/*';
let options = minimist( process.argv.slice( 2 ), { string: [ 'src' ] } );
// TODO: Write a backup-files target/task
gulp.task( 'start-exercise', [ 'clean-all' ], function() {
if ( options.src ) {
const baseDir = exercises + options.src + begin;
gulp.src( baseDir + src + files )
.pipe( gulp.dest( src ) );
gulp.src( baseDir + publicFolder + files )
.pipe( gulp.dest( publicFolder ) );
gulp.src( baseDir + images + imageFiles )
.pipe( gulp.dest( publicFolder + images ) );
if ( fs.existsSync( baseDir + options.src + instructions ) ) {
console.log( 'Building instructions....', baseDir + options.src + instructions );
gulp.src( baseDir + options.src + instructions )
.pipe( markdown() )
.pipe( wrap( { src: exercises + 'instructions-template.html' } ) )
.pipe( concat( instructionsOut ) )
.pipe( gulp.dest( publicFolder ) );
gulp.src( exercises + 'instructions.css' )
.pipe( gulp.dest( publicFolder ) );
opn( 'http://localhost:3000/' + instructionsOut );
// opn seems to hang up gulp, this exits after a (relatively safe?) 2 seconds
setTimeout( () => {
process.exit( 0 );
}, 2000 );
} else {
console.warn( 'No instructions found at ' + baseDir + options.src + instructions );
}
}
} );
gulp.task( 'show-solution', [ 'clean-all' ], function() {
if ( options.src ) {
gulp.src( exercises + options.src + solution + src + files )
.pipe( gulp.dest( src ) );
gulp.src( exercises + options.src + solution + publicFolder + files )
.pipe( gulp.dest( publicFolder ) );
}
} );
gulp.task( 'copy-to-begin', [ 'clean-begin' ], () => {
if ( options.dest ) {
gulp.src( [ src + files, notData ] )
.pipe( gulp.dest( exercises + options.dest + begin + src ) );
gulp.src( publicFolder + files )
.pipe( gulp.dest( exercises + options.dest + begin + publicFolder ) );
}
} );
gulp.task( 'copy-to-solution', [ 'clean-solution' ], () => {
if ( options.dest ) {
// TODO: Make sure that the data folder is not included
gulp.src( [ src + files, notData ] )
.pipe( gulp.dest( exercises + options.dest + solution + src ) );
gulp.src( publicFolder + files )
.pipe( gulp.dest( exercises + options.dest + solution + publicFolder ) );
}
} );
gulp.task( 'clean-solution', () => {
return del( [ exercises + options.dest + solution + src,
exercises + options.dest + solution + publicFolder
] );
} );
gulp.task( 'clean-begin', () => {
return del( [ exercises + options.dest + begin + src,
exercises + options.dest + begin + publicFolder
] );
} );
gulp.task( 'clean-src', () => {
return del( [ src + files, notData ] );
} );
gulp.task( 'clean-public', () => {
return del( publicFolder + files, { ignore: 'favicon.ico' } );
} );
gulp.task( 'clean-all', [ 'clean-src', 'clean-public' ] );
gulp.task( 'swap', function() {
if ( options.src && options.dest && options.ex ) {
let base = `${exercises}${options.ex}/`;
gulp.src( base + options.src + '/**/*', { base: base + options.src } )
.pipe( gulp.dest( base + options.dest ) );
}
} );