From 55ed40e1822faa0ebd8200877929b08b769630ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Fri, 21 Jul 2023 02:39:47 +0200 Subject: [PATCH] Depend on a specific version of Node.js We're choosing version 18 because if offers support for SSL 3, just like Ruby 3.1 does. Note we're symlinking a .nvmrc file as well, in order to make it compatible with NVM. While the .nvmrc and .node-version files use different formats, they both support the syntax we're using to define the version. The code to install Node.js in the Dockerfile is a simplification of the code in the Rails Dockerfile template [1]. [1] https://github.com/rails/rails/blob/04c97aec8a/railties/lib/rails/generators/rails/app/templates/Dockerfile.tt#L25 --- .github/workflows/tests.yml | 4 +++- .node-version | 1 + .nvmrc | 1 + Dockerfile | 10 ++++++++-- README.md | 2 +- README_ES.md | 2 +- 6 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 .node-version create mode 120000 .nvmrc diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0d819d406..57cb41e4a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,7 +40,9 @@ jobs: with: bundler-cache: true - name: Setup NPM - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 + with: + node-version-file: ".node-version" - name: Copy secrets and database files run: for i in config/*.example; do cp "$i" "${i/.example}"; done - name: Setup database diff --git a/.node-version b/.node-version new file mode 100644 index 000000000..02c8b485e --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +18.18.0 diff --git a/.nvmrc b/.nvmrc new file mode 120000 index 000000000..070266a26 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +.node-version \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 497ec81fa..a3bfa8450 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,6 @@ RUN apt-get update -qq \ libpq-dev \ libxss1 \ memcached \ - nodejs \ pkg-config \ postgresql-client \ shared-mime-info \ @@ -28,7 +27,7 @@ RUN adduser --shell /bin/bash --disabled-password --gecos "" consul \ && adduser consul sudo \ && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers -RUN echo 'Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bundle/bin"' > /etc/sudoers.d/secure_path +RUN echo 'Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bundle/bin:/usr/local/node/bin"' > /etc/sudoers.d/secure_path RUN chmod 0440 /etc/sudoers.d/secure_path # Define where our application will live inside the image @@ -40,6 +39,13 @@ RUN mkdir -p $RAILS_ROOT/tmp/pids # Set our working directory inside the image WORKDIR $RAILS_ROOT +# Install Node +COPY .node-version ./ +ENV PATH=/usr/local/node/bin:$PATH +RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \ + /tmp/node-build-master/bin/node-build `cat .node-version` /usr/local/node && \ + rm -rf /tmp/node-build-master + # Use the Gemfiles as Docker cache markers. Always bundle before copying app src. # (the src likely changed and we don't want to invalidate Docker's cache too early) COPY Gemfile* ./ diff --git a/README.md b/README.md index 5325b10e3..5d580d5ce 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ You can access the main website of the project at [http://consuldemocracy.org](h **NOTE**: For more detailed instructions check the [docs](https://docs.consuldemocracy.org) -Prerequisites: install git, Ruby 3.1.4, CMake, pkg-config, shared-mime-info, Node.js and PostgreSQL (>=9.5). +Prerequisites: install git, Ruby 3.1.4, CMake, pkg-config, shared-mime-info, Node.js 18.18.0 and PostgreSQL (>=9.5). ```bash git clone https://github.com/consuldemocracy/consuldemocracy.git diff --git a/README_ES.md b/README_ES.md index b82284b0e..0704e6f98 100644 --- a/README_ES.md +++ b/README_ES.md @@ -36,7 +36,7 @@ Puedes acceder a la página principal del proyecto en [http://consuldemocracy.or **NOTA**: para unas instrucciones más detalladas consulta la [documentación](https://docs.consuldemocracy.org) -Prerequisitos: tener instalado git, Ruby 3.1.4, CMake, pkg-config, shared-mime-info, Node.js y PostgreSQL (9.5 o superior). +Prerequisitos: tener instalado git, Ruby 3.1.4, CMake, pkg-config, shared-mime-info, Node.js 18.18.0 y PostgreSQL (9.5 o superior). ```bash git clone https://github.com/consuldemocracy/consuldemocracy.git