diff --git a/Gemfile b/Gemfile index 3c7e4043b..ae1cbbfbb 100644 --- a/Gemfile +++ b/Gemfile @@ -14,8 +14,8 @@ gem "acts_as_list", "~>0.4" gem "bitfields", "~>0.4" gem "bootsnap", "~>1.3", require: false gem "canable", "~>0.1" -gem "carrierwave", "~>1.1" -gem "devise", "~>4.3" +gem "carrierwave", "~>1.3" +gem "devise", "~>4.7" gem "diff_match_patch", github: "nono/diff_match_patch-ruby", require: "diff_match_patch" gem "doorkeeper", "~>4.2" gem "ffi-hunspell", github: "postmodern/ffi-hunspell" diff --git a/Gemfile.lock b/Gemfile.lock index e1732fcd3..e57d970eb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,7 +91,7 @@ GEM rake (>= 10.4, < 13.0) ansi (1.5.0) arel (9.0.0) - bcrypt (3.1.12) + bcrypt (3.1.13) better_errors (2.5.0) coderay (>= 1.0.0) erubi (>= 1.0.0) @@ -108,10 +108,11 @@ GEM canable (0.3.0) capistrano-maintenance (0.0.5) capistrano (~> 2.0) - carrierwave (1.2.3) + carrierwave (1.3.2) activemodel (>= 4.0.0) activesupport (>= 4.0.0) mime-types (>= 1.16) + ssrf_filter (~> 1.0) coderay (1.1.2) coffee-rails (4.2.2) coffee-script (>= 2.2.0) @@ -124,10 +125,10 @@ GEM crass (1.0.6) daemons (1.2.6) debug_inspector (0.0.3) - devise (4.6.2) + devise (4.7.1) bcrypt (~> 3.0) orm_adapter (~> 0.1) - railties (>= 4.1.0, < 6.0) + railties (>= 4.1.0) responders warden (~> 1.2.3) dimensions (1.3.0) @@ -201,9 +202,9 @@ GEM mini_mime (>= 0.1.1) marcel (1.0.1) method_source (0.9.2) - mime-types (3.2.2) + mime-types (3.3.1) mime-types-data (~> 3.2015) - mime-types-data (3.2018.0812) + mime-types-data (3.2021.0225) mini_magick (4.9.4) mini_mime (1.0.3) mini_portile2 (2.4.0) @@ -273,9 +274,9 @@ GEM ffi (~> 1.0) redcarpet (3.4.0) redis (4.0.2) - responders (2.4.1) - actionpack (>= 4.2.0, < 6.0) - railties (>= 4.2.0, < 6.0) + responders (3.0.0) + actionpack (>= 5.0) + railties (>= 5.0) rinku (2.0.4) sanitize (4.6.6) crass (~> 1.0.2) @@ -302,6 +303,7 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) + ssrf_filter (1.0.7) state_machine (1.2.0) sushi (0.0.4) temple (0.8.0) @@ -346,9 +348,9 @@ DEPENDENCIES canable (~> 0.1) capistrano (~> 2.15)! capistrano-maintenance - carrierwave (~> 1.1) + carrierwave (~> 1.3) coffee-rails (~> 4.1) - devise (~> 4.3) + devise (~> 4.7) diff_match_patch! doorkeeper (~> 4.2) ffi-hunspell! diff --git a/deployment/default.env b/deployment/default.env index 662b7ef5b..9efc197cb 100644 --- a/deployment/default.env +++ b/deployment/default.env @@ -26,3 +26,4 @@ MYSQL_TEST_DATABASE=linuxfr_test MYSQL_TEST_USER=linuxfr_test MYSQL_TEST_PASSWORD=linuxfr_test +RAILS_ENV=development diff --git a/deployment/linuxfr-board/Dockerfile b/deployment/linuxfr-board/Dockerfile index 6236f1546..3ef78abeb 100644 --- a/deployment/linuxfr-board/Dockerfile +++ b/deployment/linuxfr-board/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:stretch-slim +FROM debian:bullseye-slim LABEL maintainer="adrien@adorsaz.ch" LABEL version="1.0" diff --git a/deployment/linuxfr-img/Dockerfile b/deployment/linuxfr-img/Dockerfile index 767d22e1c..dfc064b25 100644 --- a/deployment/linuxfr-img/Dockerfile +++ b/deployment/linuxfr-img/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:stretch-slim +FROM debian:bullseye-slim LABEL maintainer="adrien@adorsaz.ch" LABEL version="1.0" diff --git a/deployment/linuxfr.org/Dockerfile b/deployment/linuxfr.org/Dockerfile index 6b96b1947..d5dd2984f 100644 --- a/deployment/linuxfr.org/Dockerfile +++ b/deployment/linuxfr.org/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:stretch-slim +FROM debian:bullseye-slim LABEL maintainer="adrien@adorsaz.ch" LABEL version="1.0" @@ -7,15 +7,14 @@ LABEL description="Run LinuxFr.org Ruby on Rails website" WORKDIR /linuxfr.org # Install system dependencies -RUN echo 'deb http://deb.debian.org/debian stretch-backports main' >> '/etc/apt/sources.list.d/linuxfr.list' \ - && apt-get update \ +RUN apt-get update \ && apt-get install -y --no-install-recommends \ - mysql-client libmysql++-dev git \ + default-mysql-client libmysql++-dev git \ build-essential openssl libreadline-dev curl libcurl4-openssl-dev zlib1g \ zlib1g-dev libssl-dev libxml2-dev libxslt-dev autoconf libgmp-dev libyaml-dev \ ncurses-dev bison automake libtool imagemagick libc6-dev hunspell \ hunspell-fr-comprehensive ruby ruby-dev ruby-rack \ - && apt-get install -t stretch-backports -y --no-install-recommends \ + && apt-get install -y --no-install-recommends \ nodejs npm \ && gem install bundler -v 1.17.3 \ && apt-get clean diff --git a/docker-compose.yaml b/docker-compose.yaml index 4132178be..f5357c53d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -10,9 +10,15 @@ services: volumes: # Share host directories so, the developer can edit them # and see the result without need to restart the container - - ./app:/linuxfr.org/app - - ./db:/linuxfr.org/db - - ./public:/linuxfr.org/public + - type: bind + source: ./app + target: /linuxfr.org/app + - type: bind + source: ./db + target: /linuxfr.org/db + - type: bind + source: ./public + target: /linuxfr.org/public # uploads are shared with the nginx service - data-uploads:/linuxfr.org/uploads tmpfs: @@ -45,8 +51,12 @@ services: env_file: - deployment/default.env volumes: - - ./deployment/nginx/templates:/etc/nginx/templates - - ./public/fonts:/var/linuxfr/fonts + - type: bind + source: ./deployment/nginx/templates + target: /etc/nginx/templates + - type: bind + source: ./public/fonts + target: /var/linuxfr/fonts - data-uploads:/var/linuxfr/uploads ports: - "80:80" @@ -56,7 +66,7 @@ services: - linuxfr-img database: - image: mariadb:10.1 + image: mariadb:10.7 env_file: - deployment/default.env restart: always @@ -64,7 +74,7 @@ services: - data-database:/var/lib/mysql database-test: - image: mariadb:10.1 + image: mariadb:10.7 env_file: - deployment/default.env entrypoint: ["/linuxfr-entrypoint.sh"] @@ -72,10 +82,12 @@ services: restart: always volumes: - data-database-test:/var/lib/mysql - - ./deployment/database-test/entrypoint.sh:/linuxfr-entrypoint.sh + - type: bind + source: ./deployment/database-test/entrypoint.sh + target: /linuxfr-entrypoint.sh redis: - image: redis:5 + image: redis:6 restart: always volumes: - data-redis:/data diff --git a/package-lock.json b/package-lock.json index 098fd3545..110b6db91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -233,15 +233,23 @@ } }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "dependencies": { + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + } } }, "ansi-regex": { @@ -458,14 +466,36 @@ } }, "browserslist": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.4.tgz", - "integrity": "sha512-rAjx494LMjqKnMPhFkuLmLp8JWEX0o8ADTGeAbOqaF+XCvYLreZrG5uVjnPBlAQ8REZK4pzXGvp0bWgrFtKaag==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000955", - "electron-to-chromium": "^1.3.122", - "node-releases": "^1.1.13" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.736", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz", + "integrity": "sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==", + "dev": true + }, + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + } } }, "cache-base": { @@ -659,6 +689,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -843,20 +879,14 @@ } }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dev": true, "requires": { "is-obj": "^1.0.0" } }, - "electron-to-chromium": { - "version": "1.3.124", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.124.tgz", - "integrity": "sha512-glecGr/kFdfeXUHOHAWvGcXrxNU+1wSO/t5B23tT1dtlvYB26GY8aHzZSWD7HqhqC800Lr+w/hQul6C5AF542w==", - "dev": true - }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -878,6 +908,12 @@ "is-arrayish": "^0.2.1" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1047,12 +1083,6 @@ } } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, "fast-glob": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", @@ -1332,9 +1362,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-tags": { @@ -1422,9 +1452,9 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "dev": true }, "is-accessor-descriptor": { @@ -1754,9 +1784,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "log-symbols": { @@ -1956,15 +1986,6 @@ "to-regex": "^3.0.1" } }, - "node-releases": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.13.tgz", - "integrity": "sha512-fKZGviSXR6YvVPyc011NHuJDSD8gFQvLPmc2d2V3BS4gr52ycyQ1Xzs7a8B+Ax3Ni/W+5h1h4SqmzeoA8WZRmA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -2131,9 +2152,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -2166,9 +2187,9 @@ "dev": true }, "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2",