Skip to content

Commit

Permalink
Fix local end-to-end testing flow (facebook#566)
Browse files Browse the repository at this point in the history
  • Loading branch information
gaearon authored and feiqitian committed Oct 25, 2016
1 parent 50a0a5a commit 0865592
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 6 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
},
"scripts": {
"build": "node scripts/build.js",
"create-react-app": "node global-cli/index.js --scripts-version \"$PWD/`tasks/clean_pack.sh`\"",
"create-react-app": "tasks/cra.sh",
"e2e": "tasks/e2e.sh",
"start": "node scripts/start.js",
"test": "node scripts/test.js --env=jsdom"
Expand Down
91 changes: 91 additions & 0 deletions tasks/cra.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#!/bin/bash
# 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.

# ******************************************************************************
# This creates an app with the global CLI and `react-scripts` from the source.
# It is useful for testing the end-to-end flow locally.
# ******************************************************************************

# Start in tasks/ even if run from root directory
cd "$(dirname "$0")"

function cleanup {
echo 'Cleaning up.'
cd $root_path
# Uncomment when snapshot testing is enabled by default:
# rm ./template/src/__snapshots__/App.test.js.snap
rm -rf $clean_path
}

# Error messages are redirected to stderr
function handle_error {
echo "$(basename $0): ERROR! An error was encountered executing line $1." 1>&2;
cleanup
echo 'Exiting with error.' 1>&2;
exit 1
}

function handle_exit {
cleanup
echo 'Exiting without error.' 1>&2;
exit
}

# Exit the script with a helpful error message when any error is encountered
trap 'set +x; handle_error $LINENO $BASH_COMMAND' ERR

# Cleanup before exit on any termination signal
trap 'set +x; handle_exit' SIGQUIT SIGTERM SIGINT SIGKILL SIGHUP

# Echo every command being executed
set -x

# Go to root
cd ..
root_path=$PWD

# ******************************************************************************
# Pack react-scripts so we can verify they work.
# ******************************************************************************

# Packing react-scripts takes some work because we want to clean it up first.
# Create a temporary clean folder that contains production only code.
# Do not overwrite any files in the current folder.
clean_path=`mktemp -d 2>/dev/null || mktemp -d -t 'clean_path'`

# Copy some of the project files to the temporary folder.
# Exclude folders that definitely won’t be part of the package from processing.
# We will strip the dev-only code there, `npm pack`, and copy the package back.
cd $root_path
rsync -av --exclude='.git' --exclude=$clean_path\
--exclude='node_modules' --exclude='build'\
'./' $clean_path >/dev/null

# Open the clean folder
cd $clean_path
# Now remove all the code relevant to development of Create React App.
files="$(find -L . -name "*.js" -type f)"
for file in $files; do
sed -i.bak '/\/\/ @remove-on-publish-begin/,/\/\/ @remove-on-publish-end/d' $file
rm $file.bak
done

# Finally, pack react-scripts
cp -rf $root_path/node_modules $clean_path
scripts_path=$clean_path/`npm pack`

# ******************************************************************************
# Now that we have packed them, call the global CLI.
# ******************************************************************************

# Go back to the root directory and run the command from here
cd $root_path
node global-cli/index.js --scripts-version=$scripts_path "$@"

# Cleanup
cleanup
11 changes: 6 additions & 5 deletions tasks/e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
# 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.

# ******************************************************************************
# This is an end-to-end test intended to run on CI.
# You can also run it locally but it's slow.
# ******************************************************************************

# Start in tasks/ even if run from root directory
cd "$(dirname "$0")"

Expand All @@ -14,7 +19,7 @@ function cleanup {
cd $root_path
# Uncomment when snapshot testing is enabled by default:
# rm ./template/src/__snapshots__/App.test.js.snap
rm -rf $temp_cli_path $temp_app_path
rm -rf $temp_cli_path $temp_app_path $clean_path
}

# Error messages are redirected to stderr
Expand Down Expand Up @@ -102,10 +107,6 @@ for file in $files; do
rm $file.bak
done

# A hacky way to avoid bundling dependencies.
# Packing with them enabled takes too much memory, and Travis crashes.
perl -i -p0e 's/bundledDependencies.*?]/bundledDependencies": []/s' package.json

# Finally, pack react-scripts
npm install
scripts_path=$clean_path/`npm pack`
Expand Down
7 changes: 7 additions & 0 deletions tasks/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@
# 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.

# ******************************************************************************
# This releases an update to the `react-scripts` package.
# Don't use `npm publish` for it.
# Read the release instructions:
# https://github.com/facebookincubator/create-react-app/blob/master/CONTRIBUTING.md#cutting-a-release
# ******************************************************************************

# Start in tasks/ even if run from root directory
cd "$(dirname "$0")"

Expand Down

0 comments on commit 0865592

Please sign in to comment.