From f4e99f0bcc7dcd9c19ae323d936f3b7b567da5e4 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Fri, 9 Jun 2017 12:41:16 -0400 Subject: [PATCH 1/9] added info CLI command - install os-name package - require info in commands.js - implement info.js with node/npm versions etc --- local-cli/commands.js | 1 + local-cli/info/info.js | 43 ++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 45 insertions(+) create mode 100644 local-cli/info/info.js diff --git a/local-cli/commands.js b/local-cli/commands.js index 38912ba4d9b13b..9f27908e9d6dcf 100644 --- a/local-cli/commands.js +++ b/local-cli/commands.js @@ -51,6 +51,7 @@ const documentedCommands = [ require('./logAndroid/logAndroid'), require('./logIOS/logIOS'), require('./dependencies/dependencies'), + require('./info/info'), ]; // The user should never get here because projects are inited by diff --git a/local-cli/info/info.js b/local-cli/info/info.js new file mode 100644 index 00000000000000..0da6e06a31edb2 --- /dev/null +++ b/local-cli/info/info.js @@ -0,0 +1,43 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ +'use strict'; + +const chalk = require('chalk'); +const execSync = require('child_process').execSync; +const os = require('os'); +const osName = require('os-name'); +const pkg = require('../../package.json'); +const yarn = require('../util/yarn'); + +const info = function() { + const npmVersion = execSync('npm -v') + .toString() + .replace(/(\r\n|\n|\r)/gm, ''); + + if (process.platform === 'darwin') { + var xcodebuildVersion = execSync('/usr/bin/xcodebuild -version') + .toString() + .split('\n') + .join(' '); + } + + console.log(chalk.bold('Versions:')); + console.log(' React Native: ', chalk.gray(pkg.version)); + console.log(' OS: ', chalk.gray(osName(os.platform(), os.release()))); + console.log(' Node: ', chalk.gray(process.version)); + console.log(' Yarn: ', chalk.gray(yarn.getYarnVersionIfAvailable())); + console.log(' npm: ', chalk.gray(npmVersion)); + console.log(' Xcode: ', process.platform === 'darwin' ? chalk.gray(xcodebuildVersion) : 'N/A'); +}; + +module.exports = { + name: 'info', + description: 'Get relevant version info about OS, toolchain and libraries', + func: info, +}; \ No newline at end of file diff --git a/package.json b/package.json index c8d17004014afd..63382019529478 100644 --- a/package.json +++ b/package.json @@ -191,6 +191,7 @@ "npmlog": "^2.0.4", "opn": "^3.0.2", "optimist": "^0.6.1", + "os-name": "^2.0.1", "plist": "^1.2.0", "pretty-format": "^4.2.1", "promise": "^7.1.1", From 83cd1a519a68b19627b136e608e63ecaa3554949 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Fri, 9 Jun 2017 14:47:08 -0400 Subject: [PATCH 2/9] add android studio version for macOS --- local-cli/info/info.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/local-cli/info/info.js b/local-cli/info/info.js index 0da6e06a31edb2..33eedd17e44d90 100644 --- a/local-cli/info/info.js +++ b/local-cli/info/info.js @@ -9,20 +9,30 @@ 'use strict'; const chalk = require('chalk'); -const execSync = require('child_process').execSync; +const child_process = require('child_process'); +const execSync = child_process.execSync; const os = require('os'); const osName = require('os-name'); const pkg = require('../../package.json'); const yarn = require('../util/yarn'); const info = function() { - const npmVersion = execSync('npm -v') - .toString() - .replace(/(\r\n|\n|\r)/gm, ''); + let androidStudioVersion; + const npmVersion = execSync('npm -v').toString().replace(/(\r\n|\n|\r)/gm, ''); if (process.platform === 'darwin') { - var xcodebuildVersion = execSync('/usr/bin/xcodebuild -version') - .toString() + var xcodebuildVersion = execSync('/usr/bin/xcodebuild -version').toString().split('\n').join(' '); + + androidStudioVersion = child_process + .execFileSync( + '/usr/libexec/PlistBuddy', + [ + '-c', 'Print:CFBundleShortVersionString', + '-c', 'Print:CFBundleVersion', + '/Applications/Android Studio.app/Contents/Info.plist', + ], + { encoding: 'utf8' }, + ) .split('\n') .join(' '); } @@ -34,6 +44,7 @@ const info = function() { console.log(' Yarn: ', chalk.gray(yarn.getYarnVersionIfAvailable())); console.log(' npm: ', chalk.gray(npmVersion)); console.log(' Xcode: ', process.platform === 'darwin' ? chalk.gray(xcodebuildVersion) : 'N/A'); + console.log(' Android Studio: ', chalk.gray(androidStudioVersion)); }; module.exports = { From 66c9e37aa3bdad65a2204656fdaff17ee4b071f6 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Sat, 10 Jun 2017 19:30:40 -0400 Subject: [PATCH 3/9] add android studio version for linux & windows --- local-cli/info/info.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/local-cli/info/info.js b/local-cli/info/info.js index 33eedd17e44d90..2065f030c03f94 100644 --- a/local-cli/info/info.js +++ b/local-cli/info/info.js @@ -35,6 +35,17 @@ const info = function() { ) .split('\n') .join(' '); + } else if (process.platform === 'linux') { + const linuxBuildVersion = child_process.execSync('cat /opt/android-studio/build.txt').toString(); + const linuxVersion = child_process + .execSync('cat /opt/android-studio/bin/studio.sh | grep "$Home/.AndroidStudio" | head -1') + .toString() + .match(/\d\.\d/)[0]; + androidStudioVersion = `${linuxVersion} ${linuxBuildVersion}`; + } else if (process.platform.startsWith('win')) { + androidStudioVersion = child_process.execSync( + 'wmic datafile where name="C:\\Program Files\\Android\\Android Studio\\bin\\studio.exe" get Version /value', + ); } console.log(chalk.bold('Versions:')); @@ -51,4 +62,4 @@ module.exports = { name: 'info', description: 'Get relevant version info about OS, toolchain and libraries', func: info, -}; \ No newline at end of file +}; From 13c988dabc5dbd1c81e961eba6f150eed755a7cd Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Mon, 12 Jun 2017 13:02:28 -0400 Subject: [PATCH 4/9] get Android Studio version/build number on windows - rename confusing variable for buildnumber - add wmic and type calls for version/build for windows android studio --- local-cli/info/info.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/local-cli/info/info.js b/local-cli/info/info.js index 2065f030c03f94..734bcd0d101d0a 100644 --- a/local-cli/info/info.js +++ b/local-cli/info/info.js @@ -36,16 +36,24 @@ const info = function() { .split('\n') .join(' '); } else if (process.platform === 'linux') { - const linuxBuildVersion = child_process.execSync('cat /opt/android-studio/build.txt').toString(); + const linuxBuildNumber = child_process.execSync('cat /opt/android-studio/build.txt').toString(); const linuxVersion = child_process .execSync('cat /opt/android-studio/bin/studio.sh | grep "$Home/.AndroidStudio" | head -1') .toString() .match(/\d\.\d/)[0]; - androidStudioVersion = `${linuxVersion} ${linuxBuildVersion}`; + androidStudioVersion = `${linuxVersion} ${linuxBuildNumber}`; } else if (process.platform.startsWith('win')) { - androidStudioVersion = child_process.execSync( - 'wmic datafile where name="C:\\Program Files\\Android\\Android Studio\\bin\\studio.exe" get Version /value', - ); + const windowsVersion = child_process + .execSync( + 'wmic datafile where name="C:\\\\Program Files\\\\Android\\\\Android Studio\\\\bin\\\\studio.exe" get Version', + ) + .toString() + .replace(/(\r\n|\n|\r)/gm, ''); + const windowsBuildNumber = child_process + .execSync(`type "C:\\\\Program File\\\\Android\\\\Android Studio\\\\build.txt"`) + .toString() + .replace(/(\r\n|\n|\r)/gm, ''); + androidStudioVersion = `${windowsVersion} ${windowsBuildNumber}`; } console.log(chalk.bold('Versions:')); From a1fa95280286ffb16752dd0a9334695baa4391a2 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Mon, 12 Jun 2017 13:34:03 -0400 Subject: [PATCH 5/9] accidentally an s - It is, in fact, named Program Files --- local-cli/info/info.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local-cli/info/info.js b/local-cli/info/info.js index 734bcd0d101d0a..72f3bf649f7876 100644 --- a/local-cli/info/info.js +++ b/local-cli/info/info.js @@ -50,7 +50,7 @@ const info = function() { .toString() .replace(/(\r\n|\n|\r)/gm, ''); const windowsBuildNumber = child_process - .execSync(`type "C:\\\\Program File\\\\Android\\\\Android Studio\\\\build.txt"`) + .execSync(`type "C:\\\\Program Files\\\\Android\\\\Android Studio\\\\build.txt"`) .toString() .replace(/(\r\n|\n|\r)/gm, ''); androidStudioVersion = `${windowsVersion} ${windowsBuildNumber}`; From a467e0af3dc00e4b0ff42c907bd151ace50d94f5 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Mon, 12 Jun 2017 13:40:04 -0400 Subject: [PATCH 6/9] use try/catch for xcode/android-studio versions - add better fallback language --- local-cli/info/info.js | 78 +++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/local-cli/info/info.js b/local-cli/info/info.js index 72f3bf649f7876..787ec1445322da 100644 --- a/local-cli/info/info.js +++ b/local-cli/info/info.js @@ -21,49 +21,63 @@ const info = function() { const npmVersion = execSync('npm -v').toString().replace(/(\r\n|\n|\r)/gm, ''); if (process.platform === 'darwin') { - var xcodebuildVersion = execSync('/usr/bin/xcodebuild -version').toString().split('\n').join(' '); + try { + var xcodebuildVersion = execSync('/usr/bin/xcodebuild -version').toString().split('\n').join(' '); - androidStudioVersion = child_process - .execFileSync( - '/usr/libexec/PlistBuddy', - [ - '-c', 'Print:CFBundleShortVersionString', - '-c', 'Print:CFBundleVersion', - '/Applications/Android Studio.app/Contents/Info.plist', - ], - { encoding: 'utf8' }, - ) - .split('\n') - .join(' '); + androidStudioVersion = child_process + .execFileSync( + '/usr/libexec/PlistBuddy', + [ + '-c', + 'Print:CFBundleShortVersionString', + '-c', + 'Print:CFBundleVersion', + '/Applications/Android Studio.app/Contents/Info.plist', + ], + { encoding: 'utf8' }, + ) + .split('\n') + .join(' '); + } catch (err) { + console.log('Android Studio not found in typical install location'); + } } else if (process.platform === 'linux') { - const linuxBuildNumber = child_process.execSync('cat /opt/android-studio/build.txt').toString(); - const linuxVersion = child_process - .execSync('cat /opt/android-studio/bin/studio.sh | grep "$Home/.AndroidStudio" | head -1') - .toString() - .match(/\d\.\d/)[0]; - androidStudioVersion = `${linuxVersion} ${linuxBuildNumber}`; + try { + const linuxBuildNumber = child_process.execSync('cat /opt/android-studio/build.txt').toString(); + const linuxVersion = child_process + .execSync('cat /opt/android-studio/bin/studio.sh | grep "$Home/.AndroidStudio" | head -1') + .toString() + .match(/\d\.\d/)[0]; + androidStudioVersion = `${linuxVersion} ${linuxBuildNumber}`; + } catch (err) { + console.log('Android Studio not found in typical install location'); + } } else if (process.platform.startsWith('win')) { - const windowsVersion = child_process - .execSync( - 'wmic datafile where name="C:\\\\Program Files\\\\Android\\\\Android Studio\\\\bin\\\\studio.exe" get Version', - ) - .toString() - .replace(/(\r\n|\n|\r)/gm, ''); - const windowsBuildNumber = child_process - .execSync(`type "C:\\\\Program Files\\\\Android\\\\Android Studio\\\\build.txt"`) - .toString() - .replace(/(\r\n|\n|\r)/gm, ''); - androidStudioVersion = `${windowsVersion} ${windowsBuildNumber}`; + try { + const windowsVersion = child_process + .execSync( + 'wmic datafile where name="C:\\\\Program Files\\\\Android\\\\Android Studio\\\\bin\\\\studio.exe" get Version', + ) + .toString() + .replace(/(\r\n|\n|\r)/gm, ''); + const windowsBuildNumber = child_process + .execSync('type "C:\\\\Program Files\\\\Android\\\\Android Studio\\\\build.txt"') + .toString() + .replace(/(\r\n|\n|\r)/gm, ''); + androidStudioVersion = `${windowsVersion} ${windowsBuildNumber}`; + } catch (err) { + console.log('Android Studio not found in typical install location'); + } } console.log(chalk.bold('Versions:')); console.log(' React Native: ', chalk.gray(pkg.version)); console.log(' OS: ', chalk.gray(osName(os.platform(), os.release()))); console.log(' Node: ', chalk.gray(process.version)); - console.log(' Yarn: ', chalk.gray(yarn.getYarnVersionIfAvailable())); + console.log(' Yarn: ', chalk.gray(yarn.getYarnVersionIfAvailable() || 'Not Found')); console.log(' npm: ', chalk.gray(npmVersion)); console.log(' Xcode: ', process.platform === 'darwin' ? chalk.gray(xcodebuildVersion) : 'N/A'); - console.log(' Android Studio: ', chalk.gray(androidStudioVersion)); + console.log(' Android Studio: ', chalk.gray(androidStudioVersion || 'Not Found')); }; module.exports = { From 6960570fa5d94980d9e026c7cf092c46806409e0 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Mon, 12 Jun 2017 15:33:10 -0400 Subject: [PATCH 7/9] add React package to version info --- local-cli/info/info.js | 1 + 1 file changed, 1 insertion(+) diff --git a/local-cli/info/info.js b/local-cli/info/info.js index 787ec1445322da..4273b14e807811 100644 --- a/local-cli/info/info.js +++ b/local-cli/info/info.js @@ -72,6 +72,7 @@ const info = function() { console.log(chalk.bold('Versions:')); console.log(' React Native: ', chalk.gray(pkg.version)); + console.log(' React: ', chalk.gray(pkg.devDependencies.react)); console.log(' OS: ', chalk.gray(osName(os.platform(), os.release()))); console.log(' Node: ', chalk.gray(process.version)); console.log(' Yarn: ', chalk.gray(yarn.getYarnVersionIfAvailable() || 'Not Found')); From 2989d085024e08ee4f90d87473830be4e7ce1bc8 Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Thu, 29 Jun 2017 16:42:35 -0400 Subject: [PATCH 8/9] remove os-name, add envinfo dependency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 63382019529478..577e3904534259 100644 --- a/package.json +++ b/package.json @@ -166,6 +166,7 @@ "create-react-class": "^15.5.2", "debug": "^2.2.0", "denodeify": "^1.2.1", + "envinfo": "^3.0.0", "errno": ">=0.1.1 <0.2.0-0", "event-target-shim": "^1.0.5", "fbjs": "0.8.12", @@ -191,7 +192,6 @@ "npmlog": "^2.0.4", "opn": "^3.0.2", "optimist": "^0.6.1", - "os-name": "^2.0.1", "plist": "^1.2.0", "pretty-format": "^4.2.1", "promise": "^7.1.1", From 790219ddc846a35b342a57a818106248c62a32ce Mon Sep 17 00:00:00 2001 From: Trevor Brindle Date: Thu, 29 Jun 2017 16:52:39 -0400 Subject: [PATCH 9/9] `react-native info` use external envinfo module --- local-cli/info/info.js | 95 ++++++++++++------------------------------ 1 file changed, 27 insertions(+), 68 deletions(-) diff --git a/local-cli/info/info.js b/local-cli/info/info.js index 4273b14e807811..f443146ef59c4b 100644 --- a/local-cli/info/info.js +++ b/local-cli/info/info.js @@ -8,81 +8,40 @@ */ 'use strict'; -const chalk = require('chalk'); -const child_process = require('child_process'); -const execSync = child_process.execSync; -const os = require('os'); -const osName = require('os-name'); -const pkg = require('../../package.json'); -const yarn = require('../util/yarn'); +const envinfo = require('envinfo'); const info = function() { - let androidStudioVersion; - const npmVersion = execSync('npm -v').toString().replace(/(\r\n|\n|\r)/gm, ''); + const args = Array.prototype.slice.call(arguments)[2]; - if (process.platform === 'darwin') { - try { - var xcodebuildVersion = execSync('/usr/bin/xcodebuild -version').toString().split('\n').join(' '); - - androidStudioVersion = child_process - .execFileSync( - '/usr/libexec/PlistBuddy', - [ - '-c', - 'Print:CFBundleShortVersionString', - '-c', - 'Print:CFBundleVersion', - '/Applications/Android Studio.app/Contents/Info.plist', - ], - { encoding: 'utf8' }, - ) - .split('\n') - .join(' '); - } catch (err) { - console.log('Android Studio not found in typical install location'); - } - } else if (process.platform === 'linux') { - try { - const linuxBuildNumber = child_process.execSync('cat /opt/android-studio/build.txt').toString(); - const linuxVersion = child_process - .execSync('cat /opt/android-studio/bin/studio.sh | grep "$Home/.AndroidStudio" | head -1') - .toString() - .match(/\d\.\d/)[0]; - androidStudioVersion = `${linuxVersion} ${linuxBuildNumber}`; - } catch (err) { - console.log('Android Studio not found in typical install location'); - } - } else if (process.platform.startsWith('win')) { - try { - const windowsVersion = child_process - .execSync( - 'wmic datafile where name="C:\\\\Program Files\\\\Android\\\\Android Studio\\\\bin\\\\studio.exe" get Version', - ) - .toString() - .replace(/(\r\n|\n|\r)/gm, ''); - const windowsBuildNumber = child_process - .execSync('type "C:\\\\Program Files\\\\Android\\\\Android Studio\\\\build.txt"') - .toString() - .replace(/(\r\n|\n|\r)/gm, ''); - androidStudioVersion = `${windowsVersion} ${windowsBuildNumber}`; - } catch (err) { - console.log('Android Studio not found in typical install location'); - } + try { + envinfo.print({ + packages: typeof args.packages === 'string' ? ['react', 'react-native'].concat(args.packages.split(',')) : args.packages + }); + } catch (error) { + console.log('Error: unable to print environment info'); + console.log(error); } - - console.log(chalk.bold('Versions:')); - console.log(' React Native: ', chalk.gray(pkg.version)); - console.log(' React: ', chalk.gray(pkg.devDependencies.react)); - console.log(' OS: ', chalk.gray(osName(os.platform(), os.release()))); - console.log(' Node: ', chalk.gray(process.version)); - console.log(' Yarn: ', chalk.gray(yarn.getYarnVersionIfAvailable() || 'Not Found')); - console.log(' npm: ', chalk.gray(npmVersion)); - console.log(' Xcode: ', process.platform === 'darwin' ? chalk.gray(xcodebuildVersion) : 'N/A'); - console.log(' Android Studio: ', chalk.gray(androidStudioVersion || 'Not Found')); -}; +} module.exports = { name: 'info', description: 'Get relevant version info about OS, toolchain and libraries', + options: [ + { + command: '--packages [string]', + description: 'Which packages from your package.json to include, in addition to the default React Native and React versions.', + default: ['react', 'react-native'] + }, + ], + examples: [ + { + desc: 'Get standard version info', + cmd: 'react-native info', + }, + { + desc: 'Get standard version info & specified package versions', + cmd: 'react-native info --packages jest,eslint,babel-polyfill', + } + ], func: info, };