mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
c540ff7bd1
Summary: This PR is a follow up of https://github.com/facebook/react-native/pull/35075 and https://github.com/facebook/react-native/commit/1546666a6d713ef756b2f11de9581e3b2bbe08dc to ensure that even in the local e2e testing scenario the new maven approach is followed - without this, RNTestProject on Android won't work, like so: <img width="1905" alt="Screenshot 2022-10-27 at 12 15 38" src="https://user-images.githubusercontent.com/16104054/198334105-30fb2037-4e7c-4814-8c3f-2412ba0bd49f.png"> And iOS will always build everything from source every time. This PR addresses both by generating the artifacts locally, and passing them to RNTestProject as if they were coming from a url (mimicking as closely as possible the behaviour for the final user) In doing so, there's been some refactoring to prep the ground for follow up work. * refactor CI to rely less on scripts directly in the CircleCI config, but invoke .js ones * we should be able to trigger more the "manual" artifacts generation so that it will only happen once between RNTester and RNTestProject, and we can pass existing artifacts to the other flows. * once all of this in place, a very good improvement would be to be able to download the maven artifacts kind of like nightlies and stables do. This will only be viable by checking that there's no local changes, after which there needs to be logic to pull down from CircleCI the artifacts based on git commit <-> circleCI job references. --- While at it, I've also fixed the hermes-engine podspec logic for detecting if it's on CI: basically the local e2e script needs to align with the changes done here: https://github.com/facebook/react-native/commit/4b512077354eb4702ce144e9958d7513c1607275 but as you can see there, the condition was actually inconsistent across the various files, so realigned to `CI === 'true'`. We probably didn't catch that so far 'cause the other condition in the hermes podspect (existence of `hermestag_file`) is only true on release branches and this new logic has not been in any release branches yet. ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [Internal] [Fixed] - add logic to local e2e script to handle maven local for iOS and Android accordingly Pull Request resolved: https://github.com/facebook/react-native/pull/35104 Test Plan: Run ` yarn test-e2e-local -t RNTestProject -p Android` successfully. Run ` yarn test-e2e-local -t RNTestProject -p iOS` successfully. On the pod install stage, you will see `[Hermes] Using pre-built Hermes binaries from local path.` Reviewed By: dmytrorykun Differential Revision: D40893239 Pulled By: cipolleschi fbshipit-source-id: a31217ec4f177383c62292d00fabc4cbe4391cfd
74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/*
|
|
* This script, paired with test-e2e-local.js, is the full suite of
|
|
* tooling needed for a successful local testing experience.
|
|
* This script is an helper to clean up the environment fully
|
|
* before running the test suite.
|
|
*
|
|
* You should use this when switching between branches.
|
|
*
|
|
* It will:
|
|
* - clean up node modules
|
|
* - clean up the build folder (derived data, gradlew cleanAll)
|
|
* - clean up the pods folder for RNTester (pod install) (and Podfile.lock too)
|
|
* - kill all packagers
|
|
* - remove RNTestProject folder
|
|
*
|
|
* an improvements to consider:
|
|
* - an option to uninstall the apps (RNTester, RNTestProject) from emulators
|
|
*/
|
|
|
|
const {exec, exit} = require('shelljs');
|
|
|
|
const {isPackagerRunning} = require('./testing-utils');
|
|
|
|
console.info('\n** Starting the clean up process **\n');
|
|
|
|
// let's check if Metro is already running, if it is let's kill it and start fresh
|
|
if (isPackagerRunning() === 'running') {
|
|
exec("lsof -i :8081 | grep LISTEN | /usr/bin/awk '{print $2}' | xargs kill");
|
|
console.info('\n** Killed Metro **\n');
|
|
}
|
|
|
|
// Android
|
|
console.info('\n** Cleaning Gradle build artifacts **\n');
|
|
exec('./gradlew cleanAll');
|
|
exec('rm -rf /tmp/maven-local');
|
|
|
|
// iOS
|
|
console.info('\n** Nuking the derived data folder **\n');
|
|
exec('rm -rf ~/Library/Developer/Xcode/DerivedData');
|
|
|
|
// RNTester Pods
|
|
console.info('\n** Removing the RNTester Pods **\n');
|
|
exec('rm -rf packages/rn-tester/Pods');
|
|
|
|
// I'm not sure we want to also remove the lock file
|
|
// exec('rm -rf packages/rn-tester/Podfile.lock');
|
|
|
|
// RNTestProject
|
|
console.info('\n** Removing the RNTestProject folder **\n');
|
|
exec('rm -rf /tmp/RNTestProject');
|
|
|
|
// final clean up
|
|
console.info('\n** Final git level wipe **\n');
|
|
// clean unstaged changes from git
|
|
exec('git checkout -- .');
|
|
// remove all the untracked files
|
|
exec('git clean -fdx');
|
|
|
|
console.info(
|
|
'\n** Clean up process completed\nPlease remember to run yarn install if you are planning to test again\n',
|
|
);
|
|
exit(0);
|