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
5d40c3e7
Commit
5d40c3e7
authored
Jul 26, 2017
by
Jeremy Morrell
Committed by
GitHub
Jul 26, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve error messages when bin version requirements are invalid (#457)
parent
ac5fb636
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
194 additions
and
6 deletions
+194
-6
compile
bin/compile
+3
-0
binaries.sh
lib/binaries.sh
+3
-3
failure.sh
lib/failure.sh
+107
-1
README.md
test/fixtures/invalid-node-semver/README.md
+1
-0
package.json
test/fixtures/invalid-node-semver/package.json
+14
-0
package.json
test/fixtures/yarn-invalid-semver/package.json
+12
-0
yarn.lock
test/fixtures/yarn-invalid-semver/yarn.lock
+6
-0
package.json
test/fixtures/yarn-invalid/package.json
+12
-0
yarn.lock
test/fixtures/yarn-invalid/yarn.lock
+6
-0
run
test/run
+30
-2
No files found.
bin/compile
View file @
5d40c3e7
...
@@ -42,6 +42,9 @@ echo "" > "$LOG_FILE"
...
@@ -42,6 +42,9 @@ echo "" > "$LOG_FILE"
handle_failure
()
{
handle_failure
()
{
header
"Build failed"
header
"Build failed"
fail_yarn_lockfile_outdated
"
$LOG_FILE
"
fail_yarn_lockfile_outdated
"
$LOG_FILE
"
fail_node_install
"
$LOG_FILE
"
fail_yarn_install
"
$LOG_FILE
"
fail_invalid_semver
"
$LOG_FILE
"
warn_untracked_dependencies
"
$LOG_FILE
"
warn_untracked_dependencies
"
$LOG_FILE
"
warn_angular_resolution
"
$LOG_FILE
"
warn_angular_resolution
"
$LOG_FILE
"
warn_missing_devdeps
"
$LOG_FILE
"
warn_missing_devdeps
"
$LOG_FILE
"
...
...
lib/binaries.sh
View file @
5d40c3e7
...
@@ -15,7 +15,7 @@ install_yarn() {
...
@@ -15,7 +15,7 @@ install_yarn() {
echo
"Resolving yarn version
${
version
:-
(latest)
}
..."
echo
"Resolving yarn version
${
version
:-
(latest)
}
..."
if
!
read
number url < <
(
curl
--silent
--get
--retry
5
--retry-max-time
15
--data-urlencode
"range=
$version
"
"https://nodebin.herokai.com/v1/yarn/
$platform
/latest.txt"
)
;
then
if
!
read
number url < <
(
curl
--silent
--get
--retry
5
--retry-max-time
15
--data-urlencode
"range=
$version
"
"https://nodebin.herokai.com/v1/yarn/
$platform
/latest.txt"
)
;
then
echo
"Unable to resolve; does that version exist?"
&&
false
fail_bin_install yarn
$version
;
fi
fi
echo
"Downloading and installing yarn (
$number
)..."
echo
"Downloading and installing yarn (
$number
)..."
...
@@ -41,7 +41,7 @@ install_nodejs() {
...
@@ -41,7 +41,7 @@ install_nodejs() {
echo
"Resolving node version
$version
..."
echo
"Resolving node version
$version
..."
if
!
read
number url < <
(
curl
--silent
--get
--retry
5
--retry-max-time
15
--data-urlencode
"range=
$version
"
"https://nodebin.herokai.com/v1/node/
$platform
/latest.txt"
)
;
then
if
!
read
number url < <
(
curl
--silent
--get
--retry
5
--retry-max-time
15
--data-urlencode
"range=
$version
"
"https://nodebin.herokai.com/v1/node/
$platform
/latest.txt"
)
;
then
echo
"Unable to resolve; does that version exist?"
&&
false
fail_bin_install node
$version
;
fi
fi
echo
"Downloading and installing node
$number
..."
echo
"Downloading and installing node
$number
..."
...
@@ -61,7 +61,7 @@ install_iojs() {
...
@@ -61,7 +61,7 @@ install_iojs() {
echo
"Resolving iojs version
${
version
:-
(latest stable)
}
..."
echo
"Resolving iojs version
${
version
:-
(latest stable)
}
..."
if
!
read
number url < <
(
curl
--silent
--get
--retry
5
--retry-max-time
15
--data-urlencode
"range=
$version
"
"https://nodebin.herokai.com/v1/iojs/
$platform
/latest.txt"
)
;
then
if
!
read
number url < <
(
curl
--silent
--get
--retry
5
--retry-max-time
15
--data-urlencode
"range=
$version
"
"https://nodebin.herokai.com/v1/iojs/
$platform
/latest.txt"
)
;
then
echo
"Unable to resolve; does that version exist?"
&&
false
fail_bin_install iojs
$version
;
fi
fi
echo
"Downloading and installing iojs
$number
..."
echo
"Downloading and installing iojs
$number
..."
...
...
lib/failure.sh
View file @
5d40c3e7
...
@@ -123,7 +123,7 @@ fail_yarn_lockfile_outdated() {
...
@@ -123,7 +123,7 @@ fail_yarn_lockfile_outdated() {
echo
""
echo
""
warn
"Outdated Yarn lockfile
warn
"Outdated Yarn lockfile
Your application contains a Yarn lockfile (yarn.lock) which does not
Your application contains a Yarn lockfile (yarn.lock) which does not
match the dependencies in package.json. This can happen if you use npm
match the dependencies in package.json. This can happen if you use npm
to install or update a dependency instead of Yarn.
to install or update a dependency instead of Yarn.
...
@@ -139,6 +139,112 @@ fail_yarn_lockfile_outdated() {
...
@@ -139,6 +139,112 @@ fail_yarn_lockfile_outdated() {
fi
fi
}
}
fail_bin_install
()
{
local
bin
=
"
$1
"
local
version
=
"
$2
"
# re-curl the result, saving off the reason for the failure this time
local
error
=
$(
curl
--silent
--get
--retry
5
--retry-max-time
15
--data-urlencode
"range=
$version
"
"https://nodebin.herokai.com/v1/
$bin
/
$platform
/latest.txt"
)
if
[[
$error
=
"No result"
]]
;
then
case
$bin
in
node
)
echo
"Could not find Node version corresponding to version requirement:
$version
"
;;
iojs
)
echo
"Could not find Iojs version corresponding to version requirement:
$version
"
;;
yarn
)
echo
"Could not find Yarn version corresponding to version requirement:
$version
"
;;
esac
else
echo
"Error: Invalid semantic version
\"
$version
\"
"
fi
false
}
fail_node_install
()
{
local
log_file
=
"
$1
"
local
node_engine
=
$(
read_json
"
$BUILD_DIR
/package.json"
".engines.node"
)
if
grep
-qi
'Could not find Node version corresponding to version requirement'
"
$log_file
"
;
then
mcount
"failures.invalid-node-version"
echo
""
warn
"No matching version found for Node:
$node_engine
Heroku supports the latest Stable version of Node.js as well as all
active LTS (Long-Term-Support) versions, however you have specified
a version in package.json (
$node_engine
) that does not correspond to
any published version of Node.js.
You should always specify a Node.js version that matches the runtime
you’re developing and testing with. To find your version locally:
$
node --version
v6.11.1
Use the engines section of your package.json to specify the version of
Node.js to use on Heroku. Drop the ‘v’ to save only the version number:
\"
engines
\"
: {
\"
node
\"
:
\"
6.11.1
\"
}
"
https://kb.heroku.com/why-is-my-node-js-build-failing-because-of-no-matching-node-versions
exit
1
fi
}
fail_yarn_install
()
{
local
log_file
=
"
$1
"
local
yarn_engine
=
$(
read_json
"
$BUILD_DIR
/package.json"
".engines.yarn"
)
if
grep
-qi
'Could not find Yarn version corresponding to version requirement'
"
$log_file
"
;
then
mcount
"failures.invalid-yarn-version"
echo
""
warn
"No matching version found for Yarn:
$yarn_engine
Heroku supports every version of Yarn published on npm, however you have
specified a version in package.json (
$yarn_engine
) that does not correspond
to any published version of Yarn. You can see a list of all published
versions of Yarn with the following command:
$
yarn info yarn versions
You should always specify a Yarn version that matches the version
you’re developing and testing with. To find your version locally:
$
yarn --version
0.27.5
Use the engines section of your package.json to specify the version of
Yarn to use on Heroku.
\"
engines
\"
: {
\"
yarn
\"
:
\"
0.27.5
\"
}
"
https://kb.heroku.com/why-is-my-node-js-build-failing-because-of-no-matching-yarn-versions
exit
1
fi
}
fail_invalid_semver
()
{
local
log_file
=
"
$1
"
if
grep
-qi
'Error: Invalid semantic version'
"
$log_file
"
;
then
mcount
"failures.invalid-semver-requirement"
echo
""
warn
"Invalid semver requirement
Node, Yarn, and npm adhere to semver, the semantic versioning convention
popularized by GitHub.
http://semver.org/
However you have specified a version requirement that is not a valid
semantic version.
"
https://kb.heroku.com/why-is-my-node-js-build-failing-because-of-an-invalid-semver-requirement
exit
1
fi
}
warning
()
{
warning
()
{
local
tip
=
${
1
:-}
local
tip
=
${
1
:-}
local
url
=
${
2
:-
https
://devcenter.heroku.com/articles/nodejs-support
}
local
url
=
${
2
:-
https
://devcenter.heroku.com/articles/nodejs-support
}
...
...
test/fixtures/invalid-node-semver/README.md
0 → 100644
View file @
5d40c3e7
A fake README, to keep npm from polluting stderr.
\ No newline at end of file
test/fixtures/invalid-node-semver/package.json
0 → 100644
View file @
5d40c3e7
{
"name"
:
"node-buildpack-test-app"
,
"version"
:
"0.0.1"
,
"description"
:
"node buildpack integration test app"
,
"repository"
:
{
"type"
:
"git"
,
"url"
:
"http://github.com/example/example.git"
},
"dependencies"
:
{
},
"engines"
:
{
"node"
:
"stable"
}
}
test/fixtures/yarn-invalid-semver/package.json
0 → 100644
View file @
5d40c3e7
{
"name"
:
"yarn"
,
"version"
:
"1.0.0"
,
"main"
:
"index.js"
,
"license"
:
"MIT"
,
"engines"
:
{
"yarn"
:
"0.17q"
},
"dependencies"
:
{
"lodash"
:
"^4.16.4"
}
}
test/fixtures/yarn-invalid-semver/yarn.lock
0 → 100644
View file @
5d40c3e7
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
lodash:
version "4.16.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127"
test/fixtures/yarn-invalid/package.json
0 → 100644
View file @
5d40c3e7
{
"name"
:
"yarn"
,
"version"
:
"1.0.0"
,
"main"
:
"index.js"
,
"license"
:
"MIT"
,
"engines"
:
{
"yarn"
:
"0.171"
},
"dependencies"
:
{
"lodash"
:
"^4.16.4"
}
}
test/fixtures/yarn-invalid/yarn.lock
0 → 100644
View file @
5d40c3e7
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
lodash:
version "4.16.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127"
test/run
View file @
5d40c3e7
...
@@ -89,6 +89,24 @@ testYarnSemver() {
...
@@ -89,6 +89,24 @@ testYarnSemver() {
assertCapturedSuccess
assertCapturedSuccess
}
}
testYarnInvalid
()
{
compile
"yarn-invalid"
assertCaptured
"Resolving yarn version 0.171"
assertCaptured
"Could not find Yarn version corresponding to version requirement: 0.171"
assertCaptured
"No matching version found for Yarn: 0.171"
assertCaptured
"https://kb.heroku.com/why-is-my-node-js-build-failing-because-of-no-matching-yarn-versions"
assertCapturedError
}
testYarnSemverInvalid
()
{
compile
"yarn-invalid-semver"
assertCaptured
"Resolving yarn version 0.17q"
assertCaptured
"Error: Invalid semantic version
\"
0.17q
\"
"
assertCaptured
"Invalid semver requirement"
assertCaptured
"https://kb.heroku.com/why-is-my-node-js-build-failing-because-of-an-invalid-semver-requirement"
assertCapturedError
}
testYarnRun
()
{
testYarnRun
()
{
compile
"yarn-run"
compile
"yarn-run"
assertCaptured
"Running heroku-postbuild (yarn)"
assertCaptured
"Running heroku-postbuild (yarn)"
...
@@ -345,14 +363,24 @@ testConcurrencyCustomLimit() {
...
@@ -345,14 +363,24 @@ testConcurrencyCustomLimit() {
testInvalidNode
()
{
testInvalidNode
()
{
compile
"invalid-node"
compile
"invalid-node"
assertCaptured
"Resolving node version 0.11.333"
assertCaptured
"Resolving node version 0.11.333"
assertCaptured
"Unable to resolve"
assertCaptured
"Could not find Node version corresponding to version requirement: 0.11.333"
assertCaptured
"No matching version found for Node: 0.11.333"
assertCaptured
"https://kb.heroku.com/why-is-my-node-js-build-failing-because-of-no-matching-node-versions"
assertCapturedError
}
testInvalidNodeSemver
()
{
compile
"invalid-node-semver"
assertCaptured
"Resolving node version stable"
assertCaptured
"Error: Invalid semantic version
\"
stable
\"
"
assertCaptured
"Invalid semver requirement"
assertCapturedError
assertCapturedError
}
}
testInvalidIo
()
{
testInvalidIo
()
{
compile
"invalid-io"
compile
"invalid-io"
assertCaptured
"Resolving iojs version 2.0.99"
assertCaptured
"Resolving iojs version 2.0.99"
assertCaptured
"
Unable to resolve
"
assertCaptured
"
Could not find Iojs version corresponding to version requirement: 2.0.99
"
assertCapturedError
assertCapturedError
}
}
...
...
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