diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 03f4e109c7..04a646d9d6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: target: ["PLUGINS", "CORE"] os: [ubuntu-latest] ruby: ["2.6"] - postgres: ["10"] + postgres: ["12"] redis: ["4.x"] services: @@ -64,9 +64,17 @@ jobs: - name: Setup packages if: env.BUILD_TYPE != 'LINT' run: | + sudo apt-get update sudo apt-get -yqq install postgresql-client libpq-dev gifsicle jpegoptim optipng jhead wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-pngquant | sudo sh + - name: Update imagemagick + if: env.BUILD_TYPE == 'BACKEND' + run: | + wget https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-imagemagick + chmod +x install-imagemagick + sudo ./install-imagemagick + - name: Setup redis uses: shogo82148/actions-setup-redis@v1 if: env.BUILD_TYPE != 'LINT' diff --git a/.rubocop.yml b/.rubocop.yml index d46296cf88..b7edfe4894 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,2 +1,9 @@ inherit_gem: rubocop-discourse: default.yml + +# Still work to do in ensuring we don't link old files +Discourse/NoAddReferenceOrAliasesActiveRecordMigration: + Enabled: false + +Discourse/NoResetColumnInformationInMigrations: + Enabled: true diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index b22e221ed4..cb867e5604 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -29,5 +29,3 @@ Javascript Ruby Rails - Copyright (c) 2005-2013 David Heinemeier Hansson, Rails Core Team contributors (MIT) - - Thin - Copyright (c) 2012-2013 Marc-Andre Cournoyer diff --git a/Gemfile b/Gemfile index b708152130..4d809fda20 100644 --- a/Gemfile +++ b/Gemfile @@ -178,7 +178,7 @@ end group :development do gem 'ruby-prof', require: false, platform: :mri gem 'bullet', require: !!ENV['BULLET'] - gem 'better_errors', platform: :mri + gem 'better_errors', platform: :mri, require: !!ENV['BETTER_ERRORS'] gem 'binding_of_caller' gem 'yaml-lint' gem 'annotate' @@ -250,4 +250,4 @@ gem 'webpush', require: false gem 'colored2', require: false gem 'maxminddb' -gem 'rails_failover', require: false, git: 'https://github.com/discourse/rails_failover' +gem 'rails_failover', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 2870d86e7b..4862c4a3be 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,11 +1,3 @@ -GIT - remote: https://github.com/discourse/rails_failover - revision: 66602aa73785851b81c506f0023d3c2a2e40de0a - specs: - rails_failover (0.4.0) - activerecord (~> 6.0) - railties (~> 6.0) - GEM remote: https://rubygems.org/ specs: @@ -51,10 +43,10 @@ GEM annotate (3.1.1) activerecord (>= 3.2, < 7.0) rake (>= 10.4, < 14.0) - ast (2.4.0) + ast (2.4.1) aws-eventstream (1.1.0) - aws-partitions (1.322.0) - aws-sdk-core (3.96.1) + aws-partitions (1.329.0) + aws-sdk-core (3.99.1) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) @@ -66,11 +58,11 @@ GEM aws-sdk-core (~> 3, >= 3.96.1) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) - aws-sdk-sns (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sns (1.25.1) + aws-sdk-core (~> 3, >= 3.99.0) aws-sigv4 (~> 1.1) - aws-sigv4 (1.1.3) - aws-eventstream (~> 1.0, >= 1.0.2) + aws-sigv4 (1.2.0) + aws-eventstream (~> 1, >= 1.0.2) barber (0.12.2) ember-source (>= 1.0, < 3.1) execjs (>= 1.2, < 3) @@ -104,7 +96,7 @@ GEM css_parser (1.7.1) addressable debug_inspector (0.0.3) - diff-lcs (1.3) + diff-lcs (1.4.1) diffy (3.3.0) discourse-ember-source (3.12.2.0) discourse_image_optim (0.26.2) @@ -129,7 +121,7 @@ GEM railties (>= 3.1) ember-source (2.18.2) erubi (1.9.0) - excon (0.73.0) + excon (0.75.0) execjs (2.7.0) exifr (1.3.6) fabrication (2.21.1) @@ -142,7 +134,7 @@ GEM rake-compiler fast_xs (0.8.0) fastimage (2.1.7) - ffi (1.13.0) + ffi (1.13.1) flamegraph (0.9.5) fspath (3.1.2) gc_tracer (1.5.1) @@ -181,8 +173,8 @@ GEM logstash-event (1.2.02) logstash-logger (0.26.1) logstash-event (~> 1.2) - logster (2.8.0) - loofah (2.5.0) + logster (2.9.0) + loofah (2.6.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) lru_redux (1.1.0) @@ -205,7 +197,7 @@ GEM ffi (~> 1.9) minitest (5.14.1) mocha (1.11.2) - mock_redis (0.23.0) + mock_redis (0.24.0) msgpack (1.3.3) multi_json (1.14.1) multi_xml (0.6.0) @@ -248,7 +240,7 @@ GEM omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack - onebox (1.9.28.3) + onebox (1.9.29) addressable (~> 2.7.0) htmlentities (~> 4.3) multi_json (~> 1.11) @@ -257,11 +249,11 @@ GEM sanitize openssl-signature_algorithm (0.4.0) optimist (3.0.1) - parallel (1.19.1) - parallel_tests (2.32.0) + parallel (1.19.2) + parallel_tests (3.0.0) parallel - parser (2.7.1.3) - ast (~> 2.4.0) + parser (2.7.1.4) + ast (~> 2.4.1) pg (1.2.3) progress (3.5.2) pry (0.13.1) @@ -288,6 +280,9 @@ GEM nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) + rails_failover (0.5.2) + activerecord (~> 6.0) + railties (~> 6.0) rails_multisite (2.3.0) activerecord (> 5.0, < 7) railties (> 5.0, < 7) @@ -310,7 +305,7 @@ GEM msgpack (>= 0.4.3) optimist (>= 3.0.0) rchardet (1.8.0) - redis (4.1.4) + redis (4.2.1) redis-namespace (1.7.0) redis (>= 3.0.4) regexp_parser (1.7.1) @@ -353,21 +348,21 @@ GEM json-schema (~> 2.2) railties (>= 3.1, < 7.0) rtlit (0.0.5) - rubocop (0.85.1) + rubocop (0.86.0) parallel (~> 1.10) parser (>= 2.7.0.1) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.7) rexml - rubocop-ast (>= 0.0.3) + rubocop-ast (>= 0.0.3, < 1.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 1.4.0, < 2.0) rubocop-ast (0.0.3) parser (>= 2.7.0.1) - rubocop-discourse (2.1.2) + rubocop-discourse (2.2.0) rubocop (>= 0.69.0) rubocop-rspec (>= 1.39.0) - rubocop-rspec (1.39.0) + rubocop-rspec (1.40.0) rubocop (>= 0.68.1) ruby-prof (1.4.1) ruby-progressbar (1.10.1) @@ -376,7 +371,7 @@ GEM nokogiri (>= 1.6.0) rubyzip (2.3.0) safe_yaml (1.0.5) - sanitize (5.1.0) + sanitize (5.2.1) crass (~> 1.0.2) nokogiri (>= 1.8.0) nokogumbo (~> 2.0) @@ -526,7 +521,7 @@ DEPENDENCIES rack (= 2.2.2) rack-mini-profiler rack-protection - rails_failover! + rails_failover rails_multisite railties (= 6.0.3.1) rake diff --git a/app/assets/javascripts/admin/controllers/admin-permalinks.js b/app/assets/javascripts/admin/controllers/admin-permalinks.js index 177bb4148d..23c47f5739 100644 --- a/app/assets/javascripts/admin/controllers/admin-permalinks.js +++ b/app/assets/javascripts/admin/controllers/admin-permalinks.js @@ -22,6 +22,16 @@ export default Controller.extend({ this.model.unshiftObject(arg); }, + copyUrl(pl) { + let linkElement = document.querySelector(`#admin-permalink-${pl.id}`); + let textArea = document.createElement("textarea"); + textArea.value = linkElement.textContent; + document.body.appendChild(textArea); + textArea.select(); + document.execCommand("Copy"); + textArea.remove(); + }, + destroy: function(record) { return bootbox.confirm( I18n.t("admin.permalink.delete_confirm"), diff --git a/app/assets/javascripts/admin/templates/components/permalink-form.hbs b/app/assets/javascripts/admin/templates/components/permalink-form.hbs index 1f5d1c06f2..8792d78734 100644 --- a/app/assets/javascripts/admin/templates/components/permalink-form.hbs +++ b/app/assets/javascripts/admin/templates/components/permalink-form.hbs @@ -12,6 +12,7 @@ content=permalinkTypes value=permalinkType onChange=(action (mut permalinkType)) + class="permalink-type" }} {{text-field diff --git a/app/assets/javascripts/admin/templates/customize.hbs b/app/assets/javascripts/admin/templates/customize.hbs index d017abe67f..cafafd1285 100644 --- a/app/assets/javascripts/admin/templates/customize.hbs +++ b/app/assets/javascripts/admin/templates/customize.hbs @@ -1,13 +1,13 @@ {{#admin-nav}} - {{nav-item route="adminCustomizeThemes" label="admin.customize.theme.title"}} - {{nav-item route="adminCustomize.colors" label="admin.customize.colors.title"}} - {{nav-item route="adminSiteText" label="admin.site_text.title"}} - {{nav-item route="adminCustomizeEmailTemplates" label="admin.customize.email_templates.title"}} - {{nav-item route="adminCustomizeEmailStyle" label="admin.customize.email_style.title"}} - {{nav-item route="adminUserFields" label="admin.user_fields.title"}} - {{nav-item route="adminEmojis" label="admin.emoji.title"}} - {{nav-item route="adminPermalinks" label="admin.permalink.title"}} - {{nav-item route="adminEmbedding" label="admin.embedding.title"}} + {{nav-item route="adminCustomizeThemes" label="admin.customize.theme.title" class="admin-customize-themes"}} + {{nav-item route="adminCustomize.colors" label="admin.customize.colors.title" class="admin-customize-colors"}} + {{nav-item route="adminSiteText" label="admin.site_text.title" class="admin-customize-site-text"}} + {{nav-item route="adminCustomizeEmailTemplates" label="admin.customize.email_templates.title" class="admin-customize-email-templates"}} + {{nav-item route="adminCustomizeEmailStyle" label="admin.customize.email_style.title" class="admin-customize-email-styles"}} + {{nav-item route="adminUserFields" label="admin.user_fields.title" class="admin-customize-user-fields"}} + {{nav-item route="adminEmojis" label="admin.emoji.title" class="admin-customize-emojis"}} + {{nav-item route="adminPermalinks" label="admin.permalink.title" class="admin-customize-permalinks"}} + {{nav-item route="adminEmbedding" label="admin.embedding.title" class="admin-customize-embedding"}} {{/admin-nav}}