Skip to content

Instantly share code, notes, and snippets.

@deoxxa
Created February 25, 2014 21:10
Show Gist options
  • Save deoxxa/9217826 to your computer and use it in GitHub Desktop.
Save deoxxa/9217826 to your computer and use it in GitHub Desktop.
#!/bin/sh
if [ "${MAINTAINER}" = "" ]; then
MAINTAINER=${USER};
fi;
AVAILABLE_NODES="0.8.6 0.8.7 0.8.8 0.8.9 0.8.10 0.8.11 0.8.12 0.8.13 0.8.14 0.8.15 0.8.16 0.8.17 0.8.18 0.8.19 0.8.20 0.8.21 0.8.22 0.8.23 0.8.24 0.8.25 0.8.26 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5 0.9.6 0.9.7 0.9.8 0.9.9 0.9.10 0.9.11 0.9.12 0.10.0 0.10.1 0.10.2 0.10.3 0.10.4 0.10.5 0.10.6 0.10.7 0.10.8 0.10.9 0.10.10 0.10.11 0.10.12 0.10.13 0.10.14 0.10.15 0.10.16 0.10.17 0.10.18 0.10.19 0.10.20 0.10.21 0.10.22 0.10.23 0.10.24 0.10.25 0.10.26 0.11.0 0.11.1 0.11.2 0.11.3 0.11.4 0.11.5 0.11.6 0.11.7 0.11.8 0.11.9 0.11.10 0.11.11";
PACKAGE_JSON="${1}/package.json";
[ -e ${PACKAGE_JSON} ] || exit 1;
WANT_NODE=$(cd ${1} && node -e 'p=require("./package.json");console.log(p&&p.engines&&p.engines.node||"*")');
HAVE_NODE=$(semver -r "${WANT_NODE}" ${AVAILABLE_NODES} | tail -n 1);
if [ "${HAVE_NODE}" = "" ]; then
echo "Couldn't find a suitable version of node";
exit 1;
fi;
if [ ! -e "node-v${HAVE_NODE}-linux-x64-bare.tar.gz" ]; then
if [ ! -e "node-v${HAVE_NODE}-linux-x64.tar.gz" ]; then
curl -OJL http://nodejs.org/dist/v${HAVE_NODE}/node-v${HAVE_NODE}-linux-x64.tar.gz || exit 1;
fi;
mkdir -p tmp || exit 1;
tar xzf node-v${HAVE_NODE}-linux-x64.tar.gz -C tmp --strip 1 || exit 1;
tar czf node-v${HAVE_NODE}-linux-x64-bare.tar.gz -C tmp . || exit 1;
rm -rf tmp || exit 1;
fi;
PACKAGE_TAR=$(npm pack ${1});
PACKAGE_TAR_FIXED=${PACKAGE_TAR/.tgz/-bare.tgz};
PACKAGE_NAME=${PACKAGE_TAR%.tgz};
mkdir -p tmp || exit 1;
tar xzf ${PACKAGE_TAR} -C tmp --strip 1 || exit 1;
tar czf ${PACKAGE_TAR_FIXED} -C tmp . || exit 1;
rm -rf tmp;
BUILD_DIR=$(mktemp -d build.XXXXXX) || exit 1;
ln $(pwd)/node-v${HAVE_NODE}-linux-x64-bare.tar.gz ${BUILD_DIR}/node-v${HAVE_NODE}-linux-x64-bare.tar.gz;
ln $(pwd)/${PACKAGE_TAR_FIXED} ${BUILD_DIR}/${PACKAGE_TAR_FIXED};
(
echo "FROM ubuntu";
echo "MAINTAINER ${MAINTAINER}";
echo "RUN apt-get update";
echo "RUN apt-get install build-essential -y";
echo "ADD node-v${HAVE_NODE}-linux-x64-bare.tar.gz /usr/local";
echo "ADD ${PACKAGE_TAR_FIXED} /opt/application";
echo "RUN cd /opt/application && npm install";
echo "EXPOSE 3000";
echo "CMD cd /opt/application && npm start";
) > ${BUILD_DIR}/Dockerfile;
docker build -t ${PACKAGE_NAME} ${BUILD_DIR};
rm -rf ${BUILD_DIR};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment