diff options
Diffstat (limited to 'nixpkgs/pkgs/servers/web-apps/discourse')
64 files changed, 5897 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/action_mailer_ca_cert.patch b/nixpkgs/pkgs/servers/web-apps/discourse/action_mailer_ca_cert.patch new file mode 100644 index 000000000000..d6a4ff8f2a78 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/action_mailer_ca_cert.patch @@ -0,0 +1,12 @@ +diff --git a/config/environments/production.rb b/config/environments/production.rb +index 6b73c82e9d..0cefea6fc0 100644 +--- a/config/environments/production.rb ++++ b/config/environments/production.rb +@@ -32,5 +32,6 @@ Discourse::Application.configure do + user_name: GlobalSetting.smtp_user_name, + password: GlobalSetting.smtp_password, + authentication: GlobalSetting.smtp_authentication, ++ ca_file: "/etc/ssl/certs/ca-certificates.crt", + enable_starttls_auto: GlobalSetting.smtp_enable_start_tls, + open_timeout: GlobalSetting.smtp_open_timeout, + read_timeout: GlobalSetting.smtp_read_timeout \ No newline at end of file diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/admin_create.patch b/nixpkgs/pkgs/servers/web-apps/discourse/admin_create.patch new file mode 100644 index 000000000000..691b806dfd65 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/admin_create.patch @@ -0,0 +1,48 @@ +diff --git a/lib/tasks/admin.rake b/lib/tasks/admin.rake +index 37ef651f2b..b775129498 100644 +--- a/lib/tasks/admin.rake ++++ b/lib/tasks/admin.rake +@@ -107,3 +107,43 @@ task "admin:create" => :environment do + end + + end ++ ++desc "Creates a forum administrator noninteractively" ++task "admin:create_noninteractively" => :environment do ++ email = ENV["ADMIN_EMAIL"] ++ existing_user = User.find_by_email(email) ++ ++ # check if user account already exixts ++ if existing_user ++ admin = existing_user ++ else ++ # create new user ++ admin = User.new ++ end ++ ++ admin.email = email ++ admin.name = ENV["ADMIN_NAME"] ++ admin.username = ENV["ADMIN_USERNAME"] ++ ++ password = ENV["ADMIN_PASSWORD"] ++ unless admin.confirm_password?(password) ++ admin.password = password ++ puts "Admin password set!" ++ end ++ ++ admin.active = true ++ ++ # save/update user account ++ saved = admin.save ++ raise admin.errors.full_messages.join("\n") unless saved ++ ++ puts "Account created successfully with username #{admin.username}" unless existing_user ++ ++ # grant admin privileges ++ admin.grant_admin! ++ if admin.trust_level < 1 ++ admin.change_trust_level!(1) ++ end ++ admin.email_tokens.update_all confirmed: true ++ admin.activate ++end diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/asserts_patch-package_from_path.patch b/nixpkgs/pkgs/servers/web-apps/discourse/asserts_patch-package_from_path.patch new file mode 100644 index 000000000000..9f7d98b069f4 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/asserts_patch-package_from_path.patch @@ -0,0 +1,13 @@ +diff --git a/app/assets/javascripts/discourse/package.json b/app/assets/javascripts/discourse/package.json +index 9e4533d2..e57f8a5f 100644 +--- a/app/assets/javascripts/discourse/package.json ++++ b/app/assets/javascripts/discourse/package.json +@@ -14,7 +14,7 @@ + "build": "ember build", + "start": "ember serve", + "test": "ember test", +- "postinstall": "yarn --silent --cwd .. patch-package" ++ "postinstall": "patch-package" + }, + "dependencies": { + "@babel/core": "^7.21.4", diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/assets_esbuild_from_path.patch b/nixpkgs/pkgs/servers/web-apps/discourse/assets_esbuild_from_path.patch new file mode 100644 index 000000000000..fd40d27ca8b5 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/assets_esbuild_from_path.patch @@ -0,0 +1,13 @@ +diff --git a/lib/discourse_js_processor.rb b/lib/discourse_js_processor.rb +index 3fee4259af9..53cc3107f46 100644 +--- a/lib/discourse_js_processor.rb ++++ b/lib/discourse_js_processor.rb +@@ -111,8 +111,6 @@ class DiscourseJsProcessor + + def self.generate_js_processor + Discourse::Utils.execute_command( +- "yarn", +- "--silent", + "esbuild", + "--log-level=warning", + "--bundle", diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/assets_rake_command.patch b/nixpkgs/pkgs/servers/web-apps/discourse/assets_rake_command.patch new file mode 100644 index 000000000000..b37b6d1d7994 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/assets_rake_command.patch @@ -0,0 +1,13 @@ +diff --git a/lib/tasks/assets.rake b/lib/tasks/assets.rake +index 68b5db61ac..d460b5753e 100644 +--- a/lib/tasks/assets.rake ++++ b/lib/tasks/assets.rake +@@ -19,7 +19,7 @@ task 'assets:precompile:before' do + + if only_assets_precompile_remaining + # Using exec to free up Rails app memory during ember build +- exec "#{compile_command} && EMBER_CLI_COMPILE_DONE=1 bin/rake assets:precompile" ++ exec "#{compile_command} && EMBER_CLI_COMPILE_DONE=1 bundle exec rake assets:precompile" + else + system compile_command + end diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/auto_generated_path.patch b/nixpkgs/pkgs/servers/web-apps/discourse/auto_generated_path.patch new file mode 100644 index 000000000000..c80e4a48ecd9 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/auto_generated_path.patch @@ -0,0 +1,13 @@ +diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb +index 8482ff0210..826d111d65 100644 +--- a/lib/plugin/instance.rb ++++ b/lib/plugin/instance.rb +@@ -455,7 +455,7 @@ class Plugin::Instance + end + + def auto_generated_path +- File.dirname(path) << "/auto_generated" ++ "#{Rails.root}/public/assets/auto_generated_plugin_assets/#{name}" + end + + def after_initialize(&block) diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/default.nix new file mode 100644 index 000000000000..320eac3bc8ce --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/default.nix @@ -0,0 +1,432 @@ +{ stdenv +, pkgs +, makeWrapper +, runCommand +, lib +, writeShellScript +, fetchFromGitHub +, bundlerEnv +, callPackage + +, ruby_3_2 +, replace +, gzip +, gnutar +, git +, esbuild +, cacert +, util-linux +, gawk +, nettools +, imagemagick +, optipng +, pngquant +, libjpeg +, jpegoptim +, gifsicle +, jhead +, oxipng +, libpsl +, redis +, postgresql +, which +, brotli +, procps +, rsync +, icu +, fetchYarnDeps +, yarn +, fixup_yarn_lock +, nodePackages +, nodejs_18 +, jq +, moreutils +, terser + +, plugins ? [] +}@args: + +let + version = "3.2.0.beta1"; + + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse"; + rev = "v${version}"; + sha256 = "sha256-HVjt5rsLSuyOaQxkbiTrsYsSXj3oSWjke98QVp+tEqk="; + }; + + ruby = ruby_3_2; + + runtimeDeps = [ + # For backups, themes and assets + rubyEnv.wrappedRuby + rsync + gzip + gnutar + git + brotli + esbuild + + # Misc required system utils + which + procps # For ps and kill + util-linux # For renice + gawk + nettools # For hostname + + # Image optimization + imagemagick + optipng + oxipng + pngquant + libjpeg + jpegoptim + gifsicle + nodePackages.svgo + jhead + ]; + + runtimeEnv = { + HOME = "/run/discourse/home"; + RAILS_ENV = "production"; + UNICORN_LISTENER = "/run/discourse/sockets/unicorn.sock"; + }; + + mkDiscoursePlugin = + { name ? null + , pname ? null + , version ? null + , meta ? null + , bundlerEnvArgs ? {} + , preserveGemsDir ? false + , src + , ... + }@args: + let + rubyEnv = bundlerEnv (bundlerEnvArgs // { + inherit name pname version ruby; + }); + in + stdenv.mkDerivation (builtins.removeAttrs args [ "bundlerEnvArgs" ] // { + pluginName = if name != null then name else "${pname}-${version}"; + dontConfigure = true; + dontBuild = true; + installPhase = '' + runHook preInstall + mkdir -p $out + cp -r * $out/ + '' + lib.optionalString (bundlerEnvArgs != {}) ( + if preserveGemsDir then '' + cp -r ${rubyEnv}/lib/ruby/gems/* $out/gems/ + '' + else '' + if [[ -e $out/gems ]]; then + echo "Warning: The repo contains a 'gems' directory which will be removed!" + echo " If you need to preserve it, set 'preserveGemsDir = true'." + rm -r $out/gems + fi + ln -sf ${rubyEnv}/lib/ruby/gems $out/gems + '' + '' + runHook postInstall + ''); + }); + + rake = runCommand "discourse-rake" { + nativeBuildInputs = [ makeWrapper ]; + } '' + mkdir -p $out/bin + makeWrapper ${rubyEnv}/bin/rake $out/bin/discourse-rake \ + ${lib.concatStrings (lib.mapAttrsToList (name: value: "--set ${name} '${value}' ") runtimeEnv)} \ + --prefix PATH : ${lib.makeBinPath runtimeDeps} \ + --set RAKEOPT '-f ${discourse}/share/discourse/Rakefile' \ + --chdir '${discourse}/share/discourse' + ''; + + rubyEnv = bundlerEnv { + name = "discourse-ruby-env-${version}"; + inherit version ruby; + gemdir = ./rubyEnv; + gemset = + let + gems = import ./rubyEnv/gemset.nix; + in + gems // { + mini_racer = gems.mini_racer // { + buildInputs = [ icu ]; + dontBuild = false; + NIX_LDFLAGS = "-licui18n"; + }; + libv8-node = + let + noopScript = writeShellScript "noop" "exit 0"; + linkFiles = writeShellScript "link-files" '' + cd ../.. + + mkdir -p vendor/v8/${stdenv.hostPlatform.system}/libv8/obj/ + ln -s "${nodejs_18.libv8}/lib/libv8.a" vendor/v8/${stdenv.hostPlatform.system}/libv8/obj/libv8_monolith.a + + ln -s ${nodejs_18.libv8}/include vendor/v8/include + + mkdir -p ext/libv8-node + echo '--- !ruby/object:Libv8::Node::Location::Vendor {}' >ext/libv8-node/.location.yml + ''; + in gems.libv8-node // { + dontBuild = false; + postPatch = '' + cp ${noopScript} libexec/build-libv8 + cp ${noopScript} libexec/build-monolith + cp ${noopScript} libexec/download-node + cp ${noopScript} libexec/extract-node + cp ${linkFiles} libexec/inject-libv8 + ''; + }; + mini_suffix = gems.mini_suffix // { + propagatedBuildInputs = [ libpsl ]; + dontBuild = false; + # Use our libpsl instead of the vendored one, which isn't + # available for aarch64. It has to be called + # libpsl.x86_64.so or it isn't found. + postPatch = '' + cp $(readlink -f ${libpsl}/lib/libpsl.so) vendor/libpsl.x86_64.so + ''; + }; + }; + + groups = [ + "default" "assets" "development" "test" + ]; + }; + + assets = stdenv.mkDerivation { + pname = "discourse-assets"; + inherit version src; + + yarnOfflineCache = fetchYarnDeps { + yarnLock = src + "/app/assets/javascripts/yarn.lock"; + sha256 = "070h66zp8kmsigbrkh5d3jzbzvllzhbx0fa2yzx5lbpgnjhih3p2"; + }; + + nativeBuildInputs = runtimeDeps ++ [ + postgresql + redis + nodePackages.uglify-js + terser + nodePackages.patch-package + yarn + nodejs_18 + jq + moreutils + esbuild + ]; + + outputs = [ "out" "javascripts" ]; + + patches = [ + # Use the Ruby API version in the plugin gem path, to match the + # one constructed by bundlerEnv + ./plugin_gem_api_version.patch + + # Change the path to the auto generated plugin assets, which + # defaults to the plugin's directory and isn't writable at the + # time of asset generation + ./auto_generated_path.patch + + # Fix the rake command used to recursively execute itself in the + # assets precompilation task. + ./assets_rake_command.patch + + # `app/assets/javascripts/discourse/package.json`'s postinstall + # hook tries to call `../node_modules/.bin/patch-package`, which + # hasn't been `patchShebangs`-ed yet. So instead we just use + # `patch-package` from `nativeBuildInputs`. + ./asserts_patch-package_from_path.patch + + # `lib/discourse_js_processor.rb` + # tries to call `../node_modules/.bin/esbuild`, which + # hasn't been `patchShebangs`-ed yet. So instead we just use + # `esbuild` from `nativeBuildInputs`. + ./assets_esbuild_from_path.patch + ]; + + # We have to set up an environment that is close enough to + # production ready or the assets:precompile task refuses to + # run. This means that Redis and PostgreSQL has to be running and + # database migrations performed. + preBuild = '' + # Yarn wants a real home directory to write cache, config, etc to + export HOME=$NIX_BUILD_TOP/fake_home + + # Make yarn install packages from our offline cache, not the registry + yarn config --offline set yarn-offline-mirror $yarnOfflineCache + + # Fixup "resolved"-entries in yarn.lock to match our offline cache + ${fixup_yarn_lock}/bin/fixup_yarn_lock app/assets/javascripts/yarn.lock + + export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt + + find app/assets/javascripts -name package.json -print0 \ + | xargs -0 -I {} bash -c "jq 'del(.scripts.postinstall)' -r <{} | sponge {}" + yarn install --offline --cwd app/assets/javascripts/discourse + + patchShebangs app/assets/javascripts/node_modules/ + + # Run `patch-package` AFTER the corresponding shebang inside `.bin/patch-package` + # got patched. Otherwise this will fail with + # /bin/sh: line 1: /build/source/app/assets/javascripts/node_modules/.bin/patch-package: cannot execute: required file not found + pushd app/assets/javascripts &>/dev/null + yarn run patch-package + popd &>/dev/null + + redis-server >/dev/null & + REDIS_PID=$! + + initdb -A trust $NIX_BUILD_TOP/postgres >/dev/null + postgres -D $NIX_BUILD_TOP/postgres -k $NIX_BUILD_TOP >/dev/null & + export PGHOST=$NIX_BUILD_TOP + + echo "Waiting for Redis and PostgreSQL to be ready.." + while ! redis-cli --scan >/dev/null || ! psql -l >/dev/null; do + sleep 0.1 + done + + psql -d postgres -tAc 'CREATE USER "discourse"' + psql -d postgres -tAc 'CREATE DATABASE "discourse" OWNER "discourse"' + psql 'discourse' -tAc "CREATE EXTENSION IF NOT EXISTS pg_trgm" + psql 'discourse' -tAc "CREATE EXTENSION IF NOT EXISTS hstore" + + # Create a temporary home dir to stop bundler from complaining + mkdir $NIX_BUILD_TOP/tmp_home + export HOME=$NIX_BUILD_TOP/tmp_home + + ${lib.concatMapStringsSep "\n" (p: "ln -sf ${p} plugins/${p.pluginName or ""}") plugins} + + export RAILS_ENV=production + + bundle exec rake db:migrate >/dev/null + chmod -R +w tmp + + kill $REDIS_PID + ''; + + buildPhase = '' + runHook preBuild + + bundle exec rake assets:precompile + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mv public/assets $out + + rm -r app/assets/javascripts/plugins + mv app/assets/javascripts $javascripts + ln -sf /run/discourse/assets/javascripts/plugins $javascripts/plugins + + runHook postInstall + ''; + }; + + discourse = stdenv.mkDerivation { + pname = "discourse"; + inherit version src; + + buildInputs = [ + rubyEnv rubyEnv.wrappedRuby rubyEnv.bundler + ]; + + patches = [ + # Load a separate NixOS site settings file + ./nixos_defaults.patch + + # Add a noninteractive admin creation task + ./admin_create.patch + + # Add the path to the CA cert bundle to make TLS work + ./action_mailer_ca_cert.patch + + # Log Unicorn messages to the journal and make request timeout + # configurable + ./unicorn_logging_and_timeout.patch + + # Use the Ruby API version in the plugin gem path, to match the + # one constructed by bundlerEnv + ./plugin_gem_api_version.patch + + # Change the path to the auto generated plugin assets, which + # defaults to the plugin's directory and isn't writable at the + # time of asset generation + ./auto_generated_path.patch + + # Make sure the notification email setting applies + ./notification_email.patch + + # `lib/discourse_js_processor.rb` + # tries to call `../node_modules/.bin/esbuild`, which + # hasn't been `patchShebangs`-ed yet. So instead we just use + # `esbuild` from `nativeBuildInputs`. + ./assets_esbuild_from_path.patch + ]; + + postPatch = '' + # Always require lib-files and application.rb through their store + # path, not their relative state directory path. This gets rid of + # warnings and means we don't have to link back to lib from the + # state directory. + find config -type f -name "*.rb" -execdir \ + sed -Ei "s,(\.\./)+(lib|app)/,$out/share/discourse/\2/," {} \; + find config -maxdepth 1 -type f -name "*.rb" -execdir \ + sed -Ei "s,require_relative (\"|')([[:alnum:]].*)(\"|'),require_relative '$out/share/discourse/config/\2'," {} \; + ''; + + buildPhase = '' + runHook preBuild + + mv config config.dist + mv public public.dist + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/share + cp -r . $out/share/discourse + rm -r $out/share/discourse/log + ln -sf /var/log/discourse $out/share/discourse/log + ln -sf /var/lib/discourse/tmp $out/share/discourse/tmp + ln -sf /run/discourse/config $out/share/discourse/config + ln -sf /run/discourse/public $out/share/discourse/public + ln -sf ${assets} $out/share/discourse/public.dist/assets + rm -r $out/share/discourse/app/assets/javascripts + ln -sf ${assets.javascripts} $out/share/discourse/app/assets/javascripts + ${lib.concatMapStringsSep "\n" (p: "ln -sf ${p} $out/share/discourse/plugins/${p.pluginName or ""}") plugins} + + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://www.discourse.org/"; + platforms = platforms.linux; + maintainers = with maintainers; [ talyz ]; + license = licenses.gpl2Plus; + description = "Discourse is an open source discussion platform"; + }; + + passthru = { + inherit rubyEnv runtimeEnv runtimeDeps rake mkDiscoursePlugin assets; + enabledPlugins = plugins; + plugins = callPackage ./plugins/all-plugins.nix { inherit mkDiscoursePlugin; }; + ruby = rubyEnv.wrappedRuby; + tests = import ../../../../nixos/tests/discourse.nix { + inherit (stdenv) system; + inherit pkgs; + package = pkgs.discourse.override args; + }; + }; + }; +in discourse diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/how_to_update.md b/nixpkgs/pkgs/servers/web-apps/discourse/how_to_update.md new file mode 100644 index 000000000000..c402325babc8 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/how_to_update.md @@ -0,0 +1,24 @@ +To update discourse, do the following: + +1. Switch to and work from the `master` branch and the directory this + file is in. +2. Run `./update.py print-diffs` and update the nginx settings and + backend settings accordingly. If you don't know how to, ask for + help - do not skip this step! +3. Run `./update.py update`. +4. Run `nix build -L -f ../../../../ discourse.tests` to make sure the + update works. Also test manually, if possible. +5. If the update works, commit it. If not, apply necessary fixes and + commit. No manual fixes that would be overwritten by the + `./update.py` script should be committed - the script should be + fixed instead. +6. Run `./update.py update-mail-receiver`. If there's an update, do + step 4 and 5 again. +7. Run `./update.py update-plugins`. +8. Run `nix build -L -f ../../../../ discourseAllPlugins.tests` to + make sure the plugins build and discourse starts with them. Also + test manually, if possible. +9. If the update works, commit it. If not, apply necessary fixes and + commit. No manual fixes that would be overwritten by the + `./update.py` script should be committed - the script should be + fixed instead. diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/mail_receiver/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/mail_receiver/default.nix new file mode 100644 index 000000000000..139e6718ed5e --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/mail_receiver/default.nix @@ -0,0 +1,39 @@ +{ stdenv, lib, fetchFromGitHub, ruby, makeWrapper, replace }: + +stdenv.mkDerivation rec { + pname = "discourse-mail-receiver"; + version = "4.0.7"; + + src = fetchFromGitHub { + owner = "discourse"; + repo = "mail-receiver"; + rev = "v${version}"; + sha256 = "0grifm5qyqazq63va3w26xjqnxwmfixhx0fx0zy7kd39378wwa6i"; + }; + + nativeBuildInputs = [ replace makeWrapper ]; + buildInputs = [ ruby ]; + + dontBuild = true; + + installPhase = '' + mkdir -p $out/bin + + replace-literal -f -r -e /etc/postfix /run/discourse-mail-receiver . + + cp -r receive-mail discourse-smtp-fast-rejection $out/bin/ + cp -r lib $out/ + + wrapProgram $out/bin/receive-mail --set RUBYLIB $out/lib + wrapProgram $out/bin/discourse-smtp-fast-rejection --set RUBYLIB $out/lib + ''; + + meta = with lib; { + homepage = "https://www.discourse.org/"; + platforms = platforms.linux; + maintainers = with maintainers; [ talyz ]; + license = licenses.mit; + description = "A helper program which receives incoming mail for Discourse"; + }; + +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/nixos_defaults.patch b/nixpkgs/pkgs/servers/web-apps/discourse/nixos_defaults.patch new file mode 100644 index 000000000000..98dba9b54b90 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/nixos_defaults.patch @@ -0,0 +1,13 @@ +diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb +index a6641f967a..a45353504a 100644 +--- a/app/models/site_setting.rb ++++ b/app/models/site_setting.rb +@@ -21,6 +21,8 @@ class SiteSetting < ActiveRecord::Base + end + end + ++ load_settings(File.join(Rails.root, 'config', 'nixos_site_settings.json')) ++ + setup_deprecated_methods + client_settings << :available_locales + diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/notification_email.patch b/nixpkgs/pkgs/servers/web-apps/discourse/notification_email.patch new file mode 100644 index 000000000000..9a64b1c1f9ea --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/notification_email.patch @@ -0,0 +1,18 @@ +diff --git a/db/fixtures/990_settings.rb b/db/fixtures/990_settings.rb +deleted file mode 100644 +index 6f21e58813..0000000000 +--- a/db/fixtures/990_settings.rb ++++ /dev/null +@@ -1,12 +0,0 @@ +-# frozen_string_literal: true +- +-if SiteSetting.notification_email == SiteSetting.defaults[:notification_email] +- # don't crash for invalid hostname, which is possible in dev +- begin +- SiteSetting.notification_email = "noreply@#{Discourse.current_hostname}" +- rescue Discourse::InvalidParameters +- if Rails.env.production? +- STDERR.puts "WARNING: Discourse hostname: #{Discourse.current_hostname} is not a valid domain for emails!" +- end +- end +-end diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugin_gem_api_version.patch b/nixpkgs/pkgs/servers/web-apps/discourse/plugin_gem_api_version.patch new file mode 100644 index 000000000000..84fb1d4dad4a --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugin_gem_api_version.patch @@ -0,0 +1,13 @@ +diff --git a/lib/plugin_gem.rb b/lib/plugin_gem.rb +index 49882b2cd9..96672df2ea 100644 +--- a/lib/plugin_gem.rb ++++ b/lib/plugin_gem.rb +@@ -4,7 +4,7 @@ module PluginGem + def self.load(path, name, version, opts = nil) + opts ||= {} + +- gems_path = File.dirname(path) + "/gems/#{RUBY_VERSION}" ++ gems_path = File.dirname(path) + "/gems/#{Gem.ruby_api_version}" + + spec_path = gems_path + "/specifications" + diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/README b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/README new file mode 100644 index 000000000000..e0a88211dae8 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/README @@ -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. diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/all-plugins.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/all-plugins.nix new file mode 100644 index 000000000000..4ddb8995b622 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/all-plugins.nix @@ -0,0 +1,27 @@ +{ mkDiscoursePlugin, newScope, fetchFromGitHub, ... }@args: +let + callPackage = newScope args; +in +{ + discourse-assign = callPackage ./discourse-assign {}; + discourse-bbcode-color = callPackage ./discourse-bbcode-color {}; + discourse-calendar = callPackage ./discourse-calendar {}; + discourse-canned-replies = callPackage ./discourse-canned-replies {}; + discourse-chat-integration = callPackage ./discourse-chat-integration {}; + discourse-checklist = callPackage ./discourse-checklist {}; + discourse-data-explorer = callPackage ./discourse-data-explorer {}; + discourse-docs = callPackage ./discourse-docs {}; + discourse-github = callPackage ./discourse-github {}; + discourse-ldap-auth = callPackage ./discourse-ldap-auth {}; + discourse-math = callPackage ./discourse-math {}; + discourse-migratepassword = callPackage ./discourse-migratepassword {}; + discourse-oauth2-basic = callPackage ./discourse-oauth2-basic {}; + discourse-openid-connect = callPackage ./discourse-openid-connect {}; + discourse-prometheus = callPackage ./discourse-prometheus {}; + discourse-reactions = callPackage ./discourse-reactions {}; + discourse-saved-searches = callPackage ./discourse-saved-searches {}; + discourse-solved = callPackage ./discourse-solved {}; + discourse-spoiler-alert = callPackage ./discourse-spoiler-alert {}; + discourse-voting = callPackage ./discourse-voting {}; + discourse-yearly-review = callPackage ./discourse-yearly-review {}; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-assign/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-assign/default.nix new file mode 100644 index 000000000000..b25bd428f69b --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-assign/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-assign"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-assign"; + rev = "e9c7cb5c3f90109bc47223b0aa4054d681e9cc04"; + sha256 = "sha256-w1h1dCSyOml+AT7lPKENYfawm6BU2De5CyBHrDnDcrM="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-docs"; + maintainers = with maintainers; [ dpausp ]; + license = licenses.mit; + description = "Discourse Plugin for assigning users to a topic"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-bbcode-color/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-bbcode-color/default.nix new file mode 100644 index 000000000000..eacdc099f123 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-bbcode-color/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-bbcode-color"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-bbcode-color"; + rev = "79ed22b3a3352adbd20f7e2222b9dbdb9fbaf7fe"; + sha256 = "sha256-AHgny9BW/ssmv0U2lwzVWgYKPsvWHD6kgU3mBMFX4Aw="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-bbcode-color"; + maintainers = with maintainers; [ ryantm ]; + license = licenses.mit; + description = "Support BBCode color tags."; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/Gemfile new file mode 100644 index 000000000000..76faf85df5e2 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/Gemfile @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" +gem "rrule", "0.4.4", require: false diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/Gemfile.lock new file mode 100644 index 000000000000..586a58d3d626 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/Gemfile.lock @@ -0,0 +1,25 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (7.0.8) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + concurrent-ruby (1.2.2) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + minitest (5.20.0) + rrule (0.4.4) + activesupport (>= 2.3) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + +PLATFORMS + ruby + +DEPENDENCIES + rrule (= 0.4.4) + +BUNDLED WITH + 2.4.17 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/default.nix new file mode 100644 index 000000000000..9fc5779fc74c --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/default.nix @@ -0,0 +1,18 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-calendar"; + bundlerEnvArgs.gemdir = ./.; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-calendar"; + rev = "4d4fe40d09f7232b1348e1ff910b37b2cec0835d"; + sha256 = "sha256-w1sqE3KxwrE8SWqZUtPVhjITOPFXwlj4iPyPZeSfvtI="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-calendar"; + maintainers = with maintainers; [ ryantm ]; + license = licenses.mit; + description = "Adds the ability to create a dynamic calendar in the first post of a topic"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/gemset.nix new file mode 100644 index 000000000000..2e9b15ee5b9e --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-calendar/gemset.nix @@ -0,0 +1,66 @@ +{ + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "188kbwkn1lbhz40ala8ykp20jzqphgc68g3d8flin8cqa2xid0s5"; + type = "gem"; + }; + version = "7.0.8"; + }; + concurrent-ruby = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q"; + type = "gem"; + }; + version = "1.2.2"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx"; + type = "gem"; + }; + version = "1.14.1"; + }; + minitest = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3"; + type = "gem"; + }; + version = "5.20.0"; + }; + rrule = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04h3q0ws0wswqj3mwjyv44yx59d9ima9a820ay9w5bwnlb73syj2"; + type = "gem"; + }; + version = "0.4.4"; + }; + tzinfo = { + dependencies = ["concurrent-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd"; + type = "gem"; + }; + version = "2.0.6"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-canned-replies/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-canned-replies/default.nix new file mode 100644 index 000000000000..d5628fed4003 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-canned-replies/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-canned-replies"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-canned-replies"; + rev = "732598b6cdc86c74622bb15bfeaebb05611bbc25"; + sha256 = "sha256-t0emNsPT8o0ralUedt33ufH0VLl4/12lVBBCnzfdRxE="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-canned-replies"; + maintainers = with maintainers; [ talyz ]; + license = licenses.gpl2Only; + description = "Adds support for inserting a canned reply into the composer window via a UI"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-chat-integration/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-chat-integration/default.nix new file mode 100644 index 000000000000..9f4cb186dd66 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-chat-integration/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-chat-integration"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-chat-integration"; + rev = "4f9ccb58cae8600dcb6db84f38f235283911e6e8"; + sha256 = "sha256-Em9aAwAfUoqsOHLrqNhxUQXsO4Owydf9nhCHbBaqqpg="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-chat-integration"; + maintainers = with maintainers; [ dpausp ]; + license = licenses.mit; + description = "This plugin integrates Discourse with a number of external chatroom systems"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-checklist/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-checklist/default.nix new file mode 100644 index 000000000000..f3fdd5459432 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-checklist/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-checklist"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-checklist"; + rev = "d94e58c3060ee7ca0fe76339215ed9456d5f4ea4"; + sha256 = "sha256-zTMkU8NRqxLQ3/ghYTmEhRqbCgdYsYaImHdGu7WwuFk="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-checklist"; + maintainers = with maintainers; [ ryantm ]; + license = licenses.gpl2Only; + description = "A simple checklist rendering plugin for discourse "; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-data-explorer/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-data-explorer/default.nix new file mode 100644 index 000000000000..881fade4ea95 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-data-explorer/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-data-explorer"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-data-explorer"; + rev = "06193f27ef15828479eea61ae4a80bf59806a535"; + sha256 = "sha256-afjqgi2gzRpbZt5K9yXPy4BJ5qRv7A4ZkXHX85+Cv7s="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-data-explorer"; + maintainers = with maintainers; [ ryantm ]; + license = licenses.mit; + description = "SQL Queries for admins in Discourse"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-docs/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-docs/default.nix new file mode 100644 index 000000000000..4f458cd4ce63 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-docs/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-docs"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-docs"; + rev = "89c7274b1a730edefd1b56c13b8c04305d4ef331"; + sha256 = "sha256-j3zrGmoAvbSHFnbiUfetyfiQJebrtW3Iw5GvsRRq1kk="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-docs"; + maintainers = with maintainers; [ dpausp ]; + license = licenses.mit; + description = "Find and filter knowledge base topics"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/Gemfile new file mode 100644 index 000000000000..c24a3e860d7c --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" +gem "sawyer", "0.9.2" +gem "octokit", "5.6.1" diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/Gemfile.lock new file mode 100644 index 000000000000..f12130e24066 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/Gemfile.lock @@ -0,0 +1,29 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) + base64 (0.1.1) + faraday (2.7.11) + base64 + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + octokit (5.6.1) + faraday (>= 1, < 3) + sawyer (~> 0.9) + public_suffix (5.0.3) + ruby2_keywords (0.0.5) + sawyer (0.9.2) + addressable (>= 2.3.5) + faraday (>= 0.17.3, < 3) + +PLATFORMS + ruby + +DEPENDENCIES + octokit (= 5.6.1) + sawyer (= 0.9.2) + +BUNDLED WITH + 2.4.17 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/default.nix new file mode 100644 index 000000000000..f5967cde115a --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/default.nix @@ -0,0 +1,19 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-github"; + bundlerEnvArgs.gemdir = ./.; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-github"; + rev = "21fa5c97ca23b4c39aef5ab9c4f8ebb22f19a19b"; + sha256 = "sha256-0Teu6nMJWAT9TCjZ0RWZKtfsUKAS1cga5DvALIvrUyY="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-github"; + maintainers = with maintainers; [ talyz ]; + license = licenses.mit; + description = "Adds GitHub badges and linkback functionality"; + }; + +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/gemset.nix new file mode 100644 index 000000000000..7410f0ca0d20 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-github/gemset.nix @@ -0,0 +1,86 @@ +{ + addressable = { + dependencies = ["public_suffix"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33"; + type = "gem"; + }; + version = "2.8.5"; + }; + base64 = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cydk9p2cv25qysm0sn2pb97fcpz1isa7n3c8xm1gd99li8x6x8c"; + type = "gem"; + }; + version = "0.1.1"; + }; + faraday = { + dependencies = ["base64" "faraday-net_http" "ruby2_keywords"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vn7jwss2v6jhnxvjsiwbs3irjwhbx9zxn4l6fhd4rkcfyxzdnw5"; + type = "gem"; + }; + version = "2.7.11"; + }; + faraday-net_http = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8"; + type = "gem"; + }; + version = "3.0.2"; + }; + octokit = { + dependencies = ["faraday" "sawyer"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15g4kyag6gmxxq6d03472h7srm3imlsks1wg6nac7hl3mb1b5vs8"; + type = "gem"; + }; + version = "5.6.1"; + }; + public_suffix = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k"; + type = "gem"; + }; + version = "5.0.3"; + }; + ruby2_keywords = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz"; + type = "gem"; + }; + version = "0.0.5"; + }; + sawyer = { + dependencies = ["addressable" "faraday"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jks1qjbmqm8f9kvwa81vqj39avaj9wdnzc531xm29a55bb74fps"; + type = "gem"; + }; + version = "0.9.2"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/Gemfile new file mode 100644 index 000000000000..e140770e4e6a --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/Gemfile @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" +gem 'pyu-ruby-sasl', '0.0.3.3', require: false +gem 'rubyntlm', '0.3.4', require: false +gem 'net-ldap', '0.17.1' +gem 'omniauth-ldap', '1.0.5' diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/Gemfile.lock new file mode 100644 index 000000000000..f131626f7c45 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/Gemfile.lock @@ -0,0 +1,28 @@ +GEM + remote: https://rubygems.org/ + specs: + hashie (5.0.0) + net-ldap (0.17.1) + omniauth (1.9.2) + hashie (>= 3.4.6) + rack (>= 1.6.2, < 3) + omniauth-ldap (1.0.5) + net-ldap (~> 0.12) + omniauth (~> 1.0) + pyu-ruby-sasl (~> 0.0.3.2) + rubyntlm (~> 0.3.4) + pyu-ruby-sasl (0.0.3.3) + rack (2.2.7) + rubyntlm (0.3.4) + +PLATFORMS + ruby + +DEPENDENCIES + net-ldap (= 0.17.1) + omniauth-ldap (= 1.0.5) + pyu-ruby-sasl (= 0.0.3.3) + rubyntlm (= 0.3.4) + +BUNDLED WITH + 2.4.10 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/default.nix new file mode 100644 index 000000000000..82f13f0d0d8a --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/default.nix @@ -0,0 +1,18 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-ldap-auth"; + bundlerEnvArgs.gemdir = ./.; + src = fetchFromGitHub { + owner = "jonmbake"; + repo = "discourse-ldap-auth"; + rev = "edcf06957090e8d978a89fe7b07a6ba56fe35214"; + sha256 = "sha256-VxBBip8QEXDQGDOsU5cXjUZe2HThJn20BPsNr33KhKI="; + }; + meta = with lib; { + homepage = "https://github.com/jonmbake/discourse-ldap-auth"; + maintainers = with maintainers; [ ryantm ]; + license = licenses.mit; + description = "Discourse plugin to enable LDAP/Active Directory authentication."; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/gemset.nix new file mode 100644 index 000000000000..9df3292f7b82 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-ldap-auth/gemset.nix @@ -0,0 +1,74 @@ +{ + hashie = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nh3arcrbz1rc1cr59qm53sdhqm137b258y8rcb4cvd3y98lwv4x"; + type = "gem"; + }; + version = "5.0.0"; + }; + net-ldap = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ycw0qsw3hap8svakl0i30jkj0ffd4lpyrn17a1j0w8mz5ainmsj"; + type = "gem"; + }; + version = "0.17.1"; + }; + omniauth = { + dependencies = ["hashie" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jn9j54l5h7xcba2vjq74l1dk0xrwvsjxam4qhylpi52nw0h5502"; + type = "gem"; + }; + version = "1.9.2"; + }; + omniauth-ldap = { + dependencies = ["net-ldap" "omniauth" "pyu-ruby-sasl" "rubyntlm"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ld3mx46xa1qhc0cpnck1n06xcxs0ag4n41zgabxri27a772f9wz"; + type = "gem"; + }; + version = "1.0.5"; + }; + pyu-ruby-sasl = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rcpjiz9lrvyb3rd8k8qni0v4ps08psympffyldmmnrqayyad0sn"; + type = "gem"; + }; + version = "0.0.3.3"; + }; + rack = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16w217k9z02c4hqizym8dkj6bqmmzx4qdvqpnskgzf174a5pwdxk"; + type = "gem"; + }; + version = "2.2.7"; + }; + rubyntlm = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18d1lxhx62swggf4cqg76h7hp04f5801c8h07w08cm9xng2niqby"; + type = "gem"; + }; + version = "0.3.4"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-math/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-math/default.nix new file mode 100644 index 000000000000..da8ff6f32f4a --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-math/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-math"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-math"; + rev = "66d522cd8e4cf98547f083c4decdc64c688767de"; + sha256 = "sha256-Zil6LWl6ACyP/ZkxNli1u9/3dlHFRETtmIov1BmQ3u4="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-math"; + maintainers = with maintainers; [ talyz ]; + license = licenses.mit; + description = "Official MathJax support for Discourse"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/Gemfile new file mode 100644 index 000000000000..59c64586dc17 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/Gemfile @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" +gem 'bcrypt', '3.1.13' +gem 'unix-crypt', '1.3.0' +gem 'ffi', '1.15.5', require: false +gem 'ffi-compiler', '1.0.1', require: false +gem 'argon2', '2.2.0' diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/Gemfile.lock new file mode 100644 index 000000000000..75a9a363b6cc --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/Gemfile.lock @@ -0,0 +1,26 @@ +GEM + remote: https://rubygems.org/ + specs: + argon2 (2.2.0) + ffi (~> 1.15) + ffi-compiler (~> 1.0) + bcrypt (3.1.13) + ffi (1.15.5) + ffi-compiler (1.0.1) + ffi (>= 1.0.0) + rake + rake (13.0.6) + unix-crypt (1.3.0) + +PLATFORMS + ruby + +DEPENDENCIES + argon2 (= 2.2.0) + bcrypt (= 3.1.13) + ffi (= 1.15.5) + ffi-compiler (= 1.0.1) + unix-crypt (= 1.3.0) + +BUNDLED WITH + 2.4.13 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/default.nix new file mode 100644 index 000000000000..ee8d03e66ca8 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/default.nix @@ -0,0 +1,18 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-migratepassword"; + bundlerEnvArgs.gemdir = ./.; + src = fetchFromGitHub { + owner = "communiteq"; + repo = "discourse-migratepassword"; + rev = "a95ae6bca4126172186fafcd2315f51a4504c23b"; + sha256 = "sha256-lr2xHz+8q4XnHc/7KLX0Z2m0KMffLgGYk36zxGG9X5o="; + }; + meta = with lib; { + homepage = "https://github.com/communiteq/discourse-migratepassword"; + maintainers = with maintainers; [ ryantm ]; + license = licenses.gpl2Only; + description = "Support migrated password hashes"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/gemset.nix new file mode 100644 index 000000000000..97aa9bfc7048 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-migratepassword/gemset.nix @@ -0,0 +1,64 @@ +{ + argon2 = { + dependencies = ["ffi" "ffi-compiler"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wdllcqlr81nzyf485ldv1p660xsi476p79ghbj7zsf3n9n86gwd"; + type = "gem"; + }; + version = "2.2.0"; + }; + bcrypt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ai0m15jg3n0b22mimk09ppnga316dc7dyvz06w8rrqh5gy1lslp"; + type = "gem"; + }; + version = "3.1.13"; + }; + ffi = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg"; + type = "gem"; + }; + version = "1.15.5"; + }; + ffi-compiler = { + dependencies = ["ffi" "rake"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c2caqm9wqnbidcb8dj4wd3s902z15qmgxplwyfyqbwa0ydki7q1"; + type = "gem"; + }; + version = "1.0.1"; + }; + rake = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w"; + type = "gem"; + }; + version = "13.0.6"; + }; + unix-crypt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wflipsmmicmgvqilp9pml4x19b337kh6p6jgrzqrzpkq2z52gdq"; + type = "gem"; + }; + version = "1.3.0"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/Gemfile new file mode 100644 index 000000000000..7da32ec03949 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +group :development do + gem 'rubocop-discourse' +end diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/Gemfile.lock new file mode 100644 index 000000000000..6a91a08c0e86 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/Gemfile.lock @@ -0,0 +1,37 @@ +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.2) + parallel (1.22.1) + parser (3.1.1.0) + ast (~> 2.4.1) + rainbow (3.1.1) + regexp_parser (2.2.1) + rexml (3.2.5) + rubocop (1.26.1) + parallel (~> 1.10) + parser (>= 3.1.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.16.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.16.0) + parser (>= 3.1.1.0) + rubocop-discourse (2.5.0) + rubocop (>= 1.1.0) + rubocop-rspec (>= 2.0.0) + rubocop-rspec (2.9.0) + rubocop (~> 1.19) + ruby-progressbar (1.11.0) + unicode-display_width (2.1.0) + +PLATFORMS + ruby + +DEPENDENCIES + rubocop-discourse + +BUNDLED WITH + 2.1.4 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/default.nix new file mode 100644 index 000000000000..a013383d1a2f --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/default.nix @@ -0,0 +1,18 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin rec { + name = "discourse-oauth2-basic"; + bundlerEnvArgs.gemdir = ./.; + src = fetchFromGitHub { + owner = "discourse"; + repo = name; + rev = "06ba5daa9aabd0487f2f30b944b6500f1f481308"; + sha256 = "sha256-T08Q36k2hb9wVimKIa4O5mWcrr6VBTfHvhRJiLBiRPY="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/${name}"; + maintainers = with maintainers; [ ehmry ]; + license = licenses.mit; + description = "A basic OAuth2 plugin for use with Discourse"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/gemset.nix new file mode 100644 index 000000000000..bbb35327787b --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-oauth2-basic/gemset.nix @@ -0,0 +1,127 @@ +{ + ast = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y"; + type = "gem"; + }; + version = "2.4.2"; + }; + parallel = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07vnk6bb54k4yc06xnwck7php50l09vvlw1ga8wdz0pia461zpzb"; + type = "gem"; + }; + version = "1.22.1"; + }; + parser = { + dependencies = ["ast"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zaghgvva2q4jqbachg8jvpwgbg3w1jqr0d00m8rqciqznjgsw3c"; + type = "gem"; + }; + version = "3.1.1.0"; + }; + rainbow = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503"; + type = "gem"; + }; + version = "3.1.1"; + }; + regexp_parser = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "155f6cr4rrfw5bs5xd3m5kfw32qhc5fsi4nk82rhif56rc6cs0wm"; + type = "gem"; + }; + version = "2.2.1"; + }; + rexml = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53"; + type = "gem"; + }; + version = "3.2.5"; + }; + rubocop = { + dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06105yrqajpm5l07fng1nbk55y9490hny542zclnan8hg841pjgl"; + type = "gem"; + }; + version = "1.26.1"; + }; + rubocop-ast = { + dependencies = ["parser"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bd2z82ly7fix8415gvfiwzb6bjialz5rs3sr72kv1lk68rd23wv"; + type = "gem"; + }; + version = "1.16.0"; + }; + rubocop-discourse = { + dependencies = ["rubocop" "rubocop-rspec"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01f4y7am9cq276zl8vsgv64w8wfmhpbzg7vzsifhgnnh92g6s04g"; + type = "gem"; + }; + version = "2.5.0"; + }; + rubocop-rspec = { + dependencies = ["rubocop"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "051gq9pz49iv4gq34d3n089iaa6cb418n2fhin6gd6fpysbi3nf6"; + type = "gem"; + }; + version = "2.9.0"; + }; + ruby-progressbar = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc"; + type = "gem"; + }; + version = "1.11.0"; + }; + unicode-display_width = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0csjm9shhfik0ci9mgimb7hf3xgh7nx45rkd9rzgdz6vkwr8rzxn"; + type = "gem"; + }; + version = "2.1.0"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/Gemfile new file mode 100644 index 000000000000..7da32ec03949 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +group :development do + gem 'rubocop-discourse' +end diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/Gemfile.lock new file mode 100644 index 000000000000..0987b206fa66 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/Gemfile.lock @@ -0,0 +1,37 @@ +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.1) + parallel (1.19.2) + parser (2.7.2.0) + ast (~> 2.4.1) + rainbow (3.0.0) + regexp_parser (1.8.1) + rexml (3.2.5) + rubocop (0.93.0) + parallel (~> 1.10) + parser (>= 2.7.1.5) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8) + rexml + rubocop-ast (>= 0.6.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 2.0) + rubocop-ast (0.7.1) + parser (>= 2.7.1.5) + rubocop-discourse (2.3.2) + rubocop (>= 0.69.0) + rubocop-rspec (>= 1.39.0) + rubocop-rspec (1.43.2) + rubocop (~> 0.87) + ruby-progressbar (1.10.1) + unicode-display_width (1.7.0) + +PLATFORMS + ruby + +DEPENDENCIES + rubocop-discourse + +BUNDLED WITH + 2.1.4 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/default.nix new file mode 100644 index 000000000000..5f64d52e55b2 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/default.nix @@ -0,0 +1,19 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-openid-connect"; + bundlerEnvArgs.gemdir = ./.; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-openid-connect"; + rev = "322bf50700840b327d9a52091fedbacc0bb1edfe"; + sha256 = "sha256-8WMhlKHYVm2wHbkP7b8dhOosvwDNjHqTrEziQT1Bu/4="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-openid-connect"; + maintainers = with maintainers; [ mkg20001 ]; + license = licenses.mit; + description = "Discourse plugin to integrate Discourse with an openid-connect login provider."; + }; +} + diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/gemset.nix new file mode 100644 index 000000000000..2a546e7a1c87 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-openid-connect/gemset.nix @@ -0,0 +1,127 @@ +{ + ast = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l3468czzjmxl93ap40hp7z94yxp4nbag0bxqs789bm30md90m2a"; + type = "gem"; + }; + version = "2.4.1"; + }; + parallel = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "17b127xxmm2yqdz146qwbs57046kn0js1h8synv01dwqz2z1kp2l"; + type = "gem"; + }; + version = "1.19.2"; + }; + parser = { + dependencies = ["ast"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1f7gmm60yla325wlnd3qkxs59qm2y0aan8ljpg6k18rwzrrfil6z"; + type = "gem"; + }; + version = "2.7.2.0"; + }; + rainbow = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bb2fpjspydr6x0s8pn1pqkzmxszvkfapv0p4627mywl7ky4zkhk"; + type = "gem"; + }; + version = "3.0.0"; + }; + regexp_parser = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0n9d14ppshnx71i3mi1pnm3hwhcbb6m6vsc0b0dqgsab8r2rs96n"; + type = "gem"; + }; + version = "1.8.1"; + }; + rexml = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53"; + type = "gem"; + }; + version = "3.2.5"; + }; + rubocop = { + dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nrv7i81549addig09grw17qkab3l4319dcsf9y7psl7aa76ng3a"; + type = "gem"; + }; + version = "0.93.0"; + }; + rubocop-ast = { + dependencies = ["parser"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "129hgz4swc8n0g01715v7y00k0h4mlzkxh63q7z27q7mjp54rl74"; + type = "gem"; + }; + version = "0.7.1"; + }; + rubocop-discourse = { + dependencies = ["rubocop" "rubocop-rspec"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10l2wwnvd4xccgqsyhxrhc5bw10b7an4awl0v90fw5xf2qdjiflw"; + type = "gem"; + }; + version = "2.3.2"; + }; + rubocop-rspec = { + dependencies = ["rubocop"]; + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sc0bwdxzfr8byxzwvfyf22lwzqcaa6ca7wzxx31mk7vvy7r7dhl"; + type = "gem"; + }; + version = "1.43.2"; + }; + ruby-progressbar = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1k77i0d4wsn23ggdd2msrcwfy0i376cglfqypkk2q77r2l3408zf"; + type = "gem"; + }; + version = "1.10.1"; + }; + unicode-display_width = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06i3id27s60141x6fdnjn5rar1cywdwy64ilc59cz937303q3mna"; + type = "gem"; + }; + version = "1.7.0"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/Gemfile new file mode 100644 index 000000000000..54a39883d060 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/Gemfile @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +# gem "rails" +gem "webrick", "1.7.0" +gem "prometheus_exporter", "2.0.6" diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/Gemfile.lock new file mode 100644 index 000000000000..29f66df12c80 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: https://rubygems.org/ + specs: + prometheus_exporter (2.0.6) + webrick + webrick (1.7.0) + +PLATFORMS + ruby + +DEPENDENCIES + prometheus_exporter (= 2.0.6) + webrick (= 1.7.0) + +BUNDLED WITH + 2.4.17 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/default.nix new file mode 100644 index 000000000000..7ce27877cd96 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/default.nix @@ -0,0 +1,26 @@ +{ lib, stdenv, mkDiscoursePlugin, fetchFromGitHub }: + + mkDiscoursePlugin { + bundlerEnvArgs.gemdir = ./.; + name = "discourse-prometheus"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-prometheus"; + rev = "305610c90079556cdfa2aa09b567a6ca10d11de5"; + sha256 = "sha256-dz+/2pbbhs8sxYMxe/wAjvdxoU4ihjN95A4ngP0KzQg="; + }; + + patches = [ + # The metrics collector tries to run git to get the commit id but fails + # because we don't run Discourse from a Git repository. + ./no-git-version.patch + ./spec-import-fix-abi-version.patch + ]; + + meta = with lib; { + homepage = "https://github.com/discourse/discourse-prometheus"; + maintainers = with maintainers; [ dpausp ]; + license = licenses.mit; + description = "Official Discourse Plugin for Prometheus Monitoring"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/gemset.nix new file mode 100644 index 000000000000..b6f3158174c1 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/gemset.nix @@ -0,0 +1,23 @@ +{ + prometheus_exporter = { + dependencies = ["webrick"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pb4k6px8b36bvnw3d14j31s33ns60dcwxixbcgvhpzavd7fparb"; + type = "gem"; + }; + version = "2.0.6"; + }; + webrick = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7"; + type = "gem"; + }; + version = "1.7.0"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/no-git-version.patch b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/no-git-version.patch new file mode 100644 index 000000000000..9aebfd8aa794 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/no-git-version.patch @@ -0,0 +1,34 @@ +diff --git a/lib/internal_metric/global.rb b/lib/internal_metric/global.rb +index 682571b..7bdd431 100644 +--- a/lib/internal_metric/global.rb ++++ b/lib/internal_metric/global.rb +@@ -30,28 +30,7 @@ module DiscoursePrometheus::InternalMetric + @active_app_reqs = 0 + @queued_app_reqs = 0 + @fault_logged = {} +- +- begin +- @@version = nil +- +- out, error, status = Open3.capture3("git rev-parse HEAD") +- +- if status.success? +- @@version ||= out.chomp +- else +- raise error +- end +- rescue => e +- if defined?(::Discourse) +- Discourse.warn_exception(e, message: "Failed to calculate discourse_version_info metric") +- else +- STDERR.puts "Failed to calculate discourse_version_info metric: #{e}\n#{e.backtrace.join("\n")}" +- end +- +- @@retries ||= 10 +- @@retries -= 1 +- @@version = -1 if @@retries < 0 +- end ++ @@version = -1 + end + + def collect diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/prometheus_exporter_version b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/prometheus_exporter_version new file mode 100644 index 000000000000..157e54f3e4d5 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/prometheus_exporter_version @@ -0,0 +1 @@ +2.0.6 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/spec-import-fix-abi-version.patch b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/spec-import-fix-abi-version.patch new file mode 100644 index 000000000000..de3a5c718f00 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-prometheus/spec-import-fix-abi-version.patch @@ -0,0 +1,20 @@ +diff --git a/bin/collector b/bin/collector +index 6bd04a8caffb..119526fc6ea3 100644 +--- a/bin/collector ++++ b/bin/collector +@@ -3,12 +3,14 @@ + + Process.setproctitle("discourse prometheus-collector") + ++# We need the ABI version {MAJOR}.{MINOR}.0 here. ++abi_version = ENV['GEM_PATH'].split("/")[-1] + [ + "webrick-#{ENV["WEBRICK_VERSION"]}", + "prometheus_exporter-#{ENV["PROMETHEUS_EXPORTER_VERSION"]}", + ].each do |spec_name| + spec_file = +- File.expand_path("../../gems/#{RUBY_VERSION}/specifications/#{spec_name}.gemspec", __FILE__) ++ File.expand_path("../../gems/#{abi_version}/specifications/#{spec_name}.gemspec", __FILE__) + spec = Gem::Specification.load(spec_file) + spec.activate + end diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-reactions/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-reactions/default.nix new file mode 100644 index 000000000000..f91ad047201b --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-reactions/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-reactions"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-reactions"; + rev = "f04f077e9f0392ca2373ca001044069d650ae6e5"; + sha256 = "sha256-HuFXgfd5HO7qfVlf1RHxenlNL10YRF5OYya4Yt6eS14="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-reactions"; + maintainers = with maintainers; [ bbenno ]; + license = licenses.mit; + description = "Allows users to react to a post from a choice of emojis, rather than only the like heart"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-saved-searches/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-saved-searches/default.nix new file mode 100644 index 000000000000..b091884bb511 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-saved-searches/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-saved-searches"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-saved-searches"; + rev = "1b90d26cc35bd049d0ab7ea3922f7db6ac7ec017"; + sha256 = "sha256-d+zbm8UAZ/ow8o1Y5mWAyjg5JCvQ761jcGcO72tHEIs="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-saved-searches"; + maintainers = with maintainers; [ dpausp ]; + license = licenses.mit; + description = "Allow users to save searches and be notified of new results"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-solved/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-solved/default.nix new file mode 100644 index 000000000000..26939adc4ec7 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-solved/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-solved"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-solved"; + rev = "3b9ecc69c6a25b7671c42842b8a6f3872873f537"; + sha256 = "sha256-gtG+v25jJ0DiYlU2vatreGj13yrb5WWRTvxlcDdAibw="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-solved"; + maintainers = with maintainers; [ talyz ]; + license = licenses.mit; + description = "Allow accepted answers on topics"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-spoiler-alert/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-spoiler-alert/default.nix new file mode 100644 index 000000000000..a8a0f7975654 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-spoiler-alert/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-spoiler-alert"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-spoiler-alert"; + rev = "b57e79343acc15cb2c0a032a2deb29ad4b9d53cc"; + sha256 = "sha256-Ypt6PYCZzArCv9KkCtw5rfT6++dDoUx5q9m/eMvP0Sc="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-spoiler-alert"; + maintainers = with maintainers; [ talyz ]; + license = licenses.mit; + description = "Hide spoilers behind the spoiler-alert jQuery plugin"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-voting/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-voting/default.nix new file mode 100644 index 000000000000..5922bcca2cbb --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-voting/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-voting"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-voting"; + rev = "83ab47f3186694039c6850ac3e230443e05d37c5"; + sha256 = "sha256-2sSBLSSPddxXqvEukDn8tzLVOOWoPBA+C8N5jVccCjA="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-voting"; + maintainers = with maintainers; [ dpausp ]; + license = licenses.gpl2Only; + description = "Adds the ability for voting on a topic within a specified category in Discourse"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-yearly-review/default.nix b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-yearly-review/default.nix new file mode 100644 index 000000000000..c3ad1c7ef548 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/plugins/discourse-yearly-review/default.nix @@ -0,0 +1,17 @@ +{ lib, mkDiscoursePlugin, fetchFromGitHub }: + +mkDiscoursePlugin { + name = "discourse-yearly-review"; + src = fetchFromGitHub { + owner = "discourse"; + repo = "discourse-yearly-review"; + rev = "47014a8ecb96da8d45d0fe141a069010161b3087"; + sha256 = "sha256-9OIgxRdQoYH19vb7GcTt8MxVM5N4JPzmMIsg7FQOjJs="; + }; + meta = with lib; { + homepage = "https://github.com/discourse/discourse-yearly-review"; + maintainers = with maintainers; [ talyz ]; + license = licenses.mit; + description = "Publishes an automated Year in Review topic"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/Gemfile b/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/Gemfile new file mode 100644 index 000000000000..649c1df5815a --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/Gemfile @@ -0,0 +1,283 @@ +# frozen_string_literal: true + +source "https://rubygems.org" +# if there is a super emergency and rubygems is playing up, try +#source 'http://production.cf.rubygems.org' + +gem "bootsnap", require: false, platform: :mri + +def rails_master? + ENV["RAILS_MASTER"] == "1" +end + +if rails_master? + gem "arel", git: "https://github.com/rails/arel.git" + gem "rails", git: "https://github.com/rails/rails.git" +else + # NOTE: Until rubygems gives us optional dependencies we are stuck with this needing to be explicit + # 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 + rails_version = "7.0.7" + gem "actionmailer", rails_version + gem "actionpack", rails_version + gem "actionview", rails_version + gem "activemodel", rails_version + gem "activerecord", rails_version + gem "activesupport", rails_version + gem "railties", rails_version + gem "sprockets-rails" +end + +gem "json" + +# TODO: At the moment Discourse does not work with Sprockets 4, we would need to correct internals +# We intend to drop sprockets rather than upgrade to 4.x +gem "sprockets", git: "https://github.com/rails/sprockets", branch: "3.x" + +# this will eventually be added to rails, +# allows us to precompile all our templates in the unicorn master +gem "actionview_precompiler", require: false + +gem "discourse-seed-fu" + +gem "mail" +gem "mini_mime" +gem "mini_suffix" + +gem "redis" + +# This is explicitly used by Sidekiq and is an optional dependency. +# We tell Sidekiq to use the namespace "sidekiq" which triggers this +# gem to be used. There is no explicit dependency in sidekiq cause +# redis namespace support is optional +# We already namespace stuff in DiscourseRedis, so we should consider +# just using a single implementation in core vs having 2 namespace implementations +gem "redis-namespace" + +# NOTE: AM serializer gets a lot slower with recent updates +# we used an old branch which is the fastest one out there +# are long term goal here is to fork this gem so we have a +# better maintained living fork +gem "active_model_serializers", "~> 0.8.3" + +gem "http_accept_language", require: false + +gem "discourse-fonts", require: "discourse_fonts" + +gem "message_bus" + +gem "rails_multisite" + +gem "fast_xs", platform: :ruby + +gem "fastimage" + +gem "aws-sdk-s3", require: false +gem "aws-sdk-sns", require: false +gem "excon", require: false +gem "unf", require: false + +gem "email_reply_trimmer" + +gem "image_optim" +gem "multi_json" +gem "mustache" +gem "nokogiri" +gem "loofah" +gem "css_parser", require: false + +gem "omniauth" +gem "omniauth-facebook" +gem "omniauth-twitter" +gem "omniauth-github" + +gem "omniauth-oauth2", require: false + +gem "omniauth-google-oauth2" + +gem "oj" + +gem "pg" +gem "mini_sql" +gem "pry-rails", require: false +gem "pry-byebug", require: false +gem "rtlcss", require: false +gem "rake" + +gem "thor", require: false +gem "diffy", require: false +gem "rinku" +gem "sidekiq" +gem "mini_scheduler" + +gem "execjs", require: false +gem "mini_racer" + +gem "highline", require: false + +gem "rack" + +gem "rack-protection" # security +gem "cbor", require: false +gem "cose", require: false +gem "addressable" +gem "json_schemer" + +gem "net-smtp", require: false +gem "net-imap", require: false +gem "net-pop", require: false +gem "digest", require: false + +# Gems used only for assets and not required in production environments by default. +# Allow everywhere for now cause we are allowing asset debugging in production +group :assets do + gem "uglifier" +end + +group :test do + gem "capybara", require: false + gem "webmock", require: false + gem "fakeweb", require: false + gem "minitest", require: false + gem "simplecov", require: false + gem "selenium-webdriver", "~> 4.11", require: false + gem "test-prof" + gem "rails-dom-testing", require: false + gem "minio_runner", require: false +end + +group :test, :development do + gem "rspec" + gem "listen", require: false + gem "certified", require: false + gem "fabrication", require: false + gem "mocha", require: false + + gem "rb-fsevent", require: RUBY_PLATFORM =~ /darwin/i ? "rb-fsevent" : false + + gem "rspec-rails" + + gem "shoulda-matchers", require: false, github: "thoughtbot/shoulda-matchers" + gem "rspec-html-matchers" + gem "byebug", require: ENV["RM_INFO"].nil?, platform: :mri + gem "rubocop-discourse", require: false + gem "parallel_tests" + + gem "rswag-specs" + + gem "annotate" + + gem "syntax_tree" + gem "syntax_tree-disable_ternary" +end + +group :development do + gem "ruby-prof", require: false, platform: :mri + gem "bullet", require: !!ENV["BULLET"] + gem "better_errors", platform: :mri, require: !!ENV["BETTER_ERRORS"] + gem "binding_of_caller" + gem "yaml-lint" + gem "yard" +end + +if ENV["ALLOW_DEV_POPULATE"] == "1" + gem "discourse_dev_assets" + gem "faker", "~> 2.16" +else + group :development, :test do + gem "discourse_dev_assets" + gem "faker", "~> 2.16" + end +end + +# this is an optional gem, it provides a high performance replacement +# to String#blank? a method that is called quite frequently in current +# ActiveRecord, this may change in the future +gem "fast_blank", platform: :ruby + +# this provides a very efficient lru cache +gem "lru_redux" + +gem "htmlentities", require: false + +# IMPORTANT: mini profiler monkey patches, so it better be required last +# If you want to amend mini profiler to do the monkey patches in the railties +# we are open to it. by deferring require to the initializer we can configure discourse installs without it + +gem "rack-mini-profiler", require: ["enable_rails_patches"] + +gem "unicorn", require: false, platform: :ruby +gem "puma", require: false +gem "rbtrace", require: false, platform: :mri +gem "gc_tracer", require: false, platform: :mri + +# required for feed importing and embedding +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 "memory_profiler", require: false, platform: :mri + +gem "cppjieba_rb", require: false + +gem "lograge", require: false +gem "logstash-event", require: false +gem "logstash-logger", require: false +gem "logster" + +# These are forks of sassc and sassc-rails with dart-sass support +gem "dartsass-ruby" +gem "dartsass-sprockets" + +gem "rotp", require: false + +gem "rqrcode" + +gem "rubyzip", require: false + +gem "sshkey", require: false + +gem "rchardet", require: false +gem "lz4-ruby", require: false, platform: :ruby + +gem "sanitize" + +if ENV["IMPORT"] == "1" + gem "mysql2" + gem "redcarpet" + + # NOTE: in import mode the version of sqlite can matter a lot, so we stick it to a specific one + gem "sqlite3", "~> 1.3", ">= 1.3.13" + gem "ruby-bbcode-to-md", git: "https://github.com/nlalonde/ruby-bbcode-to-md" + gem "reverse_markdown" + gem "tiny_tds" + gem "csv" + + gem "parallel", require: false +end + +if ENV["GENERIC_IMPORT"] == "1" + gem "sqlite3" + gem "redcarpet" +end + +gem "web-push" +gem "colored2", require: false +gem "maxminddb" + +gem "rails_failover", require: false + +gem "faraday" +gem "faraday-retry" + +# workaround for faraday-net_http, see +# https://github.com/ruby/net-imap/issues/16#issuecomment-803086765 +gem "net-http" + +# Workaround until Ruby ships with cgi version 0.3.6 or higher. +gem "cgi", ">= 0.3.6", require: false + +gem "tzinfo-data" diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/Gemfile.lock b/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/Gemfile.lock new file mode 100644 index 000000000000..685bdbd8a5e2 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/Gemfile.lock @@ -0,0 +1,650 @@ +GIT + remote: https://github.com/rails/sprockets + revision: f4d3dae71ef29c44b75a49cfbf8032cce07b423a + branch: 3.x + specs: + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + +GIT + remote: https://github.com/thoughtbot/shoulda-matchers.git + revision: 68f76ce13e9892339f90c4928339dfd769cfa613 + specs: + shoulda-matchers (5.3.0) + activesupport (>= 5.2.0) + +GEM + remote: https://rubygems.org/ + specs: + actionmailer (7.0.7) + actionpack (= 7.0.7) + actionview (= 7.0.7) + activejob (= 7.0.7) + activesupport (= 7.0.7) + mail (~> 2.5, >= 2.5.4) + net-imap + net-pop + net-smtp + rails-dom-testing (~> 2.0) + actionpack (7.0.7) + actionview (= 7.0.7) + activesupport (= 7.0.7) + rack (~> 2.0, >= 2.2.4) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actionview (7.0.7) + activesupport (= 7.0.7) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + actionview_precompiler (0.3.0) + actionview (>= 6.0.a) + active_model_serializers (0.8.4) + activemodel (>= 3.0) + activejob (7.0.7) + activesupport (= 7.0.7) + globalid (>= 0.3.6) + activemodel (7.0.7) + activesupport (= 7.0.7) + activerecord (7.0.7) + activemodel (= 7.0.7) + activesupport (= 7.0.7) + activesupport (7.0.7) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) + annotate (3.2.0) + activerecord (>= 3.2, < 8.0) + rake (>= 10.4, < 14.0) + ast (2.4.2) + aws-eventstream (1.2.0) + aws-partitions (1.583.0) + aws-sdk-core (3.130.2) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.525.0) + aws-sigv4 (~> 1.1) + jmespath (~> 1.0) + aws-sdk-kms (1.56.0) + aws-sdk-core (~> 3, >= 3.127.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.114.0) + aws-sdk-core (~> 3, >= 3.127.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.4) + aws-sdk-sns (1.53.0) + aws-sdk-core (~> 3, >= 3.127.0) + aws-sigv4 (~> 1.1) + aws-sigv4 (1.5.0) + aws-eventstream (~> 1, >= 1.0.2) + base64 (0.1.1) + better_errors (2.10.1) + erubi (>= 1.0.0) + rack (>= 0.9.0) + rouge (>= 1.0.0) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + bootsnap (1.16.0) + msgpack (~> 1.2) + builder (3.2.4) + bullet (7.0.7) + activesupport (>= 3.0.0) + uniform_notifier (~> 1.11) + byebug (11.1.3) + capybara (3.39.2) + addressable + matrix + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + cbor (0.5.9.6) + certified (1.0.0) + cgi (0.3.6) + chunky_png (1.4.0) + coderay (1.1.3) + colored2 (4.0.0) + concurrent-ruby (1.2.2) + connection_pool (2.4.1) + cose (1.3.0) + cbor (~> 0.5.9) + openssl-signature_algorithm (~> 1.0) + cppjieba_rb (0.4.2) + crack (0.4.5) + rexml + crass (1.0.6) + css_parser (1.16.0) + addressable + dartsass-ruby (3.0.1) + sass-embedded (~> 1.54) + dartsass-sprockets (3.0.0) + dartsass-ruby (~> 3.0) + railties (>= 4.0.0) + sprockets (> 3.0) + sprockets-rails + tilt + date (3.3.3) + debug_inspector (1.1.0) + diff-lcs (1.5.0) + diffy (3.4.2) + digest (3.1.1) + discourse-fonts (0.0.9) + discourse-seed-fu (2.3.12) + activerecord (>= 3.1) + activesupport (>= 3.1) + discourse_dev_assets (0.0.4) + faker (~> 2.16) + literate_randomizer + docile (1.4.0) + email_reply_trimmer (0.1.13) + erubi (1.12.0) + excon (0.102.0) + execjs (2.9.0) + exifr (1.4.0) + fabrication (2.30.0) + faker (2.23.0) + i18n (>= 1.8.11, < 2) + fakeweb (1.3.0) + faraday (2.7.10) + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + faraday-retry (2.2.0) + faraday (~> 2.0) + fast_blank (1.0.1) + fast_xs (0.8.0) + fastimage (2.2.7) + ffi (1.15.5) + fspath (3.1.2) + gc_tracer (1.5.1) + globalid (1.2.1) + activesupport (>= 6.1) + google-protobuf (3.24.3) + guess_html_encoding (0.0.11) + hana (1.3.7) + hashdiff (1.0.1) + hashie (5.0.0) + highline (2.1.0) + hkdf (1.0.0) + htmlentities (4.3.4) + http_accept_language (2.1.1) + i18n (1.14.1) + concurrent-ruby (~> 1.0) + image_optim (0.31.3) + 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.3.0) + in_threads (1.6.0) + jmespath (1.6.2) + json (2.6.3) + json-schema (3.0.0) + addressable (>= 2.8) + json_schemer (2.0.0) + hana (~> 1.3) + regexp_parser (~> 2.0) + simpleidn (~> 0.2) + jwt (2.7.1) + kgio (2.11.4) + language_server-protocol (3.17.0.3) + libv8-node (18.16.0.0) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + literate_randomizer (0.4.0) + lograge (0.13.0) + actionpack (>= 4) + activesupport (>= 4) + railties (>= 4) + request_store (~> 1.0) + logstash-event (1.2.02) + logstash-logger (0.26.1) + logstash-event (~> 1.2) + logster (2.12.2) + loofah (2.21.3) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + lru_redux (1.1.0) + lz4-ruby (0.3.3) + mail (2.8.1) + mini_mime (>= 0.1.1) + net-imap + net-pop + net-smtp + matrix (0.4.2) + maxminddb (0.1.22) + memory_profiler (1.0.1) + message_bus (4.3.8) + rack (>= 1.1.3) + method_source (1.0.0) + mini_mime (1.1.5) + mini_portile2 (2.8.4) + mini_racer (0.8.0) + libv8-node (~> 18.16.0.0) + mini_scheduler (0.16.0) + sidekiq (>= 4.2.3, < 7.0) + mini_sql (1.5.0) + mini_suffix (0.3.3) + ffi (~> 1.9) + minio_runner (0.1.1) + minitest (5.20.0) + mocha (2.1.0) + ruby2_keywords (>= 0.0.5) + msgpack (1.7.2) + multi_json (1.15.0) + multi_xml (0.6.0) + mustache (1.1.1) + net-http (0.3.2) + uri + net-imap (0.3.7) + date + net-protocol + net-pop (0.1.2) + net-protocol + net-protocol (0.2.1) + timeout + net-smtp (0.3.3) + net-protocol + nio4r (2.5.9) + nokogiri (1.15.4) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) + oauth (1.1.0) + oauth-tty (~> 1.0, >= 1.0.1) + snaky_hash (~> 2.0) + version_gem (~> 1.1) + oauth-tty (1.0.5) + version_gem (~> 1.1, >= 1.1.1) + oauth2 (1.4.11) + faraday (>= 0.17.3, < 3.0) + jwt (>= 1.0, < 3.0) + multi_json (~> 1.3) + multi_xml (~> 0.5) + rack (>= 1.2, < 4) + oj (3.16.1) + omniauth (1.9.2) + hashie (>= 3.4.6) + rack (>= 1.6.2, < 3) + omniauth-facebook (9.0.0) + omniauth-oauth2 (~> 1.2) + omniauth-github (1.4.0) + omniauth (~> 1.5) + omniauth-oauth2 (>= 1.4.0, < 2.0) + omniauth-google-oauth2 (0.8.2) + jwt (>= 2.0) + oauth2 (~> 1.1) + omniauth (~> 1.1) + omniauth-oauth2 (>= 1.6) + omniauth-oauth (1.2.0) + oauth + omniauth (>= 1.0, < 3) + omniauth-oauth2 (1.7.3) + oauth2 (>= 1.4, < 3) + omniauth (>= 1.9, < 3) + omniauth-twitter (1.4.0) + omniauth-oauth (~> 1.1) + rack + openssl (3.1.0) + openssl-signature_algorithm (1.3.0) + openssl (> 2.0) + optimist (3.1.0) + parallel (1.23.0) + parallel_tests (4.2.2) + parallel + parser (3.2.2.3) + ast (~> 2.4.1) + racc + pg (1.4.6) + prettier_print (1.2.1) + progress (3.6.0) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.10.1) + byebug (~> 11.0) + pry (>= 0.13, < 0.15) + pry-rails (0.3.9) + pry (>= 0.10.4) + public_suffix (5.0.3) + puma (6.3.1) + nio4r (~> 2.0) + racc (1.7.1) + rack (2.2.8) + rack-mini-profiler (3.1.1) + rack (>= 1.2.0) + rack-protection (3.1.0) + rack (~> 2.2, >= 2.2.4) + rack-test (2.1.0) + rack (>= 1.3) + rails-dom-testing (2.2.0) + activesupport (>= 5.0.0) + minitest + nokogiri (>= 1.6) + rails-html-sanitizer (1.6.0) + loofah (~> 2.21) + nokogiri (~> 1.14) + rails_failover (2.0.1) + activerecord (>= 6.1, <= 7.1) + concurrent-ruby + railties (>= 6.1, <= 7.1) + rails_multisite (5.0.0) + activerecord (>= 6.0) + railties (>= 6.0) + railties (7.0.7) + actionpack (= 7.0.7) + activesupport (= 7.0.7) + method_source + rake (>= 12.2) + thor (~> 1.0) + zeitwerk (~> 2.5) + rainbow (3.1.1) + raindrops (0.20.1) + rake (13.0.6) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + rbtrace (0.4.14) + ffi (>= 1.0.6) + msgpack (>= 0.4.3) + optimist (>= 3.0.0) + rchardet (1.8.0) + redis (4.8.1) + redis-namespace (1.11.0) + redis (>= 4) + regexp_parser (2.8.1) + request_store (1.5.1) + rack (>= 1.4) + rexml (3.2.6) + rinku (2.0.6) + rotp (6.3.0) + rouge (4.1.3) + rqrcode (2.2.0) + chunky_png (~> 1.0) + rqrcode_core (~> 1.0) + rqrcode_core (1.2.0) + rspec (3.12.0) + rspec-core (~> 3.12.0) + rspec-expectations (~> 3.12.0) + rspec-mocks (~> 3.12.0) + rspec-core (3.12.2) + rspec-support (~> 3.12.0) + rspec-expectations (3.12.3) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.12.0) + rspec-html-matchers (0.10.0) + nokogiri (~> 1) + rspec (>= 3.0.0.a) + rspec-mocks (3.12.6) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.12.0) + rspec-rails (6.0.3) + actionpack (>= 6.1) + activesupport (>= 6.1) + railties (>= 6.1) + rspec-core (~> 3.12) + rspec-expectations (~> 3.12) + rspec-mocks (~> 3.12) + rspec-support (~> 3.12) + rspec-support (3.12.1) + rss (0.3.0) + rexml + rswag-specs (2.10.1) + activesupport (>= 3.1, < 7.1) + json-schema (>= 2.2, < 4.0) + railties (>= 3.1, < 7.1) + rspec-core (>= 2.14) + rtlcss (0.2.1) + mini_racer (>= 0.6.3) + rubocop (1.56.3) + base64 (~> 0.1.1) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.2.2.3) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.1, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.29.0) + parser (>= 3.2.1.0) + rubocop-capybara (2.18.0) + rubocop (~> 1.41) + rubocop-discourse (3.3.0) + rubocop (>= 1.1.0) + rubocop-rspec (>= 2.0.0) + rubocop-factory_bot (2.23.1) + rubocop (~> 1.33) + rubocop-rspec (2.23.2) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + rubocop-factory_bot (~> 2.22) + ruby-prof (1.6.3) + ruby-progressbar (1.13.0) + ruby-readability (0.7.0) + guess_html_encoding (>= 0.0.4) + nokogiri (>= 1.6.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + sanitize (6.0.2) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + sass-embedded (1.66.1) + google-protobuf (~> 3.23) + rake (>= 13.0.0) + selenium-webdriver (4.12.0) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2, < 3.0) + websocket (~> 1.0) + sidekiq (6.5.9) + connection_pool (>= 2.2.5, < 3) + rack (~> 2.0) + redis (>= 4.5.0, < 5) + simplecov (0.22.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + simpleidn (0.2.1) + unf (~> 0.1.4) + snaky_hash (2.0.1) + hashie + version_gem (~> 1.1, >= 1.1.1) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) + sprockets (>= 3.0.0) + sshkey (3.0.0) + stackprof (0.2.25) + syntax_tree (6.1.1) + prettier_print (>= 1.2.0) + syntax_tree-disable_ternary (1.0.0) + test-prof (1.2.2) + thor (1.2.2) + tilt (2.2.0) + timeout (0.4.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + tzinfo-data (1.2023.3) + tzinfo (>= 1.0.0) + uglifier (4.2.0) + execjs (>= 0.3.0, < 3) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (2.4.2) + unicorn (6.1.0) + kgio (~> 2.6) + raindrops (~> 0.7) + uniform_notifier (1.16.0) + uri (0.12.2) + version_gem (1.1.3) + web-push (3.0.0) + hkdf (~> 1.0) + jwt (~> 2.0) + openssl (~> 3.0) + webmock (3.19.1) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + websocket (1.2.9) + xpath (3.2.0) + nokogiri (~> 1.8) + yaml-lint (0.1.2) + yard (0.9.34) + zeitwerk (2.6.11) + +PLATFORMS + ruby + +DEPENDENCIES + actionmailer (= 7.0.7) + actionpack (= 7.0.7) + actionview (= 7.0.7) + actionview_precompiler + active_model_serializers (~> 0.8.3) + activemodel (= 7.0.7) + activerecord (= 7.0.7) + activesupport (= 7.0.7) + addressable + annotate + aws-sdk-s3 + aws-sdk-sns + better_errors + binding_of_caller + bootsnap + bullet + byebug + capybara + cbor + certified + cgi (>= 0.3.6) + colored2 + cose + cppjieba_rb + css_parser + dartsass-ruby + dartsass-sprockets + diffy + digest + discourse-fonts + discourse-seed-fu + discourse_dev_assets + email_reply_trimmer + excon + execjs + fabrication + faker (~> 2.16) + fakeweb + faraday + faraday-retry + fast_blank + fast_xs + fastimage + gc_tracer + highline + htmlentities + http_accept_language + image_optim + json + json_schemer + listen + lograge + logstash-event + logstash-logger + logster + loofah + lru_redux + lz4-ruby + mail + maxminddb + memory_profiler + message_bus + mini_mime + mini_racer + mini_scheduler + mini_sql + mini_suffix + minio_runner + minitest + mocha + multi_json + mustache + net-http + net-imap + net-pop + net-smtp + nokogiri + oj + omniauth + omniauth-facebook + omniauth-github + omniauth-google-oauth2 + omniauth-oauth2 + omniauth-twitter + parallel_tests + pg + pry-byebug + pry-rails + puma + rack + rack-mini-profiler + rack-protection + rails-dom-testing + rails_failover + rails_multisite + railties (= 7.0.7) + rake + rb-fsevent + rbtrace + rchardet + redis + redis-namespace + rinku + rotp + rqrcode + rspec + rspec-html-matchers + rspec-rails + rss + rswag-specs + rtlcss + rubocop-discourse + ruby-prof + ruby-readability + rubyzip + sanitize + selenium-webdriver (~> 4.11) + shoulda-matchers! + sidekiq + simplecov + sprockets! + sprockets-rails + sshkey + stackprof + syntax_tree + syntax_tree-disable_ternary + test-prof + thor + tzinfo-data + uglifier + unf + unicorn + web-push + webmock + yaml-lint + yard + +BUNDLED WITH + 2.4.17 diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/gemset.nix b/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/gemset.nix new file mode 100644 index 000000000000..350bf7abba20 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/rubyEnv/gemset.nix @@ -0,0 +1,2569 @@ +{ + actionmailer = { + dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "net-imap" "net-pop" "net-smtp" "rails-dom-testing"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15ni57icsw1ilz5srlasff4h31h2ckgmxbdd8jnbniscvz4x2sd0"; + type = "gem"; + }; + version = "7.0.7"; + }; + actionpack = { + dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "150sjsk12vzj9aswjy3cz124l8n8sn52bhd0wwly73rwc1a750sg"; + type = "gem"; + }; + version = "7.0.7"; + }; + actionview = { + dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nn21k5psxdv2fkwxs679lr0b8n1nzli2ks343cx4azn6snp8b8a"; + type = "gem"; + }; + version = "7.0.7"; + }; + actionview_precompiler = { + dependencies = ["actionview"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07jyr2h87ha6k2y965rs4ywq142ddkfkhbmp0r44xg4wnffr8jbl"; + type = "gem"; + }; + version = "0.3.0"; + }; + active_model_serializers = { + dependencies = ["activemodel"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k3mgia2ahh7mbk30hjq9pzqbk0kh281s91kq2z6p555nv9y6l3k"; + type = "gem"; + }; + version = "0.8.4"; + }; + activejob = { + dependencies = ["activesupport" "globalid"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0s5r5z9jm57jjabh8w2823rpjd1agn8z2rlqgyyn4s9pbbhgalzy"; + type = "gem"; + }; + version = "7.0.7"; + }; + activemodel = { + dependencies = ["activesupport"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rspbw4yxx9fh2wyl2wvgwadwapfyx7j9zlirpd4pmk31wkhl4hf"; + type = "gem"; + }; + version = "7.0.7"; + }; + activerecord = { + dependencies = ["activemodel" "activesupport"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ygg145wxlgm12b1x5r0rsk2aa6i2wjz7bgb21j8vmyqyfl272cy"; + type = "gem"; + }; + version = "7.0.7"; + }; + activesupport = { + dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wzbnv3hns0yiwbgh1m3q5j0d7b0k52nlpwirhxyv3l0ycmljfr9"; + type = "gem"; + }; + version = "7.0.7"; + }; + addressable = { + dependencies = ["public_suffix"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33"; + type = "gem"; + }; + version = "2.8.5"; + }; + annotate = { + dependencies = ["activerecord" "rake"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lw0fxb5mirsdp3bp20gjyvs7clvi19jbxnrm2ihm20kzfhvlqcs"; + type = "gem"; + }; + version = "3.2.0"; + }; + ast = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y"; + type = "gem"; + }; + version = "2.4.2"; + }; + aws-eventstream = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz"; + type = "gem"; + }; + version = "1.2.0"; + }; + aws-partitions = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bg0v08n9mgvpnvkx8aznrax25lkrfsi5sjfdlccm7dadnada5fg"; + type = "gem"; + }; + version = "1.583.0"; + }; + aws-sdk-core = { + dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hajbavfngn99hcz6n20162jygvwdflldvnlrza7z32hizawaaan"; + type = "gem"; + }; + version = "3.130.2"; + }; + aws-sdk-kms = { + dependencies = ["aws-sdk-core" "aws-sigv4"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14dcfqqdx1dy7qwrdyqdvqjs53kswm4njvg34f61jpl9xi3h2yf3"; + type = "gem"; + }; + version = "1.56.0"; + }; + aws-sdk-s3 = { + dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r6dxz3llgxbbm66jq5mkzk0i6qsxwv0d9s0ipwb23vv3bgp23yf"; + type = "gem"; + }; + version = "1.114.0"; + }; + aws-sdk-sns = { + dependencies = ["aws-sdk-core" "aws-sigv4"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d3fhll3hqc23fvj7p0ncjrr0fri7spy21r0hfkqjhijm0q1xqg9"; + type = "gem"; + }; + version = "1.53.0"; + }; + aws-sigv4 = { + dependencies = ["aws-eventstream"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xp7diwq7nv4vvxrl9x3lis2l4x6bissrfzbfyy6rv5bmj5w109z"; + type = "gem"; + }; + version = "1.5.0"; + }; + base64 = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cydk9p2cv25qysm0sn2pb97fcpz1isa7n3c8xm1gd99li8x6x8c"; + type = "gem"; + }; + version = "0.1.1"; + }; + better_errors = { + dependencies = ["erubi" "rack" "rouge"]; + groups = ["development"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wqazisnn6hn1wsza412xribpw5wzx6b5z5p4mcpfgizr6xg367p"; + type = "gem"; + }; + version = "2.10.1"; + }; + binding_of_caller = { + dependencies = ["debug_inspector"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "078n2dkpgsivcf0pr50981w95nfc2bsrp3wpf9wnxz1qsp8jbb9s"; + type = "gem"; + }; + version = "1.0.0"; + }; + bootsnap = { + dependencies = ["msgpack"]; + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vcg52gwl64xhhal6kwk1pc01y1klzdlnv1awyk89kb91z010x7q"; + type = "gem"; + }; + version = "1.16.0"; + }; + builder = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr"; + type = "gem"; + }; + version = "3.2.4"; + }; + bullet = { + dependencies = ["activesupport" "uniform_notifier"]; + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hyz68j0z0j24vcrs43swmlykhzypayv34kzrsbxda5lbi83gynm"; + type = "gem"; + }; + version = "7.0.7"; + }; + byebug = { + groups = ["development" "test"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194"; + type = "gem"; + }; + version = "11.1.3"; + }; + capybara = { + dependencies = ["addressable" "matrix" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "114qm5f5vhwaaw9rj1h2lcamh46zl13v1m18jiw68zl961gwmw6n"; + type = "gem"; + }; + version = "3.39.2"; + }; + cbor = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0511idr8xps9625nh3kxr68sdy6l3xy2kcz7r57g47fxb1v18jj3"; + type = "gem"; + }; + version = "0.5.9.6"; + }; + certified = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1706p6p0a8adyvd943af2a3093xakvislgffw3v9dvp7j07dyk5a"; + type = "gem"; + }; + version = "1.0.0"; + }; + cgi = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18zc1z8va9j1gcv131p605wmkvn1p5958mmvvy7v45ki8c0w7qn5"; + type = "gem"; + }; + version = "0.3.6"; + }; + chunky_png = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1znw5x86hmm9vfhidwdsijz8m38pqgmv98l9ryilvky0aldv7mc9"; + type = "gem"; + }; + version = "1.4.0"; + }; + coderay = { + groups = ["default" "development"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw"; + type = "gem"; + }; + version = "1.1.3"; + }; + colored2 = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zj06gjqwykgzxmbkp2hmg3wv5kv8zz5d77acxipzcgicdjgvfan"; + type = "gem"; + }; + version = "4.0.0"; + }; + concurrent-ruby = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q"; + type = "gem"; + }; + version = "1.2.2"; + }; + connection_pool = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x32mcpm2cl5492kd6lbjbaf17qsssmpx9kdyr7z1wcif2cwyh0g"; + type = "gem"; + }; + version = "2.4.1"; + }; + cose = { + dependencies = ["cbor" "openssl-signature_algorithm"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00c6x4ha7qiaaf88qdbyf240mk146zz78rbm4qwyaxmwlmk7q933"; + type = "gem"; + }; + version = "1.3.0"; + }; + cppjieba_rb = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ijzvnm5jclyhf6ls30kv7dqy05f3hbha69f59jwbzdid7dndla5"; + type = "gem"; + }; + version = "0.4.2"; + }; + crack = { + dependencies = ["rexml"]; + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r"; + type = "gem"; + }; + version = "0.4.5"; + }; + crass = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw"; + type = "gem"; + }; + version = "1.0.6"; + }; + css_parser = { + dependencies = ["addressable"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18mii41bbl106rn940ah8v3xclj4yrxxa0bwlwp546244n9b83zp"; + type = "gem"; + }; + version = "1.16.0"; + }; + dartsass-ruby = { + dependencies = ["sass-embedded"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0z3gdsnyvdjgn9gwia72irqgxq04i8hv9pv60yqkd4h5nk9rx4p6"; + type = "gem"; + }; + version = "3.0.1"; + }; + dartsass-sprockets = { + dependencies = ["dartsass-ruby" "railties" "sprockets" "sprockets-rails" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1842k5i96iiz264wzzqar2m3whs2caf0d8yhbsr6qdbi4j5pzmcx"; + type = "gem"; + }; + version = "3.0.0"; + }; + date = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03skfikihpx37rc27vr3hwrb057gxnmdzxhmzd4bf4jpkl0r55w1"; + type = "gem"; + }; + version = "3.3.3"; + }; + debug_inspector = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01l678ng12rby6660pmwagmyg8nccvjfgs3487xna7ay378a59ga"; + type = "gem"; + }; + version = "1.1.0"; + }; + diff-lcs = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9"; + type = "gem"; + }; + version = "1.5.0"; + }; + diffy = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qcsv29ljfhy76gq4xi8zpn6dc6nv15c41r131bdr38kwpxjzd1n"; + type = "gem"; + }; + version = "3.4.2"; + }; + digest = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01qkpbkxq83ip3iysfh2kjrg9sh2n2q91prhyxh3vq10lcfzv9l1"; + type = "gem"; + }; + version = "3.1.1"; + }; + discourse-fonts = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1q1q9fmqc7dir2nj94nai58h26zsh6fqmbr6hfax5d6xpy4pm1yf"; + type = "gem"; + }; + version = "0.0.9"; + }; + discourse-seed-fu = { + dependencies = ["activerecord" "activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1r3mbi72cx3xx8dnva1zhvxcacdma4xfn16d8s860m7d25fdjqag"; + type = "gem"; + }; + version = "2.3.12"; + }; + discourse_dev_assets = { + dependencies = ["faker" "literate_randomizer"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ncd6n34vm7qd5mpza8wrqfkgfc6xbd5rxjcbdnvsv94zxr75rm1"; + type = "gem"; + }; + version = "0.0.4"; + }; + docile = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1lxqxgq71rqwj1lpl9q1mbhhhhhhdkkj7my341f2889pwayk85sz"; + type = "gem"; + }; + version = "1.4.0"; + }; + email_reply_trimmer = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jgcxifm48xq5dz9k47q43pqm5bfnf14l62l3bqhmv8f6z8dw4ki"; + type = "gem"; + }; + version = "0.1.13"; + }; + erubi = { + groups = ["default" "development" "test"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7"; + type = "gem"; + }; + version = "1.12.0"; + }; + excon = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mbkyyadz9vw7mzixi9dks6i6iw033yn2hzwfvnfdvgqq6ywqs4g"; + type = "gem"; + }; + version = "0.102.0"; + }; + execjs = { + groups = ["assets" "default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a4dhqclx0n4dc5riiff1nkwfinaf5an1dxjywmlwa9wm57r9q9p"; + type = "gem"; + }; + version = "2.9.0"; + }; + exifr = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11v201jljn327fwjqcsglrbdnyhivnj7j6nh6wym5zjqgrwxy3kn"; + type = "gem"; + }; + version = "1.4.0"; + }; + fabrication = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bxssmjp49whzq2zv7w751gr4nkdaiwcxd1vda0byigwyrnj6f5q"; + type = "gem"; + }; + version = "2.30.0"; + }; + faker = { + dependencies = ["i18n"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wslw5gh335zcahxmdd497xaa7h0d8l60c0jfv942mn47fxy8m47"; + type = "gem"; + }; + version = "2.23.0"; + }; + fakeweb = { + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a09z9nb369bvwpghncgd5y4f95lh28w0q258srh02h22fz9dj8y"; + type = "gem"; + }; + version = "1.3.0"; + }; + faraday = { + dependencies = ["faraday-net_http" "ruby2_keywords"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "187clqhp9mv5mnqmjlfdp57svhsg1bggz84ak8v333j9skrnrgh9"; + type = "gem"; + }; + version = "2.7.10"; + }; + faraday-net_http = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8"; + type = "gem"; + }; + version = "3.0.2"; + }; + faraday-retry = { + dependencies = ["faraday"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ia19zgni6cw96rvsr0s004vjs9m2r6la4s00zcff36xaia4m0l0"; + type = "gem"; + }; + version = "2.2.0"; + }; + fast_blank = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "rbx"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1shpmamyzyhyxmv95r96ja5rylzaw60r19647d0fdm7y2h2c77r6"; + type = "gem"; + }; + version = "1.0.1"; + }; + fast_xs = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "rbx"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1iydzaqmvqq7ncxkr182aybkk6xap0cb2w9amr73vbdxi2qf3wjz"; + type = "gem"; + }; + version = "0.8.0"; + }; + fastimage = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pd7pamzhdz2w0fbcvsfn2nyslznvphnwj16zw35g2b28zd2xyzx"; + type = "gem"; + }; + version = "2.2.7"; + }; + ffi = { + groups = ["default" "development" "test"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg"; + type = "gem"; + }; + version = "1.15.5"; + }; + fspath = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xcxikkrjv8ws328nn5ax5pyfjs8pn7djg1hks7qyb3yp6prpb5m"; + type = "gem"; + }; + version = "3.1.2"; + }; + gc_tracer = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yv3mp8lx74lfzs04fd5h4g89209iwhzpc407y35p7cmzgx6a4kv"; + type = "gem"; + }; + version = "1.5.1"; + }; + globalid = { + dependencies = ["activesupport"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sbw6b66r7cwdx3jhs46s4lr991969hvigkjpbdl7y3i31qpdgvh"; + type = "gem"; + }; + version = "1.2.1"; + }; + google-protobuf = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pcl4x4cw3snl5xzs99lm82m9xkfs8vm1a8dfrc34pwb77mwrwv3"; + type = "gem"; + }; + version = "3.24.3"; + }; + guess_html_encoding = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16700fk6kmif3q3kpc1ldhy3nsc9pkxlgl8sqhznff2zjj5lddna"; + type = "gem"; + }; + version = "0.0.11"; + }; + hana = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03cvrv2wl25j9n4n509hjvqnmwa60k92j741b64a1zjisr1dn9al"; + type = "gem"; + }; + version = "1.3.7"; + }; + hashdiff = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c"; + type = "gem"; + }; + version = "1.0.1"; + }; + hashie = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nh3arcrbz1rc1cr59qm53sdhqm137b258y8rcb4cvd3y98lwv4x"; + type = "gem"; + }; + version = "5.0.0"; + }; + highline = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1f8cr014j7mdqpdb9q17fp5vb5b8n1pswqaif91s3ylg5x3pygfn"; + type = "gem"; + }; + version = "2.1.0"; + }; + hkdf = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "03g3yvfnlcjv2qw3b3yahg0x7zhwcd1bwxyj6gbn5jrc7k4kfrqg"; + type = "gem"; + }; + version = "1.0.0"; + }; + htmlentities = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj"; + type = "gem"; + }; + version = "4.3.4"; + }; + http_accept_language = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0d0nlfz9vm4jr1l6q0chx4rp2hrnrfbx3gadc1dz930lbbaz0hq0"; + type = "gem"; + }; + version = "2.1.1"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx"; + type = "gem"; + }; + version = "1.14.1"; + }; + image_optim = { + dependencies = ["exifr" "fspath" "image_size" "in_threads" "progress"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02iw1plldayr1l8bdw2gshq0h083h0fxwji1m1nfhzikz917c07p"; + type = "gem"; + }; + version = "0.31.3"; + }; + image_size = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19fspid6610sm4x0mql7iny7k0d7f21xgxqmsca0irvlvazwm4vn"; + type = "gem"; + }; + version = "3.3.0"; + }; + in_threads = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0j9132d4g8prjafgdh4pw948j527kr09m2lvylrcd797il9yd9wi"; + type = "gem"; + }; + version = "1.6.0"; + }; + jmespath = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393"; + type = "gem"; + }; + version = "1.6.2"; + }; + json = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6"; + type = "gem"; + }; + version = "2.6.3"; + }; + json-schema = { + dependencies = ["addressable"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gdvm83yaa5n8hwapwzxwfcmbypiq2i0zfx4mzz67wg55p2cnli4"; + type = "gem"; + }; + version = "3.0.0"; + }; + json_schemer = { + dependencies = ["hana" "regexp_parser" "simpleidn"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0spgxaxvsl3qvyj9qb95gd5hvy2pnp98hbgp8nfw6s69yyw0xmgj"; + type = "gem"; + }; + version = "2.0.0"; + }; + jwt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16z11alz13vfc4zs5l3fk6n51n2jw9lskvc4h4prnww0y797qd87"; + type = "gem"; + }; + version = "2.7.1"; + }; + kgio = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "rbx"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ipzvw7n0kz1w8rkqybyxvf3hb601a770khm0xdqm68mc4aa59xx"; + type = "gem"; + }; + version = "2.11.4"; + }; + language_server-protocol = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gvb1j8xsqxms9mww01rmdl78zkd72zgxaap56bhv8j45z05hp1x"; + type = "gem"; + }; + version = "3.17.0.3"; + }; + libv8-node = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0n2kakfa4nmkkmjimkg2z4fsni9v0qbwkwn9hcm2xp69xqfcmxiq"; + type = "gem"; + }; + version = "18.16.0.0"; + }; + listen = { + dependencies = ["rb-fsevent" "rb-inotify"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13rgkfar8pp31z1aamxf5y7cfq88wv6rxxcwy7cmm177qq508ycn"; + type = "gem"; + }; + version = "3.8.0"; + }; + literate_randomizer = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c8p8aw93bx4ygpkwfv6dv41psb86jb0pi16gvnv30rr72dkq1q5"; + type = "gem"; + }; + version = "0.4.0"; + }; + lograge = { + dependencies = ["actionpack" "activesupport" "railties" "request_store"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01kdw5dbzimb89rq4zf44zf8990czb5qxvib0hzja1l4hrha8cki"; + type = "gem"; + }; + version = "0.13.0"; + }; + logstash-event = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bk7fhhryjxp1klr3hq6i6srrc21wl4p980bysjp0w66z9hdr9w9"; + type = "gem"; + }; + version = "1.2.02"; + }; + logstash-logger = { + dependencies = ["logstash-event"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1nh0jgz4rl46axqb9l0fa866kh34wb7yf11qc3j30xhprdqb8yjp"; + type = "gem"; + }; + version = "0.26.1"; + }; + logster = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18yqcf756rzxdq5pw2qrximfryv15ib7rv2g622wjig7zhvk8wx4"; + type = "gem"; + }; + version = "2.12.2"; + }; + loofah = { + dependencies = ["crass" "nokogiri"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1p744kjpb5zk2ihklbykzii77alycjc04vpnm2ch2f3cp65imlj3"; + type = "gem"; + }; + version = "2.21.3"; + }; + lru_redux = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yxghzg7476sivz8yyr9nkak2dlbls0b89vc2kg52k0nmg6d0wgf"; + type = "gem"; + }; + version = "1.1.0"; + }; + lz4-ruby = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "rbx"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12fymsvcb9kw6ycyfzc8b9svriq0afqf1qnl121xrz8c4gpfa6q1"; + type = "gem"; + }; + version = "0.3.3"; + }; + mail = { + dependencies = ["mini_mime" "net-imap" "net-pop" "net-smtp"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc"; + type = "gem"; + }; + version = "2.8.1"; + }; + matrix = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i"; + type = "gem"; + }; + version = "0.4.2"; + }; + maxminddb = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zlhqilyggiryywgswfi624bv10qnkm66hggmg79vvgv73j3p4sh"; + type = "gem"; + }; + version = "0.1.22"; + }; + memory_profiler = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c81d68r4wx0ckbmqxlfqc2qpd94jwcmqdm0xgr0s46r48pv9k9q"; + type = "gem"; + }; + version = "1.0.1"; + }; + message_bus = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15xqp7pnicjh2868fsc6fmxw8cw32bpiaqpc5bz8cwdib09ns3qk"; + type = "gem"; + }; + version = "4.3.8"; + }; + method_source = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp"; + type = "gem"; + }; + version = "1.0.0"; + }; + mini_mime = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vycif7pjzkr29mfk4dlqv3disc5dn0va04lkwajlpr1wkibg0c6"; + type = "gem"; + }; + version = "1.1.5"; + }; + mini_portile2 = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02mj8mpd6ck5gpcnsimx5brzggw5h5mmmpq2djdypfq16wcw82qq"; + type = "gem"; + }; + version = "2.8.4"; + }; + mini_racer = { + dependencies = ["libv8-node"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zjf3jsbara8fpfky28z1f64ymk5qsq40i527fxdnw061hlm4izy"; + type = "gem"; + }; + version = "0.8.0"; + }; + mini_scheduler = { + dependencies = ["sidekiq"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19c72wlr0zsrg1fiak61h0z1b3glv2l23041xvlwv2i71fw5xavy"; + type = "gem"; + }; + version = "0.16.0"; + }; + mini_sql = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yrxjmwhfnvcwbj9vscyq0z67sq09zl8qhmzgakq2ywy4yvcpwgg"; + type = "gem"; + }; + version = "1.5.0"; + }; + mini_suffix = { + dependencies = ["ffi"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1rr2nx1kixd7ccxqdnswjnflg46s6lr1f9vxkdy298k95zwk67cd"; + type = "gem"; + }; + version = "0.3.3"; + }; + minio_runner = { + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11rwvbqichq5jipgbr5x6s609485ga7vxc32r3h9vx342gs6nrzy"; + type = "gem"; + }; + version = "0.1.1"; + }; + minitest = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3"; + type = "gem"; + }; + version = "5.20.0"; + }; + mocha = { + dependencies = ["ruby2_keywords"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lsll8iba8612dypk718l9kx73m9syiscb2rhciljys1krc5g1zr"; + type = "gem"; + }; + version = "2.1.0"; + }; + msgpack = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a5adcb7bwan09mqhj3wi9ib52hmdzmqg7q08pggn3adibyn5asr"; + type = "gem"; + }; + version = "1.7.2"; + }; + multi_json = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z"; + type = "gem"; + }; + version = "1.15.0"; + }; + multi_xml = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj"; + type = "gem"; + }; + version = "0.6.0"; + }; + mustache = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch"; + type = "gem"; + }; + version = "1.1.1"; + }; + net-http = { + dependencies = ["uri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0y55ib1v2b8prqfi9ij7hca60b1j94s2bzr6vskwi3i5735472wq"; + type = "gem"; + }; + version = "0.3.2"; + }; + net-imap = { + dependencies = ["date" "net-protocol"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0lf7wqg7czhaj51qsnmn28j7jmcxhkh3m28rl1cjrqsgjxhwj7r3"; + type = "gem"; + }; + version = "0.3.7"; + }; + net-pop = { + dependencies = ["net-protocol"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wyz41jd4zpjn0v1xsf9j778qx1vfrl24yc20cpmph8k42c4x2w4"; + type = "gem"; + }; + version = "0.1.2"; + }; + net-protocol = { + dependencies = ["timeout"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dxckrlw4q1lcn3qg4mimmjazmg9bma5gllv72f8js3p36fb3b91"; + type = "gem"; + }; + version = "0.2.1"; + }; + net-smtp = { + dependencies = ["net-protocol"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1c6md06hm5bf6rv53sk54dl2vg038pg8kglwv3rayx0vk2mdql9x"; + type = "gem"; + }; + version = "0.3.3"; + }; + nio4r = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0w9978zwjf1qhy3amkivab0f9syz6a7k0xgydjidaf7xc831d78f"; + type = "gem"; + }; + version = "2.5.9"; + }; + nokogiri = { + dependencies = ["mini_portile2" "racc"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k9w2z0953mnjrsji74cshqqp08q7m1r6zhadw1w0g34xzjh3a74"; + type = "gem"; + }; + version = "1.15.4"; + }; + oauth = { + dependencies = ["oauth-tty" "snaky_hash" "version_gem"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1syx3hfimaqycy21kn8gmal1cb3bw3hzalv3in2ixnay1xzjp41q"; + type = "gem"; + }; + version = "1.1.0"; + }; + oauth-tty = { + dependencies = ["version_gem"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05wb5n36i4h23hh9dx2m2cwjxx5vj0vgyrn2xr6rsl54glq5rqil"; + type = "gem"; + }; + version = "1.0.5"; + }; + oauth2 = { + dependencies = ["faraday" "jwt" "multi_json" "multi_xml" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "042w5lamxhllfxsv0y8v9cvdhmlasy5kxbhcdd3lzj9bhz4gqfb7"; + type = "gem"; + }; + version = "1.4.11"; + }; + oj = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m4vsd6i093kmyz9gckvzpnws997laldaiaf86hg5lza1ir82x7n"; + type = "gem"; + }; + version = "3.16.1"; + }; + omniauth = { + dependencies = ["hashie" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jn9j54l5h7xcba2vjq74l1dk0xrwvsjxam4qhylpi52nw0h5502"; + type = "gem"; + }; + version = "1.9.2"; + }; + omniauth-facebook = { + dependencies = ["omniauth-oauth2"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m7q38kjm94wgq6h7hk9546yg33wcs3vf1v6zp0vx7nwkvfxh2j4"; + type = "gem"; + }; + version = "9.0.0"; + }; + omniauth-github = { + dependencies = ["omniauth" "omniauth-oauth2"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xbk0dbxqfpyfb33ghz6vrlz3m6442rp18ryf13gwzlnifcawhlb"; + type = "gem"; + }; + version = "1.4.0"; + }; + omniauth-google-oauth2 = { + dependencies = ["jwt" "oauth2" "omniauth" "omniauth-oauth2"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "10pnxvb6wpnf58dja3yz4ja527443x3q13hzhcbays4amnnp8i4a"; + type = "gem"; + }; + version = "0.8.2"; + }; + omniauth-oauth = { + dependencies = ["oauth" "omniauth"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yw2vzx633p9wpdkd4jxsih6mw604mj7f6myyfikmj4d95c8d9z7"; + type = "gem"; + }; + version = "1.2.0"; + }; + omniauth-oauth2 = { + dependencies = ["oauth2" "omniauth"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ia73zcbmhf02krlkq2rxmksx93jp777ax5x58fzkq3jzacqyniz"; + type = "gem"; + }; + version = "1.7.3"; + }; + omniauth-twitter = { + dependencies = ["omniauth-oauth" "rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65"; + type = "gem"; + }; + version = "1.4.0"; + }; + openssl = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c649921vg2l939z5cc3jwd8p1v49099pdhxfk7sb9qqx5wi5873"; + type = "gem"; + }; + version = "3.1.0"; + }; + openssl-signature_algorithm = { + dependencies = ["openssl"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "103yjl68wqhl5kxaciir5jdnyi7iv9yckishdr52s5knh9g0pd53"; + type = "gem"; + }; + version = "1.3.0"; + }; + optimist = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q4jqq3v1bxlfr9jgqmahnygkvl81lr6s1rhm8qg66c9xr9nz241"; + type = "gem"; + }; + version = "3.1.0"; + }; + parallel = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597"; + type = "gem"; + }; + version = "1.23.0"; + }; + parallel_tests = { + dependencies = ["parallel"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pa50my9sgh4wh9jah1qxjd33wsp1ahv29vj2q1biz434p67vh5p"; + type = "gem"; + }; + version = "4.2.2"; + }; + parser = { + dependencies = ["ast" "racc"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1swigds85jddb5gshll1g8lkmbcgbcp9bi1d4nigwvxki8smys0h"; + type = "gem"; + }; + version = "3.2.2.3"; + }; + pg = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "07m6lxljabw9kyww5k5lgsxsznsm1v5l14r1la09gqka9b5kv3yr"; + type = "gem"; + }; + version = "1.4.6"; + }; + prettier_print = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ybgks9862zmlx71zd4j20ky86fsrp6j6m0az4hzzb1zyaskha57"; + type = "gem"; + }; + version = "1.2.1"; + }; + progress = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wymdk40cwrqn32gwg1kw94s5p1n0z3n7ma7x1s62gd4vw3d63in"; + type = "gem"; + }; + version = "3.6.0"; + }; + pry = { + dependencies = ["coderay" "method_source"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k9kqkd9nps1w1r1rb7wjr31hqzkka2bhi8b518x78dcxppm9zn4"; + type = "gem"; + }; + version = "0.14.2"; + }; + pry-byebug = { + dependencies = ["byebug" "pry"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1y41al94ks07166qbp2200yzyr5y60hm7xaiw4lxpgsm4b1pbyf8"; + type = "gem"; + }; + version = "3.10.1"; + }; + pry-rails = { + dependencies = ["pry"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1cf4ii53w2hdh7fn8vhqpzkymmchjbwij4l3m7s6fsxvb9bn51j6"; + type = "gem"; + }; + version = "0.3.9"; + }; + public_suffix = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k"; + type = "gem"; + }; + version = "5.0.3"; + }; + puma = { + dependencies = ["nio4r"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1x4dwx2shx0p7lsms97r85r7ji7zv57bjy3i1kmcpxc8bxvrr67c"; + type = "gem"; + }; + version = "6.3.1"; + }; + racc = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11v3l46mwnlzlc371wr3x6yylpgafgwdf0q7hc7c1lzx6r414r5g"; + type = "gem"; + }; + version = "1.7.1"; + }; + rack = { + groups = ["default" "development" "test"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15rdwbyk71c9nxvd527bvb8jxkcys8r3dj3vqra5b3sa63qs30vv"; + type = "gem"; + }; + version = "2.2.8"; + }; + rack-mini-profiler = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "18vj7q740f7ffj677i258abryj97w0a6g3d5859y0lgypm5big1v"; + type = "gem"; + }; + version = "3.1.1"; + }; + rack-protection = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0xsz78hccgza144n37bfisdkzpr2c8m0xl6rnlzgxdbsm1zrkg7r"; + type = "gem"; + }; + version = "3.1.0"; + }; + rack-test = { + dependencies = ["rack"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ysx29gk9k14a14zsp5a8czys140wacvp91fja8xcja0j1hzqq8c"; + type = "gem"; + }; + version = "2.1.0"; + }; + rails-dom-testing = { + dependencies = ["activesupport" "minitest" "nokogiri"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fx9dx1ag0s1lr6lfr34lbx5i1bvn3bhyf3w3mx6h7yz90p725g5"; + type = "gem"; + }; + version = "2.2.0"; + }; + rails-html-sanitizer = { + dependencies = ["loofah" "nokogiri"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1pm4z853nyz1bhhqr7fzl44alnx4bjachcr6rh6qjj375sfz3sc6"; + type = "gem"; + }; + version = "1.6.0"; + }; + rails_failover = { + dependencies = ["activerecord" "concurrent-ruby" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "102v7928nyl1w1cmi70zbx42nw25v842r84gwchwijwnd2f30gvy"; + type = "gem"; + }; + version = "2.0.1"; + }; + rails_multisite = { + dependencies = ["activerecord" "railties"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hilr3yhnzvzn3p2cl77im9ypvbfjk1vw7f72i1j7fi2bmq1h2hi"; + type = "gem"; + }; + version = "5.0.0"; + }; + railties = { + dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor" "zeitwerk"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0in2b84qqmfnigx0li9bgi6l4knmgbj3a29fzm1zzb5jnv4r1gbr"; + type = "gem"; + }; + version = "7.0.7"; + }; + rainbow = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503"; + type = "gem"; + }; + version = "3.1.1"; + }; + raindrops = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "rbx"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0c27mcglrj928zkm4d2spj9yh2xkkka8ns5s6bidkwild3zvj3ma"; + type = "gem"; + }; + version = "0.20.1"; + }; + rake = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w"; + type = "gem"; + }; + version = "13.0.6"; + }; + rb-fsevent = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423"; + type = "gem"; + }; + version = "0.11.2"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005"; + type = "gem"; + }; + version = "0.10.1"; + }; + rbtrace = { + dependencies = ["ffi" "msgpack" "optimist"]; + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0s8prj0klfgpmpfcpdzbf149qrrsdxgnb6w6kkqc9gyars4vyaqn"; + type = "gem"; + }; + version = "0.4.14"; + }; + rchardet = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9"; + type = "gem"; + }; + version = "1.8.0"; + }; + redis = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fikjg6j12ka6hh36dxzhfkpqqmilzjfzcdf59iwkzsgd63f0ziq"; + type = "gem"; + }; + version = "4.8.1"; + }; + redis-namespace = { + dependencies = ["redis"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0f92i9cwlp6xj6fyn7qn4qsaqvxfw4wqvayll7gbd26qnai1l6p9"; + type = "gem"; + }; + version = "1.11.0"; + }; + regexp_parser = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "136br91alxdwh1s85z912dwz23qlhm212vy6i3wkinz3z8mkxxl3"; + type = "gem"; + }; + version = "2.8.1"; + }; + request_store = { + dependencies = ["rack"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13ppgmsbrqah08j06bybd3cddv6dml79yzyjn7r8j1src78h98h7"; + type = "gem"; + }; + version = "1.5.1"; + }; + rexml = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0"; + type = "gem"; + }; + version = "3.2.6"; + }; + rinku = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0zcdha17s1wzxyc5814j6319wqg33jbn58pg6wmxpws36476fq4b"; + type = "gem"; + }; + version = "2.0.6"; + }; + rotp = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m48hv6wpmmm6cjr6q92q78h1i610riml19k5h1dil2yws3h1m3m"; + type = "gem"; + }; + version = "6.3.0"; + }; + rouge = { + groups = ["default" "development"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19drl3x8fw65v3mpy7fk3cf3dfrywz5alv98n2rm4pp04vdn71lw"; + type = "gem"; + }; + version = "4.1.3"; + }; + rqrcode = { + dependencies = ["chunky_png" "rqrcode_core"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hggzz8i1l62pkkiybhiqv6ypxw7q844sddrrbbfczjcnj5sivi3"; + type = "gem"; + }; + version = "2.2.0"; + }; + rqrcode_core = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06ld6386hbdhy5h0k09axmgn424kavpc8f27k1vjhknjhbf8jjfg"; + type = "gem"; + }; + version = "1.2.0"; + }; + rspec = { + dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "171rc90vcgjl8p1bdrqa92ymrj8a87qf6w20x05xq29mljcigi6c"; + type = "gem"; + }; + version = "3.12.0"; + }; + rspec-core = { + dependencies = ["rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0l95bnjxdabrn79hwdhn2q1n7mn26pj7y1w5660v5qi81x458nqm"; + type = "gem"; + }; + version = "3.12.2"; + }; + rspec-expectations = { + dependencies = ["diff-lcs" "rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "05j44jfqlv7j2rpxb5vqzf9hfv7w8ba46wwgxwcwd8p0wzi1hg89"; + type = "gem"; + }; + version = "3.12.3"; + }; + rspec-html-matchers = { + dependencies = ["nokogiri" "rspec"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1bp9q28qw4xmxknrrp3ppcr08bbcnnand6r9prw4920407mvy96l"; + type = "gem"; + }; + version = "0.10.0"; + }; + rspec-mocks = { + dependencies = ["diff-lcs" "rspec-support"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gq7gviwpck7fhp4y5ibljljvxgjklza18j62qf6zkm2icaa8lfy"; + type = "gem"; + }; + version = "3.12.6"; + }; + rspec-rails = { + dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "086qdyz7c4s5dslm6j06mq7j4jmj958whc3yinhabnqqmz7i463d"; + type = "gem"; + }; + version = "6.0.3"; + }; + rspec-support = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ky86j3ksi26ng9ybd7j0qsdf1lpr8mzrmn98yy9gzv801fvhsgr"; + type = "gem"; + }; + version = "3.12.1"; + }; + rss = { + dependencies = ["rexml"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1wv27axi39hhr0nmaffdl5bdjqiafcvp9xhfgnsgfczsblja50sn"; + type = "gem"; + }; + version = "0.3.0"; + }; + rswag-specs = { + dependencies = ["activesupport" "json-schema" "railties" "rspec-core"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0p0blh8p6zj8vsiw585wiy6zpyn8p3ksn0z92ijfzaw7afvcvl8j"; + type = "gem"; + }; + version = "2.10.1"; + }; + rtlcss = { + dependencies = ["mini_racer"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q5zlx1k4gqyq0rvnfkljvrwa73ysycxc5m5ly9py9k1pw05lg91"; + type = "gem"; + }; + version = "0.2.1"; + }; + rubocop = { + dependencies = ["base64" "json" "language_server-protocol" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1i3571gchdj3c28znr5kisj0fkppy57208g9j1kv23rhk3p5q5p2"; + type = "gem"; + }; + version = "1.56.3"; + }; + rubocop-ast = { + dependencies = ["parser"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "188bs225kkhrb17dsf3likdahs2p1i1sqn0pr3pvlx50g6r2mnni"; + type = "gem"; + }; + version = "1.29.0"; + }; + rubocop-capybara = { + dependencies = ["rubocop"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "01fn05a87g009ch1sh00abdmgjab87i995msap26vxq1a5smdck6"; + type = "gem"; + }; + version = "2.18.0"; + }; + rubocop-discourse = { + dependencies = ["rubocop" "rubocop-rspec"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1sycsgagz7iq4j4aflzkzjlclvsck9yacjlj1pzzmfpjbbka34x8"; + type = "gem"; + }; + version = "3.3.0"; + }; + rubocop-factory_bot = { + dependencies = ["rubocop"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0kqchl8f67k2g56sq2h1sm2wb6br5gi47s877hlz94g5086f77n1"; + type = "gem"; + }; + version = "2.23.1"; + }; + rubocop-rspec = { + dependencies = ["rubocop" "rubocop-capybara" "rubocop-factory_bot"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ylwy4afnxhbrvlaf8an9nrizj78axnzggiyfcp8v531cv8six5f"; + type = "gem"; + }; + version = "2.23.2"; + }; + ruby-prof = { + groups = ["development"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "13fsfw43zx9pcix1fzxb95g09yadqjvc8971k74krrjz81vbyh51"; + type = "gem"; + }; + version = "1.6.3"; + }; + ruby-progressbar = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cwvyb7j47m7wihpfaq7rc47zwwx9k4v7iqd9s1xch5nm53rrz40"; + type = "gem"; + }; + version = "1.13.0"; + }; + ruby-readability = { + dependencies = ["guess_html_encoding" "nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15ivhbry7hf82lww1bzcrwfyjymijfb3rb0wdd32g2z0942wdspa"; + type = "gem"; + }; + version = "0.7.0"; + }; + ruby2_keywords = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz"; + type = "gem"; + }; + version = "0.0.5"; + }; + rubyzip = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz"; + type = "gem"; + }; + version = "2.3.2"; + }; + sanitize = { + dependencies = ["crass" "nokogiri"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kymrjdpbmn4yaml3aaqyj1dzj8gqmm9h030dc2rj5mvja7fpi28"; + type = "gem"; + }; + version = "6.0.2"; + }; + sass-embedded = { + dependencies = ["google-protobuf" "rake"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "038fzkbq5sw9lf947akhpsvdm14q6jfzl2yn87s8958h42sn0xjy"; + type = "gem"; + }; + version = "1.66.1"; + }; + selenium-webdriver = { + dependencies = ["rexml" "rubyzip" "websocket"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0jwll13m7bqph4lgl75m7vwd175k657znwa7qn9qkf5dcxdjkcjs"; + type = "gem"; + }; + version = "4.12.0"; + }; + shoulda-matchers = { + dependencies = ["activesupport"]; + groups = ["development" "test"]; + platforms = []; + source = { + fetchSubmodules = false; + rev = "68f76ce13e9892339f90c4928339dfd769cfa613"; + sha256 = "08kbcdfplmbdhgq0x6lk2lpwrlgijrfq6vhl5hkmxg9v9gpgbbrj"; + type = "git"; + url = "https://github.com/thoughtbot/shoulda-matchers.git"; + }; + version = "5.3.0"; + }; + sidekiq = { + dependencies = ["connection_pool" "rack" "redis"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0iv7vgqyrpymiwvc3ca24sl4lda8m627p657p0v4xzdpzincrnbr"; + type = "gem"; + }; + version = "6.5.9"; + }; + simplecov = { + dependencies = ["docile" "simplecov-html" "simplecov_json_formatter"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py"; + type = "gem"; + }; + version = "0.22.0"; + }; + simplecov-html = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yx01bxa8pbf9ip4hagqkp5m0mqfnwnw2xk8kjraiywz4lrss6jb"; + type = "gem"; + }; + version = "0.12.3"; + }; + simplecov_json_formatter = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0a5l0733hj7sk51j81ykfmlk2vd5vaijlq9d5fn165yyx3xii52j"; + type = "gem"; + }; + version = "0.1.4"; + }; + simpleidn = { + dependencies = ["unf"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "06f7w6ph3bzzqk212yylfp4jfx275shgp9zg3xszbpv1ny2skp9m"; + type = "gem"; + }; + version = "0.2.1"; + }; + snaky_hash = { + dependencies = ["hashie" "version_gem"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cfwvdcr46pk0c7m5aw2w3izbrp1iba0q7l21r37mzpwaz0pxj0s"; + type = "gem"; + }; + version = "2.0.1"; + }; + sprockets = { + dependencies = ["concurrent-ruby" "rack"]; + groups = ["default"]; + platforms = []; + source = { + fetchSubmodules = false; + rev = "f4d3dae71ef29c44b75a49cfbf8032cce07b423a"; + sha256 = "0ps1zb411nrwih0rdp6vrnx0n4n18jcwks2x06iw52gvswlv49ry"; + type = "git"; + url = "https://github.com/rails/sprockets"; + }; + version = "3.7.2"; + }; + sprockets-rails = { + dependencies = ["actionpack" "activesupport" "sprockets"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1b9i14qb27zs56hlcc2hf139l0ghbqnjpmfi0054dxycaxvk5min"; + type = "gem"; + }; + version = "3.4.2"; + }; + sshkey = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1k8i5pzjhcnyf0bhcyn5iixpfp4pz0556rcxwpglh6p0sr8s6nv5"; + type = "gem"; + }; + version = "3.0.0"; + }; + stackprof = { + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bhdgfb0pmw9mav1kw9fn0ka012sa0i3h5ppvqssw5xq48nhxnr8"; + type = "gem"; + }; + version = "0.2.25"; + }; + syntax_tree = { + dependencies = ["prettier_print"]; + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "162m5xhbiq315bncp49ziddws537dv09pqsgrzsrmhhsymhgy0zb"; + type = "gem"; + }; + version = "6.1.1"; + }; + syntax_tree-disable_ternary = { + groups = ["development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gdi6zx4hqpxd81zas3dlw1jrdp98fvsqj4p7f42x5lhpfzz04zc"; + type = "gem"; + }; + version = "1.0.0"; + }; + test-prof = { + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "08j5456rdpgxvv8bs44x81jrxzpxb79wxfxdq4fqwxyircxzi2jj"; + type = "gem"; + }; + version = "1.2.2"; + }; + thor = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k7j2wn14h1pl4smibasw0bp66kg626drxb59z7rzflch99cd4rg"; + type = "gem"; + }; + version = "1.2.2"; + }; + tilt = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bmjgbv8158klwp2r3klxjwaj93nh1sbl4xvj9wsha0ic478avz7"; + type = "gem"; + }; + version = "2.2.0"; + }; + timeout = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1d9cvm0f4zdpwa795v3zv4973y5zk59j7s1x3yn90jjrhcz1yvfd"; + type = "gem"; + }; + version = "0.4.0"; + }; + tzinfo = { + dependencies = ["concurrent-ruby"]; + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd"; + type = "gem"; + }; + version = "2.0.6"; + }; + tzinfo-data = { + dependencies = ["tzinfo"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0m2d0gpsgqnv29j5h2d6g57g0rayvd460b8s2vjr8sn46bqf89m5"; + type = "gem"; + }; + version = "1.2023.3"; + }; + uglifier = { + dependencies = ["execjs"]; + groups = ["assets"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wgh7bzy68vhv9v68061519dd8samcy8sazzz0w3k8kqpy3g4s5f"; + type = "gem"; + }; + version = "4.2.0"; + }; + unf = { + dependencies = ["unf_ext"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9"; + type = "gem"; + }; + version = "0.1.4"; + }; + unf_ext = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch"; + type = "gem"; + }; + version = "0.0.8.2"; + }; + unicode-display_width = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a"; + type = "gem"; + }; + version = "2.4.2"; + }; + unicorn = { + dependencies = ["kgio" "raindrops"]; + groups = ["default"]; + platforms = [{ + engine = "maglev"; + } { + engine = "rbx"; + } { + engine = "ruby"; + }]; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h0gma14jjxiz6piyi6p99q7lya2mxrq79l03160hascvmx9ipa5"; + type = "gem"; + }; + version = "6.1.0"; + }; + uniform_notifier = { + groups = ["default" "development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1dfvqixshwvm82b9qwdidvnkavdj7s0fbdbmyd4knkl6l3j9xcwr"; + type = "gem"; + }; + version = "1.16.0"; + }; + uri = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fa49cdssxllj1j37a56kq27wsibx5lmqxkqdk1rz3452y0bsydy"; + type = "gem"; + }; + version = "0.12.2"; + }; + version_gem = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0q6zs0wgcrql9671fw6lmbvgh155snaak4fia24iji5wk9klpfh7"; + type = "gem"; + }; + version = "1.1.3"; + }; + web-push = { + dependencies = ["hkdf" "jwt" "openssl"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1jsximg9v44rpclhjxp03fxk68jx675pghwxc66wj7rn9h9fc54i"; + type = "gem"; + }; + version = "3.0.0"; + }; + webmock = { + dependencies = ["addressable" "crack" "hashdiff"]; + groups = ["test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vfispr7wd2p1fs9ckn1qnby1yyp4i1dl7qz8n482iw977iyxrza"; + type = "gem"; + }; + version = "3.19.1"; + }; + websocket = { + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0dib6p55sl606qb4vpwrvj5wh881kk4aqn2zpfapf8ckx7g14jw8"; + type = "gem"; + }; + version = "1.2.9"; + }; + xpath = { + dependencies = ["nokogiri"]; + groups = ["default" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"; + type = "gem"; + }; + version = "3.2.0"; + }; + yaml-lint = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12jc68af2mwdkr9iqay2v6qgq47yk5g82sd171riibk62wbhp5p3"; + type = "gem"; + }; + version = "0.1.2"; + }; + yard = { + groups = ["development"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "013yrnwx1zhzhn1fnc19zck22a1qgimsaglp2iwgf5bz9l8h93js"; + type = "gem"; + }; + version = "0.9.34"; + }; + zeitwerk = { + groups = ["default" "development" "test"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1mwdd445w63khz13hpv17m2br5xngyjl3jdj08xizjbm78i2zrxd"; + type = "gem"; + }; + version = "2.6.11"; + }; +} diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/unicorn_logging_and_timeout.patch b/nixpkgs/pkgs/servers/web-apps/discourse/unicorn_logging_and_timeout.patch new file mode 100644 index 000000000000..88ebc1337487 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/unicorn_logging_and_timeout.patch @@ -0,0 +1,25 @@ +diff --git a/config/unicorn.conf.rb b/config/unicorn.conf.rb +index e69979adfe..68cb04a036 100644 +--- a/config/unicorn.conf.rb ++++ b/config/unicorn.conf.rb +@@ -27,18 +27,10 @@ pid (ENV["UNICORN_PID_PATH"] || "#{discourse_path}/tmp/pids/unicorn.pid") + + if ENV["RAILS_ENV"] != "production" + logger Logger.new(STDOUT) +- # we want a longer timeout in dev cause first request can be really slow +- timeout (ENV["UNICORN_TIMEOUT"] && ENV["UNICORN_TIMEOUT"].to_i || 60) +-else +- # By default, the Unicorn logger will write to stderr. +- # Additionally, some applications/frameworks log to stderr or stdout, +- # so prevent them from going to /dev/null when daemonized here: +- stderr_path "#{discourse_path}/log/unicorn.stderr.log" +- stdout_path "#{discourse_path}/log/unicorn.stdout.log" +- # nuke workers after 30 seconds instead of 60 seconds (the default) +- timeout 30 + end + ++timeout (ENV["UNICORN_TIMEOUT"] && ENV["UNICORN_TIMEOUT"].to_i || 60) ++ + # important for Ruby 2.0 + preload_app true + diff --git a/nixpkgs/pkgs/servers/web-apps/discourse/update.py b/nixpkgs/pkgs/servers/web-apps/discourse/update.py new file mode 100755 index 000000000000..9b300d1d4959 --- /dev/null +++ b/nixpkgs/pkgs/servers/web-apps/discourse/update.py @@ -0,0 +1,441 @@ +#!/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 prefetch-yarn-deps +from __future__ import annotations + +import click +import click_log +import shutil +import tempfile +import re +import logging +import subprocess +import os +import stat +import json +import requests +import textwrap +from functools import total_ordering +from distutils.version import LooseVersion +from itertools import zip_longest +from pathlib import Path +from typing import Union, Iterable + + +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: + version_regex = re.compile(r'^v\d+\.\d+\.\d+(\.beta\d+)?$') + _latest_commit_sha = None + + def __init__(self, owner: str = 'discourse', repo: str = 'discourse'): + self.owner = owner + self.repo = repo + + @property + def versions(self) -> Iterable[str]: + 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] + + # filter out versions not matching version_regex + versions = filter(self.version_regex.match, tags) + versions = [DiscourseVersion(x) for x in versions] + versions.sort(reverse=True) + return versions + + @property + def latest_commit_sha(self) -> str: + if self._latest_commit_sha is None: + r = requests.get(f'https://api.github.com/repos/{self.owner}/{self.repo}/commits?per_page=1') + r.raise_for_status() + self._latest_commit_sha = r.json()[0]['sha'] + + return self._latest_commit_sha + + def get_yarn_lock_hash(self, rev: str): + yarnLockText = self.get_file('app/assets/javascripts/yarn.lock', rev) + with tempfile.NamedTemporaryFile(mode='w') as lockFile: + lockFile.write(yarnLockText) + return subprocess.check_output(['prefetch-yarn-deps', lockFile.name]).decode('utf-8').strip() + + def get_file(self, filepath, rev): + """Return file contents at a given rev. + + :param str filepath: the path to the file, relative to the repo root + :param str rev: the rev to fetch at :return: + + """ + 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): + """Call nix-update from nixpkgs root dir.""" + nixpkgs_path = Path(__file__).parent / '../../../../' + return subprocess.check_output(['nix-update', pkg, '--version', version], cwd=nixpkgs_path) + + +def _nix_eval(expr: str): + nixpkgs_path = Path(__file__).parent / '../../../../' + try: + output = subprocess.check_output(['nix-instantiate', '--strict', '--json', '--eval', '-E', f'(with import {nixpkgs_path} {{}}; {expr})'], text=True) + except subprocess.CalledProcessError: + return None + return json.loads(output) + + +def _get_current_package_version(pkg: str): + return _nix_eval(f'{pkg}.version') + + +def _diff_file(filepath: str, old_version: DiscourseVersion, new_version: DiscourseVersion): + repo = DiscourseRepo() + + current_dir = Path(__file__).parent + + old = repo.get_file(filepath, old_version.tag) + new = repo.get_file(filepath, new_version.tag) + + if old == new: + click.secho(f'{filepath} is unchanged', fg='green') + return + + with tempfile.NamedTemporaryFile(mode='w') as o, tempfile.NamedTemporaryFile(mode='w') as n: + o.write(old), n.write(new) + width = shutil.get_terminal_size((80, 20)).columns + diff_proc = subprocess.run( + ['diff', '--color=always', f'--width={width}', '-y', o.name, n.name], + stdout=subprocess.PIPE, + cwd=current_dir, + text=True + ) + + click.secho(f'Diff for {filepath} ({old_version.version} -> {new_version.version}):', fg='bright_blue', bold=True) + click.echo(diff_proc.stdout + '\n') + return + + +def _remove_platforms(rubyenv_dir: Path): + for platform in ['arm64-darwin-20', 'x86_64-darwin-18', + 'x86_64-darwin-19', 'x86_64-darwin-20', + 'x86_64-linux', 'aarch64-linux']: + with open(rubyenv_dir / 'Gemfile.lock', 'r') as f: + for line in f: + if platform in line: + subprocess.check_output( + ['bundle', 'lock', '--remove-platform', platform], cwd=rubyenv_dir) + break + + +@click_log.simple_verbosity_option(logger) + + +@click.group() +def cli(): + pass + + +@cli.command() +@click.argument('rev', default='latest') +@click.option('--reverse/--no-reverse', default=False, help='Print diffs from REV to current.') +def print_diffs(rev, reverse): + """Print out diffs for files used as templates for the NixOS module. + + The current package version found in the nixpkgs worktree the + script is run from will be used to download the "from" file and + REV used to download the "to" file for the diff, unless the + '--reverse' flag is specified. + + REV should be the git rev to find changes in ('vX.Y.Z') or + 'latest'; defaults to 'latest'. + + """ + if rev == 'latest': + repo = DiscourseRepo() + rev = repo.versions[0].tag + + old_version = DiscourseVersion(_get_current_package_version('discourse')) + new_version = DiscourseVersion(rev) + + if reverse: + old_version, new_version = new_version, old_version + + for f in ['config/nginx.sample.conf', 'config/discourse_defaults.conf']: + _diff_file(f, old_version, new_version) + + +@cli.command() +@click.argument('rev', default='latest') +def update(rev): + """Update gem files and version. + + REV: the git rev to update to ('vX.Y.Z[.betaA]') or + 'latest'; defaults to 'latest'. + + """ + repo = DiscourseRepo() + + if rev == 'latest': + version = repo.versions[0] + else: + version = DiscourseVersion(rev) + + logger.debug(f"Using rev {version.tag}") + logger.debug(f"Using version {version.version}") + + rubyenv_dir = Path(__file__).parent / "rubyEnv" + + for fn in ['Gemfile.lock', 'Gemfile']: + with open(rubyenv_dir / fn, 'w') as f: + f.write(repo.get_file(fn, version.tag)) + + subprocess.check_output(['bundle', 'lock'], cwd=rubyenv_dir) + _remove_platforms(rubyenv_dir) + subprocess.check_output(['bundix'], cwd=rubyenv_dir) + + _call_nix_update('discourse', version.version) + + old_yarn_hash = _nix_eval('discourse.assets.yarnOfflineCache.outputHash') + new_yarn_hash = repo.get_yarn_lock_hash(version.tag) + click.echo(f"Updating yarn lock hash, {old_yarn_hash} -> {new_yarn_hash}") + with open(Path(__file__).parent / "default.nix", 'r+') as f: + content = f.read() + content = content.replace(old_yarn_hash, new_yarn_hash) + f.seek(0) + f.write(content) + f.truncate() + + +@cli.command() +@click.argument('rev', default='latest') +def update_mail_receiver(rev): + """Update discourse-mail-receiver. + + REV: the git rev to update to ('vX.Y.Z') or 'latest'; defaults to + 'latest'. + + """ + repo = DiscourseRepo(repo="mail-receiver") + + if rev == 'latest': + version = repo.versions[0] + else: + version = DiscourseVersion(rev) + + _call_nix_update('discourse-mail-receiver', version.version) + + +@cli.command() +def update_plugins(): + """Update plugins to their latest revision.""" + plugins = [ + {'name': 'discourse-assign'}, + {'name': 'discourse-bbcode-color'}, + {'name': 'discourse-calendar'}, + {'name': 'discourse-canned-replies'}, + {'name': 'discourse-chat-integration'}, + {'name': 'discourse-checklist'}, + {'name': 'discourse-data-explorer'}, + {'name': 'discourse-docs'}, + {'name': 'discourse-github'}, + {'name': 'discourse-ldap-auth', 'owner': 'jonmbake'}, + {'name': 'discourse-math'}, + {'name': 'discourse-migratepassword', 'owner': 'discoursehosting'}, + {'name': 'discourse-openid-connect'}, + {'name': 'discourse-prometheus'}, + {'name': 'discourse-reactions'}, + {'name': 'discourse-saved-searches'}, + {'name': 'discourse-solved'}, + {'name': 'discourse-spoiler-alert'}, + {'name': 'discourse-voting'}, + {'name': 'discourse-yearly-review'}, + ] + + for plugin in plugins: + fetcher = plugin.get('fetcher') or "fetchFromGitHub" + owner = plugin.get('owner') or "discourse" + name = plugin.get('name') + repo_name = plugin.get('repo_name') or 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() if line != '']] + 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}') + if filename is None: + filename = Path(__file__).parent / 'plugins' / name / 'default.nix' + filename.parent.mkdir() + + has_ruby_deps = False + for line in repo.get_file('plugin.rb', rev).splitlines(): + if 'gem ' in line: + has_ruby_deps = True + break + + with open(filename, 'w') as f: + f.write(textwrap.dedent(f""" + {{ lib, mkDiscoursePlugin, fetchFromGitHub }}: + + mkDiscoursePlugin {{ + name = "{name}";"""[1:] + (""" + bundlerEnvArgs.gemdir = ./.;""" if has_ruby_deps else "") + f""" + src = {fetcher} {{ + owner = "{owner}"; + repo = "{repo_name}"; + rev = "replace-with-git-rev"; + sha256 = "replace-with-sha256"; + }}; + meta = with lib; {{ + homepage = ""; + maintainers = with maintainers; [ ]; + license = licenses.mit; # change to the correct license! + description = ""; + }}; + }}""")) + + all_plugins_filename = Path(__file__).parent / 'plugins' / 'all-plugins.nix' + with open(all_plugins_filename, 'r+') as f: + content = f.read() + pos = -1 + while content[pos] != '}': + pos -= 1 + content = content[:pos] + f' {name} = callPackage ./{name} {{}};' + os.linesep + content[pos:] + f.seek(0) + f.write(content) + f.truncate() + + else: + filename = filename['file'] + + prev_commit_sha = _nix_eval(f'discourse.plugins.{name}.src.rev') + + if prev_commit_sha == rev: + click.echo(f'Plugin {name} is already at the latest revision') + continue + + prev_hash = _nix_eval(f'discourse.plugins.{name}.src.outputHash') + new_hash = subprocess.check_output([ + 'nix-universal-prefetch', fetcher, + '--owner', owner, + '--repo', repo_name, + '--rev', rev, + ], text=True).strip("\n") + + click.echo(f"Update {name}, {prev_commit_sha} -> {rev} in {filename}") + + with open(filename, 'r+') as f: + content = f.read() + content = content.replace(prev_commit_sha, rev) + content = content.replace(prev_hash, new_hash) + f.seek(0) + f.write(content) + f.truncate() + + rubyenv_dir = Path(filename).parent + gemfile = rubyenv_dir / "Gemfile" + version_file_regex = re.compile(r'.*File\.expand_path\("\.\./(.*)", __FILE__\)') + gemfile_text = '' + plugin_file = repo.get_file('plugin.rb', rev) + plugin_file = plugin_file.replace(",\n", ", ") # fix split lines + for line in plugin_file.splitlines(): + if 'gem ' in line: + line = ','.join(filter(lambda x: ":require_name" not in x, line.split(','))) + 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 os.path.isfile(gemfile): + os.remove(gemfile) + + subprocess.check_output(['bundle', 'init'], cwd=rubyenv_dir) + os.chmod(gemfile, stat.S_IREAD | stat.S_IWRITE | stat.S_IRGRP | stat.S_IROTH) + + with open(gemfile, 'a') as f: + f.write(gemfile_text) + + subprocess.check_output(['bundle', 'lock', '--add-platform', 'ruby'], cwd=rubyenv_dir) + subprocess.check_output(['bundle', 'lock', '--update'], cwd=rubyenv_dir) + _remove_platforms(rubyenv_dir) + subprocess.check_output(['bundix'], cwd=rubyenv_dir) + + +if __name__ == '__main__': + cli() |