一人もくもく会用のデプロイプログラムを作る その3

2017-02-12 00:18 to 2017-02-12 01:18

概要

一人もくもく会用のデプロイプログラムを作る その2

の続き。

目標

そろそろ完成させたい。

経過

2017-02-12 01:25

完成した。

npm run deploy

でデプロイが完了する。

処理は下記のような感じ。 (定義の書かれていない関数は大体Promiseを返すもの)

ファイルをひとつずつアップしないといけないので思っていたより面倒だった。

connect().then((conn) => {
  exec(conn, 'rm -rf www/mokumoku_prepare')
  .then((result) => {
    console.log('Client :: Deleted prepare folder');
  })
  .then(() => {
    return new Promise(resolve => {
      walk(__dirname + '/dist', (err, files) => {
        if (err) end(conn, err);
        resolve(files);
      });
    })
  })
  .then((files) => {
    let sent = 0;
    const localBase = __dirname + '/dist/';
    return new Promise(resolve => {
      conn.sftp((err, sftp) => {
        if (err) end(conn, err);
        let promise = Promise.resolve();

        files.forEach(file => {
          const remotePath = file.replace(localBase, 'www/mokumoku_prepare/');

          promise = promise.then(() => new Promise(resolve3 => {
            let parts = remotePath.split('/');
            parts.pop();
            const folder = parts.join('/');
            exec(conn, 'mkdir -p ' + folder).then((result) => {
                resolve3();
            });
          }));

          promise = promise.then(() => new Promise(resolve2 => {
            console.log(file + ' > ' + remotePath);
            sftp.fastPut(file, remotePath, {}, (err) => {
              if (err) end(conn, err);
              resolve2();
            });
          }));

        });
        return promise.then(() => {
          resolve();
        });
      });
    });
  })
  .then(() => {
    return exec(conn, 'mv www/mokumoku_front www/mokumoku_front_bak');
  })
  .then((result) => {
    return exec(conn, 'mv www/mokumoku_prepare www/mokumoku_front');
  })
  .then((result) => {
    return exec(conn, 'mv www/mokumoku_front_bak www/mokumoku_prepare');
  })
  .then((result) => {
    console.log('Finished');
    end(conn);
  });
});

コメント