This buildpack is meant to be a replacement for https://github.com/gjaldon/heroku-buildpack-phoenix-static. This buildpack does not assume there is only one web application within the project and accepts a list of asset directories for which to compile assets.
- Deploys assets bundles for single or multiple Phoenix applications.
- Configure versions for Node and NPM
- Caches dependencies for quicker installs
- Allows override for custom deploy commands
- Create a Heroku instance for your project
heroku apps:create my_heroku_app
- Set and add the buildpacks for your Heroku app
heroku buildpacks:set https://github.com/HashNuke/heroku-buildpack-elixir heroku buildpacks:add https://github.com/heymackey/heroku-phoenix-umbrella-static-buildpack
- Deploy
git push heroku master
Create a heroku_phoenix_umbrella_static_buildpack.config
file in the root of your project. This file will be treated as a bash script. If you don't specify a config file, the default configuration will be used.
Here's a full configuration with all the options:
#!/usr/bin/env bash
# Set the NodeJS version to be installed.
node_version=10.15.1
# Set the NPM version to be installed.
npm_version=6.4.1
# Comma delimitted list of application assets paths. By default the configuration uses `assets` which works for
# a vanilla Phoenix application where the root of the project is the application root as well.
assets_paths=assets
# Set whether or not to clean out the cache after the deploy.
clear_cache=false
The default compile process is a basic Phoenix static asset deploy process, it looks something like this:
# in application assets dir
npm run deploy
# in application root
mix phx.digest
mix phx.digest.clean
This will deploy the static assets for each configured application in the buildpack according to the default Phoenix static asset deploy steps. If you wish to customize the deploy process for a given application, you need to define a compile_static_assets.sh
file within the assets
directory of the application you wish to customize. When a custom compile script is present, this buildpack will completely defer to that script. You can mix and match default and custom deploys for all the applications configured for deploy (i.e one app can leverage the defaults, while another may have a custom deploy script).
There are a few handy variables that will be available in your custom compile script you may need to reference:
$buildpack_root # This provides the full path to the root of the buildpack
$build_path # The full path to the build directory
$cache_path # The full path to the cache directory
$env_path # The full path to the environment directory
$package_root # The npm package root of the current application (i.e apps/some_app/assets)
$app_path # The root of the current application (i.e apps/some_app)
There are also a few handy functions that will be available in your custom compile script to help with printing out information:
The print_heading
function will create a new line, then print an ascii arrow prepended to the given string. This allows you to output a heading in a format that matches the rest of the output.
print_heading "Doing custom compile"
Output:
-----> Doing custom compile
The print_indented
prints a string with empty spaces prepended to align the text output with the previous lines.
print_indented "Custom compile step message"
Output:
Custom compile step message
The read_indented
function is similar to the print_indented
except it's meant to be used when reading output from another file or process.
npm install | read_indented
Output:
audited 494906 packages in 8.83s
found 7 vulnerabilities (2 low, 5 moderate)
run `npm audit fix` to fix them, or `npm audit` for details
The print_error
function allows you to print red-colored output text for more noticeable failure messages. The given string will have Error:
prepended to the message.
print_error "Something bad happened"
Output (in red):
Error: Something bad happened
The print_success
function allows you to print green-colored output text for more noticeable success messages.
print_success "Woo hoo! all done!"
Output (in green):
Woo hoo! all done!