Ember CLI Deploy plugin to publish build via rsync
JavaScript
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.editorconfig
.ember-cli
.gitignore
.jshintrc
.npmignore
.travis.yml
.watchmanconfig
LICENSE.md
README.md
ember-cli-build.js
index.js
package.json
testem.js

README.md

ember-cli-deploy-rsync-assets

A plugin for ember-cli-deploy, that provides a configurable rsync command which uses the upload pipeline hook to sync assets to a destination that you configure.

It would be a good idea to review the writing-a-plugin and pipeline-hooks pages to learn more about the upload hook.

The node-rsync module is used to execute the rsync command.

See the index.js file in this repo; the main script that provides a function for the createDeployPlugin method of this ember-cli-deploy addon.

Installation

Requires ember-cli-deploy addon to be installed first

ember install ember-cli-deploy-rsync-assets

For production deployment the build plugin is required

ember install ember-cli-deploy-build

Deploy config

Setup your configuration in config/deploy.js (generated when installing ember-cli-deploy)

option type description
destination String The destination include, user@IP if needed
source String The source directory
ssh Boolean Use SSH when syncing
privateKeyPath String Path to your private key, may need with ssh option
excludeIndexHTML Boolean Exclude the index.html file, default is true
flags Array List of rsync flags to add, e.g. ['z'] to add compression
dry Boolean Option for dry run, does not connect when using ssh

The destination option can be a local path or a remote one. When using the ssh option be sure to include the user/domain, e.g. username@remote_host:/path_to_public. Also, if your config uses ssh: true you may need to also set the option for privateKeyPath to the path to your ssh key (/Users/<username>/.ssh/id_rsa).

Below is an example config/deploy.js file setup to sync all the assets; and also includes the the option to sync the index.html file.

Most likely the ember-cli-deploy-rsync-assets plugin will be used together with other deploy plugins, e.g. self-hosting your assets instead of using an S3 bucket.

See the options assigned to ENV['rsync-assets'] in the example config below…

/*jshint node:true*/
/* global module,process */
var VALID_DEPLOY_TARGETS = ['development-postbuild', 'production'];
module.exports = function(deployTarget) {
  if (VALID_DEPLOY_TARGETS.indexOf(deployTarget) === -1) {
    throw new Error('Invalid deployTarget ' + deployTarget);
  }
  var ENV = {};
  if (deployTarget === 'development-postbuild') {
    ENV.plugins = ['rsync-assets'];
    ENV.build = { environment: 'development' };
    ENV['rsync-assets'] = {
      destination: process.env['PUBLIC_DIR'],
      source: 'dist/.',
      excludeIndexHTML: false, // default is `true` to exclude index.html
      ssh: false,
      dry: false
    }
  } else if (deployTarget === 'production') {
    ENV.plugins = 'build rsync-assets'.split(' ');
    ENV.build = { environment: 'production' };
    ENV['rsync-assets'] = {
      destination: process.env['PUBLIC_DIR'],
      source: 'tmp/deploy-dist/.',
      excludeIndexHTML: false, // default is `true` to exclude index.html
      flags: ['z'], // compress, gzip
      ssh: true,
      privateKeyPath: process.env['PRIVATE_KEY_PATH']
    }
  }
  return ENV;
};

The example above uses a deployTarget of development-postbuild which runs after the build. To setup the hook in your ember-cli-build.js file add the emberCLIDeploy option, an example is below:

/*jshint node:true*/
var EmberApp = require('ember-cli/lib/broccoli/ember-app');
module.exports = function(defaults) {
  var app = new EmberApp(defaults, {
    emberCLIDeploy: {
      runOnPostBuild: (env === 'development') ? 'development-postbuild' : false,
      configFile: 'config/deploy.js'
    }
  });
  return app.toTree();
};

When using as a replacement for S3 in the lightning-pack you can add the options for ENV['rsync-assets'] to your config/deploy.js file and also list the plugins to run during deployment.

  if (deployTarget === 'development-postbuild') {
    ENV.plugins = ['redis', 'rsync-assets'];
    // ... redis, rsync-assets settings
  } else if (deployTarget === 'production') {
    ENV.plugins = 'build display-revisions gzip redis manifest revision-data rsync-assets'.split(' ')
    //... redis, ssh-tunnel, rsync-assets settings…
  }

Links

For more information on using ember-cli, visit http://ember-cli.com/.