From 7c38e642b2ef453361f129f5071409bd9090efd9 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 12 Oct 2021 10:22:00 +0200 Subject: [PATCH] chore: dockerize development environment (#1308) --- .dockerignore | 2 ++ CONTRIBUTING.md | 6 ++++++ DOCKER_README.MD | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 20 +++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 .dockerignore create mode 100644 DOCKER_README.MD create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..4464e73ac --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +**/node_modules +**/.DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2b4cb4e3a..3682b3e9d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,6 +69,12 @@ _Note that no new features will be developed or backported for the `vX` branches ## Requirements +### Docker + +If you don't want to install dependencies on your host machine, you can follow this [guide](https://github.com/algolia/algoliasearch-client-javascript/blob/master/DOCKER_README.MD) to run code inside a docker container but keep the source files on your favorite IDE. + +### Host machine + To run this project, you will need: - Node.js ≥ 12 (current stable version) – [nvm](https://github.com/creationix/nvm#install-script) is recommended diff --git a/DOCKER_README.MD b/DOCKER_README.MD new file mode 100644 index 000000000..0991735ca --- /dev/null +++ b/DOCKER_README.MD @@ -0,0 +1,51 @@ +In this page you will find our recommended way of installing Docker on your machine. +This guide is made for macOS users. + +## Install docker + +Install [Docker Desktop](https://docs.docker.com/get-docker/). + +## Build the image + +```bash +docker build -t algolia-js --build-arg NODE_IMAGE=node:$(cat .nvmrc)-alpine . +``` + +## Run the image + +You need to provide few environment variables at runtime to be able to run the [Common Test Suite](https://github.com/algolia/algoliasearch-client-specs/tree/master/common-test-suite). +You can set them up directly in the command: + +```bash +docker run -it --rm --env ALGOLIA_APP_ID=XXXXXX [...] -v $PWD:/app -v /app/node_modules -w /app algolia-js bash +``` + +However, we advise you to export them in your `.bashrc` or `.zshrc`. That way, you can use [Docker's shorten syntax](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file) to set your variables. + +```bash +### This is needed only to run the full test suite +docker run -it --rm --env ALGOLIA_APPLICATION_ID_1 \ + --env ALGOLIA_ADMIN_KEY_1 \ + --env ALGOLIA_SEARCH_KEY_1 \ + --env ALGOLIA_APPLICATION_ID_2 \ + --env ALGOLIA_ADMIN_KEY_2 \ + --env ALGOLIA_APPLICATION_ID_MCM \ + --env ALGOLIA_ADMIN_KEY_MCM \ +-v $PWD:/app -v /app/node_modules -w /app algolia-js bash +``` + +Once your container is running, any changes you make in your IDE are directly reflected in the container, except for the `node_modules` folder. +If you want to add or remove packages, you will have to rebuild the image, this is because the `node_modules` folder is installed in a different folder to improve performance. + +To launch the tests, you can use one of the following commands +```shell script +# run only the unit tests +yarn test:unit + +# run a single test +yarn test:unit nameOfYourTest +``` + +You can find more commands in the `package.json` file. + +Feel free to contact us if you have any questions. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..0d14a024c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# Dockerfile +ARG NODE_IMAGE=node:12.16.0-alpine + +FROM $NODE_IMAGE + +# Install the dependencies in the parent folder so they don't get overriden by the bind mount +WORKDIR / + +# We need to install some dependencies for bundlesize (https://github.com/siddharthkp/bundlesize/pull/370) +RUN apk add --no-cache bash python3 make g++ + +COPY package.json yarn.lock ./ + +RUN yarn install + +ENV NODE_PATH=/node_modules +ENV PATH=/node_modules/.bin:$PATH + +WORKDIR /app +COPY . ./