Skip to content

Instantly share code, notes, and snippets.

@gsbelarus
Last active March 31, 2018 18:35
Show Gist options
  • Save gsbelarus/dd7dbeacfbab359496fb96551dc50b89 to your computer and use it in GitHub Desktop.
Save gsbelarus/dd7dbeacfbab359496fb96551dc50b89 to your computer and use it in GitHub Desktop.
Pull all git repositiories according to specified directories list
const execFile = require('child_process').execFile;
const tscDirs = [
'/golden/ns/lib/gdmn-db',
'/golden/ns/lib/gdmn-orm',
];
const dirs = [
'/golden/gedemin',
'/golden/gedemin-public',
'/golden/gedemin-apps',
'/golden/gedemin-doc',
'/golden/gedemin-prolog',
'/golden/ns/lib/gdmn-db',
'/golden/ns/lib/gdmn-orm',
'/golden/ns/lib/node-firebird',
'/golden/ns/lib/jison',
'/golden/ns/lib/graphql-sql-bridge',
'/golden/ns/ng-front',
'/golden/ns/gdmn-back',
'/golden/ns/other/golden-tetris-5',
'/golden/ns/other/gdmnNLPsrv',
'/golden/gdmn3m/gdmnTAMobile',
'/golden/gdmn3m/gdmnTAsrv',
'/golden/gdmn3m/gdmnTAweb',
'/golden/gdmn3m/GedeminSalary',
'/golden/gdmn3m/GedeminIncome',
'/golden/gdmn3m/gdmnDCTmobile',
'/golden/gdmn3m/gdmnDTCsrv',
'/golden/gdmn3m/react-native-android-scanner',
'/golden/gdmn3m/GdmnCleaner',
'/golden/gdmn3m/GdmnSkeleton',
'/golden/gdmn3m/fridge',
'/golden/WebSite',
'/golden/check-and-cash',
];
const updateDirs = [
['/golden/ns/lib/gdmn-orm', 'gdmn-db'],
['/golden/ns/gdmn-back', 'gdmn-db'],
['/golden/ns/gdmn-back', 'gdmn-orm'],
];
let processedDirs = 0;
console.log(`Pulling ${dirs.length} repositories...`);
Promise.all(dirs.map( d => {
return new Promise( resolve => {
execFile('git', ['-C', d, 'pull', '--recurse-submodules'], (error, stdout, stderr) =>
{
if (error) {
console.log(d);
console.error(stderr);
} else {
processedDirs++;
if (stdout !== 'Already up to date.\n') {
console.log(d);
console.log(stdout);
}
}
resolve();
});
});
}))
.then(
() => {
dirs.sort( (a, b) =>
a.toLowerCase() < b.toLowerCase() ? -1 : (a.toLowerCase() === b.toLowerCase() ? 0 : 1) );
dirs.forEach( d => console.log(d) );
console.log('Processed ' + processedDirs + ' of ' + dirs.length + ' repositories.');
}
)
.then(
() => {
console.log(`\nUpdating ${updateDirs.length} projects with npm...`);
return updateDirs.reduce(
(p: Promise<any>, d) => {
return p.then(
() => {
return new Promise( resolve => {
process.chdir(d[0]);
console.log(process.cwd());
execFile('npm.cmd', ['update', d[1]], (error, stdout, stderr) =>
{
if (error) {
console.log(error);
}
resolve();
});
});
}
);
},
Promise.resolve()
);
}
)
.then(
() => {
console.log(`\nCompiling ${tscDirs.length} projects with tsc...`);
return tscDirs.reduce(
(p: Promise<any>, d) => {
return p.then(
() => {
return new Promise( resolve => {
process.chdir(d);
console.log(process.cwd());
execFile('tsc.cmd', [], (error, stdout, stderr) =>
{
if (error) {
console.log(error);
}
resolve();
});
});
}
);
},
Promise.resolve()
);
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment