mirror of
https://github.com/meteor/meteor.git
synced 2026-01-09 23:58:19 -05:00
If you run `meteor npm install` in bundle/programs/server, this change means dev_bundle/lib/node_modules/.bin/node-pre-gyp will be available to packages that need to rebuild binary dependencies, to pick just one important example.
152 lines
4.9 KiB
Bash
Executable File
152 lines
4.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
set -u
|
|
|
|
# Read the bundle version from the meteor shell script.
|
|
BUNDLE_VERSION=$(perl -ne 'print $1 if /BUNDLE_VERSION=(\S+)/' meteor)
|
|
if [ -z "$BUNDLE_VERSION" ]; then
|
|
echo "BUNDLE_VERSION not found"
|
|
exit 1
|
|
fi
|
|
|
|
source "$(dirname $0)/build-dev-bundle-common.sh"
|
|
echo CHECKOUT DIR IS "$CHECKOUT_DIR"
|
|
echo BUILDING DEV BUNDLE "$BUNDLE_VERSION" IN "$DIR"
|
|
|
|
cd "$DIR"
|
|
|
|
S3_HOST="s3.amazonaws.com/com.meteor.jenkins"
|
|
|
|
# Update these values after building the dev-bundle-node Jenkins project.
|
|
# Also make sure to update NODE_VERSION in generate-dev-bundle.ps1.
|
|
NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/${NODE_TGZ}"
|
|
echo "Downloading Node from ${NODE_URL}"
|
|
curl "${NODE_URL}" | tar zx --strip-components 1
|
|
|
|
# Update these values after building the dev-bundle-mongo Jenkins project.
|
|
# Also make sure to update MONGO_VERSION in generate-dev-bundle.ps1.
|
|
MONGO_VERSION=2.6.7
|
|
MONGO_BUILD_NUMBER=6
|
|
MONGO_TGZ="mongo_${PLATFORM}_v${MONGO_VERSION}.tar.gz"
|
|
if [ -f "${CHECKOUT_DIR}/${MONGO_TGZ}" ] ; then
|
|
tar zxf "${CHECKOUT_DIR}/${MONGO_TGZ}"
|
|
else
|
|
MONGO_URL="https://${S3_HOST}/dev-bundle-mongo-${MONGO_BUILD_NUMBER}/${MONGO_TGZ}"
|
|
echo "Downloading Mongo from ${MONGO_URL}"
|
|
curl "${MONGO_URL}" | tar zx
|
|
fi
|
|
|
|
# export path so we use the downloaded node and npm
|
|
export PATH="$DIR/bin:$PATH"
|
|
|
|
which node
|
|
which npm
|
|
|
|
# When adding new node modules (or any software) to the dev bundle,
|
|
# remember to update LICENSE.txt! Also note that we include all the
|
|
# packages that these depend on, so watch out for new dependencies when
|
|
# you update version numbers.
|
|
|
|
# First, we install the modules that are dependencies of tools/server/boot.js:
|
|
# the modules that users of 'meteor bundle' will also have to install. We save a
|
|
# shrinkwrap file with it, too. We do this in a separate place from
|
|
# $DIR/server-lib/node_modules originally, because otherwise 'npm shrinkwrap'
|
|
# will get confused by the pre-existing modules.
|
|
mkdir "${DIR}/build/npm-server-install"
|
|
cd "${DIR}/build/npm-server-install"
|
|
node "${CHECKOUT_DIR}/scripts/dev-bundle-server-package.js" >package.json
|
|
npm install
|
|
npm shrinkwrap
|
|
|
|
mkdir -p "${DIR}/server-lib/node_modules"
|
|
# This ignores the stuff in node_modules/.bin, but that's OK.
|
|
cp -R node_modules/* "${DIR}/server-lib/node_modules/"
|
|
|
|
mkdir -p "${DIR}/etc"
|
|
mv package.json npm-shrinkwrap.json "${DIR}/etc/"
|
|
|
|
# Fibers ships with compiled versions of its C code for a dozen platforms. This
|
|
# bloats our dev bundle. Remove all the ones other than our
|
|
# architecture. (Expression based on build.js in fibers source.)
|
|
shrink_fibers () {
|
|
FIBERS_ARCH=$(node -p -e 'process.platform + "-" + process.arch + "-v8-" + /[0-9]+\.[0-9]+/.exec(process.versions.v8)[0]')
|
|
mv $FIBERS_ARCH ..
|
|
rm -rf *
|
|
mv ../$FIBERS_ARCH .
|
|
}
|
|
|
|
cd "$DIR/server-lib/node_modules/fibers/bin"
|
|
shrink_fibers
|
|
|
|
# Now, install the npm modules which are the dependencies of the command-line
|
|
# tool.
|
|
mkdir "${DIR}/build/npm-tool-install"
|
|
cd "${DIR}/build/npm-tool-install"
|
|
node "${CHECKOUT_DIR}/scripts/dev-bundle-tool-package.js" >package.json
|
|
npm install
|
|
cp -R node_modules/* "${DIR}/lib/node_modules/"
|
|
# Also include node_modules/.bin, so that `meteor npm` can make use of
|
|
# commands like node-gyp and node-pre-gyp.
|
|
cp -R node_modules/.bin "${DIR}/lib/node_modules/"
|
|
|
|
cd "${DIR}/lib"
|
|
|
|
# Clean up some bulky stuff.
|
|
cd node_modules
|
|
|
|
# Used to delete bulky subtrees. It's an error (unlike with rm -rf) if they
|
|
# don't exist, because that might mean it moved somewhere else and we should
|
|
# update the delete line.
|
|
delete () {
|
|
if [ ! -e "$1" ]; then
|
|
echo "Missing (moved?): $1"
|
|
exit 1
|
|
fi
|
|
rm -rf "$1"
|
|
}
|
|
|
|
delete browserstack-webdriver/docs
|
|
delete browserstack-webdriver/lib/test
|
|
|
|
delete sqlite3/deps
|
|
delete wordwrap/test
|
|
delete moment/min
|
|
|
|
# Remove esprima tests to reduce the size of the dev bundle
|
|
find . -path '*/esprima-fb/test' | xargs rm -rf
|
|
|
|
cd "$DIR/lib/node_modules/fibers/bin"
|
|
shrink_fibers
|
|
|
|
# Download BrowserStackLocal binary.
|
|
BROWSER_STACK_LOCAL_URL="https://browserstack-binaries.s3.amazonaws.com/BrowserStackLocal-07-03-14-$OS-$ARCH.gz"
|
|
|
|
cd "$DIR/build"
|
|
curl -O $BROWSER_STACK_LOCAL_URL
|
|
gunzip BrowserStackLocal*
|
|
mv BrowserStackLocal* BrowserStackLocal
|
|
mv BrowserStackLocal "$DIR/bin/"
|
|
|
|
# Sanity check to see if we're not breaking anything by replacing npm
|
|
INSTALLED_NPM_VERSION=$(cat "$DIR/lib/node_modules/npm/package.json" |
|
|
xargs -0 node -e "console.log(JSON.parse(process.argv[1]).version)")
|
|
if [ "$INSTALLED_NPM_VERSION" != "2.15.1" ]; then
|
|
echo "Unexpected NPM version in lib/node_modules: $INSTALLED_NPM_VERSION"
|
|
echo "We will be replacing it with our own version because the bundled node"
|
|
echo "is built using PORTABLE=1, which makes npm look for node relative to"
|
|
echo "its own directory."
|
|
echo "Update this check if you know what you're doing."
|
|
exit 1
|
|
fi
|
|
|
|
echo BUNDLING
|
|
|
|
cd "$DIR"
|
|
echo "${BUNDLE_VERSION}" > .bundle_version.txt
|
|
rm -rf build CHANGELOG.md ChangeLog LICENSE README.md
|
|
|
|
tar czf "${CHECKOUT_DIR}/dev_bundle_${PLATFORM}_${BUNDLE_VERSION}.tar.gz" .
|
|
|
|
echo DONE
|