# Run task only on gulp --production

**URL:** https://discourse.roots.io/t/run-task-only-on-gulp-production/4726
**Category:** sage
**Tags:** gulp
**Created:** 2015-09-10T15:07:50Z
**Posts:** 15
**Showing post:** 7 of 15

## Post 7 by @Twansparant — 2015-09-16T11:59:41Z

@jakus I finally worked it out!

First create a **.ftppass.json** file in your theme root with your FTP credentials:

```
{
  "host": "ftp.mydomain.com",
  "user": "username",
  "password": "password"
}
```

Then add these 2 globals at he top of your **gulpfile.js** :

```
var vinylftp = require('vinyl-ftp');
var ftppass = require('./.ftppass.json');
```

Then in your **upload** task, check if the `--production` flag is set and if so, run a sequence of tasks:

```
// ### Upload
gulp.task('upload', function(callback) {
  if (argv.production === true) {
    runSequence('rmdirdist', ['ftpupload'], callback);
  }  
});
```

First remove the remote **dist** folder with the **rmdirdist** task:

```
// ### Remove remote dist directory
gulp.task( 'rmdirdist', function (cb) {
  var conn = vinylftp.create( ftppass );
  conn.rmdir( '/public_html/web/app/themes/sage/dist', cb );
});
```

After that, upload only new files (including the freshly created dist directory) with the **ftpupload** task:

```
// ### Upload Vinyl FTP
gulp.task('ftpupload', function (callback) {
  var conn = vinylftp.create({
    host: ftppass.host,
    user: ftppass.user,
    password: ftppass.password,
    log: gutil.log
  });
  var globs = [
    '*',
    '*.php',
    'dist/**',
    'lang/**',
    'templates/*.php',
    'lib/*.php',
    '!*.json',
    '!*.md',
    '!*.xml',
    '!assets',
    '!bower_components',
    '!node_modules',
  ];
  // using base = '.' will transfer everything to /public_html correctly
  // turn off buffering in gulp.src for best performance
  return gulp.src( globs, { base: '.', buffer: false } )
    .pipe( conn.newer( '/public_html/web/app/themes/sage' ) ) // only upload newer files
    .pipe( conn.dest( '/public_html/web/app/themes/sage' ) );
});
```

Finally, add the **upload** task to the **build** sequence task:

```
// ### Build
gulp.task('build', function(callback) {
  runSequence('styles',
              'scripts',
              ['fonts', 'images', 'svg'],
              'upload',
              callback);
});
```

This should work now!  
Happy :smile:

---

_[View the full topic](https://discourse.roots.io/t/run-task-only-on-gulp-production/4726)._
