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
		
	
| 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!");
 | |
| }
 |