Files
meteor/scripts/generate-dev-bundle.ps1
Ben Newman e83a1cfb8e Revert "Upgrade the npm npm package to version 4.1.2."
This reverts commit be0c8c3ee0.

Although we thought the upgrade from npm 3.10.9 to 4.1.2 was worthwhile
and safe, this breaking change proved problematic:
https://github.com/npm/npm/blob/latest/CHANGELOG.md#no-more-partial-shrinkwraps-breaking

Specifically, if a Meteor package uses `Npm.depends`, and does not yet
have an `.npm/package/npm-shrinkwrap.json` file, Meteor will create a
partial shrinkwrap file in order to install npm dependencies, but (with
the changes in npm@4) transitive dependencies of the package will no
longer be installed.

Upgrading npm to a new major version was probably too much of a change for
a 1.4.2.x release, anyway, so we're reverting it for 1.4.2.7.

In case you can't wait for 1.4.2.7, you can "fix" this problem for
previous versions of Meteor by running

  meteor npm install --global npm@3.10.9

You can test that this downgrade worked by running

  meteor npm version
2017-02-13 12:54:06 -05:00

177 lines
5.7 KiB
PowerShell

# determine the platform
# use 32bit by default
$PLATFORM = "windows_x86"
$MONGO_VERSION = "3.2.6"
$NODE_VERSION = "4.7.3"
$NPM_VERSION = "3.10.9"
$PYTHON_VERSION = "2.7.12" # For node-gyp
# take it form the environment if exists
if (Test-Path env:PLATFORM) {
$PLATFORM = (Get-Item env:PLATFORM).Value
}
$script_path = Split-Path -parent $MyInvocation.MyCommand.Definition
$CHECKOUT_DIR = Split-Path -parent $script_path
# extract the bundle version from the meteor bash script
$BUNDLE_VERSION = Select-String -Path ($CHECKOUT_DIR + "\meteor") -Pattern 'BUNDLE_VERSION=(\S+)' | % { $_.Matches[0].Groups[1].Value } | Select-Object -First 1
$BUNDLE_VERSION = $BUNDLE_VERSION.Trim()
# generate-dev-bundle-xxxxxxxx shortly
# convert relative path to absolute path because not all commands know how to deal with this themselves
$DIR = $executionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath("${script_path}\..\gdbXXX")
echo $DIR
cmd /c rmdir "$DIR" /s /q
mkdir "$DIR"
cd "$DIR"
mkdir lib
mkdir lib\node_modules
mkdir bin
cd bin
$webclient = New-Object System.Net.WebClient
$shell = New-Object -com shell.application
mkdir "$DIR\7z"
cd "$DIR\7z"
$webclient.DownloadFile("http://www.7-zip.org/a/7z1604.msi", "$DIR\7z\7z.msi")
$webclient.DownloadFile("http://www.7-zip.org/a/7z1604-extra.7z", "$DIR\7z\extra.7z")
msiexec /i 7z.msi /quiet /qn /norestart
ping -n 4 127.0.0.1 | out-null
& "C:\Program Files\7-Zip\7z.exe" x extra.7z
mv 7za.exe "$DIR\bin\7z.exe"
cd "$DIR\bin"
# download node
# same node on 32bit vs 64bit?
$node_link = "http://nodejs.org/dist/v${NODE_VERSION}/win-x86/node.exe"
$webclient.DownloadFile($node_link, "$DIR\bin\node.exe")
# On Windows we provide a reliable version of python.exe for use by
# node-gyp (the tool that rebuilds binary node modules). #WinPy
cd "$DIR"
$py_s3_url = "https://s3.amazonaws.com/com.meteor.static/windows-python/python-${PYTHON_VERSION}.7z"
$py_archive = "${DIR}\python.7z"
$webclient.DownloadFile($py_s3_url, $py_archive)
& "$DIR\bin\7z.exe" x "$py_archive"
rm -Recurse -Force "$py_archive"
$env:PATH = "${DIR}\python;${env:PATH}"
python --version
# download initial version of npm
$npm_zip = "$DIR\bin\npm.zip"
# These dist/npm archives were only published for 1.x versions of npm, and
# this is the most recent one.
$npm_link = "https://nodejs.org/dist/npm/npm-1.4.12.zip"
$webclient.DownloadFile($npm_link, $npm_zip)
$zip = $shell.NameSpace($npm_zip)
foreach($item in $zip.items()) {
$shell.Namespace("$DIR\bin").copyhere($item, 0x14) # 0x10 - overwrite, 0x4 - no dialog
}
rm -Recurse -Force $npm_zip
rm -Recurse -Force "$DIR\7z"
# add bin to the front of the path so we can use our own node for building
$env:PATH = "${DIR}\bin;${env:PATH}"
# Install the version of npm that we're actually going to expose from the
# dev bundle. Note that we use npm@1.4.12 to install npm@${NPM_VERSION}.
cd "${DIR}\lib"
npm install npm@${NPM_VERSION}
rm -Recurse -Force "${DIR}\bin\node_modules"
copy "${CHECKOUT_DIR}\scripts\npm.cmd" "${DIR}\bin\npm.cmd"
npm version
# npm depends on a hardcoded file path to node-gyp, so we need this to be
# un-flattened
cd node_modules\npm
npm install node-gyp
# Make sure node-gyp knows how to find its build tools.
$env:PYTHON = "${DIR}\python\python.exe"
$env:GYP_MSVS_VERSION = "2015"
$env:HOME = "$DIR";
$env:USERPROFILE = "$DIR";
# Make node-gyp install Node headers and libraries in $DIR\.node-gyp\.
# https://github.com/nodejs/node-gyp/blob/4ee31329e0/lib/node-gyp.js#L52
& "${DIR}\bin\node.exe" node_modules\node-gyp\bin\node-gyp.js install
$include_path = "${DIR}\.node-gyp\${NODE_VERSION}\include\node"
echo "Contents of ${include_path}:"
dir "$include_path"
# install dev-bundle-package.json
# use short folder names
# b for build
mkdir "$DIR\b\t"
cd "$DIR\b\t"
npm config set loglevel error
node "${CHECKOUT_DIR}\scripts\dev-bundle-server-package.js" | Out-File -FilePath package.json -Encoding ascii
npm install
npm shrinkwrap
mkdir -Force "${DIR}\server-lib\node_modules"
cmd /c robocopy "${DIR}\b\t\node_modules" "${DIR}\server-lib\node_modules" /e /nfl /ndl
mkdir -Force "${DIR}\etc"
Move-Item package.json "${DIR}\etc\"
Move-Item npm-shrinkwrap.json "${DIR}\etc\"
mkdir -Force "${DIR}\b\p"
cd "${DIR}\b\p"
node "${CHECKOUT_DIR}\scripts\dev-bundle-tool-package.js" | Out-File -FilePath package.json -Encoding ascii
npm install
cmd /c robocopy "${DIR}\b\p\node_modules" "${DIR}\lib\node_modules" /e /nfl /ndl
cd "$DIR"
cmd /c rmdir "${DIR}\b" /s /q
cd "$DIR"
mkdir "$DIR\mongodb"
mkdir "$DIR\mongodb\bin"
# download Mongo
$mongo_name = "mongodb-win32-i386-${MONGO_VERSION}"
If ($PLATFORM -eq 'windows_x86_64') {
# 64-bit would be mongodb-win32-x86_64-2008plus-${MONGO_VERSION}.zip
$mongo_name = "mongodb-win32-x86_64-2008plus-${MONGO_VERSION}"
}
$mongo_link = "https://fastdl.mongodb.org/win32/${mongo_name}.zip"
$mongo_zip = "$DIR\mongodb\mongo.zip"
$webclient.DownloadFile($mongo_link, $mongo_zip)
$zip = $shell.NameSpace($mongo_zip)
foreach($item in $zip.items()) {
$shell.Namespace("$DIR\mongodb").copyhere($item, 0x14) # 0x10 - overwrite, 0x4 - no dialog
}
cp "$DIR\mongodb\$mongo_name\bin\mongod.exe" $DIR\mongodb\bin
cp "$DIR\mongodb\$mongo_name\bin\mongo.exe" $DIR\mongodb\bin
rm -Recurse -Force $mongo_zip
rm -Recurse -Force "$DIR\mongodb\$mongo_name"
cd $DIR
# mark the version
echo "${BUNDLE_VERSION}" | Out-File .bundle_version.txt -Encoding ascii
cd "$DIR\.."
# rename the folder with the devbundle
cmd /c rename "$DIR" "dev_bundle_${PLATFORM}_${BUNDLE_VERSION}"
& "C:\Program Files\7-zip\7z.exe" a -ttar dev_bundle.tar "dev_bundle_${PLATFORM}_${BUNDLE_VERSION}"
& "C:\Program Files\7-zip\7z.exe" a -tgzip "${CHECKOUT_DIR}\dev_bundle_${PLATFORM}_${BUNDLE_VERSION}.tar.gz" dev_bundle.tar
del dev_bundle.tar
cmd /c rmdir "dev_bundle_${PLATFORM}_${BUNDLE_VERSION}" /s /q
echo "Done building Dev Bundle!"