Merge pull request #147506 from talyz/discourse-2.8.0.beta8
discourse: 2.7.9 -> 2.8.0.beta9
This commit is contained in:
@@ -621,12 +621,13 @@ in
|
|||||||
|
|
||||||
max_user_api_reqs_per_minute = 20;
|
max_user_api_reqs_per_minute = 20;
|
||||||
max_user_api_reqs_per_day = 2880;
|
max_user_api_reqs_per_day = 2880;
|
||||||
max_admin_api_reqs_per_key_per_minute = 60;
|
max_admin_api_reqs_per_minute = 60;
|
||||||
max_reqs_per_ip_per_minute = 200;
|
max_reqs_per_ip_per_minute = 200;
|
||||||
max_reqs_per_ip_per_10_seconds = 50;
|
max_reqs_per_ip_per_10_seconds = 50;
|
||||||
max_asset_reqs_per_ip_per_10_seconds = 200;
|
max_asset_reqs_per_ip_per_10_seconds = 200;
|
||||||
max_reqs_per_ip_mode = "block";
|
max_reqs_per_ip_mode = "block";
|
||||||
max_reqs_rate_limit_on_private = false;
|
max_reqs_rate_limit_on_private = false;
|
||||||
|
skip_per_ip_rate_limit_trust_level = 1;
|
||||||
force_anonymous_min_queue_seconds = 1;
|
force_anonymous_min_queue_seconds = 1;
|
||||||
force_anonymous_min_per_10_seconds = 3;
|
force_anonymous_min_per_10_seconds = 3;
|
||||||
background_requests_max_queue_length = 0.5;
|
background_requests_max_queue_length = 0.5;
|
||||||
@@ -646,6 +647,9 @@ in
|
|||||||
enable_email_sync_demon = false;
|
enable_email_sync_demon = false;
|
||||||
max_digests_enqueued_per_30_mins_per_site = 10000;
|
max_digests_enqueued_per_30_mins_per_site = 10000;
|
||||||
cluster_name = null;
|
cluster_name = null;
|
||||||
|
multisite_config_path = "config/multisite.yml";
|
||||||
|
enable_long_polling = null;
|
||||||
|
long_polling_interval = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.redis.enable = lib.mkDefault (cfg.redis.host == "localhost");
|
services.redis.enable = lib.mkDefault (cfg.redis.host == "localhost");
|
||||||
@@ -825,7 +829,7 @@ in
|
|||||||
|
|
||||||
appendHttpConfig = ''
|
appendHttpConfig = ''
|
||||||
# inactive means we keep stuff around for 1440m minutes regardless of last access (1 week)
|
# inactive means we keep stuff around for 1440m minutes regardless of last access (1 week)
|
||||||
# levels means it is a 2 deep heirarchy cause we can have lots of files
|
# levels means it is a 2 deep hierarchy cause we can have lots of files
|
||||||
# max_size limits the size of the cache
|
# max_size limits the size of the cache
|
||||||
proxy_cache_path /var/cache/nginx inactive=1440m levels=1:2 keys_zone=discourse:10m max_size=600m;
|
proxy_cache_path /var/cache/nginx inactive=1440m levels=1:2 keys_zone=discourse:10m max_size=600m;
|
||||||
|
|
||||||
@@ -837,7 +841,7 @@ in
|
|||||||
inherit (cfg) sslCertificate sslCertificateKey enableACME;
|
inherit (cfg) sslCertificate sslCertificateKey enableACME;
|
||||||
forceSSL = lib.mkDefault tlsEnabled;
|
forceSSL = lib.mkDefault tlsEnabled;
|
||||||
|
|
||||||
root = "/run/discourse/public";
|
root = "${cfg.package}/share/discourse/public";
|
||||||
|
|
||||||
locations =
|
locations =
|
||||||
let
|
let
|
||||||
@@ -889,7 +893,7 @@ in
|
|||||||
"~ ^/uploads/" = proxy {
|
"~ ^/uploads/" = proxy {
|
||||||
extraConfig = cache_1y + ''
|
extraConfig = cache_1y + ''
|
||||||
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
|
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
|
||||||
proxy_set_header X-Accel-Mapping /run/discourse/public/=/downloads/;
|
proxy_set_header X-Accel-Mapping ${cfg.package}/share/discourse/public/=/downloads/;
|
||||||
|
|
||||||
# custom CSS
|
# custom CSS
|
||||||
location ~ /stylesheet-cache/ {
|
location ~ /stylesheet-cache/ {
|
||||||
@@ -911,7 +915,7 @@ in
|
|||||||
"~ ^/admin/backups/" = proxy {
|
"~ ^/admin/backups/" = proxy {
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
|
proxy_set_header X-Sendfile-Type X-Accel-Redirect;
|
||||||
proxy_set_header X-Accel-Mapping /run/discourse/public/=/downloads/;
|
proxy_set_header X-Accel-Mapping ${cfg.package}/share/discourse/public/=/downloads/;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
"~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker)" = proxy {
|
"~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker)" = proxy {
|
||||||
@@ -938,7 +942,7 @@ in
|
|||||||
};
|
};
|
||||||
"/downloads/".extraConfig = ''
|
"/downloads/".extraConfig = ''
|
||||||
internal;
|
internal;
|
||||||
alias /run/discourse/public/;
|
alias ${cfg.package}/share/discourse/public/;
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ services.discourse = {
|
|||||||
the script:
|
the script:
|
||||||
<programlisting language="bash">
|
<programlisting language="bash">
|
||||||
./update.py update-plugins
|
./update.py update-plugins
|
||||||
</programlisting>.
|
</programlisting>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ let
|
|||||||
nativeBuildInputs = [ which pkg-config python ]
|
nativeBuildInputs = [ which pkg-config python ]
|
||||||
++ optionals stdenv.isDarwin [ xcbuild ];
|
++ optionals stdenv.isDarwin [ xcbuild ];
|
||||||
|
|
||||||
|
outputs = [ "out" "libv8" ];
|
||||||
|
setOutputFlags = false;
|
||||||
|
moveToDev = false;
|
||||||
|
|
||||||
configureFlags = let
|
configureFlags = let
|
||||||
isCross = stdenv.hostPlatform != stdenv.buildPlatform;
|
isCross = stdenv.hostPlatform != stdenv.buildPlatform;
|
||||||
inherit (stdenv.hostPlatform) gcc isAarch32;
|
inherit (stdenv.hostPlatform) gcc isAarch32;
|
||||||
@@ -130,6 +134,35 @@ let
|
|||||||
|
|
||||||
# install the missing headers for node-gyp
|
# install the missing headers for node-gyp
|
||||||
cp -r ${concatStringsSep " " copyLibHeaders} $out/include/node
|
cp -r ${concatStringsSep " " copyLibHeaders} $out/include/node
|
||||||
|
|
||||||
|
# assemble a static v8 library and put it in the 'libv8' output
|
||||||
|
mkdir -p $libv8/lib
|
||||||
|
pushd out/Release/obj.target
|
||||||
|
find . -path "./torque_*/**/*.o" -or -path "./v8*/**/*.o" | sort -u >files
|
||||||
|
${if stdenv.buildPlatform.isGnu then ''
|
||||||
|
ar -cqs $libv8/lib/libv8.a @files
|
||||||
|
'' else ''
|
||||||
|
cat files | while read -r file; do
|
||||||
|
ar -cqS $libv8/lib/libv8.a $file
|
||||||
|
done
|
||||||
|
''}
|
||||||
|
popd
|
||||||
|
|
||||||
|
# copy v8 headers
|
||||||
|
cp -r deps/v8/include $libv8/
|
||||||
|
|
||||||
|
# create a pkgconfig file for v8
|
||||||
|
major=$(grep V8_MAJOR_VERSION deps/v8/include/v8-version.h | cut -d ' ' -f 3)
|
||||||
|
minor=$(grep V8_MINOR_VERSION deps/v8/include/v8-version.h | cut -d ' ' -f 3)
|
||||||
|
patch=$(grep V8_PATCH_LEVEL deps/v8/include/v8-version.h | cut -d ' ' -f 3)
|
||||||
|
mkdir -p $libv8/lib/pkgconfig
|
||||||
|
cat > $libv8/lib/pkgconfig/v8.pc << EOF
|
||||||
|
Name: v8
|
||||||
|
Description: V8 JavaScript Engine
|
||||||
|
Version: $major.$minor.$patch
|
||||||
|
Libs: -L$libv8/lib -lv8 -pthread -licui18n
|
||||||
|
Cflags: -I$libv8/include
|
||||||
|
EOF
|
||||||
'' + optionalString (stdenv.isDarwin && enableNpm) ''
|
'' + optionalString (stdenv.isDarwin && enableNpm) ''
|
||||||
sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' $out/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
|
sed -i 's/raise.*No Xcode or CLT version detected.*/version = "7.0.0"/' $out/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb
|
diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb
|
||||||
index 380a63e987..b2ce7fa982 100644
|
index e59a6fbc05..c773a1356e 100644
|
||||||
--- a/lib/plugin/instance.rb
|
--- a/lib/plugin/instance.rb
|
||||||
+++ b/lib/plugin/instance.rb
|
+++ b/lib/plugin/instance.rb
|
||||||
@@ -403,7 +403,7 @@ class Plugin::Instance
|
@@ -447,7 +447,7 @@ class Plugin::Instance
|
||||||
end
|
end
|
||||||
|
|
||||||
def auto_generated_path
|
def auto_generated_path
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
{ stdenv, pkgs, makeWrapper, runCommand, lib, writeShellScript
|
{ stdenv, pkgs, makeWrapper, runCommand, lib, writeShellScript
|
||||||
, fetchFromGitHub, bundlerEnv, callPackage
|
, fetchFromGitHub, bundlerEnv, callPackage
|
||||||
|
|
||||||
, ruby, replace, gzip, gnutar, git, cacert, util-linux, gawk
|
, ruby, replace, gzip, gnutar, git, cacert, util-linux, gawk, nettools
|
||||||
, imagemagick, optipng, pngquant, libjpeg, jpegoptim, gifsicle, jhead
|
, imagemagick, optipng, pngquant, libjpeg, jpegoptim, gifsicle, jhead
|
||||||
, libpsl, redis, postgresql, which, brotli, procps, rsync
|
, libpsl, redis, postgresql, which, brotli, procps, rsync, icu
|
||||||
, nodePackages, v8
|
, nodePackages, nodejs-16_x
|
||||||
|
|
||||||
, plugins ? []
|
, plugins ? []
|
||||||
}@args:
|
}@args:
|
||||||
|
|
||||||
let
|
let
|
||||||
version = "2.7.9";
|
version = "2.8.0.beta9";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse";
|
repo = "discourse";
|
||||||
rev = "v${version}";
|
rev = "v${version}";
|
||||||
sha256 = "sha256-SOERjFbG4l/tUfOl51XEW0nVbza3L4adjiPhz4Hj0YU=";
|
sha256 = "sha256-cTedMbf0N50ysRQqA9Fm1WQmI5J5hsqDSi2JZIa49jg=";
|
||||||
};
|
};
|
||||||
|
|
||||||
runtimeDeps = [
|
runtimeDeps = [
|
||||||
@@ -33,6 +33,7 @@ let
|
|||||||
procps # For ps and kill
|
procps # For ps and kill
|
||||||
util-linux # For renice
|
util-linux # For renice
|
||||||
gawk
|
gawk
|
||||||
|
nettools # For hostname
|
||||||
|
|
||||||
# Image optimization
|
# Image optimization
|
||||||
imagemagick
|
imagemagick
|
||||||
@@ -110,16 +111,21 @@ let
|
|||||||
gems = import ./rubyEnv/gemset.nix;
|
gems = import ./rubyEnv/gemset.nix;
|
||||||
in
|
in
|
||||||
gems // {
|
gems // {
|
||||||
|
mini_racer = gems.mini_racer // {
|
||||||
|
buildInputs = [ icu ];
|
||||||
|
dontBuild = false;
|
||||||
|
NIX_LDFLAGS = "-licui18n";
|
||||||
|
};
|
||||||
libv8-node =
|
libv8-node =
|
||||||
let
|
let
|
||||||
noopScript = writeShellScript "noop" "exit 0";
|
noopScript = writeShellScript "noop" "exit 0";
|
||||||
linkFiles = writeShellScript "link-files" ''
|
linkFiles = writeShellScript "link-files" ''
|
||||||
cd ../..
|
cd ../..
|
||||||
|
|
||||||
mkdir -p vendor/v8/out.gn/libv8/obj/
|
mkdir -p vendor/v8/${stdenv.hostPlatform.system}/libv8/obj/
|
||||||
ln -s "${v8}/lib/libv8.a" vendor/v8/out.gn/libv8/obj/libv8_monolith.a
|
ln -s "${nodejs-16_x.libv8}/lib/libv8.a" vendor/v8/${stdenv.hostPlatform.system}/libv8/obj/libv8_monolith.a
|
||||||
|
|
||||||
ln -s ${v8}/include vendor/v8/include
|
ln -s ${nodejs-16_x.libv8}/include vendor/v8/include
|
||||||
|
|
||||||
mkdir -p ext/libv8-node
|
mkdir -p ext/libv8-node
|
||||||
echo '--- !ruby/object:Libv8::Node::Location::Vendor {}' >ext/libv8-node/.location.yml
|
echo '--- !ruby/object:Libv8::Node::Location::Vendor {}' >ext/libv8-node/.location.yml
|
||||||
@@ -155,13 +161,9 @@ let
|
|||||||
pname = "discourse-assets";
|
pname = "discourse-assets";
|
||||||
inherit version src;
|
inherit version src;
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = runtimeDeps ++ [
|
||||||
rubyEnv.wrappedRuby
|
|
||||||
postgresql
|
postgresql
|
||||||
redis
|
redis
|
||||||
which
|
|
||||||
brotli
|
|
||||||
procps
|
|
||||||
nodePackages.uglify-js
|
nodePackages.uglify-js
|
||||||
nodePackages.terser
|
nodePackages.terser
|
||||||
];
|
];
|
||||||
@@ -255,10 +257,6 @@ let
|
|||||||
# one constructed by bundlerEnv
|
# one constructed by bundlerEnv
|
||||||
./plugin_gem_api_version.patch
|
./plugin_gem_api_version.patch
|
||||||
|
|
||||||
# Use mv instead of rename, since rename doesn't work across
|
|
||||||
# device boundaries
|
|
||||||
./use_mv_instead_of_rename.patch
|
|
||||||
|
|
||||||
# Change the path to the auto generated plugin assets, which
|
# Change the path to the auto generated plugin assets, which
|
||||||
# defaults to the plugin's directory and isn't writable at the
|
# defaults to the plugin's directory and isn't writable at the
|
||||||
# time of asset generation
|
# time of asset generation
|
||||||
@@ -266,11 +264,6 @@ let
|
|||||||
|
|
||||||
# Make sure the notification email setting applies
|
# Make sure the notification email setting applies
|
||||||
./notification_email.patch
|
./notification_email.patch
|
||||||
|
|
||||||
# Change the path to the public directory reported by Discourse
|
|
||||||
# to its real path instead of the symlink in the store, since
|
|
||||||
# the store path won't be matched by any nginx rules
|
|
||||||
./public_dir_path.patch
|
|
||||||
];
|
];
|
||||||
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
Run the nixpkgs/pkgs/servers/web-apps/discourse/update.py script to
|
||||||
|
update plugins! See the Plugins section of the Discourse chapter in
|
||||||
|
the NixOS manual (https://nixos.org/manual/nixos/unstable/index.html#module-services-discourse)
|
||||||
|
for more info.
|
||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-assign";
|
repo = "discourse-assign";
|
||||||
rev = "5124ba0f67e26a075f0a0fc8993273f1211d1c28";
|
rev = "91d0712b0440b6bb0c2fedbf6c31191cdeb991fe";
|
||||||
sha256 = "1zd2irp5siza0vd5rlwzmjfvcdfw785988jc526xc741flazk1lr";
|
sha256 = "sha256-ATWLu0vJZFquRcAUpFKaU8mqjjVOv3PziAsHR3aemWk=";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-docs";
|
homepage = "https://github.com/discourse/discourse-docs";
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ GEM
|
|||||||
tzinfo (~> 2.0)
|
tzinfo (~> 2.0)
|
||||||
zeitwerk (~> 2.3)
|
zeitwerk (~> 2.3)
|
||||||
concurrent-ruby (1.1.9)
|
concurrent-ruby (1.1.9)
|
||||||
i18n (1.8.10)
|
i18n (1.8.11)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
minitest (5.14.4)
|
minitest (5.14.4)
|
||||||
rrule (0.4.2)
|
rrule (0.4.2)
|
||||||
activesupport (>= 4.1)
|
activesupport (>= 4.1)
|
||||||
tzinfo (2.0.4)
|
tzinfo (2.0.4)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
zeitwerk (2.4.2)
|
zeitwerk (2.5.1)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-calendar";
|
repo = "discourse-calendar";
|
||||||
rev = "2f76cdd3064735d484be1df77f43100aca21aea6";
|
rev = "fbc617a5fa9f3a22bcc72bc2b32ea3cbdf6087c5";
|
||||||
sha256 = "1skpc8p5br1jkii1rksha1q95ias6xxyvi5bnli3q41w7fz1h5j2";
|
sha256 = "sha256-qBtq8IvxdKYIFNL9DwdRqZceMMO/qgd6jTr3kk3so3Y=";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-calendar";
|
homepage = "https://github.com/discourse/discourse-calendar";
|
||||||
|
|||||||
@@ -26,10 +26,10 @@
|
|||||||
platforms = [];
|
platforms = [];
|
||||||
source = {
|
source = {
|
||||||
remotes = ["https://rubygems.org"];
|
remotes = ["https://rubygems.org"];
|
||||||
sha256 = "0g2fnag935zn2ggm5cn6k4s4xvv53v2givj1j90szmvavlpya96a";
|
sha256 = "0vdd1kii40qhbr9n8qx71k2gskq6rkl8ygy8hw5hfj8bb5a364xf";
|
||||||
type = "gem";
|
type = "gem";
|
||||||
};
|
};
|
||||||
version = "1.8.10";
|
version = "1.8.11";
|
||||||
};
|
};
|
||||||
minitest = {
|
minitest = {
|
||||||
groups = ["default"];
|
groups = ["default"];
|
||||||
@@ -68,9 +68,9 @@
|
|||||||
platforms = [];
|
platforms = [];
|
||||||
source = {
|
source = {
|
||||||
remotes = ["https://rubygems.org"];
|
remotes = ["https://rubygems.org"];
|
||||||
sha256 = "1746czsjarixq0x05f7p3hpzi38ldg6wxnxxw74kbjzh1sdjgmpl";
|
sha256 = "18l4r6layck0d80ydc692mv1lxak5xbf6w2paj1x7m2ggbggzxgj";
|
||||||
type = "gem";
|
type = "gem";
|
||||||
};
|
};
|
||||||
version = "2.4.2";
|
version = "2.5.1";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-chat-integration";
|
repo = "discourse-chat-integration";
|
||||||
rev = "8ade892b387f0ce843d5e78ef4a271b0d35847ff";
|
rev = "ae0389ca89f26401a6c4cffaaae6adcf14af0e15";
|
||||||
sha256 = "1qn1bm09i9gzmh74ws32zgc89hrqzyhmh63qvmv0h00r52rmgxvx";
|
sha256 = "sha256-wT9S2mMz2MOpWpYv/FrHYhZibStRIGC4P2Vrqs04bkA=";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-chat-integration";
|
homepage = "https://github.com/discourse/discourse-chat-integration";
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-checklist";
|
repo = "discourse-checklist";
|
||||||
rev = "48855d81b7c3a3274f7f78a64312125c344d92d1";
|
rev = "d8012abd3d6dccb72eec83e6a96ef4809dcad681";
|
||||||
sha256 = "0139v5wpyglfzvd07ka6gic1ssfysisgfiq09dsbjy519gnc9kjw";
|
sha256 = "1ngjql65939c571gyaqj8ydcxy5kkril2qlkxqf579vvwzpvxw13";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-checklist";
|
homepage = "https://github.com/discourse/discourse-checklist";
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-data-explorer";
|
repo = "discourse-data-explorer";
|
||||||
rev = "23287ece952cb45203819e7b470ebc194c58cb13";
|
rev = "3ce778ec6d96a300a06ffe0581f4681fbed8df7f";
|
||||||
sha256 = "1vc2072r72fkvcfpy6vpn9x4gl9lpjk29pnj8095xs22im8j5in1";
|
sha256 = "1555k1anrijfbm0qfraby3ivh6h76177d541nxhnarj85mjx0hjb";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-data-explorer";
|
homepage = "https://github.com/discourse/discourse-data-explorer";
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-docs";
|
repo = "discourse-docs";
|
||||||
rev = "72cdd8d415ae3f797c0d5e2c857370714a42c54a";
|
rev = "d3eee7008b7a703774331808e302e36f2f8b4eae";
|
||||||
sha256 = "07hvw8lpg8873vhwh8rrbml3s5hq606b7sw93r2xv38gxfhmx5lq";
|
sha256 = "1p3aqfpv207pvlbis43znwgw56yqsn41320yaw1gdcaakf5s2rsx";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-docs";
|
homepage = "https://github.com/discourse/discourse-docs";
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-github";
|
repo = "discourse-github";
|
||||||
rev = "9aaf4350968fb758f9bff3588f78e3ad24ddb4b0";
|
rev = "8cd8c0703991c16cb2fa8cb1fd22a9c3849c7ae2";
|
||||||
sha256 = "0nmpkh1rr0jv68a655f5610v2mn09xriiqv049a0gklap2lgv7p8";
|
sha256 = "17ga31a10sm3fqjpf40mz7fk62vynyng2a243pia9fjdq9py8slx";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-github";
|
homepage = "https://github.com/discourse/discourse-github";
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
||||||
|
|
||||||
|
# gem "rails"
|
||||||
gem 'pyu-ruby-sasl', '0.0.3.3', require: false
|
gem 'pyu-ruby-sasl', '0.0.3.3', require: false
|
||||||
gem 'rubyntlm', '0.3.4', require: false
|
gem 'rubyntlm', '0.3.4', require: false
|
||||||
gem 'net-ldap', '0.14.0'
|
gem 'net-ldap', '0.14.0'
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
hashie (4.1.0)
|
hashie (5.0.0)
|
||||||
net-ldap (0.14.0)
|
net-ldap (0.14.0)
|
||||||
omniauth (1.9.1)
|
omniauth (1.9.1)
|
||||||
hashie (>= 3.4.6)
|
hashie (>= 3.4.6)
|
||||||
@@ -16,7 +16,7 @@ GEM
|
|||||||
rubyntlm (0.3.4)
|
rubyntlm (0.3.4)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
x86_64-linux
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
net-ldap (= 0.14.0)
|
net-ldap (= 0.14.0)
|
||||||
@@ -25,4 +25,4 @@ DEPENDENCIES
|
|||||||
rubyntlm (= 0.3.4)
|
rubyntlm (= 0.3.4)
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.2.20
|
2.2.24
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "jonmbake";
|
owner = "jonmbake";
|
||||||
repo = "discourse-ldap-auth";
|
repo = "discourse-ldap-auth";
|
||||||
rev = "eca02c560f2f2bf42feeb1923bc17e074f16b891";
|
rev = "1c10221836393c3cfac470a7b08de6f31150c802";
|
||||||
sha256 = "sha256-HLNoDvvxkBMvqP6WbRrJY0CYnK92W77nzSpuwgl0VPA=";
|
sha256 = "sha256-IiAl3OTADXSUnL+OKKHJY9Xqd4zCNJ2wOrgTN3nm5Yw=";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/jonmbake/discourse-ldap-auth";
|
homepage = "https://github.com/jonmbake/discourse-ldap-auth";
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
platforms = [];
|
platforms = [];
|
||||||
source = {
|
source = {
|
||||||
remotes = ["https://rubygems.org"];
|
remotes = ["https://rubygems.org"];
|
||||||
sha256 = "02bsx12ihl78x0vdm37byp78jjw2ff6035y7rrmbd90qxjwxr43q";
|
sha256 = "1nh3arcrbz1rc1cr59qm53sdhqm137b258y8rcb4cvd3y98lwv4x";
|
||||||
type = "gem";
|
type = "gem";
|
||||||
};
|
};
|
||||||
version = "4.1.0";
|
version = "5.0.0";
|
||||||
};
|
};
|
||||||
net-ldap = {
|
net-ldap = {
|
||||||
groups = ["default"];
|
groups = ["default"];
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-math";
|
repo = "discourse-math";
|
||||||
rev = "d7d0180352dd5a7dcb76c0817bfbb08c2a0f08c7";
|
rev = "cacbd04bb239db3c772ff5a37c19fe39d127ff3d";
|
||||||
sha256 = "0y72impvnq965ibbfc9877hr78fxkrwav1xmgyy3r9w87952vcwa";
|
sha256 = "1bhs7wslb4rdf2b6h6klw1mpjf9pjpfpf2zg2mj8vg0acyaqvv9d";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-math";
|
homepage = "https://github.com/discourse/discourse-math";
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-openid-connect";
|
repo = "discourse-openid-connect";
|
||||||
rev = "615038bd65f4fbe4dfdf8444b2f5eb06986b80b8";
|
rev = "0e1511fcec2bbb26ef08e453920e955d4140df42";
|
||||||
sha256 = "n8feZkP80iNc+BzTPyKD7kEgFSIkk091eJYuqonN/NU=";
|
sha256 = "02knx3z0ycz83cdarld2hmmpl6f9nkd2snp0qsbk9mjvbfvpfkni";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-openid-connect";
|
homepage = "https://github.com/discourse/discourse-openid-connect";
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
||||||
|
|
||||||
# gem "rails"
|
# gem "rails"
|
||||||
gem 'prometheus_exporter', '0.5.0'
|
gem 'prometheus_exporter', File.read(File.expand_path("../prometheus_exporter_version", __FILE__)).strip
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ DEPENDENCIES
|
|||||||
prometheus_exporter (= 0.5.0)
|
prometheus_exporter (= 0.5.0)
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.1.4
|
2.2.24
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-prometheus";
|
repo = "discourse-prometheus";
|
||||||
rev = "46260710e8770344af438f86b47409d864a1c499";
|
rev = "08138ae4f89da76dd577781a2116b2ab66f8f547";
|
||||||
sha256 = "0nmpi0nysp59x4hyn1c3niypvxw1jkz86acb6m8acacw0c6682k2";
|
sha256 = "1x4awgx9fj0a6drsix3mi39ynj56rca3km0fz2xb3g6vxgc7d2z1";
|
||||||
};
|
};
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
|
|||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
0.5.0
|
||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-solved";
|
repo = "discourse-solved";
|
||||||
rev = "55cb184f7ef2954326561cc44fc8134798b8a9e0";
|
rev = "40277e50d43e4bdaab99efab44f59f6e33d74740";
|
||||||
sha256 = "0pv5i216zn0v8xfwlndvhvr06vkmxaynj8xjfnc5amy1sp6k76w7";
|
sha256 = "02n266swdslws8r26xf99l3ghpqd3dryd0qfp7kiqk3ksy8hh5n2";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-solved";
|
homepage = "https://github.com/discourse/discourse-solved";
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-spoiler-alert";
|
repo = "discourse-spoiler-alert";
|
||||||
rev = "0b93227ea8e2c72afe72029382081ebff89c3638";
|
rev = "790380d9d321f9368c7a16d8ed87718fc6047bf2";
|
||||||
sha256 = "0x0dxb41ss15sv5ph7z7q55ayf8a7r22bgkmr17924mny5440b5a";
|
sha256 = "079w4x2wlbsx164wv0zb373r8552wb5fvrb9pqzmrfvy0ybwf328";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-spoiler-alert";
|
homepage = "https://github.com/discourse/discourse-spoiler-alert";
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-voting";
|
repo = "discourse-voting";
|
||||||
rev = "fc4d23174eba1a57ddcba93eaf4a4e75d469d4a4";
|
rev = "36a41c2969c1ddfd8980e3f766b730b849726a08";
|
||||||
sha256 = "07mj667qn387kaafg475f36pgnannsrb2bdqi0zj487av43252qb";
|
sha256 = "0ns2i8liwpd29kbn44wzx9yb0jfpyz70h0hmrs71hz6fdalzm4ph";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-voting";
|
homepage = "https://github.com/discourse/discourse-voting";
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ mkDiscoursePlugin {
|
|||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "discourse";
|
owner = "discourse";
|
||||||
repo = "discourse-yearly-review";
|
repo = "discourse-yearly-review";
|
||||||
rev = "cb040562f6af3163d70e8932867b530c6640ab9a";
|
rev = "683327574ea1a67c9c4182c887d6ba85171ca02b";
|
||||||
sha256 = "07h6nq4bafs27ly2f5chkn5vb1wdy909qffwkgp5k1fanhbqvhvs";
|
sha256 = "0y0hvb2ir9254ilpf7mnbn9xvv9anyqj4qwh97cw7jly7n2mga4m";
|
||||||
};
|
};
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://github.com/discourse/discourse-yearly-review";
|
homepage = "https://github.com/discourse/discourse-yearly-review";
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
#!/usr/bin/env nix-shell
|
|
||||||
#!nix-shell -i bash -p bash curl ruby.devEnv git sqlite libpcap postgresql libxml2 libxslt pkg-config bundix gnumake
|
|
||||||
# src https://nixos.wiki/wiki/Packaging/Ruby
|
|
||||||
|
|
||||||
# This script should be ran afte rupdating a plugin that has a gemset.nix
|
|
||||||
# Usage: ./up-plugin.sh <plugin-id>
|
|
||||||
# NOTE: Script must be ran directly as ./up-plugin, otherwise the nix-shell won't work
|
|
||||||
|
|
||||||
set -exuo pipefail
|
|
||||||
|
|
||||||
PLUGIN="$1"
|
|
||||||
SELF="$(dirname "$(readlink -f "$0")")"
|
|
||||||
|
|
||||||
PL_DIR="$SELF/$PLUGIN"
|
|
||||||
TOP="$SELF/../../../../.."
|
|
||||||
TMP=$(mktemp -d)
|
|
||||||
|
|
||||||
pushd "$TMP"
|
|
||||||
|
|
||||||
if cat "$PL_DIR/default.nix" | grep gemdir >/dev/null; then
|
|
||||||
nix-build -A discourse.plugins.$PLUGIN.src "$TOP"
|
|
||||||
if [ -e result/Gemfile ]; then
|
|
||||||
cp result/Gemfile Gemfile
|
|
||||||
if [ -e result/Gemfile.lock ]; then
|
|
||||||
cp result/Gemfile.lock Gemfile.lock
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo '# frozen_string_literal: true
|
|
||||||
|
|
||||||
source "https://rubygems.org"' > Gemfile
|
|
||||||
cat result/plugin.rb | grep "^gem" >> Gemfile
|
|
||||||
fi
|
|
||||||
if [ ! -e Gemfile.lock ]; then
|
|
||||||
bundle install
|
|
||||||
fi
|
|
||||||
bundix
|
|
||||||
cp Gemfile Gemfile.lock gemset.nix "$PL_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
diff --git a/lib/file_store/local_store.rb b/lib/file_store/local_store.rb
|
|
||||||
index 25649532c0..614e062dc1 100644
|
|
||||||
--- a/lib/file_store/local_store.rb
|
|
||||||
+++ b/lib/file_store/local_store.rb
|
|
||||||
@@ -88,7 +88,7 @@ module FileStore
|
|
||||||
end
|
|
||||||
|
|
||||||
def public_dir
|
|
||||||
- File.join(Rails.root, "public")
|
|
||||||
+ "/run/discourse/public"
|
|
||||||
end
|
|
||||||
|
|
||||||
def tombstone_dir
|
|
||||||
@@ -18,13 +18,14 @@ else
|
|||||||
# this allows us to include the bits of rails we use without pieces we do not.
|
# this allows us to include the bits of rails we use without pieces we do not.
|
||||||
#
|
#
|
||||||
# To issue a rails update bump the version number here
|
# To issue a rails update bump the version number here
|
||||||
gem 'actionmailer', '6.1.3.2'
|
rails_version = '6.1.4.1'
|
||||||
gem 'actionpack', '6.1.3.2'
|
gem 'actionmailer', rails_version
|
||||||
gem 'actionview', '6.1.3.2'
|
gem 'actionpack', rails_version
|
||||||
gem 'activemodel', '6.1.3.2'
|
gem 'actionview', rails_version
|
||||||
gem 'activerecord', '6.1.3.2'
|
gem 'activemodel', rails_version
|
||||||
gem 'activesupport', '6.1.3.2'
|
gem 'activerecord', rails_version
|
||||||
gem 'railties', '6.1.3.2'
|
gem 'activesupport', rails_version
|
||||||
|
gem 'railties', rails_version
|
||||||
gem 'sprockets-rails'
|
gem 'sprockets-rails'
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -60,8 +61,6 @@ gem 'redis-namespace'
|
|||||||
# better maintained living fork
|
# better maintained living fork
|
||||||
gem 'active_model_serializers', '~> 0.8.3'
|
gem 'active_model_serializers', '~> 0.8.3'
|
||||||
|
|
||||||
gem 'onebox'
|
|
||||||
|
|
||||||
gem 'http_accept_language', require: false
|
gem 'http_accept_language', require: false
|
||||||
|
|
||||||
# Ember related gems need to be pinned cause they control client side
|
# Ember related gems need to be pinned cause they control client side
|
||||||
@@ -90,9 +89,7 @@ gem 'unf', require: false
|
|||||||
|
|
||||||
gem 'email_reply_trimmer'
|
gem 'email_reply_trimmer'
|
||||||
|
|
||||||
# Forked until https://github.com/toy/image_optim/pull/162 is merged
|
gem 'image_optim'
|
||||||
# https://github.com/discourse/image_optim
|
|
||||||
gem 'discourse_image_optim', require: 'image_optim'
|
|
||||||
gem 'multi_json'
|
gem 'multi_json'
|
||||||
gem 'mustache'
|
gem 'mustache'
|
||||||
gem 'nokogiri'
|
gem 'nokogiri'
|
||||||
@@ -108,7 +105,10 @@ gem 'omniauth-oauth2', require: false
|
|||||||
|
|
||||||
gem 'omniauth-google-oauth2'
|
gem 'omniauth-google-oauth2'
|
||||||
|
|
||||||
gem 'oj'
|
# Pinning oj until https://github.com/ohler55/oj/issues/699 is resolved.
|
||||||
|
# Segfaults and stuck processes after upgrading.
|
||||||
|
gem 'oj', '3.13.2'
|
||||||
|
|
||||||
gem 'pg'
|
gem 'pg'
|
||||||
gem 'mini_sql'
|
gem 'mini_sql'
|
||||||
gem 'pry-rails', require: false
|
gem 'pry-rails', require: false
|
||||||
@@ -169,6 +169,8 @@ group :test, :development do
|
|||||||
gem 'parallel_tests'
|
gem 'parallel_tests'
|
||||||
|
|
||||||
gem 'rswag-specs'
|
gem 'rswag-specs'
|
||||||
|
|
||||||
|
gem 'annotate'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
@@ -177,8 +179,16 @@ group :development do
|
|||||||
gem 'better_errors', platform: :mri, require: !!ENV['BETTER_ERRORS']
|
gem 'better_errors', platform: :mri, require: !!ENV['BETTER_ERRORS']
|
||||||
gem 'binding_of_caller'
|
gem 'binding_of_caller'
|
||||||
gem 'yaml-lint'
|
gem 'yaml-lint'
|
||||||
gem 'annotate'
|
end
|
||||||
gem 'discourse_dev'
|
|
||||||
|
if ENV["ALLOW_DEV_POPULATE"] == "1"
|
||||||
|
gem 'discourse_dev_assets'
|
||||||
|
gem 'faker', "~> 2.16"
|
||||||
|
else
|
||||||
|
group :development do
|
||||||
|
gem 'discourse_dev_assets'
|
||||||
|
gem 'faker', "~> 2.16"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# this is an optional gem, it provides a high performance replacement
|
# this is an optional gem, it provides a high performance replacement
|
||||||
@@ -205,6 +215,9 @@ gem 'gc_tracer', require: false, platform: :mri
|
|||||||
# required for feed importing and embedding
|
# required for feed importing and embedding
|
||||||
gem 'ruby-readability', require: false
|
gem 'ruby-readability', require: false
|
||||||
|
|
||||||
|
# rss gem is a bundled gem from Ruby 3 onwards
|
||||||
|
gem 'rss', require: false
|
||||||
|
|
||||||
gem 'stackprof', require: false, platform: :mri
|
gem 'stackprof', require: false, platform: :mri
|
||||||
gem 'memory_profiler', require: false, platform: :mri
|
gem 'memory_profiler', require: false, platform: :mri
|
||||||
|
|
||||||
@@ -231,6 +244,8 @@ gem 'sshkey', require: false
|
|||||||
gem 'rchardet', require: false
|
gem 'rchardet', require: false
|
||||||
gem 'lz4-ruby', require: false, platform: :ruby
|
gem 'lz4-ruby', require: false, platform: :ruby
|
||||||
|
|
||||||
|
gem 'sanitize'
|
||||||
|
|
||||||
if ENV["IMPORT"] == "1"
|
if ENV["IMPORT"] == "1"
|
||||||
gem 'mysql2'
|
gem 'mysql2'
|
||||||
gem 'redcarpet'
|
gem 'redcarpet'
|
||||||
|
|||||||
@@ -8,22 +8,22 @@ GIT
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
actionmailer (6.1.3.2)
|
actionmailer (6.1.4.1)
|
||||||
actionpack (= 6.1.3.2)
|
actionpack (= 6.1.4.1)
|
||||||
actionview (= 6.1.3.2)
|
actionview (= 6.1.4.1)
|
||||||
activejob (= 6.1.3.2)
|
activejob (= 6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
actionpack (6.1.3.2)
|
actionpack (6.1.4.1)
|
||||||
actionview (= 6.1.3.2)
|
actionview (= 6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
rack (~> 2.0, >= 2.0.9)
|
rack (~> 2.0, >= 2.0.9)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||||
actionview (6.1.3.2)
|
actionview (6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubi (~> 1.4)
|
erubi (~> 1.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
@@ -32,21 +32,21 @@ GEM
|
|||||||
actionview (>= 6.0.a)
|
actionview (>= 6.0.a)
|
||||||
active_model_serializers (0.8.4)
|
active_model_serializers (0.8.4)
|
||||||
activemodel (>= 3.0)
|
activemodel (>= 3.0)
|
||||||
activejob (6.1.3.2)
|
activejob (6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (6.1.3.2)
|
activemodel (6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
activerecord (6.1.3.2)
|
activerecord (6.1.4.1)
|
||||||
activemodel (= 6.1.3.2)
|
activemodel (= 6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
activesupport (6.1.3.2)
|
activesupport (6.1.4.1)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
minitest (>= 5.1)
|
minitest (>= 5.1)
|
||||||
tzinfo (~> 2.0)
|
tzinfo (~> 2.0)
|
||||||
zeitwerk (~> 2.3)
|
zeitwerk (~> 2.3)
|
||||||
addressable (2.7.0)
|
addressable (2.8.0)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
annotate (3.1.1)
|
annotate (3.1.1)
|
||||||
activerecord (>= 3.2, < 7.0)
|
activerecord (>= 3.2, < 7.0)
|
||||||
@@ -59,10 +59,10 @@ GEM
|
|||||||
aws-partitions (~> 1, >= 1.239.0)
|
aws-partitions (~> 1, >= 1.239.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
jmespath (~> 1.0)
|
jmespath (~> 1.0)
|
||||||
aws-sdk-kms (1.42.0)
|
aws-sdk-kms (1.44.0)
|
||||||
aws-sdk-core (~> 3, >= 3.112.0)
|
aws-sdk-core (~> 3, >= 3.112.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
aws-sdk-s3 (1.90.0)
|
aws-sdk-s3 (1.96.1)
|
||||||
aws-sdk-core (~> 3, >= 3.112.0)
|
aws-sdk-core (~> 3, >= 3.112.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
@@ -80,10 +80,10 @@ GEM
|
|||||||
rack (>= 0.9.0)
|
rack (>= 0.9.0)
|
||||||
binding_of_caller (1.0.0)
|
binding_of_caller (1.0.0)
|
||||||
debug_inspector (>= 0.0.1)
|
debug_inspector (>= 0.0.1)
|
||||||
bootsnap (1.7.5)
|
bootsnap (1.9.3)
|
||||||
msgpack (~> 1.0)
|
msgpack (~> 1.0)
|
||||||
builder (3.2.4)
|
builder (3.2.4)
|
||||||
bullet (6.1.4)
|
bullet (6.1.5)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
uniform_notifier (~> 1.11)
|
uniform_notifier (~> 1.11)
|
||||||
byebug (11.1.3)
|
byebug (11.1.3)
|
||||||
@@ -92,7 +92,7 @@ GEM
|
|||||||
chunky_png (1.4.0)
|
chunky_png (1.4.0)
|
||||||
coderay (1.1.3)
|
coderay (1.1.3)
|
||||||
colored2 (3.1.2)
|
colored2 (3.1.2)
|
||||||
concurrent-ruby (1.1.8)
|
concurrent-ruby (1.1.9)
|
||||||
connection_pool (2.2.5)
|
connection_pool (2.2.5)
|
||||||
cose (1.2.0)
|
cose (1.2.0)
|
||||||
cbor (~> 0.5.9)
|
cbor (~> 0.5.9)
|
||||||
@@ -101,7 +101,7 @@ GEM
|
|||||||
crack (0.4.5)
|
crack (0.4.5)
|
||||||
rexml
|
rexml
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
css_parser (1.9.0)
|
css_parser (1.10.0)
|
||||||
addressable
|
addressable
|
||||||
debug_inspector (1.1.0)
|
debug_inspector (1.1.0)
|
||||||
diff-lcs (1.4.4)
|
diff-lcs (1.4.4)
|
||||||
@@ -114,15 +114,10 @@ GEM
|
|||||||
jquery-rails (>= 1.0.17)
|
jquery-rails (>= 1.0.17)
|
||||||
railties (>= 3.1)
|
railties (>= 3.1)
|
||||||
discourse-ember-source (3.12.2.3)
|
discourse-ember-source (3.12.2.3)
|
||||||
discourse-fonts (0.0.8)
|
discourse-fonts (0.0.9)
|
||||||
discourse_dev (0.2.1)
|
discourse_dev_assets (0.0.3)
|
||||||
faker (~> 2.16)
|
faker (~> 2.16)
|
||||||
discourse_image_optim (0.26.2)
|
literate_randomizer
|
||||||
exifr (~> 1.2, >= 1.2.2)
|
|
||||||
fspath (~> 3.0)
|
|
||||||
image_size (~> 1.5)
|
|
||||||
in_threads (~> 1.3)
|
|
||||||
progress (~> 3.0, >= 3.0.1)
|
|
||||||
docile (1.4.0)
|
docile (1.4.0)
|
||||||
ecma-re-validator (0.3.0)
|
ecma-re-validator (0.3.0)
|
||||||
regexp_parser (~> 2.0)
|
regexp_parser (~> 2.0)
|
||||||
@@ -134,30 +129,40 @@ GEM
|
|||||||
sprockets (>= 3.3, < 4.1)
|
sprockets (>= 3.3, < 4.1)
|
||||||
ember-source (2.18.2)
|
ember-source (2.18.2)
|
||||||
erubi (1.10.0)
|
erubi (1.10.0)
|
||||||
excon (0.81.0)
|
excon (0.88.0)
|
||||||
execjs (2.8.1)
|
execjs (2.8.1)
|
||||||
exifr (1.3.9)
|
exifr (1.3.9)
|
||||||
fabrication (2.22.0)
|
fabrication (2.22.0)
|
||||||
faker (2.17.0)
|
faker (2.19.0)
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
fakeweb (1.3.0)
|
fakeweb (1.3.0)
|
||||||
faraday (1.4.1)
|
faraday (1.8.0)
|
||||||
|
faraday-em_http (~> 1.0)
|
||||||
|
faraday-em_synchrony (~> 1.0)
|
||||||
faraday-excon (~> 1.1)
|
faraday-excon (~> 1.1)
|
||||||
|
faraday-httpclient (~> 1.0.1)
|
||||||
faraday-net_http (~> 1.0)
|
faraday-net_http (~> 1.0)
|
||||||
faraday-net_http_persistent (~> 1.1)
|
faraday-net_http_persistent (~> 1.1)
|
||||||
|
faraday-patron (~> 1.0)
|
||||||
|
faraday-rack (~> 1.0)
|
||||||
multipart-post (>= 1.2, < 3)
|
multipart-post (>= 1.2, < 3)
|
||||||
ruby2_keywords (>= 0.0.4)
|
ruby2_keywords (>= 0.0.4)
|
||||||
|
faraday-em_http (1.0.0)
|
||||||
|
faraday-em_synchrony (1.0.0)
|
||||||
faraday-excon (1.1.0)
|
faraday-excon (1.1.0)
|
||||||
|
faraday-httpclient (1.0.1)
|
||||||
faraday-net_http (1.0.1)
|
faraday-net_http (1.0.1)
|
||||||
faraday-net_http_persistent (1.1.0)
|
faraday-net_http_persistent (1.2.0)
|
||||||
fast_blank (1.0.0)
|
faraday-patron (1.0.0)
|
||||||
|
faraday-rack (1.0.0)
|
||||||
|
fast_blank (1.0.1)
|
||||||
fast_xs (0.8.0)
|
fast_xs (0.8.0)
|
||||||
fastimage (2.2.3)
|
fastimage (2.2.5)
|
||||||
ffi (1.15.0)
|
ffi (1.15.4)
|
||||||
fspath (3.1.2)
|
fspath (3.1.2)
|
||||||
gc_tracer (1.5.1)
|
gc_tracer (1.5.1)
|
||||||
globalid (0.4.2)
|
globalid (1.0.0)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 5.0)
|
||||||
guess_html_encoding (0.0.11)
|
guess_html_encoding (0.0.11)
|
||||||
hana (1.3.7)
|
hana (1.3.7)
|
||||||
hashdiff (1.0.1)
|
hashdiff (1.0.1)
|
||||||
@@ -166,16 +171,23 @@ GEM
|
|||||||
hkdf (0.3.0)
|
hkdf (0.3.0)
|
||||||
htmlentities (4.3.4)
|
htmlentities (4.3.4)
|
||||||
http_accept_language (2.1.1)
|
http_accept_language (2.1.1)
|
||||||
i18n (1.8.10)
|
i18n (1.8.11)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
image_size (1.5.0)
|
image_optim (0.31.1)
|
||||||
|
exifr (~> 1.2, >= 1.2.2)
|
||||||
|
fspath (~> 3.0)
|
||||||
|
image_size (>= 1.5, < 4)
|
||||||
|
in_threads (~> 1.3)
|
||||||
|
progress (~> 3.0, >= 3.0.1)
|
||||||
|
image_size (3.0.1)
|
||||||
in_threads (1.5.4)
|
in_threads (1.5.4)
|
||||||
|
ipaddr (1.2.3)
|
||||||
jmespath (1.4.0)
|
jmespath (1.4.0)
|
||||||
jquery-rails (4.4.0)
|
jquery-rails (4.4.0)
|
||||||
rails-dom-testing (>= 1, < 3)
|
rails-dom-testing (>= 1, < 3)
|
||||||
railties (>= 4.2.0)
|
railties (>= 4.2.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
json (2.5.1)
|
json (2.6.1)
|
||||||
json-schema (2.8.1)
|
json-schema (2.8.1)
|
||||||
addressable (>= 2.4)
|
addressable (>= 2.4)
|
||||||
json_schemer (0.2.18)
|
json_schemer (0.2.18)
|
||||||
@@ -183,12 +195,14 @@ GEM
|
|||||||
hana (~> 1.3)
|
hana (~> 1.3)
|
||||||
regexp_parser (~> 2.0)
|
regexp_parser (~> 2.0)
|
||||||
uri_template (~> 0.7)
|
uri_template (~> 0.7)
|
||||||
jwt (2.2.3)
|
jwt (2.3.0)
|
||||||
kgio (2.11.3)
|
kgio (2.11.4)
|
||||||
libv8-node (15.14.0.1)
|
libv8-node (16.10.0.0)
|
||||||
listen (3.5.1)
|
libv8-node (16.10.0.0-aarch64-linux)
|
||||||
|
listen (3.7.0)
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
|
literate_randomizer (0.4.0)
|
||||||
lograge (0.11.2)
|
lograge (0.11.2)
|
||||||
actionpack (>= 4)
|
actionpack (>= 4)
|
||||||
activesupport (>= 4)
|
activesupport (>= 4)
|
||||||
@@ -197,53 +211,51 @@ GEM
|
|||||||
logstash-event (1.2.02)
|
logstash-event (1.2.02)
|
||||||
logstash-logger (0.26.1)
|
logstash-logger (0.26.1)
|
||||||
logstash-event (~> 1.2)
|
logstash-event (~> 1.2)
|
||||||
logster (2.9.6)
|
logster (2.10.0)
|
||||||
loofah (2.9.1)
|
loofah (2.12.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.5.9)
|
nokogiri (>= 1.5.9)
|
||||||
lru_redux (1.1.0)
|
lru_redux (1.1.0)
|
||||||
lz4-ruby (0.3.3)
|
lz4-ruby (0.3.3)
|
||||||
maxminddb (0.1.22)
|
maxminddb (0.1.22)
|
||||||
memory_profiler (1.0.0)
|
memory_profiler (1.0.0)
|
||||||
message_bus (3.3.5)
|
message_bus (3.3.6)
|
||||||
rack (>= 1.1.3)
|
rack (>= 1.1.3)
|
||||||
method_source (1.0.0)
|
method_source (1.0.0)
|
||||||
mini_mime (1.1.0)
|
mini_mime (1.1.2)
|
||||||
mini_portile2 (2.5.3)
|
mini_portile2 (2.6.1)
|
||||||
mini_racer (0.4.0)
|
mini_racer (0.5.0)
|
||||||
libv8-node (~> 15.14.0.0)
|
libv8-node (~> 16.10.0.0)
|
||||||
mini_scheduler (0.13.0)
|
mini_scheduler (0.13.0)
|
||||||
sidekiq (>= 4.2.3)
|
sidekiq (>= 4.2.3)
|
||||||
mini_sql (1.1.3)
|
mini_sql (1.1.3)
|
||||||
mini_suffix (0.3.2)
|
mini_suffix (0.3.2)
|
||||||
ffi (~> 1.9)
|
ffi (~> 1.9)
|
||||||
minitest (5.14.4)
|
minitest (5.14.4)
|
||||||
mocha (1.12.0)
|
mocha (1.13.0)
|
||||||
mock_redis (0.28.0)
|
mock_redis (0.29.0)
|
||||||
ruby2_keywords
|
ruby2_keywords
|
||||||
msgpack (1.4.2)
|
msgpack (1.4.2)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multi_xml (0.6.0)
|
multi_xml (0.6.0)
|
||||||
multipart-post (2.1.1)
|
multipart-post (2.1.1)
|
||||||
mustache (1.1.1)
|
mustache (1.1.1)
|
||||||
nio4r (2.5.7)
|
nio4r (2.5.8)
|
||||||
nokogiri (1.11.7)
|
nokogiri (1.12.5)
|
||||||
mini_portile2 (~> 2.5.0)
|
mini_portile2 (~> 2.6.1)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogumbo (2.0.5)
|
oauth (0.5.8)
|
||||||
nokogiri (~> 1.8, >= 1.8.4)
|
|
||||||
oauth (0.5.6)
|
|
||||||
oauth2 (1.4.7)
|
oauth2 (1.4.7)
|
||||||
faraday (>= 0.8, < 2.0)
|
faraday (>= 0.8, < 2.0)
|
||||||
jwt (>= 1.0, < 3.0)
|
jwt (>= 1.0, < 3.0)
|
||||||
multi_json (~> 1.3)
|
multi_json (~> 1.3)
|
||||||
multi_xml (~> 0.5)
|
multi_xml (~> 0.5)
|
||||||
rack (>= 1.2, < 3)
|
rack (>= 1.2, < 3)
|
||||||
oj (3.11.5)
|
oj (3.13.2)
|
||||||
omniauth (1.9.1)
|
omniauth (1.9.1)
|
||||||
hashie (>= 3.4.6)
|
hashie (>= 3.4.6)
|
||||||
rack (>= 1.6.2, < 3)
|
rack (>= 1.6.2, < 3)
|
||||||
omniauth-facebook (8.0.0)
|
omniauth-facebook (9.0.0)
|
||||||
omniauth-oauth2 (~> 1.2)
|
omniauth-oauth2 (~> 1.2)
|
||||||
omniauth-github (1.4.0)
|
omniauth-github (1.4.0)
|
||||||
omniauth (~> 1.5)
|
omniauth (~> 1.5)
|
||||||
@@ -256,27 +268,21 @@ GEM
|
|||||||
omniauth-oauth (1.2.0)
|
omniauth-oauth (1.2.0)
|
||||||
oauth
|
oauth
|
||||||
omniauth (>= 1.0, < 3)
|
omniauth (>= 1.0, < 3)
|
||||||
omniauth-oauth2 (1.7.1)
|
omniauth-oauth2 (1.7.2)
|
||||||
oauth2 (~> 1.4)
|
oauth2 (~> 1.4)
|
||||||
omniauth (>= 1.9, < 3)
|
omniauth (>= 1.9, < 3)
|
||||||
omniauth-twitter (1.4.0)
|
omniauth-twitter (1.4.0)
|
||||||
omniauth-oauth (~> 1.1)
|
omniauth-oauth (~> 1.1)
|
||||||
rack
|
rack
|
||||||
onebox (2.2.17)
|
openssl (2.2.1)
|
||||||
addressable (~> 2.7.0)
|
ipaddr
|
||||||
htmlentities (~> 4.3)
|
|
||||||
multi_json (~> 1.11)
|
|
||||||
mustache
|
|
||||||
nokogiri (~> 1.7)
|
|
||||||
sanitize
|
|
||||||
openssl (2.2.0)
|
|
||||||
openssl-signature_algorithm (1.1.1)
|
openssl-signature_algorithm (1.1.1)
|
||||||
openssl (~> 2.0)
|
openssl (~> 2.0)
|
||||||
optimist (3.0.1)
|
optimist (3.0.1)
|
||||||
parallel (1.20.1)
|
parallel (1.21.0)
|
||||||
parallel_tests (3.7.0)
|
parallel_tests (3.7.3)
|
||||||
parallel
|
parallel
|
||||||
parser (3.0.1.1)
|
parser (3.0.3.1)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
pg (1.2.3)
|
pg (1.2.3)
|
||||||
progress (3.6.0)
|
progress (3.6.0)
|
||||||
@@ -289,12 +295,12 @@ GEM
|
|||||||
pry-rails (0.3.9)
|
pry-rails (0.3.9)
|
||||||
pry (>= 0.10.4)
|
pry (>= 0.10.4)
|
||||||
public_suffix (4.0.6)
|
public_suffix (4.0.6)
|
||||||
puma (5.3.1)
|
puma (5.5.2)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
r2 (0.2.7)
|
r2 (0.2.7)
|
||||||
racc (1.5.2)
|
racc (1.6.0)
|
||||||
rack (2.2.3)
|
rack (2.2.3)
|
||||||
rack-mini-profiler (2.3.2)
|
rack-mini-profiler (2.3.3)
|
||||||
rack (>= 1.2.0)
|
rack (>= 1.2.0)
|
||||||
rack-protection (2.1.0)
|
rack-protection (2.1.0)
|
||||||
rack
|
rack
|
||||||
@@ -303,24 +309,24 @@ GEM
|
|||||||
rails-dom-testing (2.0.3)
|
rails-dom-testing (2.0.3)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.3.0)
|
rails-html-sanitizer (1.4.2)
|
||||||
loofah (~> 2.3)
|
loofah (~> 2.3)
|
||||||
rails_failover (0.7.3)
|
rails_failover (0.7.3)
|
||||||
activerecord (~> 6.0)
|
activerecord (~> 6.0)
|
||||||
concurrent-ruby
|
concurrent-ruby
|
||||||
railties (~> 6.0)
|
railties (~> 6.0)
|
||||||
rails_multisite (3.0.0)
|
rails_multisite (4.0.0)
|
||||||
activerecord (> 5.0, < 7)
|
activerecord (> 5.0, < 7)
|
||||||
railties (> 5.0, < 7)
|
railties (> 5.0, < 7)
|
||||||
railties (6.1.3.2)
|
railties (6.1.4.1)
|
||||||
actionpack (= 6.1.3.2)
|
actionpack (= 6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
method_source
|
method_source
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.13)
|
||||||
thor (~> 1.0)
|
thor (~> 1.0)
|
||||||
rainbow (3.0.0)
|
rainbow (3.0.0)
|
||||||
raindrops (0.19.1)
|
raindrops (0.19.2)
|
||||||
rake (13.0.3)
|
rake (13.0.6)
|
||||||
rb-fsevent (0.11.0)
|
rb-fsevent (0.11.0)
|
||||||
rb-inotify (0.10.1)
|
rb-inotify (0.10.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
@@ -329,7 +335,7 @@ GEM
|
|||||||
msgpack (>= 0.4.3)
|
msgpack (>= 0.4.3)
|
||||||
optimist (>= 3.0.0)
|
optimist (>= 3.0.0)
|
||||||
rchardet (1.8.0)
|
rchardet (1.8.0)
|
||||||
redis (4.2.5)
|
redis (4.5.1)
|
||||||
redis-namespace (1.8.1)
|
redis-namespace (1.8.1)
|
||||||
redis (>= 3.0.4)
|
redis (>= 3.0.4)
|
||||||
regexp_parser (2.1.1)
|
regexp_parser (2.1.1)
|
||||||
@@ -338,10 +344,10 @@ GEM
|
|||||||
rexml (3.2.5)
|
rexml (3.2.5)
|
||||||
rinku (2.0.6)
|
rinku (2.0.6)
|
||||||
rotp (6.2.0)
|
rotp (6.2.0)
|
||||||
rqrcode (2.0.0)
|
rqrcode (2.1.0)
|
||||||
chunky_png (~> 1.0)
|
chunky_png (~> 1.0)
|
||||||
rqrcode_core (~> 1.0)
|
rqrcode_core (~> 1.0)
|
||||||
rqrcode_core (1.0.0)
|
rqrcode_core (1.2.0)
|
||||||
rspec (3.10.0)
|
rspec (3.10.0)
|
||||||
rspec-core (~> 3.10.0)
|
rspec-core (~> 3.10.0)
|
||||||
rspec-expectations (~> 3.10.0)
|
rspec-expectations (~> 3.10.0)
|
||||||
@@ -357,7 +363,7 @@ GEM
|
|||||||
rspec-mocks (3.10.2)
|
rspec-mocks (3.10.2)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.10.0)
|
rspec-support (~> 3.10.0)
|
||||||
rspec-rails (5.0.1)
|
rspec-rails (5.0.2)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
activesupport (>= 5.2)
|
activesupport (>= 5.2)
|
||||||
railties (>= 5.2)
|
railties (>= 5.2)
|
||||||
@@ -365,40 +371,40 @@ GEM
|
|||||||
rspec-expectations (~> 3.10)
|
rspec-expectations (~> 3.10)
|
||||||
rspec-mocks (~> 3.10)
|
rspec-mocks (~> 3.10)
|
||||||
rspec-support (~> 3.10)
|
rspec-support (~> 3.10)
|
||||||
rspec-support (3.10.2)
|
rspec-support (3.10.3)
|
||||||
|
rss (0.2.9)
|
||||||
|
rexml
|
||||||
rswag-specs (2.4.0)
|
rswag-specs (2.4.0)
|
||||||
activesupport (>= 3.1, < 7.0)
|
activesupport (>= 3.1, < 7.0)
|
||||||
json-schema (~> 2.2)
|
json-schema (~> 2.2)
|
||||||
railties (>= 3.1, < 7.0)
|
railties (>= 3.1, < 7.0)
|
||||||
rtlit (0.0.5)
|
rtlit (0.0.5)
|
||||||
rubocop (1.14.0)
|
rubocop (1.23.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.0.0.0)
|
parser (>= 3.0.0.0)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
regexp_parser (>= 1.8, < 3.0)
|
regexp_parser (>= 1.8, < 3.0)
|
||||||
rexml
|
rexml
|
||||||
rubocop-ast (>= 1.5.0, < 2.0)
|
rubocop-ast (>= 1.12.0, < 2.0)
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
unicode-display_width (>= 1.4.0, < 3.0)
|
unicode-display_width (>= 1.4.0, < 3.0)
|
||||||
rubocop-ast (1.5.0)
|
rubocop-ast (1.13.0)
|
||||||
parser (>= 3.0.1.1)
|
parser (>= 3.0.1.1)
|
||||||
rubocop-discourse (2.4.1)
|
rubocop-discourse (2.4.2)
|
||||||
rubocop (>= 1.1.0)
|
rubocop (>= 1.1.0)
|
||||||
rubocop-rspec (>= 2.0.0)
|
rubocop-rspec (>= 2.0.0)
|
||||||
rubocop-rspec (2.3.0)
|
rubocop-rspec (2.6.0)
|
||||||
rubocop (~> 1.0)
|
rubocop (~> 1.19)
|
||||||
rubocop-ast (>= 1.1.0)
|
|
||||||
ruby-prof (1.4.3)
|
ruby-prof (1.4.3)
|
||||||
ruby-progressbar (1.11.0)
|
ruby-progressbar (1.11.0)
|
||||||
ruby-readability (0.7.0)
|
ruby-readability (0.7.0)
|
||||||
guess_html_encoding (>= 0.0.4)
|
guess_html_encoding (>= 0.0.4)
|
||||||
nokogiri (>= 1.6.0)
|
nokogiri (>= 1.6.0)
|
||||||
ruby2_keywords (0.0.4)
|
ruby2_keywords (0.0.5)
|
||||||
rubyzip (2.3.0)
|
rubyzip (2.3.2)
|
||||||
sanitize (5.2.3)
|
sanitize (6.0.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.8.0)
|
nokogiri (>= 1.12.0)
|
||||||
nokogumbo (~> 2.0)
|
|
||||||
sassc (2.0.1)
|
sassc (2.0.1)
|
||||||
ffi (~> 1.9)
|
ffi (~> 1.9)
|
||||||
rake
|
rake
|
||||||
@@ -411,9 +417,9 @@ GEM
|
|||||||
seed-fu (2.3.9)
|
seed-fu (2.3.9)
|
||||||
activerecord (>= 3.1)
|
activerecord (>= 3.1)
|
||||||
activesupport (>= 3.1)
|
activesupport (>= 3.1)
|
||||||
shoulda-matchers (4.5.1)
|
shoulda-matchers (5.0.0)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 5.2.0)
|
||||||
sidekiq (6.2.1)
|
sidekiq (6.3.1)
|
||||||
connection_pool (>= 2.2.2)
|
connection_pool (>= 2.2.2)
|
||||||
rack (~> 2.0)
|
rack (~> 2.0)
|
||||||
redis (>= 4.2.0)
|
redis (>= 4.2.0)
|
||||||
@@ -426,13 +432,13 @@ GEM
|
|||||||
sprockets (3.7.2)
|
sprockets (3.7.2)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
rack (> 1, < 3)
|
rack (> 1, < 3)
|
||||||
sprockets-rails (3.2.2)
|
sprockets-rails (3.4.1)
|
||||||
actionpack (>= 4.0)
|
actionpack (>= 5.2)
|
||||||
activesupport (>= 4.0)
|
activesupport (>= 5.2)
|
||||||
sprockets (>= 3.0.0)
|
sprockets (>= 3.0.0)
|
||||||
sshkey (2.0.0)
|
sshkey (2.0.0)
|
||||||
stackprof (0.2.17)
|
stackprof (0.2.17)
|
||||||
test-prof (1.0.5)
|
test-prof (1.0.7)
|
||||||
thor (1.1.0)
|
thor (1.1.0)
|
||||||
tilt (2.0.10)
|
tilt (2.0.10)
|
||||||
tzinfo (2.0.4)
|
tzinfo (2.0.4)
|
||||||
@@ -441,15 +447,15 @@ GEM
|
|||||||
execjs (>= 0.3.0, < 3)
|
execjs (>= 0.3.0, < 3)
|
||||||
unf (0.1.4)
|
unf (0.1.4)
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.7.7)
|
unf_ext (0.0.8)
|
||||||
unicode-display_width (2.0.0)
|
unicode-display_width (2.1.0)
|
||||||
unicorn (6.0.0)
|
unicorn (6.0.0)
|
||||||
kgio (~> 2.6)
|
kgio (~> 2.6)
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
uniform_notifier (1.14.2)
|
uniform_notifier (1.14.2)
|
||||||
uri_template (0.7.0)
|
uri_template (0.7.0)
|
||||||
webmock (3.12.2)
|
webmock (3.14.0)
|
||||||
addressable (>= 2.3.6)
|
addressable (>= 2.8.0)
|
||||||
crack (>= 0.3.2)
|
crack (>= 0.3.2)
|
||||||
hashdiff (>= 0.4.0, < 2.0.0)
|
hashdiff (>= 0.4.0, < 2.0.0)
|
||||||
webpush (1.1.0)
|
webpush (1.1.0)
|
||||||
@@ -457,20 +463,21 @@ GEM
|
|||||||
jwt (~> 2.0)
|
jwt (~> 2.0)
|
||||||
xorcist (1.1.2)
|
xorcist (1.1.2)
|
||||||
yaml-lint (0.0.10)
|
yaml-lint (0.0.10)
|
||||||
zeitwerk (2.4.2)
|
zeitwerk (2.5.1)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
|
aarch64-linux
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
actionmailer (= 6.1.3.2)
|
actionmailer (= 6.1.4.1)
|
||||||
actionpack (= 6.1.3.2)
|
actionpack (= 6.1.4.1)
|
||||||
actionview (= 6.1.3.2)
|
actionview (= 6.1.4.1)
|
||||||
actionview_precompiler
|
actionview_precompiler
|
||||||
active_model_serializers (~> 0.8.3)
|
active_model_serializers (~> 0.8.3)
|
||||||
activemodel (= 6.1.3.2)
|
activemodel (= 6.1.4.1)
|
||||||
activerecord (= 6.1.3.2)
|
activerecord (= 6.1.4.1)
|
||||||
activesupport (= 6.1.3.2)
|
activesupport (= 6.1.4.1)
|
||||||
addressable
|
addressable
|
||||||
annotate
|
annotate
|
||||||
aws-sdk-s3
|
aws-sdk-s3
|
||||||
@@ -491,13 +498,13 @@ DEPENDENCIES
|
|||||||
discourse-ember-rails (= 0.18.6)
|
discourse-ember-rails (= 0.18.6)
|
||||||
discourse-ember-source (~> 3.12.2)
|
discourse-ember-source (~> 3.12.2)
|
||||||
discourse-fonts
|
discourse-fonts
|
||||||
discourse_dev
|
discourse_dev_assets
|
||||||
discourse_image_optim
|
|
||||||
email_reply_trimmer
|
email_reply_trimmer
|
||||||
ember-handlebars-template (= 0.8.0)
|
ember-handlebars-template (= 0.8.0)
|
||||||
excon
|
excon
|
||||||
execjs
|
execjs
|
||||||
fabrication
|
fabrication
|
||||||
|
faker (~> 2.16)
|
||||||
fakeweb
|
fakeweb
|
||||||
fast_blank
|
fast_blank
|
||||||
fast_xs
|
fast_xs
|
||||||
@@ -506,6 +513,7 @@ DEPENDENCIES
|
|||||||
highline
|
highline
|
||||||
htmlentities
|
htmlentities
|
||||||
http_accept_language
|
http_accept_language
|
||||||
|
image_optim
|
||||||
json
|
json
|
||||||
json_schemer
|
json_schemer
|
||||||
listen
|
listen
|
||||||
@@ -531,14 +539,13 @@ DEPENDENCIES
|
|||||||
multi_json
|
multi_json
|
||||||
mustache
|
mustache
|
||||||
nokogiri
|
nokogiri
|
||||||
oj
|
oj (= 3.13.2)
|
||||||
omniauth
|
omniauth
|
||||||
omniauth-facebook
|
omniauth-facebook
|
||||||
omniauth-github
|
omniauth-github
|
||||||
omniauth-google-oauth2
|
omniauth-google-oauth2
|
||||||
omniauth-oauth2
|
omniauth-oauth2
|
||||||
omniauth-twitter
|
omniauth-twitter
|
||||||
onebox
|
|
||||||
parallel_tests
|
parallel_tests
|
||||||
pg
|
pg
|
||||||
pry-byebug
|
pry-byebug
|
||||||
@@ -550,7 +557,7 @@ DEPENDENCIES
|
|||||||
rack-protection
|
rack-protection
|
||||||
rails_failover
|
rails_failover
|
||||||
rails_multisite
|
rails_multisite
|
||||||
railties (= 6.1.3.2)
|
railties (= 6.1.4.1)
|
||||||
rake
|
rake
|
||||||
rb-fsevent
|
rb-fsevent
|
||||||
rbtrace
|
rbtrace
|
||||||
@@ -563,12 +570,14 @@ DEPENDENCIES
|
|||||||
rspec
|
rspec
|
||||||
rspec-html-matchers
|
rspec-html-matchers
|
||||||
rspec-rails
|
rspec-rails
|
||||||
|
rss
|
||||||
rswag-specs
|
rswag-specs
|
||||||
rtlit
|
rtlit
|
||||||
rubocop-discourse
|
rubocop-discourse
|
||||||
ruby-prof
|
ruby-prof
|
||||||
ruby-readability
|
ruby-readability
|
||||||
rubyzip
|
rubyzip
|
||||||
|
sanitize
|
||||||
sassc (= 2.0.1)
|
sassc (= 2.0.1)
|
||||||
sassc-rails
|
sassc-rails
|
||||||
seed-fu
|
seed-fu
|
||||||
@@ -590,4 +599,4 @@ DEPENDENCIES
|
|||||||
yaml-lint
|
yaml-lint
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.2.24
|
2.2.26
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env nix-shell
|
#!/usr/bin/env nix-shell
|
||||||
#! nix-shell -i python3 -p bundix bundler nix-update nix-universal-prefetch python3 python3Packages.requests python3Packages.click python3Packages.click-log
|
#! nix-shell -i python3 -p bundix bundler nix-update nix-universal-prefetch python3 python3Packages.requests python3Packages.click python3Packages.click-log
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
import click
|
import click
|
||||||
import click_log
|
import click_log
|
||||||
@@ -13,16 +14,70 @@ import stat
|
|||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from functools import total_ordering
|
||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
|
from itertools import zip_longest
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterable
|
from typing import Union, Iterable
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@total_ordering
|
||||||
|
class DiscourseVersion:
|
||||||
|
"""Represents a Discourse style version number and git tag.
|
||||||
|
|
||||||
|
This takes either a tag or version string as input and
|
||||||
|
extrapolates the other. Sorting is implemented to work as expected
|
||||||
|
in regard to A.B.C.betaD version numbers - 2.0.0.beta1 is
|
||||||
|
considered lower than 2.0.0.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
tag: str = ""
|
||||||
|
version: str = ""
|
||||||
|
split_version: Iterable[Union[None, int, str]] = []
|
||||||
|
|
||||||
|
def __init__(self, version: str):
|
||||||
|
"""Take either a tag or version number, calculate the other."""
|
||||||
|
if version.startswith('v'):
|
||||||
|
self.tag = version
|
||||||
|
self.version = version.lstrip('v')
|
||||||
|
else:
|
||||||
|
self.tag = 'v' + version
|
||||||
|
self.version = version
|
||||||
|
self.split_version = LooseVersion(self.version).version
|
||||||
|
|
||||||
|
def __eq__(self, other: DiscourseVersion):
|
||||||
|
"""Versions are equal when their individual parts are."""
|
||||||
|
return self.split_version == other.split_version
|
||||||
|
|
||||||
|
def __gt__(self, other: DiscourseVersion):
|
||||||
|
"""Check if this version is greater than the other.
|
||||||
|
|
||||||
|
Goes through the parts of the version numbers from most to
|
||||||
|
least significant, only continuing on to the next if the
|
||||||
|
numbers are equal and no decision can be made. If one version
|
||||||
|
ends in 'betaX' and the other doesn't, all else being equal,
|
||||||
|
the one without 'betaX' is considered greater, since it's the
|
||||||
|
release version.
|
||||||
|
|
||||||
|
"""
|
||||||
|
for (this_ver, other_ver) in zip_longest(self.split_version, other.split_version):
|
||||||
|
if this_ver == other_ver:
|
||||||
|
continue
|
||||||
|
if type(this_ver) is int and type(other_ver) is int:
|
||||||
|
return this_ver > other_ver
|
||||||
|
elif 'beta' in [this_ver, other_ver]:
|
||||||
|
# release version (None) is greater than beta
|
||||||
|
return this_ver is None
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class DiscourseRepo:
|
class DiscourseRepo:
|
||||||
version_regex = re.compile(r'^v\d+\.\d+\.\d+$')
|
version_regex = re.compile(r'^v\d+\.\d+\.\d+(\.beta\d+)?$')
|
||||||
_latest_commit_sha = None
|
_latest_commit_sha = None
|
||||||
|
|
||||||
def __init__(self, owner: str = 'discourse', repo: str = 'discourse'):
|
def __init__(self, owner: str = 'discourse', repo: str = 'discourse'):
|
||||||
@@ -30,15 +85,14 @@ class DiscourseRepo:
|
|||||||
self.repo = repo
|
self.repo = repo
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def tags(self) -> Iterable[str]:
|
def versions(self) -> Iterable[str]:
|
||||||
r = requests.get(f'https://api.github.com/repos/{self.owner}/{self.repo}/git/refs/tags').json()
|
r = requests.get(f'https://api.github.com/repos/{self.owner}/{self.repo}/git/refs/tags').json()
|
||||||
tags = [x['ref'].replace('refs/tags/', '') for x in r]
|
tags = [x['ref'].replace('refs/tags/', '') for x in r]
|
||||||
|
|
||||||
# filter out versions not matching version_regex
|
# filter out versions not matching version_regex
|
||||||
versions = list(filter(self.version_regex.match, tags))
|
versions = filter(self.version_regex.match, tags)
|
||||||
|
versions = [DiscourseVersion(x) for x in versions]
|
||||||
# sort, but ignore v for sorting comparisons
|
versions.sort(reverse=True)
|
||||||
versions.sort(key=lambda x: LooseVersion(x.replace('v', '')), reverse=True)
|
|
||||||
return versions
|
return versions
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -50,24 +104,15 @@ class DiscourseRepo:
|
|||||||
|
|
||||||
return self._latest_commit_sha
|
return self._latest_commit_sha
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def rev2version(tag: str) -> str:
|
|
||||||
"""
|
|
||||||
normalize a tag to a version number.
|
|
||||||
This obviously isn't very smart if we don't pass something that looks like a tag
|
|
||||||
:param tag: the tag to normalize
|
|
||||||
:return: a normalized version number
|
|
||||||
"""
|
|
||||||
# strip v prefix
|
|
||||||
return re.sub(r'^v', '', tag)
|
|
||||||
|
|
||||||
def get_file(self, filepath, rev):
|
def get_file(self, filepath, rev):
|
||||||
"""returns file contents at a given rev :param filepath: the path to
|
"""returns file contents at a given rev :param filepath: the path to
|
||||||
the file, relative to the repo root :param rev: the rev to
|
the file, relative to the repo root :param rev: the rev to
|
||||||
fetch at :return:
|
fetch at :return:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return requests.get(f'https://raw.githubusercontent.com/{self.owner}/{self.repo}/{rev}/{filepath}').text
|
r = requests.get(f'https://raw.githubusercontent.com/{self.owner}/{self.repo}/{rev}/{filepath}')
|
||||||
|
r.raise_for_status()
|
||||||
|
return r.text
|
||||||
|
|
||||||
|
|
||||||
def _call_nix_update(pkg, version):
|
def _call_nix_update(pkg, version):
|
||||||
@@ -89,13 +134,13 @@ def _get_current_package_version(pkg: str):
|
|||||||
return _nix_eval(f'{pkg}.version')
|
return _nix_eval(f'{pkg}.version')
|
||||||
|
|
||||||
|
|
||||||
def _diff_file(filepath: str, old_version: str, new_version: str):
|
def _diff_file(filepath: str, old_version: DiscourseVersion, new_version: DiscourseVersion):
|
||||||
repo = DiscourseRepo()
|
repo = DiscourseRepo()
|
||||||
|
|
||||||
current_dir = Path(__file__).parent
|
current_dir = Path(__file__).parent
|
||||||
|
|
||||||
old = repo.get_file(filepath, 'v' + old_version)
|
old = repo.get_file(filepath, old_version.tag)
|
||||||
new = repo.get_file(filepath, 'v' + new_version)
|
new = repo.get_file(filepath, new_version.tag)
|
||||||
|
|
||||||
if old == new:
|
if old == new:
|
||||||
click.secho(f'{filepath} is unchanged', fg='green')
|
click.secho(f'{filepath} is unchanged', fg='green')
|
||||||
@@ -111,7 +156,7 @@ def _diff_file(filepath: str, old_version: str, new_version: str):
|
|||||||
text=True
|
text=True
|
||||||
)
|
)
|
||||||
|
|
||||||
click.secho(f'Diff for {filepath} ({old_version} -> {new_version}):', fg='bright_blue', bold=True)
|
click.secho(f'Diff for {filepath} ({old_version.version} -> {new_version.version}):', fg='bright_blue', bold=True)
|
||||||
click.echo(diff_proc.stdout + '\n')
|
click.echo(diff_proc.stdout + '\n')
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -153,10 +198,10 @@ def print_diffs(rev, reverse):
|
|||||||
"""
|
"""
|
||||||
if rev == 'latest':
|
if rev == 'latest':
|
||||||
repo = DiscourseRepo()
|
repo = DiscourseRepo()
|
||||||
rev = repo.tags[0]
|
rev = repo.versions[0].tag
|
||||||
|
|
||||||
old_version = _get_current_package_version('discourse')
|
old_version = DiscourseVersion(_get_current_package_version('discourse'))
|
||||||
new_version = DiscourseRepo.rev2version(rev)
|
new_version = DiscourseVersion(rev)
|
||||||
|
|
||||||
if reverse:
|
if reverse:
|
||||||
old_version, new_version = new_version, old_version
|
old_version, new_version = new_version, old_version
|
||||||
@@ -170,30 +215,32 @@ def print_diffs(rev, reverse):
|
|||||||
def update(rev):
|
def update(rev):
|
||||||
"""Update gem files and version.
|
"""Update gem files and version.
|
||||||
|
|
||||||
REV should be the git rev to update to ('vX.Y.Z') or 'latest';
|
REV should be the git rev to update to ('vX.Y.Z[.betaA]') or
|
||||||
defaults to 'latest'.
|
'latest'; defaults to 'latest'.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
repo = DiscourseRepo()
|
repo = DiscourseRepo()
|
||||||
|
|
||||||
if rev == 'latest':
|
if rev == 'latest':
|
||||||
rev = repo.tags[0]
|
version = repo.versions[0]
|
||||||
logger.debug(f"Using rev {rev}")
|
else:
|
||||||
|
version = DiscourseVersion(rev)
|
||||||
|
|
||||||
version = repo.rev2version(rev)
|
logger.debug(f"Using rev {version.tag}")
|
||||||
logger.debug(f"Using version {version}")
|
logger.debug(f"Using version {version.version}")
|
||||||
|
|
||||||
rubyenv_dir = Path(__file__).parent / "rubyEnv"
|
rubyenv_dir = Path(__file__).parent / "rubyEnv"
|
||||||
|
|
||||||
for fn in ['Gemfile.lock', 'Gemfile']:
|
for fn in ['Gemfile.lock', 'Gemfile']:
|
||||||
with open(rubyenv_dir / fn, 'w') as f:
|
with open(rubyenv_dir / fn, 'w') as f:
|
||||||
f.write(repo.get_file(fn, rev))
|
f.write(repo.get_file(fn, version.tag))
|
||||||
|
|
||||||
subprocess.check_output(['bundle', 'lock'], cwd=rubyenv_dir)
|
subprocess.check_output(['bundle', 'lock'], cwd=rubyenv_dir)
|
||||||
_remove_platforms(rubyenv_dir)
|
_remove_platforms(rubyenv_dir)
|
||||||
subprocess.check_output(['bundix'], cwd=rubyenv_dir)
|
subprocess.check_output(['bundix'], cwd=rubyenv_dir)
|
||||||
|
|
||||||
_call_nix_update('discourse', repo.rev2version(rev))
|
_call_nix_update('discourse', version.version)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
def update_plugins():
|
def update_plugins():
|
||||||
@@ -212,9 +259,8 @@ def update_plugins():
|
|||||||
{'name': 'discourse-ldap-auth', 'owner': 'jonmbake'},
|
{'name': 'discourse-ldap-auth', 'owner': 'jonmbake'},
|
||||||
{'name': 'discourse-math'},
|
{'name': 'discourse-math'},
|
||||||
{'name': 'discourse-migratepassword', 'owner': 'discoursehosting'},
|
{'name': 'discourse-migratepassword', 'owner': 'discoursehosting'},
|
||||||
# We can't update this automatically at the moment because the plugin.rb
|
{'name': 'discourse-prometheus'},
|
||||||
# tries to load a version number which breaks bundler called by this script.
|
{'name': 'discourse-openid-connect'},
|
||||||
# {'name': 'discourse-prometheus'},
|
|
||||||
{'name': 'discourse-saved-searches'},
|
{'name': 'discourse-saved-searches'},
|
||||||
{'name': 'discourse-solved'},
|
{'name': 'discourse-solved'},
|
||||||
{'name': 'discourse-spoiler-alert'},
|
{'name': 'discourse-spoiler-alert'},
|
||||||
@@ -230,13 +276,34 @@ def update_plugins():
|
|||||||
|
|
||||||
repo = DiscourseRepo(owner=owner, repo=repo_name)
|
repo = DiscourseRepo(owner=owner, repo=repo_name)
|
||||||
|
|
||||||
|
# implement the plugin pinning algorithm laid out here:
|
||||||
|
# https://meta.discourse.org/t/pinning-plugin-and-theme-versions-for-older-discourse-installs/156971
|
||||||
|
# this makes sure we don't upgrade plugins to revisions that
|
||||||
|
# are incompatible with the packaged Discourse version
|
||||||
|
try:
|
||||||
|
compatibility_spec = repo.get_file('.discourse-compatibility', repo.latest_commit_sha)
|
||||||
|
versions = [(DiscourseVersion(discourse_version), plugin_rev.strip(' '))
|
||||||
|
for [discourse_version, plugin_rev]
|
||||||
|
in [line.split(':')
|
||||||
|
for line
|
||||||
|
in compatibility_spec.splitlines()]]
|
||||||
|
discourse_version = DiscourseVersion(_get_current_package_version('discourse'))
|
||||||
|
versions = list(filter(lambda ver: ver[0] >= discourse_version, versions))
|
||||||
|
if versions == []:
|
||||||
|
rev = repo.latest_commit_sha
|
||||||
|
else:
|
||||||
|
rev = versions[0][1]
|
||||||
|
print(rev)
|
||||||
|
except requests.exceptions.HTTPError:
|
||||||
|
rev = repo.latest_commit_sha
|
||||||
|
|
||||||
filename = _nix_eval(f'builtins.unsafeGetAttrPos "src" discourse.plugins.{name}')
|
filename = _nix_eval(f'builtins.unsafeGetAttrPos "src" discourse.plugins.{name}')
|
||||||
if filename is None:
|
if filename is None:
|
||||||
filename = Path(__file__).parent / 'plugins' / name / 'default.nix'
|
filename = Path(__file__).parent / 'plugins' / name / 'default.nix'
|
||||||
filename.parent.mkdir()
|
filename.parent.mkdir()
|
||||||
|
|
||||||
has_ruby_deps = False
|
has_ruby_deps = False
|
||||||
for line in repo.get_file('plugin.rb', repo.latest_commit_sha).splitlines():
|
for line in repo.get_file('plugin.rb', rev).splitlines():
|
||||||
if 'gem ' in line:
|
if 'gem ' in line:
|
||||||
has_ruby_deps = True
|
has_ruby_deps = True
|
||||||
break
|
break
|
||||||
@@ -278,7 +345,7 @@ def update_plugins():
|
|||||||
|
|
||||||
prev_commit_sha = _nix_eval(f'discourse.plugins.{name}.src.rev')
|
prev_commit_sha = _nix_eval(f'discourse.plugins.{name}.src.rev')
|
||||||
|
|
||||||
if prev_commit_sha == repo.latest_commit_sha:
|
if prev_commit_sha == rev:
|
||||||
click.echo(f'Plugin {name} is already at the latest revision')
|
click.echo(f'Plugin {name} is already at the latest revision')
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -287,14 +354,14 @@ def update_plugins():
|
|||||||
'nix-universal-prefetch', fetcher,
|
'nix-universal-prefetch', fetcher,
|
||||||
'--owner', owner,
|
'--owner', owner,
|
||||||
'--repo', repo_name,
|
'--repo', repo_name,
|
||||||
'--rev', repo.latest_commit_sha,
|
'--rev', rev,
|
||||||
], text=True).strip("\n")
|
], text=True).strip("\n")
|
||||||
|
|
||||||
click.echo(f"Update {name}, {prev_commit_sha} -> {repo.latest_commit_sha} in {filename}")
|
click.echo(f"Update {name}, {prev_commit_sha} -> {rev} in {filename}")
|
||||||
|
|
||||||
with open(filename, 'r+') as f:
|
with open(filename, 'r+') as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
content = content.replace(prev_commit_sha, repo.latest_commit_sha)
|
content = content.replace(prev_commit_sha, rev)
|
||||||
content = content.replace(prev_hash, new_hash)
|
content = content.replace(prev_hash, new_hash)
|
||||||
f.seek(0)
|
f.seek(0)
|
||||||
f.write(content)
|
f.write(content)
|
||||||
@@ -302,11 +369,19 @@ def update_plugins():
|
|||||||
|
|
||||||
rubyenv_dir = Path(filename).parent
|
rubyenv_dir = Path(filename).parent
|
||||||
gemfile = rubyenv_dir / "Gemfile"
|
gemfile = rubyenv_dir / "Gemfile"
|
||||||
|
version_file_regex = re.compile(r'.*File\.expand_path\("\.\./(.*)", __FILE__\)')
|
||||||
gemfile_text = ''
|
gemfile_text = ''
|
||||||
for line in repo.get_file('plugin.rb', repo.latest_commit_sha).splitlines():
|
for line in repo.get_file('plugin.rb', rev).splitlines():
|
||||||
if 'gem ' in line:
|
if 'gem ' in line:
|
||||||
gemfile_text = gemfile_text + line + os.linesep
|
gemfile_text = gemfile_text + line + os.linesep
|
||||||
|
|
||||||
|
version_file_match = version_file_regex.match(line)
|
||||||
|
if version_file_match is not None:
|
||||||
|
filename = version_file_match.groups()[0]
|
||||||
|
content = repo.get_file(filename, rev)
|
||||||
|
with open(rubyenv_dir / filename, 'w') as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
if len(gemfile_text) > 0:
|
if len(gemfile_text) > 0:
|
||||||
if os.path.isfile(gemfile):
|
if os.path.isfile(gemfile):
|
||||||
os.remove(gemfile)
|
os.remove(gemfile)
|
||||||
|
|||||||
Reference in New Issue
Block a user