Add prepublish_checks
This commit is contained in:
		
				
					committed by
					
						 Fabio Berger
						Fabio Berger
					
				
			
			
				
	
			
			
			
						parent
						
							8a0d563a32
						
					
				
				
					commit
					3da67feeb2
				
			
							
								
								
									
										71
									
								
								packages/monorepo-scripts/src/prepublish_checks.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								packages/monorepo-scripts/src/prepublish_checks.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| import * as _ from 'lodash'; | ||||
| import { exec as execAsync } from 'promisify-child-process'; | ||||
|  | ||||
| import { constants } from './constants'; | ||||
| import { utils } from './utils/utils'; | ||||
|  | ||||
| async function checkPublishRequiredSetupAsync(): Promise<void> { | ||||
|     // check to see if logged into npm before publishing | ||||
|     try { | ||||
|         // HACK: for some reason on some setups, the `npm whoami` will not recognize a logged-in user | ||||
|         // unless run with `sudo` (i.e Fabio's NVM setup) but is fine for others (Jacob's NVM setup). | ||||
|         utils.log('Checking that the user is logged in on npm...'); | ||||
|         await execAsync(`sudo npm whoami`); | ||||
|     } catch (err) { | ||||
|         throw new Error('You must be logged into npm in the commandline to publish. Run `npm login` and try again.'); | ||||
|     } | ||||
|  | ||||
|     // Check to see if Git personal token setup | ||||
|     if (_.isUndefined(constants.githubPersonalAccessToken)) { | ||||
|         throw new Error( | ||||
|             'You must have a Github personal access token set to an envVar named `GITHUB_PERSONAL_ACCESS_TOKEN_0X_JS`. Add it then try again.', | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     // Check Yarn version is 1.X | ||||
|     utils.log('Checking the yarn version...'); | ||||
|     const result = await execAsync(`yarn --version`); | ||||
|     const version = result.stdout; | ||||
|     const versionSegments = version.split('.'); | ||||
|     const majorVersion = _.parseInt(versionSegments[0]); | ||||
|     if (majorVersion < 1) { | ||||
|         throw new Error('Your yarn version must be v1.x or higher. Upgrade yarn and try again.'); | ||||
|     } | ||||
|  | ||||
|     // Check that `aws` commandline tool is installed | ||||
|     try { | ||||
|         utils.log('Checking that aws CLI tool is installed...'); | ||||
|         await execAsync(`aws help`); | ||||
|     } catch (err) { | ||||
|         throw new Error('You must have `awscli` commandline tool installed. Install it and try again.'); | ||||
|     } | ||||
|  | ||||
|     // Check that `aws` credentials are setup | ||||
|     try { | ||||
|         utils.log('Checking that aws credentials are configured...'); | ||||
|         await execAsync(`aws sts get-caller-identity`); | ||||
|     } catch (err) { | ||||
|         throw new Error('You must setup your AWS credentials by running `aws configure`. Do this and try again.'); | ||||
|     } | ||||
|  | ||||
|     utils.log('Checking that git branch is up to date with upstream...'); | ||||
|     await execAsync('git fetch'); | ||||
|     const res = await execAsync('git status -bs'); // s - short format, b - branch info | ||||
|     /** | ||||
|      * Possible outcomes | ||||
|      * ## branch_name...origin/branch_name [behind n] | ||||
|      * ## branch_name...origin/branch_name [ahead n] | ||||
|      * ## branch_name...origin/branch_name | ||||
|      */ | ||||
|     const gitShortStatusHeader = res.stdout.split('\n')[0]; | ||||
|     if (gitShortStatusHeader.includes('behind')) { | ||||
|         throw new Error('Your branch is behind upstream. Please pull before publishing.'); | ||||
|     } else if (gitShortStatusHeader.includes('ahead')) { | ||||
|         throw new Error('Your branch is ahead of upstream. Please push before publishing.'); | ||||
|     } | ||||
| } | ||||
|  | ||||
| checkPublishRequiredSetupAsync().catch(err => { | ||||
|     utils.log(err.message); | ||||
|     process.exit(1); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user