#!/usr/bin/env node

if (!process.argv[2] || ['help', '-h', '--help'].includes(process.argv[2])) {
	console.log(`
Sync changes in the javascript code to a running supervisor on a device  in the local network

Usage:
  ./sync.js <device IP>

The script will first build a non-optimized version of the js code and sync the resulting app.js
onto the supervisor container at the specified IP. It will also restart the supervisor container.
The device must be a development variant of balenaOS and the supervisor must be running.
	`);
	process.exit(1);
}

const childProcess = require('child_process');

const webpack = require('webpack');
const webpackConfig = require('./webpack.config');
const compiler = webpack(webpackConfig({ noOptimize: true }));

const doSync = require('balena-sync').sync('local-balena-os-device').sync;

const syncOpts = {
	deviceIp: process.argv[2],
	baseDir: __dirname + '/dist',
	destination: '/usr/src/app/dist',
	appName: 'balena_supervisor',
	skipGitignore: true,
};

childProcess.execSync('npm install', { stdio: 'inherit' });

compiler.watch(
	{
		ignored: /node_modules/,
	},
	(err, stats) => {
		if (err) {
			console.error(err);
			return;
		}
		console.log(stats.toString({ colors: true }));
		if (stats.hasErrors()) {
			console.error('Skipping sync due to errors');
			return;
		}
		doSync(syncOpts);
	},
);
