@@ -6,6 +6,10 @@ set -o pipefail # don't ignore exit codes when piping output
66set -o nounset # fail on unset variables
77unset GIT_DIR # Avoid GIT_DIR leak from previous build steps
88
9+ # ## Constants
10+
11+ DEFAULT_CACHE=" node_modules bower_components"
12+
913# ## Configure directories
1014
1115BUILD_DIR=${1:- }
@@ -22,6 +26,8 @@ export PATH="$BUILD_DIR/.heroku/node/bin":$PATH
2226export BUILDPACK_PATH=$BP_DIR
2327source $BP_DIR /compile-extensions/lib/common
2428# END CF Common
29+ LOG_FILE=' /tmp/node-build-log.txt'
30+ echo " " > " $LOG_FILE "
2531
2632# ## Load dependencies
2733
@@ -37,7 +43,9 @@ source $BP_DIR/lib/dependencies.sh
3743
3844handle_failure () {
3945 header " Build failed"
40- failure_message | indent
46+ warn_untracked_dependencies " $LOG_FILE "
47+ warn_angular_resolution " $LOG_FILE "
48+ failure_message | output " $LOG_FILE "
4149}
4250trap ' handle_failure' ERR
4351
@@ -60,8 +68,8 @@ create_env() {
6068}
6169
6270header " Creating runtime environment"
63- create_env # can't indent the whole thing because piping causes subshells; no exporting possible
64- list_node_config | indent
71+ create_env # can't pipe the whole thing because piping causes subshells, preventing exports
72+ list_node_config | output " $LOG_FILE "
6573
6674install_bins () {
6775 local node_engine=$( read_json " $BUILD_DIR /package.json" " .engines.node" )
@@ -79,38 +87,37 @@ install_bins() {
7987 if [ -n " $iojs_engine " ]; then
8088 warn_node_engine " $iojs_engine "
8189 install_iojs " $iojs_engine " " $BUILD_DIR /.heroku/node"
90+ echo " Using bundled npm version for iojs compatibility: ` npm --version` "
8291 else
8392 warn_node_engine " $node_engine "
8493 install_nodejs " $node_engine " " $BUILD_DIR /.heroku/node"
94+ install_npm " $npm_engine " " $BUILD_DIR /.heroku/node"
8595 fi
86- install_npm " $npm_engine " " $BUILD_DIR /.heroku/node"
8796 warn_old_npm
8897}
8998
9099header " Installing binaries"
91- install_bins | indent
100+ install_bins | output " $LOG_FILE "
92101
93102restore_cache () {
94- local cache_status=$( get_cache_status)
103+ local cache_status=" $( get_cache_status) "
95104
96- if [ " $cache_status " == " disabled" ]; then
97- echo " Skipping (cache disabled)"
98- elif [ " $cache_status " == " invalidated" ]; then
99- echo " Skipping (cache invalidated)"
100- else
105+ if [ " $cache_status " == " valid" ]; then
101106 local cache_directories=$( get_cache_directories)
102107 if [ " $cache_directories " == " " ]; then
103- echo " Loading 1 from cacheDirectories (default):"
104- restore_cache_directories " $BUILD_DIR " " $CACHE_DIR " " node_modules "
108+ echo " Loading 2 from cacheDirectories (default):"
109+ restore_cache_directories " $BUILD_DIR " " $CACHE_DIR " " $DEFAULT_CACHE "
105110 else
106111 echo " Loading $( echo $cache_directories | wc -w | xargs) from cacheDirectories (package.json):"
107112 restore_cache_directories " $BUILD_DIR " " $CACHE_DIR " $cache_directories
108113 fi
114+ else
115+ echo " Skipping cache restore ($cache_status )"
109116 fi
110117}
111118
112119header " Restoring cache"
113- restore_cache | indent
120+ restore_cache | output " $LOG_FILE "
114121
115122build_dependencies () {
116123 if $PREBUILD ; then
@@ -122,28 +129,32 @@ build_dependencies() {
122129}
123130
124131header " Building dependencies"
125- build_dependencies | indent
132+ build_dependencies | output " $LOG_FILE "
126133
127134cache_build () {
128135 local cache_directories=$( get_cache_directories)
136+
129137 echo " Clearing previous node cache"
130138 clear_cache
131- if [ " $cache_directories " == " " ]; then
132- echo " Saving 1 cacheDirectories (default):"
133- save_cache_directories " $BUILD_DIR " " $CACHE_DIR " " node_modules"
139+ if ! ${NODE_MODULES_CACHE:- true} ; then
140+ echo " Skipping cache save (disabled by config)"
141+ elif [ " $cache_directories " == " " ]; then
142+ echo " Saving 2 cacheDirectories (default):"
143+ save_cache_directories " $BUILD_DIR " " $CACHE_DIR " " $DEFAULT_CACHE "
134144 else
135145 echo " Saving $( echo $cache_directories | wc -w | xargs) cacheDirectories (package.json):"
136146 save_cache_directories " $BUILD_DIR " " $CACHE_DIR " $cache_directories
137147 fi
148+ save_signature
138149}
139150
140151header " Caching build"
141- cache_build | indent
152+ cache_build | output " $LOG_FILE "
142153
143154summarize_build () {
144155 cd $BUILD_DIR
145156 (npm ls --depth=0 | tail -n +2 || true) 2> /dev/null
146157}
147158
148159header " Build succeeded!"
149- summarize_build | indent
160+ summarize_build | output " $LOG_FILE "
0 commit comments