From 092e10c1c19bc85ce2d657ab25d2ee7a1b636915 Mon Sep 17 00:00:00 2001 From: Schneems Date: Tue, 3 Feb 2026 17:14:07 -0600 Subject: [PATCH 1/4] Upgrade Rails 7.0.8 to 8.1.2 and Ruby to 4.0.1 Rails upgrades: - 7.0.8 -> 7.1.5 -> 7.2.2.1 -> 8.0.2 -> 8.1.2 - Updated config.load_defaults to 8.1 - Fixed Rakefile for Rails 7.1+ test runner - Added maildown compatibility fix for Rails 7.1+ - Configured Active Job test adapter Ruby/gem compatibility: - Updated .ruby-version to 4.0.1 - Replaced sentry-raven with sentry-ruby + sentry-rails - Fixed local-time asset path for v3.x - Fixed Mocha mock for Ruby 3.x+ keyword args - Added ostruct gem for Ruby 4.0+ CI updates: - Use ruby-version-file to read from .ruby-version - Add concurrency control - Upgrade postgres to 16 --- .github/workflows/main.yml | 12 +- .gitignore | 1 - .ruby-version | 1 + Gemfile | 11 +- Gemfile.lock | 952 ++++++++++++------ Rakefile | 50 +- app/assets/javascripts/application.js.erb | 15 +- app/controllers/application_controller.rb | 3 +- app/controllers/repos_controller.rb | 2 +- app/jobs/sentry_job.rb | 2 +- app/mailers/user_mailer.rb | 2 +- app/models/doc_mailer_maker.rb | 2 +- app/models/git_branchname_generator.rb | 2 +- app/models/repo.rb | 2 +- config/application.rb | 2 +- config/environments/test.rb | 6 + config/initializers/feature_policy.rb | 1 + config/initializers/maildown_rails_71_fix.rb | 12 + .../new_framework_defaults_6_0.rb | 1 + .../new_framework_defaults_6_1.rb | 1 + .../new_framework_defaults_7_0.rb | 1 + config/initializers/sentry.rb | 11 +- config/routes.rb | 2 +- db/schema.rb | 160 +-- test/test_helper.rb | 1 + test/unit/git_hub_authenticator_test.rb | 2 +- 26 files changed, 797 insertions(+), 460 deletions(-) create mode 100644 .ruby-version create mode 100644 config/initializers/maildown_rails_71_fix.rb diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index eda1ce2b1..e0f421827 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,14 +4,10 @@ on: [push, pull_request] jobs: base: runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - ruby: ["3.2.9"] - name: Running tests with Ruby ${{ matrix.ruby }} + name: Tests services: postgres: - image: postgres:12 + image: postgres:16 env: POSTGRES_DB: triage_test POSTGRES_PASSWORD: password @@ -22,12 +18,11 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: ${{ matrix.ruby }} bundler-cache: true - name: Linting run: | @@ -40,4 +35,3 @@ jobs: run: bin/rake test - name: Ensure seed task still works run: RAILS_ENV=test bin/rails db:seed - diff --git a/.gitignore b/.gitignore index 79191135a..1601aa048 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ .DS_Store .rvmrc -.ruby-version .ruby-gemset diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 000000000..1454f6ed4 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +4.0.1 diff --git a/Gemfile b/Gemfile index bba751ac0..9774787c0 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ git_source(:github) do |repo_name| "https://github.com/#{repo_name}.git" end -ruby ">= 3.1", "< 3.3" +ruby file: ".ruby-version" git_source :github do |name| "https://github.com/#{name}.git" @@ -17,7 +17,7 @@ end if ENV["RAILS_MASTER"] == "1" gem "rails", git: "https://github.com/rails/rails.git" else - gem "rails", "7.0.8" + gem "rails", "8.1.2" end # API & Networking @@ -91,7 +91,8 @@ gem "prawn" gem "rack-mini-profiler" gem "rails-autoscale-web" gem "rbtrace" -gem "sentry-raven" +gem "sentry-ruby" +gem "sentry-rails" gem "scout_apm" gem "skylight" gem "stackprof" @@ -103,6 +104,7 @@ gem "sitemap_generator" gem "aws-sdk-s3" # Utilities +gem "ostruct" # Required for Ruby 4.0+ gem "rake" gem "rrrretry" @@ -119,7 +121,7 @@ end group :test do gem "capybara" gem "launchy" # Not essential but helpful for save_and_open_page - gem "minitest" + gem "minitest", "< 6.0" # Pin to < 6.0 for Rails 7.1 compatibility gem "mocha", require: false gem "rails-controller-testing" gem "simplecov", require: false @@ -133,6 +135,7 @@ group :development, :test do gem "dotenv-rails" gem "faker", require: false gem "pry" + gem "standard", ">= 1.35.1" gem "standardrb", require: false gem "rubocop-performance" end diff --git a/Gemfile.lock b/Gemfile.lock index 7068e79bd..5e2eb8bb3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,115 +1,130 @@ GEM remote: https://rubygems.org/ specs: - actioncable (7.0.8) - actionpack (= 7.0.8) - activesupport (= 7.0.8) + action_text-trix (2.1.16) + railties + actioncable (8.1.2) + actionpack (= 8.1.2) + activesupport (= 8.1.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8) - actionpack (= 7.0.8) - activejob (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) - mail (>= 2.7.1) - net-imap - net-pop - net-smtp - actionmailer (7.0.8) - actionpack (= 7.0.8) - actionview (= 7.0.8) - activejob (= 7.0.8) - activesupport (= 7.0.8) - mail (~> 2.5, >= 2.5.4) - net-imap - net-pop - net-smtp - rails-dom-testing (~> 2.0) - actionpack (7.0.8) - actionview (= 7.0.8) - activesupport (= 7.0.8) - rack (~> 2.0, >= 2.2.4) + zeitwerk (~> 2.6) + actionmailbox (8.1.2) + actionpack (= 8.1.2) + activejob (= 8.1.2) + activerecord (= 8.1.2) + activestorage (= 8.1.2) + activesupport (= 8.1.2) + mail (>= 2.8.0) + actionmailer (8.1.2) + actionpack (= 8.1.2) + actionview (= 8.1.2) + activejob (= 8.1.2) + activesupport (= 8.1.2) + mail (>= 2.8.0) + rails-dom-testing (~> 2.2) + actionpack (8.1.2) + actionview (= 8.1.2) + activesupport (= 8.1.2) + nokogiri (>= 1.8.5) + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8) - actionpack (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + useragent (~> 0.16) + actiontext (8.1.2) + action_text-trix (~> 2.1.15) + actionpack (= 8.1.2) + activerecord (= 8.1.2) + activestorage (= 8.1.2) + activesupport (= 8.1.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8) - activesupport (= 7.0.8) + actionview (8.1.2) + activesupport (= 8.1.2) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.8) - activesupport (= 7.0.8) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (8.1.2) + activesupport (= 8.1.2) globalid (>= 0.3.6) - activemodel (7.0.8) - activesupport (= 7.0.8) - activerecord (7.0.8) - activemodel (= 7.0.8) - activesupport (= 7.0.8) - activestorage (7.0.8) - actionpack (= 7.0.8) - activejob (= 7.0.8) - activerecord (= 7.0.8) - activesupport (= 7.0.8) + activemodel (8.1.2) + activesupport (= 8.1.2) + activerecord (8.1.2) + activemodel (= 8.1.2) + activesupport (= 8.1.2) + timeout (>= 0.4.0) + activestorage (8.1.2) + actionpack (= 8.1.2) + activejob (= 8.1.2) + activerecord (= 8.1.2) + activesupport (= 8.1.2) marcel (~> 1.0) - mini_mime (>= 1.1.0) - activesupport (7.0.8) - concurrent-ruby (~> 1.0, >= 1.0.2) + activesupport (8.1.2) + base64 + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) + json + logger (>= 1.4.2) minitest (>= 5.1) - tzinfo (~> 2.0) - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) - ast (2.4.2) - autoprefixer-rails (10.2.5.1) - execjs (> 0) - aws-eventstream (1.2.0) - aws-partitions (1.648.0) - aws-sdk-core (3.162.0) - aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.525.0) - aws-sigv4 (~> 1.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) + ast (2.4.3) + autoprefixer-rails (10.4.21.0) + execjs (~> 2) + aws-eventstream (1.4.0) + aws-partitions (1.1212.0) + aws-sdk-core (3.242.0) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 + bigdecimal jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.58.0) - aws-sdk-core (~> 3, >= 3.127.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.115.0) - aws-sdk-core (~> 3, >= 3.127.0) + logger + aws-sdk-kms (1.121.0) + aws-sdk-core (~> 3, >= 3.241.4) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.213.0) + aws-sdk-core (~> 3, >= 3.241.4) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.4) - aws-sigv4 (1.5.2) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) babel-source (5.8.35) babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) execjs (~> 2.0) - base64 (0.1.1) - bcrypt (3.1.19) - benchmark-ips (2.9.1) + base64 (0.3.0) + bcrypt (3.1.21) + benchmark-ips (2.14.0) + bigdecimal (3.3.1) bindex (0.8.1) bluecloth (2.2.0) - bootsnap (1.13.0) + bootsnap (1.22.0) msgpack (~> 1.2) bourbon (7.3.0) thor (~> 1.0) - builder (3.2.4) - capybara (3.37.1) + builder (3.3.0) + capybara (3.40.0) addressable matrix mini_mime (>= 0.1.3) - nokogiri (~> 1.8) + nokogiri (~> 1.11) rack (>= 1.6.0) rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) + childprocess (5.1.0) + logger (~> 1.5) coderay (1.1.3) coffee-rails (5.0.0) coffee-script (>= 2.2.0) @@ -118,88 +133,126 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.2.2) - connection_pool (2.4.1) - crack (0.4.5) + concurrent-ruby (1.3.6) + connection_pool (3.0.2) + crack (1.0.1) + bigdecimal rexml crass (1.0.6) - css_parser (1.7.1) + css_parser (1.21.1) addressable - dalli (3.2.6) - dead_end (4.0.0) - derailed_benchmarks (2.1.1) + dalli (4.2.0) + logger + date (3.5.1) + derailed_benchmarks (2.2.1) + base64 benchmark-ips (~> 2) - dead_end - get_process_mem (~> 0) + bigdecimal + drb + get_process_mem heapy (~> 0) + logger memory_profiler (>= 0, < 2) mini_histogram (>= 0.3.0) + mutex_m + ostruct rack (>= 1) rack-test rake (> 10, < 14) - ruby-statistics (>= 2.1) + ruby-statistics (>= 4.0.1) + ruby2_keywords thor (>= 0.19, < 2) - devise (4.9.3) + devise (5.0.0) bcrypt (~> 3.0) orm_adapter (~> 0.1) - railties (>= 4.1.0) + railties (>= 7.0) responders warden (~> 1.2.3) - docile (1.3.5) - dotenv (2.8.1) - dotenv-rails (2.8.1) - dotenv (= 2.8.1) - railties (>= 3.2) - erubi (1.12.0) + docile (1.4.1) + dotenv (3.2.0) + dotenv-rails (3.2.0) + dotenv (= 3.2.0) + railties (>= 6.1) + drb (2.2.3) + erb (6.0.1) + erubi (1.13.1) excon (1.3.2) logger - execjs (2.8.1) - faker (2.23.0) + execjs (2.10.0) + faker (3.6.0) i18n (>= 1.8.11, < 2) - faraday (0.17.6) - multipart-post (>= 1.2, < 3) - ffi (1.17.2) + faraday (2.14.0) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-net_http (3.4.2) + net-http (~> 0.5) + ffi (1.17.3-aarch64-linux-gnu) + ffi (1.17.3-aarch64-linux-musl) + ffi (1.17.3-arm-linux-gnu) + ffi (1.17.3-arm-linux-musl) + ffi (1.17.3-arm64-darwin) + ffi (1.17.3-x86_64-darwin) + ffi (1.17.3-x86_64-linux-gnu) + ffi (1.17.3-x86_64-linux-musl) flamegraph (0.9.5) - foreman (0.87.2) - get_process_mem (0.2.7) + foreman (0.90.0) + thor (~> 1.4) + get_process_mem (1.0.0) + bigdecimal (>= 2.0) ffi (~> 1.0) git_hub_bub (2.0.0) base64 excon rrrretry - globalid (1.1.0) - activesupport (>= 5.0) - hashdiff (1.0.1) - hashie (5.0.0) + globalid (1.3.0) + activesupport (>= 6.1) + hashdiff (1.2.1) + hashie (5.1.0) + logger heapy (0.2.0) thor - htmlentities (4.3.4) - i18n (1.14.1) + htmlentities (4.4.2) + i18n (1.14.8) concurrent-ruby (~> 1.0) - jmespath (1.6.1) - jquery-rails (4.6.0) + io-console (0.8.2) + irb (1.16.0) + pp (>= 0.6.0) + rdoc (>= 4.0.0) + reline (>= 0.4.2) + jmespath (1.6.2) + jquery-rails (4.6.1) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (2.6.3) - jwt (2.7.1) - kramdown (2.4.0) - rexml + json (2.18.1) + judoscale-rails (1.12.2) + judoscale-ruby (= 1.12.2) + railties + judoscale-ruby (1.12.2) + jwt (3.1.2) + base64 + kramdown (2.5.2) + rexml (>= 3.4.4) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - language_server-protocol (3.17.0.3) - launchy (2.5.0) - addressable (~> 2.7) + language_server-protocol (3.17.0.5) + launchy (3.1.1) + addressable (~> 2.8) + childprocess (~> 5.0) + logger (~> 1.6) lint_roller (1.1.0) - listen (3.7.0) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - local_time (2.1.0) + local_time (3.0.3) logger (1.7.0) - loofah (2.21.4) + loofah (2.25.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) - mail (2.8.1) + mail (2.9.0) + logger mini_mime (>= 0.1.1) net-imap net-pop @@ -207,174 +260,226 @@ GEM maildown (3.3.1) actionmailer (>= 4.0.0) kramdown-parser-gfm - marcel (1.0.2) - matrix (0.4.2) - memory_profiler (1.0.0) - method_source (1.0.0) - mime-types (3.3.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) + marcel (1.1.0) + matrix (0.4.3) + memory_profiler (1.1.0) + method_source (1.1.0) + mime-types (3.7.0) + logger + mime-types-data (~> 3.2025, >= 3.2025.0507) + mime-types-data (3.2026.0203) mini_histogram (0.3.1) mini_mime (1.1.5) - mini_portile2 (2.8.5) - minitest (5.20.0) - mocha (2.1.0) + minitest (5.27.0) + mocha (3.0.1) ruby2_keywords (>= 0.0.5) msgpack (1.8.0) - multi_xml (0.6.0) - multipart-post (2.3.0) - mustermann (3.0.0) + multi_xml (0.8.1) + bigdecimal (>= 3.1, < 5) + mustermann (3.0.4) ruby2_keywords (~> 0.0.1) + mutex_m (0.3.0) neat (1.7.4) bourbon (>= 4.0) sass (>= 3.3) - net-imap (0.3.1) + net-http (0.9.1) + uri (>= 0.11.1) + net-imap (0.6.2) + date net-protocol net-pop (0.1.2) net-protocol - net-protocol (0.1.3) + net-protocol (0.2.2) timeout - net-smtp (0.3.2) + net-smtp (0.5.1) net-protocol - nio4r (2.5.9) - nokogiri (1.15.4) - mini_portile2 (~> 2.8.2) + nio4r (2.7.5) + nokogiri (1.19.0-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.0-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.0-arm-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.0-arm-linux-musl) + racc (~> 1.4) + nokogiri (1.19.0-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.0-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.19.0-x86_64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.0-x86_64-linux-musl) racc (~> 1.4) normalize-rails (8.0.1) - oauth2 (2.0.9) - faraday (>= 0.17.3, < 3.0) - jwt (>= 1.0, < 3.0) + oauth2 (2.0.18) + faraday (>= 0.17.3, < 4.0) + jwt (>= 1.0, < 4.0) + logger (~> 1.2) multi_xml (~> 0.5) rack (>= 1.2, < 4) - snaky_hash (~> 2.0) - version_gem (~> 1.1) - oj (3.13.21) - omniauth (2.1.1) + snaky_hash (~> 2.0, >= 2.0.3) + version_gem (~> 1.1, >= 1.1.9) + oj (3.16.13) + bigdecimal (>= 3.0) + ostruct (>= 0.2) + omniauth (2.1.4) hashie (>= 3.4.6) + logger rack (>= 2.2.3) rack-protection omniauth-github (2.0.1) omniauth (~> 2.0) omniauth-oauth2 (~> 1.8) - omniauth-oauth2 (1.8.0) - oauth2 (>= 1.4, < 3) + omniauth-oauth2 (1.9.0) + oauth2 (>= 2.0.2, < 3) omniauth (~> 2.0) - omniauth-rails_csrf_protection (1.0.1) + omniauth-rails_csrf_protection (2.0.1) actionpack (>= 4.2) omniauth (~> 2.0) optimist (3.2.1) orm_adapter (0.5.0) - parallel (1.23.0) - parser (3.2.2.4) + ostruct (0.6.3) + parallel (1.27.0) + parser (3.3.10.1) ast (~> 2.4.1) racc - pdf-core (0.9.0) - pg (1.6.1) - prawn (2.4.0) - pdf-core (~> 0.9.0) - ttfunk (~> 1.7) - premailer (1.11.1) + pdf-core (0.10.0) + pg (1.6.3) + pg (1.6.3-aarch64-linux) + pg (1.6.3-aarch64-linux-musl) + pg (1.6.3-arm64-darwin) + pg (1.6.3-x86_64-darwin) + pg (1.6.3-x86_64-linux) + pg (1.6.3-x86_64-linux-musl) + pp (0.6.3) + prettyprint + prawn (2.5.0) + matrix (~> 0.4) + pdf-core (~> 0.10.0) + ttfunk (~> 1.8) + premailer (1.27.0) addressable - css_parser (>= 1.6.0) + css_parser (>= 1.19.0) htmlentities (>= 4.0.0) premailer-rails (1.12.0) actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - pry (0.14.1) + prettyprint (0.2.0) + prism (1.9.0) + pry (0.16.0) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (5.0.3) + reline (>= 0.6.0) + psych (5.3.1) + date + stringio + public_suffix (7.0.2) puma (7.0.0.pre1) nio4r (~> 2.0) - puma_worker_killer (0.3.1) - get_process_mem (~> 0.2) + puma_worker_killer (1.0.0) + bigdecimal (>= 2.0) + get_process_mem (>= 0.2) puma (>= 2.7) - racc (1.7.1) - rack (2.2.8) - rack-canonical-host (1.2.0) + racc (1.8.1) + rack (3.2.4) + rack-canonical-host (1.3.0) addressable (> 0, < 3) - rack (>= 1, < 4) - rack-mini-profiler (3.1.1) + rack (>= 1.6, < 4) + rack-mini-profiler (4.0.1) rack (>= 1.2.0) - rack-protection (3.1.0) - rack (~> 2.2, >= 2.2.4) - rack-test (2.1.0) + rack-protection (4.2.1) + base64 (>= 0.1.0) + logger (>= 1.6.0) + rack (>= 3.0.0, < 4) + rack-session (2.1.1) + base64 (>= 0.1.0) + rack (>= 3.0.0) + rack-test (2.2.0) rack (>= 1.3) - rack-timeout (0.6.3) - rails (7.0.8) - actioncable (= 7.0.8) - actionmailbox (= 7.0.8) - actionmailer (= 7.0.8) - actionpack (= 7.0.8) - actiontext (= 7.0.8) - actionview (= 7.0.8) - activejob (= 7.0.8) - activemodel (= 7.0.8) - activerecord (= 7.0.8) - activestorage (= 7.0.8) - activesupport (= 7.0.8) + rack-timeout (0.7.0) + rackup (2.3.1) + rack (>= 3) + rails (8.1.2) + actioncable (= 8.1.2) + actionmailbox (= 8.1.2) + actionmailer (= 8.1.2) + actionpack (= 8.1.2) + actiontext (= 8.1.2) + actionview (= 8.1.2) + activejob (= 8.1.2) + activemodel (= 8.1.2) + activerecord (= 8.1.2) + activestorage (= 8.1.2) + activesupport (= 8.1.2) bundler (>= 1.15.0) - railties (= 7.0.8) - rails-autoscale-core (1.1.0) - rails-autoscale-web (1.1.0) - rails-autoscale-core - railties + railties (= 8.1.2) + rails-autoscale-web (1.12.2) + judoscale-rails (= 1.12.2) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) activesupport (>= 5.0.1.rc1) - rails-dom-testing (2.2.0) + rails-dom-testing (2.3.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.6.0) + rails-html-sanitizer (1.6.2) loofah (~> 2.21) - nokogiri (~> 1.14) - railties (7.0.8) - actionpack (= 7.0.8) - activesupport (= 7.0.8) - method_source + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) + railties (8.1.2) + actionpack (= 8.1.2) + activesupport (= 8.1.2) + irb (~> 1.13) + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) + thor (~> 1.0, >= 1.2.2) + tsort (>= 0.2) + zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.1.0) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) + rake (13.3.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) ffi (~> 1.0) - rbtrace (0.5.2) + rbtrace (0.5.3) ffi (>= 1.0.6) msgpack (>= 0.4.3) optimist (>= 3.0.0) - redis-client (0.18.0) + rdoc (7.1.0) + erb + psych (>= 4.0.0) + tsort + redis-client (0.26.4) connection_pool - regexp_parser (2.8.2) + regexp_parser (2.11.3) + reline (0.6.3) + io-console (~> 0.5) render_async (2.1.11) - responders (3.1.1) - actionpack (>= 5.2) - railties (>= 5.2) - rexml (3.2.6) + responders (3.2.0) + actionpack (>= 7.0) + railties (>= 7.0) + rexml (3.4.4) rrrretry (1.0.0) - rubocop (1.56.4) - base64 (~> 0.1.1) + rubocop (1.82.1) json (~> 2.3) - language_server-protocol (>= 3.17.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) parallel (~> 1.10) - parser (>= 3.2.2.3) + parser (>= 3.3.0.2) 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) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.48.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.30.0) - parser (>= 3.2.1.0) - rubocop-performance (1.19.1) - rubocop (>= 1.7.0, < 2.0) - rubocop-ast (>= 0.4.0) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.49.0) + parser (>= 3.3.7.2) + prism (~> 1.7) + rubocop-performance (1.26.1) + lint_roller (~> 1.1) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.47.1, < 2.0) ruby-progressbar (1.13.0) - ruby-statistics (2.1.3) + ruby-statistics (4.1.0) ruby2_keywords (0.0.5) sass (3.7.4) sass-listen (~> 4.0.0) @@ -389,84 +494,96 @@ GEM sprockets (> 3.0) sprockets-rails tilt - scout_apm (5.3.1) + scout_apm (6.0.2) parser - sentry-raven (2.13.0) - faraday (>= 0.7.6, < 1.0) - sidekiq (7.1.6) - concurrent-ruby (< 2) - connection_pool (>= 2.3.0) - rack (>= 2.2.4) - redis-client (>= 0.14.0) - simplecov (0.21.2) + securerandom (0.4.1) + sentry-rails (6.3.0) + railties (>= 5.2.0) + sentry-ruby (~> 6.3.0) + sentry-ruby (6.3.0) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.0.2) + sidekiq (8.1.0) + connection_pool (>= 3.0.0) + json (>= 2.16.0) + logger (>= 1.7.0) + rack (>= 3.2.0) + redis-client (>= 0.26.0) + 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.2) - simpleidn (0.2.1) - unf (~> 0.1.4) - sinatra (3.1.0) + simplecov-html (0.13.2) + simplecov_json_formatter (0.1.4) + simpleidn (0.2.3) + sinatra (4.2.1) + logger (>= 1.6.0) mustermann (~> 3.0) - rack (~> 2.2, >= 2.2.4) - rack-protection (= 3.1.0) + rack (>= 3.0.0, < 4) + rack-protection (= 4.2.1) + rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sitemap_generator (6.1.2) + sitemap_generator (6.3.0) builder (~> 3.0) - skylight (6.0.1) - activesupport (>= 5.2.0) - slim (4.1.0) - temple (>= 0.7.6, < 0.9) - tilt (>= 2.0.6, < 2.1) - slim-rails (3.6.3) + skylight (7.0.0) + activesupport (>= 7.1.0) + slim (5.2.1) + temple (~> 0.10.0) + tilt (>= 2.1.0) + slim-rails (4.0.0) actionpack (>= 3.1) railties (>= 3.1) slim (>= 3.0, < 6.0, != 5.0.0) - snaky_hash (2.0.1) - hashie - version_gem (~> 1.1, >= 1.1.1) - sprockets (4.1.1) + snaky_hash (2.0.3) + hashie (>= 0.1.0, < 6) + version_gem (>= 1.1.8, < 3) + sprockets (4.2.2) concurrent-ruby (~> 1.0) - rack (> 1, < 3) - sprockets-rails (3.4.2) - actionpack (>= 5.2) - activesupport (>= 5.2) + logger + rack (>= 2.2.4, < 4) + sprockets-rails (3.5.2) + actionpack (>= 6.1) + activesupport (>= 6.1) sprockets (>= 3.0.0) - stackprof (0.2.17) - standard (1.31.2) + stackprof (0.2.27) + standard (1.53.0) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.0) - rubocop (~> 1.56.4) + rubocop (~> 1.82.0) standard-custom (~> 1.0.0) - standard-performance (~> 1.2) + standard-performance (~> 1.8) standard-custom (1.0.2) lint_roller (~> 1.0) rubocop (~> 1.50) - standard-performance (1.2.1) + standard-performance (1.9.0) lint_roller (~> 1.1) - rubocop-performance (~> 1.19.1) + rubocop-performance (~> 1.26.0) standardrb (1.0.1) standard - temple (0.8.2) - test-prof (1.0.10) - thor (1.3.0) - tilt (2.0.11) - timeout (0.3.0) - ttfunk (1.7.0) + stringio (3.2.0) + temple (0.10.4) + test-prof (1.5.2) + thor (1.5.0) + tilt (2.7.0) + timeout (0.6.0) + tsort (0.2.0) + ttfunk (1.8.0) + bigdecimal (~> 3.1) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - uglifier (4.2.0) + uglifier (4.2.1) execjs (>= 0.3.0, < 3) - unf (0.1.4) - unf_ext - unf_ext (0.0.7.7) - unicode-display_width (2.5.0) - valid_email (0.1.4) + unicode-display_width (3.2.0) + unicode-emoji (~> 4.1) + unicode-emoji (4.2.0) + uri (1.1.1) + useragent (0.16.11) + valid_email (0.2.1) activemodel mail (>= 2.6.1) simpleidn - vcr (6.1.0) - version_gem (1.1.3) + vcr (6.4.0) + version_gem (1.1.9) warden (1.2.9) rack (>= 2.0.9) web-console (4.2.1) @@ -474,25 +591,33 @@ GEM activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) - webmock (3.18.1) + webmock (3.26.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webrick (1.7.0) - websocket-driver (0.7.6) + websocket-driver (0.8.0) + base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - wicked (1.3.4) + wicked (2.0.0) railties (>= 3.0.7) - will_paginate (4.0.0) + will_paginate (4.0.1) xpath (3.2.0) nokogiri (~> 1.8) - yard (0.9.28) - webrick (~> 1.7.0) - zeitwerk (2.6.12) + yard (0.9.38) + zeitwerk (2.7.4) PLATFORMS - ruby + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-musl + arm64-darwin + x86_64-darwin + x86_64-linux + x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES autoprefixer-rails @@ -520,7 +645,7 @@ DEPENDENCIES matrix memory_profiler mime-types - minitest + minitest (< 6.0) mocha neat (~> 1.7) normalize-rails @@ -528,6 +653,7 @@ DEPENDENCIES omniauth omniauth-github omniauth-rails_csrf_protection + ostruct pg prawn premailer-rails @@ -537,7 +663,7 @@ DEPENDENCIES rack-canonical-host rack-mini-profiler rack-timeout - rails (= 7.0.8) + rails (= 8.1.2) rails-autoscale-web rails-controller-testing rake @@ -548,7 +674,8 @@ DEPENDENCIES sassc sassc-rails scout_apm - sentry-raven + sentry-rails + sentry-ruby sidekiq simplecov sinatra @@ -558,6 +685,7 @@ DEPENDENCIES sprockets sprockets-rails stackprof + standard (>= 1.35.1) standardrb test-prof uglifier (>= 1.0.3) @@ -569,8 +697,252 @@ DEPENDENCIES will_paginate yard (~> 0.9.28) +CHECKSUMS + action_text-trix (2.1.16) sha256=f645a2c21821b8449fd1d6770708f4031c91a2eedf9ef476e9be93c64e703a8a + actioncable (8.1.2) sha256=dc31efc34cca9cdefc5c691ddb8b4b214c0ea5cd1372108cbc1377767fb91969 + actionmailbox (8.1.2) sha256=058b2fb1980e5d5a894f675475fcfa45c62631103d5a2596d9610ec81581889b + actionmailer (8.1.2) sha256=f4c1d2060f653bfe908aa7fdc5a61c0e5279670de992146582f2e36f8b9175e9 + actionpack (8.1.2) sha256=ced74147a1f0daafaa4bab7f677513fd4d3add574c7839958f7b4f1de44f8423 + actiontext (8.1.2) sha256=0bf57da22a9c19d970779c3ce24a56be31b51c7640f2763ec64aa72e358d2d2d + actionview (8.1.2) sha256=80455b2588911c9b72cec22d240edacb7c150e800ef2234821269b2b2c3e2e5b + activejob (8.1.2) sha256=908dab3713b101859536375819f4156b07bdf4c232cc645e7538adb9e302f825 + activemodel (8.1.2) sha256=e21358c11ce68aed3f9838b7e464977bc007b4446c6e4059781e1d5c03bcf33e + activerecord (8.1.2) sha256=acfbe0cadfcc50fa208011fe6f4eb01cae682ebae0ef57145ba45380c74bcc44 + activestorage (8.1.2) sha256=8a63a48c3999caeee26a59441f813f94681fc35cc41aba7ce1f836add04fba76 + activesupport (8.1.2) sha256=88842578ccd0d40f658289b0e8c842acfe9af751afee2e0744a7873f50b6fdae + addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057 + ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383 + autoprefixer-rails (10.4.21.0) sha256=71b48caf850fc25275abd96f0b1fdd51c82e1c9b99cd30085cacb05da9c70235 + aws-eventstream (1.4.0) sha256=116bf85c436200d1060811e6f5d2d40c88f65448f2125bc77ffce5121e6e183b + aws-partitions (1.1212.0) sha256=fa4f5de905cc2b6587747e5b1e2d215e610fa0449c70b9069e3c928a15cc2a15 + aws-sdk-core (3.242.0) sha256=c17b3003acc78d80c1a8437b285a1cfc5e4d7749ce7821cf3071e847535a29a0 + aws-sdk-kms (1.121.0) sha256=d563c1cfb4b5754efbc671216c8eca875338748adad0f42518c28dfa0a2d01e0 + aws-sdk-s3 (1.213.0) sha256=af596ccf544582406db610e95cc9099276eaf03142f57a2f30f76940e598e50d + aws-sigv4 (1.12.1) sha256=6973ff95cb0fd0dc58ba26e90e9510a2219525d07620c8babeb70ef831826c00 + babel-source (5.8.35) sha256=79ef222a9dcb867ac2efa3b0da35b4bcb15a4bfa67b6b2dcbf1e9a29104498d9 + babel-transpiler (0.7.0) sha256=4c06f4ad9e8e1cabe94f99e11df2f140bb72aca9ba067dbb49dc14d9b98d1570 + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + bcrypt (3.1.21) sha256=5964613d750a42c7ee5dc61f7b9336fb6caca429ba4ac9f2011609946e4a2dcf + benchmark-ips (2.14.0) sha256=b72bc8a65d525d5906f8cd94270dccf73452ee3257a32b89fbd6684d3e8a9b1d + bigdecimal (3.3.1) sha256=eaa01e228be54c4f9f53bf3cc34fe3d5e845c31963e7fcc5bedb05a4e7d52218 + bindex (0.8.1) sha256=7b1ecc9dc539ed8bccfc8cb4d2732046227b09d6f37582ff12e50a5047ceb17e + bluecloth (2.2.0) sha256=b30128433f6a83909b0cb52c3e001ee002ca8760d9b433ecc5ced308f7e703f9 + bootsnap (1.22.0) sha256=5820c9d42c2efef095bee6565484bdc511f1223bf950140449c9385ae775793e + bourbon (7.3.0) sha256=8a150f97d574ef13d4b50a1c936e5059efe2ae2483de13a7f265e5129c6f98b7 + builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f + capybara (3.40.0) sha256=42dba720578ea1ca65fd7a41d163dd368502c191804558f6e0f71b391054aeef + childprocess (5.1.0) sha256=9a8d484be2fd4096a0e90a0cd3e449a05bc3aa33f8ac9e4d6dcef6ac1455b6ec + coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b + coffee-rails (5.0.0) sha256=5daaa1ba51fd4907c98a333b6a9e7c1a99b1fff57fcef999b6c62d813cb91a9c + coffee-script (2.4.1) sha256=82fe281e11b93c8117b98c5ea8063e71741870f1c4fbb27177d7d6333dd38765 + coffee-script-source (1.12.2) sha256=e12b16fd8927fbbf8b87cb2e9a85a6cf457c6881cc7ff8b1af15b31f70da07a4 + concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab + connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a + crack (1.0.1) sha256=ff4a10390cd31d66440b7524eb1841874db86201d5b70032028553130b6d4c7e + crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d + css_parser (1.21.1) sha256=6cfd3ffc0a97333b39d2b1b49c95397b05e0e3b684d68f77ec471ba4ec2ef7c7 + dalli (4.2.0) sha256=18608875962947fb0318cd49b6dc06c8b10f6a009a7f6bf91df7bb9c17be16e8 + date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0 + derailed_benchmarks (2.2.1) sha256=654280664fded41c9cd8fc27fc0fcfaf096023afab90eb4ac1185ba70c5d4439 + devise (5.0.0) sha256=3ff37d39ccedf5d7dbe5971214d81fdf7a89b32d7071857f6585a0f7863f056b + docile (1.4.1) sha256=96159be799bfa73cdb721b840e9802126e4e03dfc26863db73647204c727f21e + dotenv (3.2.0) sha256=e375b83121ea7ca4ce20f214740076129ab8514cd81378161f11c03853fe619d + dotenv-rails (3.2.0) sha256=657e25554ba622ffc95d8c4f1670286510f47f2edda9f68293c3f661b303beab + drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373 + erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5 + erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9 + excon (1.3.2) sha256=a089babe98638e58042a7d542b2bbd183304527e33d612b6dde22fa491a544a5 + execjs (2.10.0) sha256=6bcb8be8f0052ff9d370b65d1c080f2406656e150452a0abdb185a133048450d + faker (3.6.0) sha256=4ce80bf91c8d09bbfff4c5596690bf862d60eac420f86737ca8ce12a54dc464a + faraday (2.14.0) sha256=8699cfe5d97e55268f2596f9a9d5a43736808a943714e3d9a53e6110593941cd + faraday-net_http (3.4.2) sha256=f147758260d3526939bf57ecf911682f94926a3666502e24c69992765875906c + ffi (1.17.3-aarch64-linux-gnu) sha256=28ad573df26560f0aedd8a90c3371279a0b2bd0b4e834b16a2baa10bd7a97068 + ffi (1.17.3-aarch64-linux-musl) sha256=020b33b76775b1abacc3b7d86b287cef3251f66d747092deec592c7f5df764b2 + ffi (1.17.3-arm-linux-gnu) sha256=5bd4cea83b68b5ec0037f99c57d5ce2dd5aa438f35decc5ef68a7d085c785668 + ffi (1.17.3-arm-linux-musl) sha256=0d7626bb96265f9af78afa33e267d71cfef9d9a8eb8f5525344f8da6c7d76053 + ffi (1.17.3-arm64-darwin) sha256=0c690555d4cee17a7f07c04d59df39b2fba74ec440b19da1f685c6579bb0717f + ffi (1.17.3-x86_64-darwin) sha256=1f211811eb5cfaa25998322cdd92ab104bfbd26d1c4c08471599c511f2c00bb5 + ffi (1.17.3-x86_64-linux-gnu) sha256=3746b01f677aae7b16dc1acb7cb3cc17b3e35bdae7676a3f568153fb0e2c887f + ffi (1.17.3-x86_64-linux-musl) sha256=086b221c3a68320b7564066f46fed23449a44f7a1935f1fe5a245bd89d9aea56 + flamegraph (0.9.5) sha256=a683020637ffa0e14a72640fa41babf14d926bfeaed87e31907cfd06ab2de8dc + foreman (0.90.0) sha256=ff675e2d47b607ac58714a6d4ac3e1ee8f06f41d8db084531c31961e2c3f117c + get_process_mem (1.0.0) sha256=d54024f3bcbf776a4d6e0155ec2b21bc3ba44e2fd158c4c00c80aa8a36e0b4aa + git_hub_bub (2.0.0) sha256=05633fd47681fc6c02812b7a2e2ec8606a5472d4f1c43133f8dd2bf498b2fbf2 + globalid (1.3.0) sha256=05c639ad6eb4594522a0b07983022f04aa7254626ab69445a0e493aa3786ff11 + hashdiff (1.2.1) sha256=9c079dbc513dfc8833ab59c0c2d8f230fa28499cc5efb4b8dd276cf931457cd1 + hashie (5.1.0) sha256=c266471896f323c446ea8207f8ffac985d2718df0a0ba98651a3057096ca3870 + heapy (0.2.0) sha256=74141e845d61ffc7c1e8bf8b127c8cf94544ec7a1181aec613288682543585ea + htmlentities (4.4.2) sha256=bbafbdf69f2eca9262be4efef7e43e6a1de54c95eb600f26984f71d2fe96c5c3 + i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 + io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc + irb (1.16.0) sha256=2abe56c9ac947cdcb2f150572904ba798c1e93c890c256f8429981a7675b0806 + jmespath (1.6.2) sha256=238d774a58723d6c090494c8879b5e9918c19485f7e840f2c1c7532cf84ebcb1 + jquery-rails (4.6.1) sha256=619f3496cdcdeaae1fd6dafa52dbac3fc45b745d4e09712da4184a16b3a8d9c0 + json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986 + judoscale-rails (1.12.2) sha256=ff2bd1023b39ad0e649d71883d81de7e240158ac215031b5fdba8217dfc1c85b + judoscale-ruby (1.12.2) sha256=c944a97da135e2681df60cc8edbf3f182bdc9c38e00577539a915169dcb0e909 + jwt (3.1.2) sha256=af6991f19a6bb4060d618d9add7a66f0eeb005ac0bc017cd01f63b42e122d535 + kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa + kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 + language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc + launchy (3.1.1) sha256=72b847b5cc961589dde2c395af0108c86ff0119f42d4648d25b5440ebb10059e + lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 + listen (3.10.0) sha256=c6e182db62143aeccc2e1960033bebe7445309c7272061979bb098d03760c9d2 + local_time (3.0.3) sha256=c69a8974d993fdf6e60db02977ed23c070f203dcb3a1ff0de52ad3d2393f8303 + logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 + loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6 + mail (2.9.0) sha256=6fa6673ecd71c60c2d996260f9ee3dd387d4673b8169b502134659ece6d34941 + maildown (3.3.1) sha256=64d457974dbc9277adadf94b9e6cdde2cc1c593b17d3b2af80234b8e33054d51 + marcel (1.1.0) sha256=fdcfcfa33cc52e93c4308d40e4090a5d4ea279e160a7f6af988260fa970e0bee + matrix (0.4.3) sha256=a0d5ab7ddcc1973ff690ab361b67f359acbb16958d1dc072b8b956a286564c5b + memory_profiler (1.1.0) sha256=79a17df7980a140c83c469785905409d3027ca614c42c086089d128b805aa8f8 + method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5 + mime-types (3.7.0) sha256=dcebf61c246f08e15a4de34e386ebe8233791e868564a470c3fe77c00eed5e56 + mime-types-data (3.2026.0203) sha256=54353d693af028847391c28361c07d4b8b689cad78c3e1cc272fb1205c6d2a2f + mini_histogram (0.3.1) sha256=6a114b504e4618b0e076cc672996036870f7cc6f16b8e5c25c0c637726d2dd94 + mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef + minitest (5.27.0) sha256=2d3b17f8a36fe7801c1adcffdbc38233b938eb0b4966e97a6739055a45fa77d5 + mocha (3.0.1) sha256=74f82c5959e3df6cfa2757d60aa420dcb151ac7c5eb61dcebf1cd4e368ed7469 + msgpack (1.8.0) sha256=e64ce0212000d016809f5048b48eb3a65ffb169db22238fb4b72472fecb2d732 + multi_xml (0.8.1) sha256=addba0290bac34e9088bfe73dc4878530297a82a7bbd66cb44dcd0a4b86edf5a + mustermann (3.0.4) sha256=85fadcb6b3c6493a8b511b42426f904b7f27b282835502233dd154daab13aa22 + mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 + neat (1.7.4) sha256=a509f5c2f846361f0ff34600c750b3d8235d15ff2a2d6d4efb626f67c3e1b535 + net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996 + net-imap (0.6.2) sha256=08caacad486853c61676cca0c0c47df93db02abc4a8239a8b67eb0981428acc6 + net-pop (0.1.2) sha256=848b4e982013c15b2f0382792268763b748cce91c9e91e36b0f27ed26420dff3 + net-protocol (0.2.2) sha256=aa73e0cba6a125369de9837b8d8ef82a61849360eba0521900e2c3713aa162a8 + net-smtp (0.5.1) sha256=ed96a0af63c524fceb4b29b0d352195c30d82dd916a42f03c62a3a70e5b70736 + nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1 + nokogiri (1.19.0-aarch64-linux-gnu) sha256=11a97ecc3c0e7e5edcf395720b10860ef493b768f6aa80c539573530bc933767 + nokogiri (1.19.0-aarch64-linux-musl) sha256=eb70507f5e01bc23dad9b8dbec2b36ad0e61d227b42d292835020ff754fb7ba9 + nokogiri (1.19.0-arm-linux-gnu) sha256=572a259026b2c8b7c161fdb6469fa2d0edd2b61cd599db4bbda93289abefbfe5 + nokogiri (1.19.0-arm-linux-musl) sha256=23ed90922f1a38aed555d3de4d058e90850c731c5b756d191b3dc8055948e73c + nokogiri (1.19.0-arm64-darwin) sha256=0811dfd936d5f6dd3f6d32ef790568bf29b2b7bead9ba68866847b33c9cf5810 + nokogiri (1.19.0-x86_64-darwin) sha256=1dad56220b603a8edb9750cd95798bffa2b8dd9dd9aa47f664009ee5b43e3067 + nokogiri (1.19.0-x86_64-linux-gnu) sha256=f482b95c713d60031d48c44ce14562f8d2ce31e3a9e8dd0ccb131e9e5a68b58c + nokogiri (1.19.0-x86_64-linux-musl) sha256=1c4ca6b381622420073ce6043443af1d321e8ed93cc18b08e2666e5bd02ffae4 + normalize-rails (8.0.1) sha256=65d47ad8a141299d1abee1bd5f7dfc84051e1176e49d91e1f27c95b90ee5f11f + oauth2 (2.0.18) sha256=bacf11e470dfb963f17348666d0a75c7b29ca65bc48fd47be9057cf91a403287 + oj (3.16.13) sha256=b114bcb83ef884f1736b3112108f77cf9ca90aa8111a775318cc5d7a6a1e0303 + omniauth (2.1.4) sha256=42a05b0496f0d22e1dd85d42aaf602f064e36bb47a6826a27ab55e5ba608763c + omniauth-github (2.0.1) sha256=8ff8e70ac6d6db9d52485eef52cfa894938c941496e66b52b5e2773ade3ccad4 + omniauth-oauth2 (1.9.0) sha256=ed15f6d9d20991807ce114cc5b9c1453bce3645b64e51c68c90cff5ff153fee8 + omniauth-rails_csrf_protection (2.0.1) sha256=c6e3204d7e3925bb537cb52d50fdfc9f05293f1a9d87c5d4ab4ca3a39ba8c32d + optimist (3.2.1) sha256=8cf8a0fd69f3aa24ab48885d3a666717c27bc3d9edd6e976e18b9d771e72e34e + orm_adapter (0.5.0) sha256=aa5d0be5d540cbb46d3a93e88061f4ece6a25f6e97d6a47122beb84fe595e9b9 + ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 + parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130 + parser (3.3.10.1) sha256=06f6a725d2cd91e5e7f2b7c32ba143631e1f7c8ae2fb918fc4cebec187e6a688 + pdf-core (0.10.0) sha256=0a5d101e2063c01e3f941e1ee47cbb97f1adfc1395b58372f4f65f1300f3ce91 + pg (1.6.3) sha256=1388d0563e13d2758c1089e35e973a3249e955c659592d10e5b77c468f628a99 + pg (1.6.3-aarch64-linux) sha256=0698ad563e02383c27510b76bf7d4cd2de19cd1d16a5013f375dd473e4be72ea + pg (1.6.3-aarch64-linux-musl) sha256=06a75f4ea04b05140146f2a10550b8e0d9f006a79cdaf8b5b130cde40e3ecc2c + pg (1.6.3-arm64-darwin) sha256=7240330b572e6355d7c75a7de535edb5dfcbd6295d9c7777df4d9dddfb8c0e5f + pg (1.6.3-x86_64-darwin) sha256=ee2e04a17c0627225054ffeb43e31a95be9d7e93abda2737ea3ce4a62f2729d6 + pg (1.6.3-x86_64-linux) sha256=5d9e188c8f7a0295d162b7b88a768d8452a899977d44f3274d1946d67920ae8d + pg (1.6.3-x86_64-linux-musl) sha256=9c9c90d98c72f78eb04c0f55e9618fe55d1512128e411035fe229ff427864009 + pp (0.6.3) sha256=2951d514450b93ccfeb1df7d021cae0da16e0a7f95ee1e2273719669d0ab9df6 + prawn (2.5.0) sha256=f4e20e3b4f30bf5b9ae37dad15eb421831594553aa930b2391b0fa0a99c43cb6 + premailer (1.27.0) sha256=0fe2348cd82738855c482b31c915a06ecb1d3ad004578c19042905196ddbd1e7 + premailer-rails (1.12.0) sha256=c13815d161b9bc7f7d3d81396b0bb0a61a90fa9bd89931548bf4e537c7710400 + prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193 + prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85 + pry (0.16.0) sha256=d76c69065698ed1f85e717bd33d7942c38a50868f6b0673c636192b3d1b6054e + psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974 + public_suffix (7.0.2) sha256=9114090c8e4e7135c1fd0e7acfea33afaab38101884320c65aaa0ffb8e26a857 + puma (7.0.0.pre1) sha256=d8b243a56a52f067a31b9366ae8f8870c9e914aed3cbc5103b41257dc4bd6b4b + puma_worker_killer (1.0.0) sha256=12dc54feecb1758df70d9f4788841423c5416aa370feda4e51e2112a5ff909e9 + racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f + rack (3.2.4) sha256=5d74b6f75082a643f43c1e76b419c40f0e5527fcfee1e669ac1e6b73c0ccb6f6 + rack-canonical-host (1.3.0) sha256=496a470cfce8a49e617fea98a53f34fe01a4461083ecef92b727599c1825c590 + rack-mini-profiler (4.0.1) sha256=485810c23211f908196c896ea10cad72ed68780ee2998bec1f1dfd7558263d78 + rack-protection (4.2.1) sha256=cf6e2842df8c55f5e4d1a4be015e603e19e9bc3a7178bae58949ccbb58558bac + rack-session (2.1.1) sha256=0b6dc07dea7e4b583f58a48e8b806d4c9f1c6c9214ebc202ec94562cbea2e4e9 + rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463 + rack-timeout (0.7.0) sha256=757337e9793cca999bb73a61fe2a7d4280aa9eefbaf787ce3b98d860749c87d9 + rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868 + rails (8.1.2) sha256=5069061b23dfa8706b9f0159ae8b9d35727359103178a26962b868a680ba7d95 + rails-autoscale-web (1.12.2) sha256=90999f42a55edbd3474aaafd6c205f69d8ab239ae684414fd956e506094f10be + rails-controller-testing (1.0.5) sha256=741448db59366073e86fc965ba403f881c636b79a2c39a48d0486f2607182e94 + rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d + rails-html-sanitizer (1.6.2) sha256=35fce2ca8242da8775c83b6ba9c1bcaad6751d9eb73c1abaa8403475ab89a560 + railties (8.1.2) sha256=1289ece76b4f7668fc46d07e55cc992b5b8751f2ad85548b7da351b8c59f8055 + rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a + rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c + rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe + rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e + rbtrace (0.5.3) sha256=c432292f305d9ab12fd47d9722e0d5210d983758a951fe6107c36cc955cb923f + rdoc (7.1.0) sha256=494899df0706c178596ca6e1d50f1b7eb285a9b2aae715be5abd742734f17363 + redis-client (0.26.4) sha256=3ad70beff5da2653e02dfeae996e7d8d7147a558da12b16b2282ad345e4c7120 + regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4 + reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835 + render_async (2.1.11) sha256=fb82cd461e24908d5c8a4f939a262dd60b0a971d5069d32ee7be280d79c266df + responders (3.2.0) sha256=89c2d6ac0ae16f6458a11524cae4a8efdceba1a3baea164d28ee9046bd3df55a + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rrrretry (1.0.0) sha256=3c60784501701a49d8ad499af7e76dbddf9a8be916beffe885bd0f443ad1c749 + rubocop (1.82.1) sha256=09f1a6a654a960eda767aebea33e47603080f8e9c9a3f019bf9b94c9cab5e273 + rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd + rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834 + ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 + ruby-statistics (4.1.0) sha256=7d697abd5dc4e6141d21ecb4165482807564f11bbe154cf1c60a2677b507f2a9 + ruby2_keywords (0.0.5) sha256=ffd13740c573b7301cf7a2e61fc857b2a8e3d3aff32545d6f8300d8bae10e3ef + sass (3.7.4) sha256=808b0d39053aa69068df939e24671fe84fd5a9d3314486e1a1457d0934a4255d + sass-listen (4.0.0) sha256=ae9dcb76dd3e234329e5ba6e213f48e532c5a3e7b0b4d8a87f13aaca0cc18377 + sassc (2.4.0) sha256=4c60a2b0a3b36685c83b80d5789401c2f678c1652e3288315a1551d811d9f83e + sassc-rails (2.1.2) sha256=5f4fdf3881fc9bdc8e856ffbd9850d70a2878866feae8114aa45996179952db5 + scout_apm (6.0.2) sha256=ddd440eaff18526b61c098d33cb0f4e4aaea9c0fa5a2d3b43bac08b7e887d6be + securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 + sentry-rails (6.3.0) sha256=2ea15aba6d5b08621764b3dab7d87af34823a890813d5023e0e07ae3d17a3eef + sentry-ruby (6.3.0) sha256=14b5806b25d5101002959e21ed1970cb48c038bda3ac0713c1b9a3f1b746f2a5 + sidekiq (8.1.0) sha256=6bde5eaee9e4d7b1121e97ebd585273627fb32b1f870a47893723572479ad1e4 + simplecov (0.22.0) sha256=fe2622c7834ff23b98066bb0a854284b2729a569ac659f82621fc22ef36213a5 + simplecov-html (0.13.2) sha256=bd0b8e54e7c2d7685927e8d6286466359b6f16b18cb0df47b508e8d73c777246 + simplecov_json_formatter (0.1.4) sha256=529418fbe8de1713ac2b2d612aa3daa56d316975d307244399fa4838c601b428 + simpleidn (0.2.3) sha256=08ce96f03fa1605286be22651ba0fc9c0b2d6272c9b27a260bc88be05b0d2c29 + sinatra (4.2.1) sha256=b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080 + sitemap_generator (6.3.0) sha256=1d803cbf03c44736bea05b9e3363d3523fec4e24f3abedad294d9c57cab994f3 + skylight (7.0.0) sha256=afbbe711b13493eb2db795b1b533b02f9f247e0a07e6b31ae0169ef977dcbbd0 + slim (5.2.1) sha256=72351dff7e2ff20e2d5c393cfc385bb9142cef5db059141628fd7163ac3c13e7 + slim-rails (4.0.0) sha256=2cfee5c4ba00d4d935676db1e74a05dbaf9dd6f789903a1006e3bb687bbe36e2 + snaky_hash (2.0.3) sha256=25a3d299566e8153fb02fa23fd9a9358845950f7a523ddbbe1fa1e0d79a6d456 + sprockets (4.2.2) sha256=761e5a49f1c288704763f73139763564c845a8f856d52fba013458f8af1b59b1 + sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e + stackprof (0.2.27) sha256=aff6d28656c852e74cf632cc2046f849033dc1dedffe7cb8c030d61b5745e80c + standard (1.53.0) sha256=f3c9493385db7079d0abce6f7582f553122156997b81258cd361d3480eeacf9c + standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b + standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 + standardrb (1.0.1) sha256=7a1328be429f4e97a97e357e2446f3509e80164a59ff00bc6a4daa78e3351f2c + stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + temple (0.10.4) sha256=b7a1e94b6f09038ab0b6e4fe0126996055da2c38bec53a8a336f075748fff72c + test-prof (1.5.2) sha256=185839fb7d3745b3770ec48e3e5718eff9e28c327a50a1e18a3a9ef1060f8576 + thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 + tilt (2.7.0) sha256=0d5b9ba69f6a36490c64b0eee9f6e9aad517e20dcc848800a06eb116f08c6ab3 + timeout (0.6.0) sha256=6d722ad619f96ee383a0c557ec6eb8c4ecb08af3af62098a0be5057bf00de1af + tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f + ttfunk (1.8.0) sha256=a7cbc7e489cc46e979dde04d34b5b9e4f5c8f1ee5fc6b1a7be39b829919d20ca + tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b + uglifier (4.2.1) sha256=75d42b81b10bfd21e7a427fabb1d49ff5ea7bda3c4a5039ddb2a78d194c6f5aa + unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 + unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6 + useragent (0.16.11) sha256=700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844 + valid_email (0.2.1) sha256=79b06a7cc67a4aaeac731c940df775c4092623c455667e86d2a706acd3e9604f + vcr (6.4.0) sha256=077ac92cc16efc5904eb90492a18153b5e6ca5398046d8a249a7c96a9ea24ae6 + version_gem (1.1.9) sha256=0c1a0962ae543c84a00889bb018d9f14d8f8af6029d26b295d98774e3d2eb9a4 + warden (1.2.9) sha256=46684f885d35a69dbb883deabf85a222c8e427a957804719e143005df7a1efd0 + web-console (4.2.1) sha256=e7bcf37a10ea2b4ec4281649d1cee461b32232d0a447e82c786e6841fd22fe20 + webmock (3.26.1) sha256=4f696fb57c90a827c20aadb2d4f9058bbff10f7f043bd0d4c3f58791143b1cd7 + websocket-driver (0.8.0) sha256=ed0dba4b943c22f17f9a734817e808bc84cdce6a7e22045f5315aa57676d4962 + websocket-extensions (0.1.5) sha256=1c6ba63092cda343eb53fc657110c71c754c56484aad42578495227d717a8241 + wicked (2.0.0) sha256=7caf256cb0b8526d9f3af589df78299994c3cfd9aa01c1c9f582bdd9c617931d + will_paginate (4.0.1) sha256=107b226ebe1d393d274575956a7c472e1eefdd97d8828e01b72d425d15a875b9 + xpath (3.2.0) sha256=6dfda79d91bb3b949b947ecc5919f042ef2f399b904013eb3ef6d20dd3a4082e + yard (0.9.38) sha256=721fb82afb10532aa49860655f6cc2eaa7130889df291b052e1e6b268283010f + zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b + RUBY VERSION - ruby 3.2.9p265 + ruby 4.0.1 BUNDLED WITH - 2.7.1 + 4.0.5 diff --git a/Rakefile b/Rakefile index 44596c9f4..7eac02b61 100644 --- a/Rakefile +++ b/Rakefile @@ -56,55 +56,7 @@ task "assets:bench" do puts measure.join("\n") end -# overrides for bootsnap to eliminate relative paths -# TODO Rails 5.1 add test:system -%w[ - test test:prepare test:generators test:models test:helpers - test:controllers test:mailers test:integration test:jobs - test:units test:functionals -].each { |task| Rake::Task[task].clear } - -task :test do - $: << Rails.root.to_s + "/test" - - if ENV.key?("TEST") - Rails::TestUnit::Runner.rake_run([ENV["TEST"]]) - else - # TODO: Rails 5.1 Rails::TestUnit::Runner.rake_run(["test"], ["test/system/**/*"]) - Rails::TestUnit::Runner.rake_run(["test"]) - end -end - -namespace :test do - ["models", "helpers", "controllers", "mailers", "integration", "jobs"].each do |name| - task name => "test:prepare" do - $: << Rails.root.to_s + "/test" - Rails::TestUnit::Runner.rake_run(["test/#{name}"]) - end - end - - task generators: "test:prepare" do - $: << Rails.root.to_s + "/test" - Rails::TestUnit::Runner.rake_run(["test/lib/generators"]) - end - - task units: "test:prepare" do - $: << Rails.root.to_s + "/test" - Rails::TestUnit::Runner.rake_run(["test/models", "test/helpers", "test/unit"]) - end - - task functionals: "test:prepare" do - $: << Rails.root.to_s + "/test" - Rails::TestUnit::Runner.rake_run(["test/controllers", "test/mailers", "test/functional"]) - end - - desc "Run system tests only" - task system: "test:prepare" do - $: << Rails.root.to_s + "/test" - Rails::TestUnit::Runner.rake_run(["test/system"]) - end -end - +# Use default Rails test tasks (Rails 7.1+) task default: [:test] Rake::Task["assets:precompile"].enhance do diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb index 980ee8df8..1311c5c06 100644 --- a/app/assets/javascripts/application.js.erb +++ b/app/assets/javascripts/application.js.erb @@ -12,7 +12,7 @@ // //= require jquery //= require jquery_ujs -//= require local-time +//= require local-time.es2017-umd //= require bootstrap.min //= require bootstrap_custom //= require coffee_script_utilities @@ -22,14 +22,7 @@ //= require badge.js //= require homepage.js //= require user_email_time_of_day.js -//= require raven.js -Raven.config("<%= ENV['SENTRY_DSN_PUBLIC'] %>", { - release: "<%= Raven.configuration.release %>", - environment: "<%= Rails.env %>", - ignoreErrors: [ - // Error generated by a bug in auto-fill library from browser - // https://github.com/getsentry/sentry/issues/5267 - /Blocked a frame with origin/, - ] -}).install(); +// Note: Sentry JavaScript SDK needs to be updated from raven.js to @sentry/browser +// For now, client-side error reporting is disabled +// TODO: Update to new Sentry JavaScript SDK diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index fbff852d3..3fef6e419 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,6 +2,7 @@ class ApplicationController < ActionController::Base include ActionView::Helpers::NumberHelper + protect_from_forgery before_action do @@ -12,7 +13,7 @@ class ApplicationController < ActionController::Base before_action do if current_user - Raven.user_context email: current_user.email, id: current_user.id, username: current_user.github + Sentry.set_user(email: current_user.email, id: current_user.id, username: current_user.github) end end diff --git a/app/controllers/repos_controller.rb b/app/controllers/repos_controller.rb index 0b88d3a7c..d1896541c 100644 --- a/app/controllers/repos_controller.rb +++ b/app/controllers/repos_controller.rb @@ -8,7 +8,7 @@ class ReposController < RepoBasedController def new @repo = Repo.new(user_name: params[:user_name], name: params[:name]) - @full_name = (@repo.name && @repo.user_name) ? +"#{@repo.user_name}/#{@repo.name}" : nil + @full_name = (@repo.name && @repo.user_name) ? "#{@repo.user_name}/#{@repo.name}" : nil @full_name&.prepend("https://github.com/") @repo_sub = RepoSubscription.new end diff --git a/app/jobs/sentry_job.rb b/app/jobs/sentry_job.rb index 6434157c8..d98912b68 100644 --- a/app/jobs/sentry_job.rb +++ b/app/jobs/sentry_job.rb @@ -2,6 +2,6 @@ class SentryJob < ApplicationJob def perform(event) - Raven.send_event(event) + Sentry.capture_event(event) end end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 16281ec78..53bf7b6ec 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -4,6 +4,7 @@ class UserMailer < ActionMailer::Base class AbortDeliveryError < StandardError; end include ActionView::Helpers::DateHelper + default from: "CodeTriage " layout "mail_layout" @@ -17,7 +18,6 @@ def send_daily_triage( read_doc_ids: [], write_doc_ids: [] ) - user = User.find(user_id) return unless set_and_check_user(user) diff --git a/app/models/doc_mailer_maker.rb b/app/models/doc_mailer_maker.rb index acf07de95..59e8a6e1f 100644 --- a/app/models/doc_mailer_maker.rb +++ b/app/models/doc_mailer_maker.rb @@ -17,7 +17,7 @@ def initialize(user, subs, _options = {}, &send_next) @subs = subs @write_docs = [] @read_docs = [] - assign_docs(&(send_next || READY_FOR_NEXT_DEFAULT)) + assign_docs(&send_next || READY_FOR_NEXT_DEFAULT) end def empty? diff --git a/app/models/git_branchname_generator.rb b/app/models/git_branchname_generator.rb index fdbcf98fd..7d8459133 100644 --- a/app/models/git_branchname_generator.rb +++ b/app/models/git_branchname_generator.rb @@ -8,6 +8,6 @@ def initialize(username:, doc_path:) end def branchname - "#{@username}-update-docs-#{@doc_path}-for-pr".gsub(/[^a-zA-Z0-9\_]/, "-") + "#{@username}-update-docs-#{@doc_path}-for-pr".gsub(/[^a-zA-Z0-9_]/, "-") end end diff --git a/app/models/repo.rb b/app/models/repo.rb index 8ac9294fa..ca112d8ca 100644 --- a/app/models/repo.rb +++ b/app/models/repo.rb @@ -143,7 +143,7 @@ def self.all_languages end def self.repos_needing_help_for_user(user) - if user && user.has_favorite_languages? + if user&.has_favorite_languages? where(language: user.favorite_languages) else self diff --git a/config/application.rb b/config/application.rb index ed095d004..e8bec4d38 100644 --- a/config/application.rb +++ b/config/application.rb @@ -11,7 +11,7 @@ module CodeTriage class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 7.0 + config.load_defaults 8.1 # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers diff --git a/config/environments/test.rb b/config/environments/test.rb index f8c0cf95a..b81cffd6b 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -58,4 +58,10 @@ config.action_mailer.default_url_options = {host: "example.com"} config.cache_store = :memory_store + + # Use the test adapter for Active Job so that test helpers work + config.active_job.queue_adapter = :test + + # Don't check if assets are precompiled in test environment + config.assets.check_precompiled_asset = false end diff --git a/config/initializers/feature_policy.rb b/config/initializers/feature_policy.rb index 4de54a249..21a12cec3 100644 --- a/config/initializers/feature_policy.rb +++ b/config/initializers/feature_policy.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # Define an application-wide HTTP feature policy. For further # information see https://developers.google.com/web/updates/2018/06/feature-policy # diff --git a/config/initializers/maildown_rails_71_fix.rb b/config/initializers/maildown_rails_71_fix.rb new file mode 100644 index 000000000..3bc9fb691 --- /dev/null +++ b/config/initializers/maildown_rails_71_fix.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +# Fix for maildown gem compatibility with Rails 7.1+ +# Rails 7.1 changed ERB templates to return ActionView::OutputBuffer instead of String +# Kramdown expects a String, so we need to convert it. +# +# This can be removed once maildown is updated to handle this case. +require "kramdown" + +Maildown::MarkdownEngine.set_html do |string| + Kramdown::Document.new(string.to_s, input: "GFM").to_html +end diff --git a/config/initializers/new_framework_defaults_6_0.rb b/config/initializers/new_framework_defaults_6_0.rb index d91d96b11..eae3c399b 100644 --- a/config/initializers/new_framework_defaults_6_0.rb +++ b/config/initializers/new_framework_defaults_6_0.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # Be sure to restart your server when you modify this file. # # This file contains migration options to ease your Rails 6.0 upgrade. diff --git a/config/initializers/new_framework_defaults_6_1.rb b/config/initializers/new_framework_defaults_6_1.rb index a128fd37b..2b86f608a 100644 --- a/config/initializers/new_framework_defaults_6_1.rb +++ b/config/initializers/new_framework_defaults_6_1.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # Be sure to restart your server when you modify this file. # # This file contains migration options to ease your Rails 6.1 upgrade. diff --git a/config/initializers/new_framework_defaults_7_0.rb b/config/initializers/new_framework_defaults_7_0.rb index 5aefca516..eb40de828 100644 --- a/config/initializers/new_framework_defaults_7_0.rb +++ b/config/initializers/new_framework_defaults_7_0.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # Be sure to restart your server when you modify this file. # # This file eases your Rails 7.0 framework defaults upgrade. diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb index f71813fb3..80b673d3d 100644 --- a/config/initializers/sentry.rb +++ b/config/initializers/sentry.rb @@ -1,11 +1,10 @@ # frozen_string_literal: true -Raven.configure do |config| +Sentry.init do |config| + config.dsn = ENV["SENTRY_DSN"] + config.breadcrumbs_logger = [:active_support_logger, :http_logger] config.excluded_exceptions += ["Sidekiq::Shutdown"] - config.async = lambda do |event| - Thread.new do - Raven.send_event(event) - end - end + # Set traces_sample_rate to capture performance data + config.traces_sample_rate = 0.1 end diff --git a/config/routes.rb b/config/routes.rb index 489d26d95..7fbb8cbfd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -61,7 +61,7 @@ end scope "*full_name" do - constraints full_name: /[-_a-zA-Z0-9]+\/[-_\.a-zA-Z0-9]+/ do + constraints full_name: /[-_a-zA-Z0-9]+\/[-_.a-zA-Z0-9]+/ do get "/badges/:badge_type(.:format)", to: "badges#show", as: "badge" get "info(.:format)", to: "api_info#show" diff --git a/db/schema.rb b/db/schema.rb index faa3cdf1c..f9f6a8c3e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,94 +10,94 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2026_02_02_163145) do +ActiveRecord::Schema[8.1].define(version: 2026_02_02_163145) do # These are extensions that must be enabled in order to support this database + enable_extension "pg_catalog.plpgsql" enable_extension "pg_stat_statements" - enable_extension "plpgsql" create_table "data_dumps", force: :cascade do |t| - t.text "data" t.datetime "created_at", precision: nil + t.text "data" t.datetime "updated_at", precision: nil end create_table "doc_assignments", force: :cascade do |t| + t.boolean "clicked", default: false + t.datetime "created_at", precision: nil + t.bigint "doc_class_id" + t.bigint "doc_method_id" t.bigint "repo_id" t.bigint "repo_subscription_id" - t.bigint "doc_method_id" - t.bigint "doc_class_id" - t.datetime "created_at", precision: nil t.datetime "updated_at", precision: nil - t.boolean "clicked", default: false t.index ["repo_id"], name: "index_doc_assignments_on_repo_id" t.index ["repo_subscription_id", "doc_method_id"], name: "index_doc_assignments_on_repo_subscription_id_and_doc_method_id" end create_table "doc_classes", force: :cascade do |t| - t.bigint "repo_id" - t.string "name" t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false t.integer "doc_comments_count", default: 0, null: false + t.string "file" t.integer "line" + t.string "name" t.string "path" - t.string "file" + t.bigint "repo_id" + t.datetime "updated_at", precision: nil, null: false t.index ["repo_id", "doc_comments_count"], name: "index_doc_classes_on_repo_id_and_doc_comments_count" end create_table "doc_comments", force: :cascade do |t| - t.bigint "doc_class_id" - t.bigint "doc_method_id" t.text "comment" t.datetime "created_at", precision: nil + t.bigint "doc_class_id" + t.bigint "doc_method_id" t.datetime "updated_at", precision: nil t.index ["doc_class_id"], name: "index_doc_comments_on_doc_class_id" t.index ["doc_method_id"], name: "index_doc_comments_on_doc_method_id" end create_table "doc_methods", force: :cascade do |t| - t.bigint "repo_id" - t.string "name" - t.integer "line" + t.boolean "active", default: true + t.text "comment" t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false t.integer "doc_comments_count", default: 0, null: false - t.string "path" t.string "file" - t.boolean "skip_write", default: false - t.boolean "active", default: true - t.boolean "skip_read", default: false t.boolean "has_comment" - t.text "comment" + t.integer "line" + t.string "name" + t.string "path" + t.bigint "repo_id" + t.boolean "skip_read", default: false + t.boolean "skip_write", default: false + t.datetime "updated_at", precision: nil, null: false t.index ["repo_id", "doc_comments_count"], name: "index_doc_methods_on_repo_id_and_doc_comments_count" t.index ["repo_id", "id"], name: "index_doc_methods_on_repo_id_and_id" t.index ["repo_id", "name", "path"], name: "index_doc_methods_on_repo_id_and_name_and_path", unique: true end create_table "issue_assignments", force: :cascade do |t| - t.bigint "issue_id" - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false - t.bigint "repo_subscription_id" t.boolean "clicked", default: false + t.datetime "created_at", precision: nil, null: false t.boolean "delivered", default: false + t.bigint "issue_id" + t.bigint "repo_subscription_id" + t.datetime "updated_at", precision: nil, null: false t.index ["repo_subscription_id", "delivered"], name: "index_issue_assignments_on_repo_subscription_id_and_delivered" end create_table "issues", force: :cascade do |t| t.integer "comment_count" - t.string "url" - t.string "repo_name" - t.string "user_name" + t.datetime "created_at", precision: nil, null: false + t.string "html_url" t.datetime "last_touched_at", precision: nil t.integer "number" - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false + t.boolean "pr_attached", default: false t.bigint "repo_id" - t.text "title" - t.string "html_url" + t.string "repo_name" t.string "state" - t.boolean "pr_attached", default: false + t.text "title" + t.datetime "updated_at", precision: nil, null: false + t.string "url" + t.string "user_name" t.index ["number", "repo_id"], name: "index_issues_on_number_and_repo_id", unique: true t.index ["repo_id", "id"], name: "index_issues_on_repo_id_and_id", where: "((state)::text = 'open'::text)" t.index ["repo_id", "number"], name: "index_issues_on_repo_id_and_number" @@ -106,15 +106,15 @@ end create_table "labels", force: :cascade do |t| - t.string "name", null: false t.datetime "created_at", null: false + t.string "name", null: false t.datetime "updated_at", null: false end create_table "repo_labels", force: :cascade do |t| - t.bigint "repo_id", null: false - t.bigint "label_id", null: false t.datetime "created_at", null: false + t.bigint "label_id", null: false + t.bigint "repo_id", null: false t.datetime "updated_at", null: false t.index ["label_id"], name: "index_repo_labels_on_label_id" t.index ["repo_id", "label_id"], name: "index_repo_labels_on_repo_id_and_label_id", unique: true @@ -123,15 +123,15 @@ create_table "repo_subscriptions", force: :cascade do |t| t.datetime "created_at", precision: nil, null: false + t.integer "email_limit", default: 1 + t.datetime "last_sent_at", precision: nil + t.boolean "read", default: false + t.integer "read_limit" + t.bigint "repo_id" t.datetime "updated_at", precision: nil, null: false t.bigint "user_id" - t.bigint "repo_id" - t.datetime "last_sent_at", precision: nil - t.integer "email_limit", default: 1 t.boolean "write", default: false - t.boolean "read", default: false t.integer "write_limit" - t.integer "read_limit" t.index ["read"], name: "index_repo_subscriptions_on_read" t.index ["repo_id", "user_id"], name: "index_repo_subscriptions_on_repo_id_and_user_id" t.index ["repo_id"], name: "index_repo_subscriptions_on_repo_id" @@ -140,22 +140,22 @@ end create_table "repos", force: :cascade do |t| - t.string "name" - t.string "user_name" - t.integer "issues_count", default: 0, null: false - t.string "language" + t.boolean "archived", default: false + t.string "commit_sha" + t.datetime "created_at", precision: nil, null: false t.string "description" + t.integer "docs_subscriber_count", default: 0 t.string "full_name" - t.text "notes" - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false t.text "github_error_msg" - t.string "commit_sha" + t.integer "issues_count", default: 0, null: false + t.string "language" + t.string "name" + t.text "notes" + t.boolean "removed_from_github", default: false t.integer "stars_count", default: 0 t.integer "subscribers_count", default: 0 - t.integer "docs_subscriber_count", default: 0 - t.boolean "removed_from_github", default: false - t.boolean "archived", default: false + t.datetime "updated_at", precision: nil, null: false + t.string "user_name" t.index ["archived"], name: "index_repos_on_archived" t.index ["full_name"], name: "index_repos_on_full_name" t.index ["issues_count"], name: "index_repos_on_issues_count" @@ -166,40 +166,40 @@ end create_table "users", force: :cascade do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false - t.string "reset_password_token" - t.datetime "reset_password_sent_at", precision: nil - t.datetime "remember_created_at", precision: nil - t.integer "sign_in_count", default: 0 - t.datetime "current_sign_in_at", precision: nil - t.datetime "last_sign_in_at", precision: nil - t.string "current_sign_in_ip" - t.string "last_sign_in_ip" - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false - t.string "zip" - t.string "phone_number" - t.boolean "twitter" - t.string "github" - t.string "github_access_token" + t.string "account_delete_token" t.boolean "admin" t.string "avatar_url", default: "http://gravatar.com/avatar/default" - t.string "name" - t.boolean "private", default: false - t.string "favorite_languages", array: true + t.datetime "created_at", precision: nil, null: false + t.datetime "current_sign_in_at", precision: nil + t.string "current_sign_in_ip" t.integer "daily_issue_limit", default: 50 - t.boolean "skip_issues_with_pr", default: false - t.string "account_delete_token" - t.datetime "last_clicked_at", precision: nil + t.string "email", default: "", null: false t.string "email_frequency", default: "daily" t.time "email_time_of_day" + t.string "encrypted_password", default: "", null: false + t.string "favorite_languages", array: true + t.string "github" + t.string "github_access_token" + t.boolean "htos_contributor_bought", default: false, null: false + t.boolean "htos_contributor_unsubscribe", default: false, null: false + t.datetime "last_clicked_at", precision: nil + t.datetime "last_email_at", precision: nil + t.datetime "last_sign_in_at", precision: nil + t.string "last_sign_in_ip" + t.string "name" t.string "old_token" - t.integer "raw_streak_count", default: 0 + t.string "phone_number" + t.boolean "private", default: false t.integer "raw_emails_since_click", default: 0 - t.datetime "last_email_at", precision: nil - t.boolean "htos_contributor_unsubscribe", default: false, null: false - t.boolean "htos_contributor_bought", default: false, null: false + t.integer "raw_streak_count", default: 0 + t.datetime "remember_created_at", precision: nil + t.datetime "reset_password_sent_at", precision: nil + t.string "reset_password_token" + t.integer "sign_in_count", default: 0 + t.boolean "skip_issues_with_pr", default: false + t.boolean "twitter" + t.datetime "updated_at", precision: nil, null: false + t.string "zip" t.index ["account_delete_token"], name: "index_users_on_account_delete_token" t.index ["email"], name: "index_users_on_email", unique: true t.index ["github"], name: "index_users_on_github", unique: true diff --git a/test/test_helper.rb b/test/test_helper.rb index 2a5f4d94b..0f3fd785b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -22,6 +22,7 @@ class ActiveSupport::TestCase class ActionDispatch::IntegrationTest # https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara include Warden::Test::Helpers + Warden.test_mode! setup do diff --git a/test/unit/git_hub_authenticator_test.rb b/test/unit/git_hub_authenticator_test.rb index 6e8d9ea98..3664d7ca5 100644 --- a/test/unit/git_hub_authenticator_test.rb +++ b/test/unit/git_hub_authenticator_test.rb @@ -39,7 +39,7 @@ class GitHubAuthenticatorTest < ActiveSupport::TestCase ) emails = Struct.new(:json_body).new ["john.doe@example.com"] - GitHubBub.expects(:get).with("/user/emails", token: "123qwe") + GitHubBub.expects(:get).with("/user/emails", {token: "123qwe"}) .returns emails user = GitHubAuthenticator.authenticate oauth From 53e70cfa71018b36acd0286fd7030ed6f53f72e8 Mon Sep 17 00:00:00 2001 From: Schneems Date: Tue, 3 Feb 2026 17:38:57 -0600 Subject: [PATCH 2/4] Minitest 6 --- Gemfile | 3 ++- Gemfile.lock | 10 +++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Gemfile b/Gemfile index 9774787c0..77ffc17d9 100644 --- a/Gemfile +++ b/Gemfile @@ -121,7 +121,8 @@ end group :test do gem "capybara" gem "launchy" # Not essential but helpful for save_and_open_page - gem "minitest", "< 6.0" # Pin to < 6.0 for Rails 7.1 compatibility + gem "minitest" + gem "minitest-mock" # Required for minitest 6.0+ gem "mocha", require: false gem "rails-controller-testing" gem "simplecov", require: false diff --git a/Gemfile.lock b/Gemfile.lock index 5e2eb8bb3..18360f4e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -270,7 +270,9 @@ GEM mime-types-data (3.2026.0203) mini_histogram (0.3.1) mini_mime (1.1.5) - minitest (5.27.0) + minitest (6.0.1) + prism (~> 1.5) + minitest-mock (5.27.0) mocha (3.0.1) ruby2_keywords (>= 0.0.5) msgpack (1.8.0) @@ -645,7 +647,8 @@ DEPENDENCIES matrix memory_profiler mime-types - minitest (< 6.0) + minitest + minitest-mock mocha neat (~> 1.7) normalize-rails @@ -801,7 +804,8 @@ CHECKSUMS mime-types-data (3.2026.0203) sha256=54353d693af028847391c28361c07d4b8b689cad78c3e1cc272fb1205c6d2a2f mini_histogram (0.3.1) sha256=6a114b504e4618b0e076cc672996036870f7cc6f16b8e5c25c0c637726d2dd94 mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef - minitest (5.27.0) sha256=2d3b17f8a36fe7801c1adcffdbc38233b938eb0b4966e97a6739055a45fa77d5 + minitest (6.0.1) sha256=7854c74f48e2e975969062833adc4013f249a4b212f5e7b9d5c040bf838d54bb + minitest-mock (5.27.0) sha256=7040ed7185417a966920987eaa6eaf1be4ea1fc5b25bb03ff4703f98564a55b0 mocha (3.0.1) sha256=74f82c5959e3df6cfa2757d60aa420dcb151ac7c5eb61dcebf1cd4e368ed7469 msgpack (1.8.0) sha256=e64ce0212000d016809f5048b48eb3a65ffb169db22238fb4b72472fecb2d732 multi_xml (0.8.1) sha256=addba0290bac34e9088bfe73dc4878530297a82a7bbd66cb44dcd0a4b86edf5a From 040f6ef65cefaa3b40d8dd33928ab5f254b1bf76 Mon Sep 17 00:00:00 2001 From: Schneems Date: Tue, 3 Feb 2026 17:40:51 -0600 Subject: [PATCH 3/4] Remove redundant git_source(:github) blocks Bundler 2+ has built-in support for the :github shorthand with HTTPS. These blocks were unused (no gems use the :github shorthand) and redundant (there were two of them). --- Gemfile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Gemfile b/Gemfile index 77ffc17d9..846f36cd1 100644 --- a/Gemfile +++ b/Gemfile @@ -2,17 +2,8 @@ source "https://rubygems.org" -git_source(:github) do |repo_name| - repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") - "https://github.com/#{repo_name}.git" -end - ruby file: ".ruby-version" -git_source :github do |name| - "https://github.com/#{name}.git" -end - # Core if ENV["RAILS_MASTER"] == "1" gem "rails", git: "https://github.com/rails/rails.git" From 99a67bfbf8d7a9ef2debe9d3bf6157064cd276d6 Mon Sep 17 00:00:00 2001 From: Schneems Date: Tue, 3 Feb 2026 17:41:35 -0600 Subject: [PATCH 4/4] Use plain rails --- Gemfile | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 846f36cd1..241d94f47 100644 --- a/Gemfile +++ b/Gemfile @@ -5,11 +5,7 @@ source "https://rubygems.org" ruby file: ".ruby-version" # Core -if ENV["RAILS_MASTER"] == "1" - gem "rails", git: "https://github.com/rails/rails.git" -else - gem "rails", "8.1.2" -end +gem "rails", "8.1.2" # API & Networking gem "git_hub_bub"