From 346a14d0e24f97810660affbd094ba75be647314 Mon Sep 17 00:00:00 2001 From: Jay Meistrich Date: Wed, 4 Sep 2019 11:50:14 +0200 Subject: [PATCH 1/6] [Doctor] Don't check for watchman on Windows --- packages/cli/src/commands/doctor/healthchecks/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/commands/doctor/healthchecks/index.js b/packages/cli/src/commands/doctor/healthchecks/index.js index 260f0ab0e..19d49a93f 100644 --- a/packages/cli/src/commands/doctor/healthchecks/index.js +++ b/packages/cli/src/commands/doctor/healthchecks/index.js @@ -16,7 +16,12 @@ export const HEALTHCHECK_TYPES = { export const getHealthchecks = ({contributor}) => ({ common: { label: 'Common', - healthchecks: [nodeJS, yarn, npm, watchman], + healthchecks: [ + nodeJS, + yarn, + npm, + ...(process.platform === 'darwin' ? [watchman] : []), + ], }, android: { label: 'Android', From 087ce37e6bf3fc8bbf5fbbedacdedd9f81e19323 Mon Sep 17 00:00:00 2001 From: Jay Meistrich Date: Wed, 4 Sep 2019 11:16:39 +0200 Subject: [PATCH 2/6] [Doctor] Handle Android SDK not installed --- .../commands/doctor/healthchecks/androidSDK.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js index f3e3b031c..6f90ce803 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js +++ b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js @@ -3,13 +3,19 @@ import {logManualInstallation} from './common'; import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; +const installMessage = `Read more about how to update Android SDK at ${chalk.dim( + 'https://developer.android.com/studio', +)}`; + export default { label: 'Android SDK', getDiagnosticsAsync: async ({SDKs}) => ({ - needsToBeFixed: doesSoftwareNeedToBeFixed({ - version: SDKs['Android SDK']['Build Tools'][0], - versionRange: versionRanges.ANDROID_NDK, - }), + needsToBeFixed: + (SDKs['Android SDK'] === 'Not Found' && installMessage) || + doesSoftwareNeedToBeFixed({ + version: SDKs['Android SDK']['Build Tools'][0], + versionRange: versionRanges.ANDROID_NDK, + }), }), runAutomaticFix: async ({loader, environmentInfo}) => { const version = environmentInfo.SDKs['Android SDK'][0]; @@ -19,9 +25,7 @@ export default { if (isNDKInstalled) { return logManualInstallation({ - message: `Read more about how to update Android SDK at ${chalk.dim( - 'https://developer.android.com/studio', - )}`, + message: installMessage, }); } From 0775c3e57729fae9af3c9e98ae24ce7911467026 Mon Sep 17 00:00:00 2001 From: Jay Meistrich Date: Wed, 4 Sep 2019 15:39:47 +0200 Subject: [PATCH 3/6] [Doctor] Fix Android SDK check not working on Windows --- .../doctor/healthchecks/androidSDK.js | 53 ++++++++++++++++--- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js index 6f90ce803..8deb98638 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js +++ b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js @@ -2,6 +2,7 @@ import chalk from 'chalk'; import {logManualInstallation} from './common'; import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; +import {exec} from 'child_process'; const installMessage = `Read more about how to update Android SDK at ${chalk.dim( 'https://developer.android.com/studio', @@ -9,14 +10,50 @@ const installMessage = `Read more about how to update Android SDK at ${chalk.dim export default { label: 'Android SDK', - getDiagnosticsAsync: async ({SDKs}) => ({ - needsToBeFixed: - (SDKs['Android SDK'] === 'Not Found' && installMessage) || - doesSoftwareNeedToBeFixed({ - version: SDKs['Android SDK']['Build Tools'][0], - versionRange: versionRanges.ANDROID_NDK, - }), - }), + getDiagnosticsAsync: async ({SDKs}) => { + let sdks = SDKs['Android SDK']; + + // This is a workaround for envinfo's Android SDK check not working on + // Windows. This can be removed when envinfo fixes it. + // See the PR: https://github.com/tabrindle/envinfo/pull/119 + if (sdks === 'Not Found' && process.platform !== 'darwin') { + sdks = await new Promise(resolve => { + exec( + process.env.ANDROID_HOME + ? `${process.env.ANDROID_HOME}/tools/bin/sdkmanager --list` + : 'sdkmanager --list', + (err, stdout) => { + if (err) { + resolve('Not Found'); + } else { + const matches = []; + const regex = /build-tools;([\d|.]+)[\S\s]/g; + let match = null; + while ((match = regex.exec(stdout)) !== null) { + matches.push(match[1]); + } + resolve( + matches.length > 0 + ? { + 'Build Tools': matches, + } + : 'Not Found', + ); + } + }, + ); + }); + } + + return { + needsToBeFixed: + (sdks === 'Not Found' && installMessage) || + doesSoftwareNeedToBeFixed({ + version: sdks['Build Tools'][0], + versionRange: versionRanges.ANDROID_NDK, + }), + }; + }, runAutomaticFix: async ({loader, environmentInfo}) => { const version = environmentInfo.SDKs['Android SDK'][0]; const isNDKInstalled = version !== 'Not Found'; From be74e704fa9bcc334175c4556bf077aa934a635b Mon Sep 17 00:00:00 2001 From: Jay Meistrich Date: Wed, 4 Sep 2019 15:58:53 +0200 Subject: [PATCH 4/6] [Doctor] Improve manual fix message for Android SDK --- packages/cli/src/commands/doctor/healthchecks/androidSDK.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js index 8deb98638..4c0096b1a 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js +++ b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js @@ -68,7 +68,7 @@ export default { return logManualInstallation({ healthcheck: 'Android SDK', - url: 'https://developer.android.com/studio', + url: 'https://facebook.github.io/react-native/docs/getting-started', }); }, }; From 4bc9a5ba459607358171088097d70c5052358ffb Mon Sep 17 00:00:00 2001 From: Jay Meistrich Date: Sat, 7 Sep 2019 14:42:10 +0200 Subject: [PATCH 5/6] Change style of ANDROID_SDK check to reject --- .../doctor/healthchecks/androidSDK.js | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js index 4c0096b1a..19c9b928b 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js +++ b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js @@ -17,32 +17,34 @@ export default { // Windows. This can be removed when envinfo fixes it. // See the PR: https://github.com/tabrindle/envinfo/pull/119 if (sdks === 'Not Found' && process.platform !== 'darwin') { - sdks = await new Promise(resolve => { - exec( - process.env.ANDROID_HOME - ? `${process.env.ANDROID_HOME}/tools/bin/sdkmanager --list` - : 'sdkmanager --list', - (err, stdout) => { - if (err) { - resolve('Not Found'); - } else { - const matches = []; - const regex = /build-tools;([\d|.]+)[\S\s]/g; - let match = null; - while ((match = regex.exec(stdout)) !== null) { - matches.push(match[1]); - } - resolve( + try { + sdks = await new Promise((resolve, reject) => { + exec( + process.env.ANDROID_HOME + ? `${process.env.ANDROID_HOME}/tools/bin/sdkmanager --list` + : 'sdkmanager --list', + (err, stdout) => { + if (err) { + reject(); + } else { + const matches = []; + const regex = /build-tools;([\d|.]+)[\S\s]/g; + let match = null; + while ((match = regex.exec(stdout)) !== null) { + matches.push(match[1]); + } matches.length > 0 - ? { + ? resolve({ 'Build Tools': matches, - } - : 'Not Found', - ); - } - }, - ); - }); + }) + : reject(); + } + }, + ); + }); + } catch { + sdks = 'Not Found'; + } } return { From 0fc832db05e00076ce722d2c43a1bfd96caa96ea Mon Sep 17 00:00:00 2001 From: Jay Meistrich Date: Sun, 8 Sep 2019 13:20:58 +0200 Subject: [PATCH 6/6] Change to use execa instead of exec --- .../doctor/healthchecks/androidSDK.js | 48 ++++++++----------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js index 19c9b928b..7707a9d87 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidSDK.js +++ b/packages/cli/src/commands/doctor/healthchecks/androidSDK.js @@ -2,7 +2,7 @@ import chalk from 'chalk'; import {logManualInstallation} from './common'; import versionRanges from '../versionRanges'; import {doesSoftwareNeedToBeFixed} from '../checkInstallation'; -import {exec} from 'child_process'; +import execa from 'execa'; const installMessage = `Read more about how to update Android SDK at ${chalk.dim( 'https://developer.android.com/studio', @@ -18,33 +18,25 @@ export default { // See the PR: https://github.com/tabrindle/envinfo/pull/119 if (sdks === 'Not Found' && process.platform !== 'darwin') { try { - sdks = await new Promise((resolve, reject) => { - exec( - process.env.ANDROID_HOME - ? `${process.env.ANDROID_HOME}/tools/bin/sdkmanager --list` - : 'sdkmanager --list', - (err, stdout) => { - if (err) { - reject(); - } else { - const matches = []; - const regex = /build-tools;([\d|.]+)[\S\s]/g; - let match = null; - while ((match = regex.exec(stdout)) !== null) { - matches.push(match[1]); - } - matches.length > 0 - ? resolve({ - 'Build Tools': matches, - }) - : reject(); - } - }, - ); - }); - } catch { - sdks = 'Not Found'; - } + const {stdout} = await execa( + process.env.ANDROID_HOME + ? `${process.env.ANDROID_HOME}/tools/bin/sdkmanager` + : 'sdkmanager', + ['--list'], + ); + + const matches = []; + const regex = /build-tools;([\d|.]+)[\S\s]/g; + let match = null; + while ((match = regex.exec(stdout)) !== null) { + matches.push(match[1]); + } + if (matches.length > 0) { + sdks = { + 'Build Tools': matches, + }; + } + } catch {} } return {