daily pastebin goal
84%
SHARE
TWEET

Untitled

a guest Jun 19th, 2017 55 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const spawn = require('child_process').spawn;
  2. const meta = require('../package');
  3.  
  4. // 作業ディレクトリをパッケージのあるディレクトリにする。
  5. process.chdir(__dirname);
  6. process.chdir('..');
  7.  
  8. Promise.resolve()
  9.   // Docker Machineがインストールされているか確認する。
  10.   .then(() => (new Promise((resolve, reject) => {
  11.     console.log('Check Docker Machine.')
  12.     const machine = spawn('docker-machine', ['version']);
  13.     machine.on('error', reject);
  14.     machine.on('exit', () => {
  15.       console.log('Docker Machine found.');
  16.       return resolve();
  17.     });
  18.   })))
  19.   // Docker Machineがインストールされている場合、Docker Machineを起動する。
  20.   .then(() => (new Promise((resolve, reject) => {
  21.     console.log('\nStart Docker Machine.');
  22.     const machine = spawn('docker-machine', ['start'], {
  23.       stdio: [null, process.stdout, process.stderr],
  24.     });
  25.     machine.on('error', reject);
  26.     machine.on('exit', () => {
  27.       return resolve();
  28.     });
  29.   })))
  30.   // Dockerコマンドへ渡すための、Docker Machineの設定を取得する。
  31.   .then(() => (new Promise((resolve, reject) => {
  32.     console.log('\nGet configuration of Docker Machine.');
  33.     const machine = spawn('docker-machine', ['config'], {
  34.       stdio: [null, null, process.stderr],
  35.     });
  36.     let out = '';
  37.     machine.stdout.on('data', (data) => { out += data; });
  38.     machine.on('error', reject);
  39.     machine.on('exit', (code) => {
  40.       if (code !== 0) {
  41.         return reject(new Error('Doccker Machine failed.'));
  42.       }
  43.       const config = out.split('\n').filter((item) => (item !== ''));
  44.       return resolve(config);
  45.     });
  46.   })))
  47.   // Docker Machineが見つからない場合のエラーを無視する。
  48.   .catch((err) => {
  49.     if (err.code === 'ENOENT') {
  50.       return [];
  51.     }
  52.     throw err;
  53.   })
  54.   // 取得した設定を用いて、Dockerイメージをビルドする。
  55.   .then((config) => (new Promise((resolve, reject) => {
  56.     console.log('\nBuild Docker Image.');
  57.     const machine = spawn('docker', [...config, 'build', '-t', `${meta.name}:${meta.version}`, '.'], {
  58.       stdio: [null, process.stdout, process.stderr],
  59.     });
  60.     machine.on('error', reject);
  61.     machine.on('exit', (code) => {
  62.       if (code !== 0) {
  63.         return reject(new Error('Docker failed.'));
  64.       }
  65.       return resolve(config);
  66.     });
  67.   })))
  68.   .then(() => {
  69.     console.log('\nBuild succeeded.\n')
  70.     process.exit(0);
  71.   })
  72.   .catch((err) => {
  73.     console.error(`\nBuild failed. Error: ${err}\n`);
  74.     process.exit(1);
  75.   });
RAW Paste Data
Top