This repo has moved to https://github.com/heroku/buildpacks-node.
This buildpack builds on top of the existing Node.js Engine Cloud Native Buildpack. It runs subsequent scripts after Node is install.
npm install
or npm ci
package.json
npm run build
or npm run heroku-postbuild
Using brew
(assuming development is done on MacOS), install pack
.
brew tap buildpack/tap
brew install pack
If you're using Windows or Linux, follow instructions here.
This buildpack uses shpec
for unit tests, so to run them locally, you'll need to install the package.
curl -sLo- http://get.bpkg.sh | bash
bpkg install rylnd/shpec
Right now, we are prototyping with a local version of the buildpack. Clone it to your machine.
git clone git@github.com:heroku/nodejs-npm-buildpack.git
Clone the Heroku Node.js Engine Cloud Native Buildpack.
cd .. # change from nodejs-npm-buildpack directory
git clone git@github.com:heroku/nodejs-engine-buildpack.git
Using pack, you're ready to create an image from the buildpack and source code. You will need to add flags that point to the path of the source code (--path
) and the paths of the buildpacks (--buildpack
).
cd nodejs-npm-buildpack
pack build TEST_IMAGE_NAME --path ../TEST_REPO_PATH --buildpack ../nodejs-engine-buildpack --buildpack ../nodejs-npm-buildpack
You can also create a builder.toml
file that will have explicit directions when creating a buildpack. This is useful when there are multiple "detect" paths a build can take (ie. yarn vs. npm commands).
In a directory outside of this buildpack, create a builder file:
cd ..
mkdir heroku_nodejs_builder
touch heroku_nodejs_builder/builder.toml
For local development, you'll want the file to look like this:
[[buildpacks]]
id = "heroku/nodejs-engine"
uri = "../nodejs-engine-buildpack"
[[buildpacks]]
id = "heroku/nodejs-npm"
uri = "../nodejs-npm-buildpack"
[[order]]
group = [
{ id = "heroku/nodejs-engine", version = "0.4.3" },
{ id = "heroku/nodejs-npm", version = "0.1.4" }
]
[stack]
id = "heroku-18"
build-image = "heroku/pack:18"
run-image = "heroku/pack:18"
Create the builder with pack
:
pack create-builder nodejs --config ../heroku-nodejs-builder/builder.toml
Now you can use the builder image instead of chaining the buildpacks.
pack build TEST_IMAGE_NAME --path ../TEST_REPO_PATH --builder nodejs
jq: Permission denied
on a buildThis issue may happen if a binary that is installed is not executable. This may happen on a Linux machine or while using a private network, such as a VPN, when using a local buildpack tool. If using sfdx evergreen
or pack
, pass in --network host
to the command.
An example of this command running from the source code directory with a local builder image called nodejs
would look like this:
pack build TEST_IMAGE_NAME --builder nodejs --network host
If building a function with sfdx
, a command looks like this:
sfdx evergreen:functions:build image-repo/myfunction:dev --network host
The complete test suite needs Docker to run. Make sure to install Docker first.
make test
If you want to run individual test suites, that's available too.
Unit Tests
To run the tests on the local host, make sure shpec
is installed.
make unit-test
Running the shpec
aren't ideal since the test scripts read and write to the local buildpack directory, so Docker may be preferred.
As suggested above, install Docker. Next, run the tests with the Make script:
make docker-unit-test
To debug, make changes from the code and rerun with the make command. To see what is happening, I suggest wrapping code blocks in question with set -x
/set +x
. It would look like this in the shpec file:
set -x
it "creates a toolbox.toml"
install_or_reuse_toolbox "$layers_dir/toolbox"
assert file_present "$layers_dir/toolbox.toml"
end
set +x
CHANGELOG.md
under main
with a description (PR title is fine) of the change, the PR number and link to PR.main
.Note: if you're not a contributor to this project, a contributor will have to make the release for you.
1.14.2-release
).buildpack.toml
.main
to a new header with the version and date (ie. 1.14.2 (2020-02-30)
).main
.main
to local machine.main
with the version. (git tag v1.14.2
)git push origin main --tags
) CI will run the suite and create a new release on successful run.