docs: function (pluginName, env, path) {
      var self = this;
      var context = {
        status: this.status.bind(this),
        out: this.out.bind(this),
  
        comment: function (text) {
          self.comment(text, pluginName);
        },
  
        cmd: function (cmd, next) {
          if (typeof(cmd) === 'string' || cmd.command) {
            cmd = {cmd: cmd};
          }
  
          cmd.env = _.extend({}, env, {
            PATH: getPath(path),
            HOME: process.env.HOME || (process.env.HOMEDRIVE + process.env.HOMEPATH),
            LANG: process.env.LANG,
            SSH_AUTH_SOCK: process.env.SSH_AUTH_SOCK,
            PAAS_NAME: 'strider'
          }, cmd.env || {});
  
          return self.cmd(cmd, pluginName, next);
        },
  
        // update pluginData
        data: function (data, method, path) {
          self.status('plugin-data', {
            plugin: pluginName,
            data: data,
            method: method,
            path: path
          });
        },
  
        dataDir: this.config.dataDir,
        baseDir: this.config.baseDir,
        cacheDir: this.config.cacheDir,
        cachier: this.config.cachier(pluginName),
        io: this.io,
  
        plugin: pluginName,
        phase: this.phase,
        job: this.job,
        branch: this.job.ref.branch,
        project: this.project,
  
        runnerId: (
          this.config.branchConfig
          && this.config.branchConfig.runner
          && this.config.branchConfig.runner.id || 'unkown'
        )
      };
  
      return context;
    }