You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
| 
											7 years ago
										 | import { join, resolve } from 'path'; | ||
|  | import { readdir as readdirCallback } from 'fs'; | ||
|  | 
 | ||
|  | import pify from 'pify'; | ||
|  | 
 | ||
|  | import { getCliOptions, getPrintableError } from './common'; | ||
|  | import { writeSignature } from './signature'; | ||
|  | 
 | ||
|  | // @ts-ignore
 | ||
|  | import * as packageJson from '../../package.json'; | ||
|  | 
 | ||
|  | const readdir = pify(readdirCallback); | ||
|  | 
 | ||
|  | /* tslint:disable:no-console */ | ||
|  | 
 | ||
|  | const OPTIONS = [ | ||
|  |   { | ||
|  |     names: ['help', 'h'], | ||
|  |     type: 'bool', | ||
|  |     help: 'Print this help and exit.', | ||
|  |   }, | ||
|  |   { | ||
|  |     names: ['private', 'p'], | ||
|  |     type: 'string', | ||
|  |     help: 'Path to private key file (default: ./private.key)', | ||
|  |     default: 'private.key', | ||
|  |   }, | ||
|  |   { | ||
|  |     names: ['update', 'u'], | ||
|  |     type: 'string', | ||
|  |     help: 'Path to the update package (default: the .exe or .zip in ./release)', | ||
|  |   }, | ||
|  |   { | ||
|  |     names: ['version', 'v'], | ||
|  |     type: 'string', | ||
|  |     help: `Version number of this package (default: ${packageJson.version})`, | ||
|  |     default: packageJson.version, | ||
|  |   }, | ||
|  | ]; | ||
|  | 
 | ||
|  | type OptionsType = { | ||
|  |   private: string; | ||
|  |   update: string; | ||
|  |   version: string; | ||
|  | }; | ||
|  | 
 | ||
|  | const cliOptions = getCliOptions<OptionsType>(OPTIONS); | ||
|  | go(cliOptions).catch(error => { | ||
|  |   console.error('Something went wrong!', getPrintableError(error)); | ||
|  | }); | ||
|  | 
 | ||
|  | async function go(options: OptionsType) { | ||
|  |   const { private: privateKeyPath, version } = options; | ||
|  |   let { update: updatePath } = options; | ||
|  | 
 | ||
|  |   if (!updatePath) { | ||
|  |     updatePath = await findUpdatePath(); | ||
|  |   } | ||
|  | 
 | ||
|  |   console.log('Signing with...'); | ||
|  |   console.log(`  version: ${version}`); | ||
|  |   console.log(`  update file: ${updatePath}`); | ||
|  |   console.log(`  private key file: ${privateKeyPath}`); | ||
|  | 
 | ||
|  |   await writeSignature(updatePath, version, privateKeyPath); | ||
|  | } | ||
|  | 
 | ||
|  | const IS_EXE = /\.exe$/; | ||
|  | const IS_ZIP = /\.zip$/; | ||
|  | async function findUpdatePath(): Promise<string> { | ||
|  |   const releaseDir = resolve('release'); | ||
|  |   const files: Array<string> = await readdir(releaseDir); | ||
|  | 
 | ||
|  |   const max = files.length; | ||
|  |   for (let i = 0; i < max; i += 1) { | ||
|  |     const file = files[i]; | ||
|  |     const fullPath = join(releaseDir, file); | ||
|  | 
 | ||
|  |     if (IS_EXE.test(file) || IS_ZIP.test(file)) { | ||
|  |       return fullPath; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   throw new Error("No suitable file found in 'release' folder!"); | ||
|  | } |