mirror of
https://github.com/openstf/stf
synced 2025-10-03 17:59:28 +02:00
268 lines
6.6 KiB
JavaScript
268 lines
6.6 KiB
JavaScript
var path = require('path')
|
|
|
|
var gulp = require('gulp')
|
|
var gutil = require('gulp-util')
|
|
var jshint = require('gulp-jshint')
|
|
var jsonlint = require('gulp-jsonlint')
|
|
var eslint = require('gulp-eslint')
|
|
var standard = require('gulp-standard')
|
|
var webpack = require('webpack')
|
|
var webpackConfig = require('./webpack.config').webpack
|
|
var webpackStatusConfig = require('./res/common/status/webpack.config')
|
|
var gettext = require('gulp-angular-gettext')
|
|
var jade = require('gulp-jade')
|
|
var del = require('del')
|
|
//var protractor = require('gulp-protractor')
|
|
var protractor = require('./res/test/e2e/helpers/gulp-protractor-adv')
|
|
var protractorConfig = './res/test/protractor.conf'
|
|
var karma = require('karma').server
|
|
var karmaConfig = '/res/test/karma.conf.js'
|
|
var stream = require('stream')
|
|
var jscs = require('gulp-jscs')
|
|
var run = require('gulp-run')
|
|
|
|
gulp.task('jshint', function () {
|
|
return gulp.src([
|
|
'lib/**/*.js'
|
|
, 'res/app/**/*.js'
|
|
, 'res/auth-ldap/**/*.js'
|
|
, 'res/auth-mock/**/*.js'
|
|
, 'res/common/**/*.js'
|
|
, 'res/test/**/*.js'
|
|
, '*.js'
|
|
])
|
|
.pipe(jshint())
|
|
.pipe(jshint.reporter('jshint-stylish'))
|
|
})
|
|
|
|
gulp.task('jsonlint', function () {
|
|
return gulp.src([
|
|
'.jshintrc'
|
|
, 'res/.jshintrc'
|
|
, '.bowerrc'
|
|
, '.yo-rc.json'
|
|
, '*.json'
|
|
])
|
|
.pipe(jsonlint())
|
|
.pipe(jsonlint.reporter())
|
|
})
|
|
|
|
gulp.task('eslint', function () {
|
|
return gulp.src([
|
|
'lib/**/*.js'
|
|
, 'res/app/**/*.js'
|
|
, 'res/auth-ldap/**/*.js'
|
|
, 'res/auth-mock/**/*.js'
|
|
, 'res/common/**/*.js'
|
|
, 'res/test/**/*.js'
|
|
, '*.js'
|
|
, '!node_modules/**'
|
|
])
|
|
// eslint() attaches the lint output to the "eslint" property
|
|
// of the file object so it can be used by other modules.
|
|
.pipe(eslint())
|
|
// eslint.format() outputs the lint results to the console.
|
|
// Alternatively use eslint.formatEach() (see Docs).
|
|
.pipe(eslint.format())
|
|
// To have the process exit with an error code (1) on
|
|
// lint error, return the stream and pipe to failAfterError last.
|
|
.pipe(eslint.failAfterError());
|
|
});
|
|
|
|
gulp.task('jscs', function () {
|
|
return gulp.src([
|
|
'lib/**/*.js'
|
|
, 'res/app/**/*.js'
|
|
, 'res/auth-ldap/**/*.js'
|
|
, 'res/auth-mock/**/*.js'
|
|
, 'res/common/**/*.js'
|
|
, 'res/test/**/*.js'
|
|
, '*.js'
|
|
])
|
|
.pipe(jscs())
|
|
})
|
|
|
|
gulp.task('standard', function () {
|
|
// Check res/app for now
|
|
return gulp.src(['res/app/**/*.js', '!**/*-spec.js'])
|
|
.pipe(standard())
|
|
.pipe(standard.reporter('default', {
|
|
breakOnError: true
|
|
}))
|
|
})
|
|
|
|
gulp.task('lint', ['jshint', 'jsonlint'])
|
|
gulp.task('test', ['lint', 'run:checkversion'])
|
|
gulp.task('build', ['clean', 'webpack:build'])
|
|
|
|
gulp.task('run:checkversion', function () {
|
|
gutil.log('Checking STF version...')
|
|
return run('./bin/stf -V').exec()
|
|
})
|
|
|
|
gulp.task('karma_ci', function (done) {
|
|
karma.start({
|
|
configFile: path.join(__dirname, karmaConfig)
|
|
, singleRun: true
|
|
}, done)
|
|
})
|
|
|
|
gulp.task('karma', function (done) {
|
|
karma.start({
|
|
configFile: path.join(__dirname, karmaConfig)
|
|
}, done)
|
|
})
|
|
|
|
if (gutil.env.multi) {
|
|
protractorConfig = './res/test/protractor-multi.conf'
|
|
} else if (gutil.env.appium) {
|
|
protractorConfig = './res/test/protractor-appium.conf'
|
|
}
|
|
|
|
gulp.task('webdriver-update', protractor.webdriverUpdate)
|
|
gulp.task('webdriver-standalone', protractor.webdriverStandalone)
|
|
gulp.task('protractor-explorer', function (callback) {
|
|
protractor.protractorExplorer({
|
|
url: require(protractorConfig).config.baseUrl
|
|
}, callback)
|
|
})
|
|
|
|
gulp.task('protractor', ['webdriver-update'], function (callback) {
|
|
gulp.src(['./res/test/e2e/**/*.js'])
|
|
.pipe(protractor.protractor({
|
|
configFile: protractorConfig
|
|
, debug: gutil.env.debug
|
|
, suite: gutil.env.suite
|
|
}))
|
|
.on('error', function (e) {
|
|
console.log(e)
|
|
})
|
|
.on('end', callback)
|
|
})
|
|
|
|
// For piping strings
|
|
function fromString(filename, string) {
|
|
/* eslint no-underscore-dangle: 0 */
|
|
var src = new stream.Readable({objectMode: true})
|
|
src._read = function () {
|
|
this.push(new gutil.File({
|
|
cwd: ''
|
|
, base: ''
|
|
, path: filename
|
|
, contents: new Buffer(string)
|
|
}))
|
|
this.push(null)
|
|
}
|
|
return src
|
|
}
|
|
|
|
|
|
// For production
|
|
gulp.task('webpack:build', function (callback) {
|
|
var myConfig = Object.create(webpackConfig)
|
|
myConfig.plugins = myConfig.plugins.concat(
|
|
new webpack.DefinePlugin({
|
|
'process.env': {
|
|
'NODE_ENV': JSON.stringify('production')
|
|
}
|
|
})
|
|
)
|
|
myConfig.devtool = false
|
|
|
|
webpack(myConfig, function (err, stats) {
|
|
if (err) {
|
|
throw new gutil.PluginError('webpack:build', err)
|
|
}
|
|
|
|
gutil.log('[webpack:build]', stats.toString({
|
|
colors: true
|
|
}))
|
|
|
|
// Save stats to a json file
|
|
// Can be analyzed in http://webpack.github.io/analyse/
|
|
fromString('stats.json', JSON.stringify(stats.toJson()))
|
|
.pipe(gulp.dest('./tmp/'))
|
|
|
|
callback()
|
|
})
|
|
})
|
|
|
|
gulp.task('webpack:others', function (callback) {
|
|
var myConfig = Object.create(webpackStatusConfig)
|
|
myConfig.plugins = myConfig.plugins.concat(
|
|
new webpack.DefinePlugin({
|
|
'process.env': {
|
|
'NODE_ENV': JSON.stringify('production')
|
|
}
|
|
})
|
|
)
|
|
myConfig.devtool = false
|
|
|
|
webpack(myConfig, function (err, stats) {
|
|
if (err) {
|
|
throw new gutil.PluginError('webpack:others', err)
|
|
}
|
|
|
|
gutil.log('[webpack:others]', stats.toString({
|
|
colors: true
|
|
}))
|
|
callback()
|
|
})
|
|
})
|
|
|
|
gulp.task('translate', [
|
|
'translate:extract'
|
|
, 'translate:push'
|
|
, 'translate:pull'
|
|
, 'translate:compile'
|
|
])
|
|
|
|
gulp.task('jade', function () {
|
|
return gulp.src([
|
|
'./res/**/*.jade'
|
|
, '!./res/bower_components/**'
|
|
])
|
|
.pipe(jade({
|
|
locals: {
|
|
// So res/views/docs.jade doesn't complain
|
|
markdownFile: {
|
|
parseContent: function () {
|
|
}
|
|
}
|
|
}
|
|
}))
|
|
.pipe(gulp.dest('./tmp/html/'))
|
|
})
|
|
|
|
gulp.task('translate:extract', ['jade'], function () {
|
|
return gulp.src([
|
|
'./tmp/html/**/*.html'
|
|
, './res/**/*.js'
|
|
, '!./res/bower_components/**'
|
|
, '!./res/build/**'
|
|
])
|
|
.pipe(gettext.extract('stf.pot'))
|
|
.pipe(gulp.dest('./res/common/lang/po/'))
|
|
})
|
|
|
|
gulp.task('translate:compile', function () {
|
|
return gulp.src('./res/common/lang/po/**/*.po')
|
|
.pipe(gettext.compile({
|
|
format: 'json'
|
|
}))
|
|
.pipe(gulp.dest('./res/common/lang/translations/'))
|
|
})
|
|
|
|
gulp.task('translate:push', function () {
|
|
gutil.log('Pushing translation source to Transifex...')
|
|
return run('tx push -s').exec()
|
|
})
|
|
|
|
gulp.task('translate:pull', function () {
|
|
gutil.log('Pulling translations from Transifex...')
|
|
return run('tx pull').exec()
|
|
})
|
|
|
|
gulp.task('clean', function (cb) {
|
|
del(['./tmp', './res/build'], cb)
|
|
})
|