Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
H
heroku-buildpack-nodejs
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Python-Dev
heroku-buildpack-nodejs
Commits
aab11178
Commit
aab11178
authored
Aug 09, 2013
by
zeke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
go on a diet
parent
cdad423b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
140 deletions
+19
-140
compile
bin/compile
+19
-140
No files found.
bin/compile
View file @
aab11178
#!/usr/bin/env bash
#!/usr/bin/env bash
# bin/compile <build-dir> <cache-dir>
# fail fast
set
-e
# fail fast
set
-e
# set -x # debug
# debug
# set -x
# clean up leaking environment
unset
GIT_DIR
# config
SCONS_VERSION
=
"1.2.0"
S3_BUCKET
=
"heroku-buildpack-nodejs"
# parse and derive params
BUILD_DIR
=
$1
BUILD_DIR
=
$1
CACHE_DIR
=
$2
CACHE_DIR
=
$2
LP_DIR
=
`
cd
$(
dirname
$0
)
;
cd
..
;
pwd
`
function
error
()
{
echo
" !
$*
"
>
&2
exit
1
}
function
mktmpdir
()
{
dir
=
$(
mktemp
-t
node-
$1
-XXXX
)
rm
-rf
$dir
mkdir
-p
$dir
echo
$dir
}
function
indent
()
{
c
=
's/^/ /'
case
$(
uname
)
in
Darwin
)
sed
-l
"
$c
"
;;
*
)
sed
-u
"
$c
"
;;
esac
}
function
run_npm
()
{
source
support/helpers.sh
command
=
"
$1
"
cd
$BUILD_DIR
# download latest stable version of node
HOME
=
"
$BUILD_DIR
"
$VENDORED_NODE
/bin/node
$VENDORED_NPM
/cli.js
$command
2>&1 | indent
# detect desired node version in package.json using semver
if
[
"
${
PIPESTATUS
[*]
}
"
!=
"0 0"
]
;
then
echo
" ! Failed to
$command
dependencies with npm"
exit
1
fi
}
function
manifest_versions
()
{
# if !desired
curl
"http://
${
S3_BUCKET
}
.s3.amazonaws.com/manifest.
${
1
}
"
-s
-o
- |
tr
-s
'\n'
' '
# (cached) ? cached : latest-stable
}
# else
# (latest-stable satisfies desired) ? latest-stable : download
function
resolve_version
()
{
# if desired and cached are absent, use latest
available_versions
=
"
$1
"
# if desired is absent and cache is present, use cached
requested_version
=
"
$2
"
# if desired is ">" and differs from cached and latest-stable, download
default_version
=
"
$3
"
# if desired is specific and differs from cached and latest-stable, download
args
=
""
semver.satisfies
(
'0.10.15'
,
'>=0.10.x'
)
for
version
in
$available_versions
;
do
args
=
"
${
args
}
-v
\"
${
version
}
\"
"
;
done
if
[
"
$2
"
==
""
]
;
then
args
=
"
${
args
}
-r
\"
${
default_version
}
\"
"
;
else
args
=
"
${
args
}
-r
\"
${
requested_version
}
\"
"
;
fi
evaluated_versions
=
$(
eval
$bootstrap_node
/bin/node
$LP_DIR
/vendor/node-semver/bin/semver
${
args
}
||
echo
""
)
echo
"
$evaluated_versions
"
|
tail
-n
1
}
function
package_engine_version
()
{
version
=
$(
cat
$BUILD_DIR
/package.json |
$bootstrap_node
/bin/node
$LP_DIR
/vendor/json/json engines.
$1
2>/dev/null
)
if
[
$?
==
0
]
;
then
echo
$version
|
sed
-e
's/\([<>=]\) /\1/g'
fi
}
function
package_resolve_version
()
{
package
=
"http://s3pository.heroku.com/
$engine
-
$version
.tgz"
engine
=
"
$1
"
curl
$package
-s
-o
- |
tar
xzf -
-C
$location
resolved_version
=
$(
resolve_version
"
${
engine_versions
[
$engine
]
}
"
"
${
engine_requests
[
$engine
]
}
"
"
${
engine_defaults
[
$engine
]
}
"
)
if
[
"
${
resolved_version
}
"
==
""
]
;
then
error
"Requested engine
$engine
version
${
engine_requests
[
$engine
]
}
does not match available versions:
${
engine_versions
[
$engine
]
}
"
else
echo
$resolved_version
fi
}
function
package_download
()
{
engine
=
"
$1
"
version
=
"
$2
"
location
=
"
$3
"
mkdir
-p
$location
package
=
"http://
${
S3_BUCKET
}
.s3.amazonaws.com/
$engine
-
$version
.tgz"
curl
$package
-s
-o
- |
tar
xzf -
-C
$location
}
function
cat_npm_debug_log
()
{
function
cat_npm_debug_log
()
{
if
[
-f
$BUILD_DIR
/npm-debug.log
]
;
then
if
[
-f
$BUILD_DIR
/npm-debug.log
]
;
then
cat
$BUILD_DIR
/npm-debug.log
cat
$BUILD_DIR
/npm-debug.log
fi
fi
}
}
trap
cat_npm_debug_log EXIT
trap
cat_npm_debug_log EXIT
bootstrap_node
=
$(
mktmpdir bootstrap_node
)
package_download
"nodejs"
"0.4.7"
$bootstrap_node
# make some associative arrays
declare
-A
engine_versions
declare
-A
engine_defaults
declare
-A
engine_requests
engine_defaults[
"node"
]=
"0.10.x"
engine_defaults[
"npm"
]=
"1.3.x"
engine_versions[
"node"
]=
$(
manifest_versions
"nodejs"
)
engine_requests[
"node"
]=
$(
package_engine_version
"node"
)
engine_versions[
"npm"
]=
$(
manifest_versions
"npm"
)
engine_requests[
"npm"
]=
$(
package_engine_version
"npm"
)
echo
"-----> Resolving engine versions"
echo
"-----> Resolving engine versions"
# add a warning if no version of node specified
if
[
"
${
engine_requests
[
"node"
]
}
"
==
""
]
;
then
echo
echo
"WARNING: No version of Node.js specified in package.json, see:"
| indent
echo
"https://devcenter.heroku.com/articles/nodejs-support#versions"
| indent
echo
fi
NODE_VERSION
=
$(
package_resolve_version
"node"
)
NODE_VERSION
=
$(
package_resolve_version
"node"
)
echo
"Using Node.js version:
${
NODE_VERSION
}
"
| indent
echo
"Using node version:
${
NODE_VERSION
}
"
| indent
NPM_VERSION
=
$(
package_resolve_version
"npm"
)
echo
"Using npm version:
${
NPM_VERSION
}
"
| indent
# cache directories
CACHE_STORE_DIR
=
"
$CACHE_DIR
/node_modules/
$NODE_VERSION
/
$NPM_VERSION
"
CACHE_TARGET_DIR
=
"
$BUILD_DIR
/node_modules"
# s3 packages
NODE_PACKAGE
=
"http://
${
S3_BUCKET
}
.s3.amazonaws.com/nodejs-
${
NODE_VERSION
}
.tgz"
NPM_PACKAGE
=
"http://
${
S3_BUCKET
}
.s3.amazonaws.com/npm-
${
NPM_VERSION
}
.tgz"
SCONS_PACKAGE
=
"http://
${
S3_BUCKET
}
.s3.amazonaws.com/scons-
${
SCONS_VERSION
}
.tgz"
# vendor directories
# vendor directories
VENDORED_NODE
=
"
$(
mktmpdir node
)
"
VENDORED_NODE
=
"
$(
mktmpdir node
)
"
VENDORED_NPM
=
"
$(
mktmpdir npm
)
"
VENDORED_NPM
=
"
$(
mktmpdir npm
)
"
VENDORED_SCONS
=
"
$(
mktmpdir scons
)
"
VENDORED_SCONS
=
"
$(
mktmpdir scons
)
"
# download and unpack packages
echo
"-----> Fetching node binary"
echo
"-----> Fetching Node.js binaries"
package_download
"nodejs"
"
${
NODE_VERSION
}
"
"
${
VENDORED_NODE
}
"
package_download
"npm"
"
${
NPM_VERSION
}
"
"
${
VENDORED_NPM
}
"
package_download
"scons"
"
${
SCONS_VERSION
}
"
"
${
VENDORED_SCONS
}
"
# vendor node into the slug
echo
"-----> Vendoring node binary into slug"
PATH
=
"
$BUILD_DIR
/bin:
$PATH
"
PATH
=
"
$BUILD_DIR
/bin:
$PATH
"
echo
"-----> Vendoring node into slug"
mkdir
-p
"
$BUILD_DIR
/bin"
mkdir
-p
"
$BUILD_DIR
/bin"
cp
"
$VENDORED_NODE
/bin/node"
"
$BUILD_DIR
/bin/node"
cp
"
$VENDORED_NODE
/bin/node"
"
$BUILD_DIR
/bin/node"
...
@@ -174,12 +58,7 @@ INCLUDE_PATH="$VENDORED_NODE/include"
...
@@ -174,12 +58,7 @@ INCLUDE_PATH="$VENDORED_NODE/include"
export
CPATH
=
"
$INCLUDE_PATH
:
$CPATH
"
export
CPATH
=
"
$INCLUDE_PATH
:
$CPATH
"
export
CPPPATH
=
"
$INCLUDE_PATH
:
$CPPPATH
"
export
CPPPATH
=
"
$INCLUDE_PATH
:
$CPPPATH
"
# install dependencies with npm
echo
"-----> Installing dependencies with npm"
echo
"-----> Installing dependencies with npm"
run_npm
"install --production"
run_npm
"install --production"
run_npm
"rebuild"
run_npm
"rebuild"
echo
"Dependencies installed"
| indent
echo
"Dependencies installed"
| indent
echo
"-----> Building runtime environment"
mkdir
-p
$BUILD_DIR
/.profile.d
echo
"export PATH=
\"\$
HOME/bin:
\$
HOME/node_modules/.bin:
\$
PATH
\"
"
>
$BUILD_DIR
/.profile.d/nodejs.sh
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment