Skip to content

Instantly share code, notes, and snippets.

@ArturT
Forked from joakimk/README.md
Last active October 24, 2016 18:59
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save ArturT/8308c5ad0c72065e915b to your computer and use it in GitHub Desktop.
Save ArturT/8308c5ad0c72065e915b to your computer and use it in GitHub Desktop.
CircleCI elixir build example

This runs a build for a small elixir (phoenix) project in about 40 seconds by caching as much of the compiled files as possible.

We've been using this for months in multiple projects without any issues. Please ping be if there is any issues with this script and I'll update it.

It should be generic enough to work on any elixir app using mix.

If you have a elixir_buildpack.config, then enable that section in the build script to keep versions in sync!

Extra note

Please remember to set chmod:

$ chmod a+x bin/ci/prepare.sh
$ chmod a+x bin/ci/tests.sh

Update your version of ERLANG_VERSION and ELIXIR_VERSION.

#!/bin/bash
set -e
export ERLANG_VERSION="18.2.1"
export ELIXIR_VERSION="v1.2.1"
# If you have a elixir_buildpack.config, do this instead:
#export ERLANG_VERSION=$(cat elixir_buildpack.config | grep erlang_version | tr "=" " " | awk '{ print $2 }')
#export ELIXIR_VERSION=v$(cat elixir_buildpack.config | grep elixir_version | tr "=" " " | awk '{ print $2 }')
export INSTALL_PATH="$HOME/dependencies"
export ERLANG_PATH="$INSTALL_PATH/otp_src_$ERLANG_VERSION"
export ELIXIR_PATH="$INSTALL_PATH/elixir_$ELIXIR_VERSION"
mkdir -p $INSTALL_PATH
cd $INSTALL_PATH
# Install erlang
if [ ! -e $ERLANG_PATH/bin/erl ]; then
curl -OL http://www.erlang.org/download/otp_src_$ERLANG_VERSION.tar.gz
tar xzf otp_src_$ERLANG_VERSION.tar.gz
cd $ERLANG_PATH
./configure --enable-smp-support \
--enable-m64-build \
--disable-native-libs \
--disable-sctp \
--enable-threads \
--enable-kernel-poll \
--disable-hipe \
--without-javac
make
# Symlink to make it easier to setup PATH to run tests
ln -sf $ERLANG_PATH $INSTALL_PATH/erlang
fi
# Install elixir
export PATH="$ERLANG_PATH/bin:$PATH"
if [ ! -e $ELIXIR_PATH/bin/elixir ]; then
git clone https://github.com/elixir-lang/elixir $ELIXIR_PATH
cd $ELIXIR_PATH
git checkout $ELIXIR_VERSION
make
# Symlink to make it easier to setup PATH to run tests
ln -sf $ELIXIR_PATH $INSTALL_PATH/elixir
fi
export PATH="$ERLANG_PATH/bin:$ELIXIR_PATH/bin:$PATH"
# Install package tools
if [ ! -e $HOME/.mix/rebar ]; then
yes Y | LC_ALL=en_GB.UTF-8 mix local.hex
yes Y | LC_ALL=en_GB.UTF-8 mix local.rebar
fi
# Fetch and compile dependencies and application code (and include testing tools)
export MIX_ENV="test"
cd $HOME/$CIRCLE_PROJECT_REPONAME
mix do deps.get, deps.compile, compile
#!/bin/bash
export MIX_ENV="test"
export PATH="$HOME/dependencies/erlang/bin:$HOME/dependencies/elixir/bin:$PATH"
mix test
dependencies:
pre:
- bin/ci/prepare.sh
cache_directories:
- ~/dependencies
- ~/.mix
- _build
- deps
test:
override:
- bin/ci/tests.sh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment