const gulp = require('gulp');
const utils = require('./packages/tools/gulp/utils');

const tasks = {
	updateIgnoredTypeScriptBuild: require('./packages/tools/gulp/tasks/updateIgnoredTypeScriptBuild'),
	buildCommandIndex: require('./packages/tools/gulp/tasks/buildCommandIndex'),
	completePublishAll: {
		fn: async () => {
			await utils.execCommandVerbose('git', ['add', '-A']);
			await utils.execCommandVerbose('git', ['commit', '-m', 'Releasing sub-packages']);

			// Lerna does some unnecessary auth check that doesn't work with
			// automation tokens, thus the --no-verify-access. Automation token
			// is still used for access when publishing even with this flag
			// (publishing would fail otherwise).
			// https://github.com/lerna/lerna/issues/2788
			await utils.execCommandVerbose('lerna', ['publish', 'from-package', '-y', '--no-verify-access']);

			await utils.execCommandVerbose('yarn', ['install']);
			await utils.execCommandVerbose('git', ['add', '-A']);
			await utils.execCommandVerbose('git', ['commit', '-m', 'Lock file']);

			await utils.execCommandVerbose('git', ['push']);
		},
	},
	build: {
		fn: async () => {
			// Building everything in parallel seems to be unreliable on CI as
			// certain scripts randomly fail with missing files or folder, or
			// cannot delete certain directories (eg. copyPluginAssets or
			// copyApplicationAssets). Because of this, on CI, we run the build
			// sequencially. Locally we run it in parallel, which is much
			// faster, especially when having to rebuild after adding a
			// dependency.
			if (process.env.BUILD_SEQUENCIAL === '1') {
				await utils.execCommandVerbose('yarn', ['run', 'buildSequential']);
			} else {
				await utils.execCommandVerbose('yarn', ['run', 'buildParallel']);
			}
		},
	},
};

utils.registerGulpTasks(gulp, tasks);