diff --git a/doctor/package.json b/doctor/package.json index 4239b4803..1693234c7 100644 --- a/doctor/package.json +++ b/doctor/package.json @@ -1,12 +1,13 @@ { "name": "flipper-doctor", - "version": "0.4.1", + "version": "0.5.0", "description": "Utility for checking for issues with a flipper installation", "main": "lib/index.js", "types": "lib/index.d.ts", "license": "MIT", "devDependencies": { "@types/jest": "^24.0.21", + "@types/fb-watchman": "2.0.0", "@typescript-eslint/eslint-plugin": "^2.8.0", "eslint": "^6.6.0", "eslint-plugin-babel": "^5.3.0", @@ -41,6 +42,7 @@ "author": "Facebook, Inc", "dependencies": { "@types/node": "^12.12.12", - "envinfo": "^7.4.0" + "envinfo": "^7.4.0", + "fb-watchman": "^2.0.1" } } diff --git a/doctor/src/index.ts b/doctor/src/index.ts index fdbbc497f..4a7ff1e69 100644 --- a/doctor/src/index.ts +++ b/doctor/src/index.ts @@ -11,6 +11,7 @@ import {exec} from 'child_process'; import {promisify} from 'util'; import {EnvironmentInfo, getEnvInfo} from './environmentInfo'; export {getEnvInfo} from './environmentInfo'; +import * as watchman from 'fb-watchman'; export type HealthcheckCategory = { label: string; @@ -70,6 +71,15 @@ export function getHealthchecks(): Healthchecks { }; }, }, + { + label: 'Watchman Installed', + run: async (_: EnvironmentInfo) => { + const isAvailable = await isWatchmanAvailable(); + return { + hasProblem: !isAvailable, + }; + }, + }, ], }, android: { @@ -179,3 +189,25 @@ async function commandSucceeds(command: string): Promise { .then(() => true) .catch(() => false); } + +async function isWatchmanAvailable(): Promise { + const client = new watchman.Client(); + return new Promise(resolve => { + const complete = (result: boolean) => { + resolve(result); + client.removeAllListeners('error'); + client.end(); + }; + client.once('error', () => complete(false)); + client.capabilityCheck( + {optional: [], required: ['relative_root']}, + error => { + if (error) { + complete(false); + return; + } + complete(true); + }, + ); + }); +} diff --git a/doctor/yarn.lock b/doctor/yarn.lock index 021219bae..a61264d7c 100644 --- a/doctor/yarn.lock +++ b/doctor/yarn.lock @@ -326,6 +326,18 @@ dependencies: "@babel/types" "^7.3.0" +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/fb-watchman@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/fb-watchman/-/fb-watchman-2.0.0.tgz#ca60ded406baa8c81c65ac1f86763a5d00aa7c55" + integrity sha512-Ao2jlksPEUGCEXBvJz5e2MuDpYUtxXgtUk45cg0g5Mmy4f0j7bQuDlOlqBMgKGRl9dZAK4ZTzFtukuzj2mURlQ== + dependencies: + "@types/events" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -739,7 +751,7 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" -bser@^2.0.0: +bser@2.1.1, bser@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== @@ -1481,6 +1493,13 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fb-watchman@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + figures@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" diff --git a/package.json b/package.json index 37be69921..4b0f838e3 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,7 @@ "expand-tilde": "^2.0.2", "express": "^4.15.2", "fb-watchman": "^2.0.0", - "flipper-doctor": "^0.4.1", + "flipper-doctor": "^0.6.0", "fs-extra": "^8.0.1", "immer": "^5.0.1", "immutable": "^4.0.0-rc.12", @@ -193,7 +193,8 @@ }, "greenkeeper": { "ignore": [ - "tmp" + "tmp", + "flipper-doctor" ] }, "scripts": { diff --git a/src/reducers/__tests__/healthchecks.node.tsx b/src/reducers/__tests__/healthchecks.node.tsx index 9eee46dd1..0fe9bc774 100644 --- a/src/reducers/__tests__/healthchecks.node.tsx +++ b/src/reducers/__tests__/healthchecks.node.tsx @@ -24,6 +24,7 @@ const HEALTHCHECKS: Healthchecks = { isRequired: true, healthchecks: [ { + key: 'ios.sdk', label: 'SDK Installed', run: async (_env: EnvironmentInfo) => { return {hasProblem: false}; @@ -37,6 +38,7 @@ const HEALTHCHECKS: Healthchecks = { isRequired: true, healthchecks: [ { + key: 'android.sdk', label: 'SDK Installed', run: async (_env: EnvironmentInfo) => { return {hasProblem: true}; @@ -50,6 +52,7 @@ const HEALTHCHECKS: Healthchecks = { isRequired: false, healthchecks: [ { + key: 'common.openssl', label: 'OpenSSL Istalled', run: async (_env: EnvironmentInfo) => { return {hasProblem: false}; diff --git a/yarn.lock b/yarn.lock index 6e02ed06c..2d73e3c17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2334,6 +2334,13 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + bser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" @@ -4054,6 +4061,13 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fb-watchman@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + fbjs-css-vars@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" @@ -4182,13 +4196,14 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== -flipper-doctor@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/flipper-doctor/-/flipper-doctor-0.4.1.tgz#bc4ce11a920e983da04e492ba04d5fe108659bb5" - integrity sha512-1N7wgM03i1aHgTgMiv4V1mWkfkfoAgbBQmt4ai7AW2rhb2ocmy6p+8I51L2rJEOVmsRP/oDafpdgVNm1ggHp4w== +flipper-doctor@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/flipper-doctor/-/flipper-doctor-0.6.0.tgz#850eaf5e2f7abfb6cb3db0a383f7aa09c35d8176" + integrity sha512-aUdsw2b+9oVs/5V3X1TGEETu5TdheriY18pt8PWbhhliln7mUv0dnpvdA02tLlLfHKQ0B07OUrHO/kFaFAfI9Q== dependencies: "@types/node" "^12.12.12" envinfo "^7.4.0" + fb-watchman "^2.0.1" flow-bin@0.115.0: version "0.115.0"