diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..651665bb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +.git diff --git a/.npmignore b/.npmignore index 2c3dbec0..69f28be0 100644 --- a/.npmignore +++ b/.npmignore @@ -2,3 +2,5 @@ test dist img ci +.dockerignore +Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..f364a252 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +# Build ipfs-npm from src. Used in test/perf/docker-race.sh +FROM node:10.15.3 +MAINTAINER olizilla + +WORKDIR /opt/npm-on-ipfs + +# Create a docker cache layer for just the deps. This means less rebuilding if +# only the source code changes +COPY package.json /opt/npm-on-ipfs +RUN npm install --quiet + +# Copy the src dir to the image, and add `ipfs-npm` to the PATH. +COPY ./src /opt/npm-on-ipfs/src +RUN npm link diff --git a/test/perf/docker-race.sh b/test/perf/docker-race.sh new file mode 100755 index 00000000..8c3e9e11 --- /dev/null +++ b/test/perf/docker-race.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# Compare the first install times of a module via npm and ipfs-npm. +# Using Docker here to ensure we are using fresh caches for each run. +# +# Usage: +# +# ./docker-race.sh [npm module] +# +# NOTE: On first run this will create a local image called ipfs-npm, from the +# Dockerfile at the root of this project. To update it with the latest source, +# rebuild the image: +# +# docker build -t ipfs-npm . +# +# or simply delete it and let the script re-build it +# +# docker image rm ipfs-npm -f +# +set -eu +MODULE=${1:-iim} +IPFS_NPM_IMAGE=ipfs-npm +REFERENCE_IMAGE=node:10.15.3 + +if $(docker image ls | grep -q $IPFS_NPM_IMAGE) +then + echo "found ipfs-npm Docker image" +else + echo "building docker image for ipfs-npm, this will take a moment" + docker build -t $IPFS_NPM_IMAGE $(dirname "$0")/../../ +fi + +echo "" +echo "---- ipfs-npm flavour ----" +time docker run --rm --net=host $IPFS_NPM_IMAGE ipfs-npm install -g $MODULE + +echo "" +echo "---- npm flavour ----" +time docker run --rm --net=host $REFERENCE_IMAGE npm install -g $MODULE