72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { logger } from '../npmci.logging';
 | |
| import * as plugins from './mod.plugins';
 | |
| import { bash, bashNoError } from '../npmci.bash';
 | |
| import { Npmci } from '../npmci.classes.npmci';
 | |
| 
 | |
| export class NpmciGitManager {
 | |
|   public npmciRef: Npmci;
 | |
| 
 | |
|   constructor(npmciRefArg: Npmci) {
 | |
|     this.npmciRef = npmciRefArg;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * handle cli input
 | |
|    * @param argvArg
 | |
|    */
 | |
|   public handleCli = async argvArg => {
 | |
|     if (argvArg._.length >= 2) {
 | |
|       const action: string = argvArg._[1];
 | |
|       switch (action) {
 | |
|         case 'mirror':
 | |
|           await this.mirror();
 | |
|           break;
 | |
|         default:
 | |
|           logger.log('error', `npmci git -> action >>${action}<< not supported!`);
 | |
|       }
 | |
|     } else {
 | |
|       logger.log('info', `npmci git -> cli arguments invalid! Please read the documentation.`);
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   public mirror = async () => {
 | |
|     const githubToken = process.env.NPMCI_GIT_GITHUBTOKEN;
 | |
|     const githubUser = process.env.NPMCI_GIT_GITHUBGROUP || this.npmciRef.npmciEnv.repo.user;
 | |
|     const githubRepo = process.env.NPMCI_GIT_GITHUB || this.npmciRef.npmciEnv.repo.repo;
 | |
|     if (
 | |
|       this.npmciRef.npmciConfig.getConfig().projectInfo.npm.packageJson.private === true ||
 | |
|       this.npmciRef.npmciConfig.getConfig().npmAccessLevel === 'private'
 | |
|     ) {
 | |
|       logger.log(
 | |
|         'warn',
 | |
|         `refusing to mirror due to private property use a private mirror location instead`
 | |
|       );
 | |
|       return;
 | |
|     }
 | |
|     if (githubToken) {
 | |
|       logger.log('info', 'found github token.');
 | |
|       logger.log('info', 'attempting the mirror the repository to GitHub');
 | |
| 
 | |
|       // remove old mirrors
 | |
|       await bashNoError('git remote rm mirror');
 | |
| 
 | |
|       await bash(`git fetch`);
 | |
|       // add the mirror
 | |
|       await bashNoError(
 | |
|         `git remote add mirror https://${githubToken}@github.com/${githubUser}/${githubRepo}.git`
 | |
|       );
 | |
|       await bashNoError(`git push mirror --all`);
 | |
|       await bashNoError(`git checkout origin/master`);
 | |
|       await bashNoError(`git push mirror master`);
 | |
|       logger.log('ok', 'pushed all branches to mirror!');
 | |
|       await bashNoError(`git push mirror --tags`);
 | |
|       logger.log('ok', 'pushed all tags to mirror!');
 | |
|       // remove old mirrors
 | |
|       await bashNoError('git remote rm mirror');
 | |
|     } else {
 | |
|       logger.log('error', `cannot find NPMCI_GIT_GITHUBTOKEN env var!`);
 | |
|       process.exit(1);
 | |
|     }
 | |
|   };
 | |
| }
 |