From 29859abdefadc52da0626fa257b3a09b926912f8 Mon Sep 17 00:00:00 2001 From: Tommy Nguyen <4123478+tido64@users.noreply.github.com> Date: Wed, 4 Sep 2024 21:07:12 +0200 Subject: [PATCH] fix(cli): invalidate state if `pod install` was not run (#3330) --- .changeset/ninety-islands-shop.md | 6 ++++++ packages/cli/src/build/android.ts | 4 +++- packages/cli/src/build/ios.ts | 7 +++++-- packages/cli/src/build/macos.ts | 4 +++- packages/tools-react-native/src/cache.ts | 8 ++++++++ 5 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 .changeset/ninety-islands-shop.md diff --git a/.changeset/ninety-islands-shop.md b/.changeset/ninety-islands-shop.md new file mode 100644 index 000000000..78e38f1bc --- /dev/null +++ b/.changeset/ninety-islands-shop.md @@ -0,0 +1,6 @@ +--- +"@rnx-kit/tools-react-native": patch +"@rnx-kit/cli": patch +--- + +Fix context cache not taking `pod install` state into account diff --git a/packages/cli/src/build/android.ts b/packages/cli/src/build/android.ts index 57460de22..ca76fb2f9 100644 --- a/packages/cli/src/build/android.ts +++ b/packages/cli/src/build/android.ts @@ -1,4 +1,5 @@ import type { Config } from "@react-native-community/cli-types"; +import { invalidateState } from "@rnx-kit/tools-react-native/cache"; import ora from "ora"; import type { AndroidBuildParams } from "./types"; import { watch } from "./watcher"; @@ -12,8 +13,9 @@ export function buildAndroid( ): Promise { const { sourceDir } = config.project.android ?? {}; if (!sourceDir) { - logger.fail("No Android project was found"); + invalidateState(); process.exitCode = 1; + logger.fail("No Android project was found"); return Promise.resolve(null); } diff --git a/packages/cli/src/build/ios.ts b/packages/cli/src/build/ios.ts index 983dd22e0..a3229b3c0 100644 --- a/packages/cli/src/build/ios.ts +++ b/packages/cli/src/build/ios.ts @@ -1,4 +1,5 @@ import type { Config } from "@react-native-community/cli-types"; +import { invalidateState } from "@rnx-kit/tools-react-native/cache"; import * as path from "node:path"; import ora from "ora"; import type { BuildResult } from "./apple"; @@ -13,20 +14,22 @@ export function buildIOS( const { platform } = buildParams; const { sourceDir, xcodeProject } = config.project[platform] ?? {}; if (!sourceDir || !xcodeProject) { + invalidateState(); + process.exitCode = 1; const root = platform.substring(0, platform.length - 2); logger.fail( `No ${root}OS project was found; did you forget to run 'pod install'?` ); - process.exitCode = 1; return Promise.resolve(1); } const { name, path: projectDir } = xcodeProject; if (!name?.endsWith(".xcworkspace")) { + invalidateState(); + process.exitCode = 1; logger.fail( "No Xcode workspaces were found; did you forget to run `pod install`?" ); - process.exitCode = 1; return Promise.resolve(1); } diff --git a/packages/cli/src/build/macos.ts b/packages/cli/src/build/macos.ts index 7b10bf61b..1c68e9bb0 100644 --- a/packages/cli/src/build/macos.ts +++ b/packages/cli/src/build/macos.ts @@ -1,4 +1,5 @@ import type { Config } from "@react-native-community/cli-types"; +import { invalidateState } from "@rnx-kit/tools-react-native/cache"; import * as fs from "node:fs"; import * as path from "node:path"; import ora from "ora"; @@ -24,10 +25,11 @@ export function buildMacOS( const sourceDir = "macos"; const workspaces = findXcodeWorkspaces(sourceDir); if (workspaces.length === 0) { + invalidateState(); + process.exitCode = 1; logger.fail( "No Xcode workspaces were found; specify an Xcode workspace with `--workspace`" ); - process.exitCode = 1; return Promise.resolve(1); } diff --git a/packages/tools-react-native/src/cache.ts b/packages/tools-react-native/src/cache.ts index 373cc794b..a5c074186 100644 --- a/packages/tools-react-native/src/cache.ts +++ b/packages/tools-react-native/src/cache.ts @@ -67,6 +67,14 @@ export function getSavedState( return fs.existsSync(stateFile) && fs.readFileSync(stateFile, UTF8); } +export function invalidateState( + projectRoot = process.cwd(), + /** @internal */ fs = nodefs +) { + fs.rmSync(configCachePath(projectRoot)); + fs.rmSync(cacheStatePath(projectRoot)); +} + export function loadConfigFromCache( projectRoot: string, /** @internal */ fs = nodefs