Merge pull request #1512 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changeslolsob-rspec
commit
ab48bf69d0
|
@ -4,7 +4,7 @@ FROM ubuntu:20.04 as build-dep
|
||||||
SHELL ["/usr/bin/bash", "-c"]
|
SHELL ["/usr/bin/bash", "-c"]
|
||||||
|
|
||||||
# Install Node v12 (LTS)
|
# Install Node v12 (LTS)
|
||||||
ENV NODE_VER="12.20.1"
|
ENV NODE_VER="12.21.0"
|
||||||
RUN ARCH= && \
|
RUN ARCH= && \
|
||||||
dpkgArch="$(dpkg --print-architecture)" && \
|
dpkgArch="$(dpkg --print-architecture)" && \
|
||||||
case "${dpkgArch##*-}" in \
|
case "${dpkgArch##*-}" in \
|
||||||
|
|
10
Gemfile
10
Gemfile
|
@ -14,10 +14,10 @@ gem 'rack', '~> 2.2.3'
|
||||||
gem 'hamlit-rails', '~> 0.2'
|
gem 'hamlit-rails', '~> 0.2'
|
||||||
gem 'pg', '~> 1.2'
|
gem 'pg', '~> 1.2'
|
||||||
gem 'makara', '~> 0.5'
|
gem 'makara', '~> 0.5'
|
||||||
gem 'pghero', '~> 2.7'
|
gem 'pghero', '~> 2.8'
|
||||||
gem 'dotenv-rails', '~> 2.7'
|
gem 'dotenv-rails', '~> 2.7'
|
||||||
|
|
||||||
gem 'aws-sdk-s3', '~> 1.89', require: false
|
gem 'aws-sdk-s3', '~> 1.91', require: false
|
||||||
gem 'fog-core', '<= 2.1.0'
|
gem 'fog-core', '<= 2.1.0'
|
||||||
gem 'fog-openstack', '~> 0.3', require: false
|
gem 'fog-openstack', '~> 0.3', require: false
|
||||||
gem 'paperclip', '~> 6.0'
|
gem 'paperclip', '~> 6.0'
|
||||||
|
@ -85,7 +85,7 @@ gem 'sanitize', '~> 5.2'
|
||||||
gem 'scenic', '~> 1.5'
|
gem 'scenic', '~> 1.5'
|
||||||
gem 'sidekiq', '~> 6.1'
|
gem 'sidekiq', '~> 6.1'
|
||||||
gem 'sidekiq-scheduler', '~> 3.0'
|
gem 'sidekiq-scheduler', '~> 3.0'
|
||||||
gem 'sidekiq-unique-jobs', '~> 6.0'
|
gem 'sidekiq-unique-jobs', '~> 7.0'
|
||||||
gem 'sidekiq-bulk', '~>0.2.0'
|
gem 'sidekiq-bulk', '~>0.2.0'
|
||||||
gem 'simple-navigation', '~> 4.1'
|
gem 'simple-navigation', '~> 4.1'
|
||||||
gem 'simple_form', '~> 5.1'
|
gem 'simple_form', '~> 5.1'
|
||||||
|
@ -121,7 +121,7 @@ end
|
||||||
group :test do
|
group :test do
|
||||||
gem 'capybara', '~> 3.35'
|
gem 'capybara', '~> 3.35'
|
||||||
gem 'climate_control', '~> 0.2'
|
gem 'climate_control', '~> 0.2'
|
||||||
gem 'faker', '~> 2.16'
|
gem 'faker', '~> 2.17'
|
||||||
gem 'microformats', '~> 4.2'
|
gem 'microformats', '~> 4.2'
|
||||||
gem 'rails-controller-testing', '~> 1.0'
|
gem 'rails-controller-testing', '~> 1.0'
|
||||||
gem 'rspec-sidekiq', '~> 3.1'
|
gem 'rspec-sidekiq', '~> 3.1'
|
||||||
|
@ -140,7 +140,7 @@ group :development do
|
||||||
gem 'letter_opener', '~> 1.7'
|
gem 'letter_opener', '~> 1.7'
|
||||||
gem 'letter_opener_web', '~> 1.4'
|
gem 'letter_opener_web', '~> 1.4'
|
||||||
gem 'memory_profiler'
|
gem 'memory_profiler'
|
||||||
gem 'rubocop', '~> 1.9', require: false
|
gem 'rubocop', '~> 1.11', require: false
|
||||||
gem 'rubocop-rails', '~> 2.9', require: false
|
gem 'rubocop-rails', '~> 2.9', require: false
|
||||||
gem 'brakeman', '~> 4.10', require: false
|
gem 'brakeman', '~> 4.10', require: false
|
||||||
gem 'bundler-audit', '~> 0.7', require: false
|
gem 'bundler-audit', '~> 0.7', require: false
|
||||||
|
|
50
Gemfile.lock
50
Gemfile.lock
|
@ -78,21 +78,21 @@ GEM
|
||||||
av (0.9.0)
|
av (0.9.0)
|
||||||
cocaine (~> 0.5.3)
|
cocaine (~> 0.5.3)
|
||||||
awrence (1.1.1)
|
awrence (1.1.1)
|
||||||
aws-eventstream (1.1.0)
|
aws-eventstream (1.1.1)
|
||||||
aws-partitions (1.429.0)
|
aws-partitions (1.432.0)
|
||||||
aws-sdk-core (3.112.0)
|
aws-sdk-core (3.113.0)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
aws-partitions (~> 1, >= 1.239.0)
|
aws-partitions (~> 1, >= 1.239.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
jmespath (~> 1.0)
|
jmespath (~> 1.0)
|
||||||
aws-sdk-kms (1.42.0)
|
aws-sdk-kms (1.43.0)
|
||||||
aws-sdk-core (~> 3, >= 3.112.0)
|
aws-sdk-core (~> 3, >= 3.112.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
aws-sdk-s3 (1.89.0)
|
aws-sdk-s3 (1.91.0)
|
||||||
aws-sdk-core (~> 3, >= 3.112.0)
|
aws-sdk-core (~> 3, >= 3.112.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.1)
|
||||||
aws-sigv4 (1.2.2)
|
aws-sigv4 (1.2.3)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
bcrypt (3.1.16)
|
bcrypt (3.1.16)
|
||||||
better_errors (2.9.1)
|
better_errors (2.9.1)
|
||||||
|
@ -108,6 +108,9 @@ GEM
|
||||||
msgpack (~> 1.0)
|
msgpack (~> 1.0)
|
||||||
brakeman (4.10.1)
|
brakeman (4.10.1)
|
||||||
browser (4.2.0)
|
browser (4.2.0)
|
||||||
|
brpoplpush-redis_script (0.1.1)
|
||||||
|
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||||
|
redis (>= 1.0, <= 5.0)
|
||||||
builder (3.2.4)
|
builder (3.2.4)
|
||||||
bullet (6.1.4)
|
bullet (6.1.4)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
|
@ -210,7 +213,7 @@ GEM
|
||||||
tzinfo
|
tzinfo
|
||||||
excon (0.76.0)
|
excon (0.76.0)
|
||||||
fabrication (2.21.1)
|
fabrication (2.21.1)
|
||||||
faker (2.16.0)
|
faker (2.17.0)
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
faraday (1.3.0)
|
faraday (1.3.0)
|
||||||
faraday-net_http (~> 1.0)
|
faraday-net_http (~> 1.0)
|
||||||
|
@ -300,7 +303,7 @@ GEM
|
||||||
multi_json (~> 1.14)
|
multi_json (~> 1.14)
|
||||||
rack (~> 2.0)
|
rack (~> 2.0)
|
||||||
rdf (~> 3.1)
|
rdf (~> 3.1)
|
||||||
json-ld-preloaded (3.1.4)
|
json-ld-preloaded (3.1.5)
|
||||||
json-ld (~> 3.1)
|
json-ld (~> 3.1)
|
||||||
rdf (~> 3.1)
|
rdf (~> 3.1)
|
||||||
jsonapi-renderer (0.2.2)
|
jsonapi-renderer (0.2.2)
|
||||||
|
@ -362,7 +365,7 @@ GEM
|
||||||
net-ssh (>= 2.6.5, < 7.0.0)
|
net-ssh (>= 2.6.5, < 7.0.0)
|
||||||
net-ssh (6.1.0)
|
net-ssh (6.1.0)
|
||||||
nio4r (2.5.7)
|
nio4r (2.5.7)
|
||||||
nokogiri (1.11.1)
|
nokogiri (1.11.2)
|
||||||
mini_portile2 (~> 2.5.0)
|
mini_portile2 (~> 2.5.0)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogumbo (2.0.4)
|
nokogumbo (2.0.4)
|
||||||
|
@ -372,7 +375,7 @@ GEM
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
sidekiq (>= 3.5)
|
sidekiq (>= 3.5)
|
||||||
statsd-ruby (~> 1.4, >= 1.4.0)
|
statsd-ruby (~> 1.4, >= 1.4.0)
|
||||||
oj (3.11.2)
|
oj (3.11.3)
|
||||||
omniauth (1.9.1)
|
omniauth (1.9.1)
|
||||||
hashie (>= 3.4.6)
|
hashie (>= 3.4.6)
|
||||||
rack (>= 1.6.2, < 3)
|
rack (>= 1.6.2, < 3)
|
||||||
|
@ -389,7 +392,7 @@ GEM
|
||||||
openssl (2.2.0)
|
openssl (2.2.0)
|
||||||
openssl-signature_algorithm (0.4.0)
|
openssl-signature_algorithm (0.4.0)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
ox (2.14.2)
|
ox (2.14.3)
|
||||||
paperclip (6.0.0)
|
paperclip (6.0.0)
|
||||||
activemodel (>= 4.2.0)
|
activemodel (>= 4.2.0)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
|
@ -400,7 +403,7 @@ GEM
|
||||||
av (~> 0.9.0)
|
av (~> 0.9.0)
|
||||||
paperclip (>= 2.5.2)
|
paperclip (>= 2.5.2)
|
||||||
parallel (1.20.1)
|
parallel (1.20.1)
|
||||||
parallel_tests (3.5.1)
|
parallel_tests (3.5.2)
|
||||||
parallel
|
parallel
|
||||||
parser (3.0.0.0)
|
parser (3.0.0.0)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
|
@ -408,7 +411,7 @@ GEM
|
||||||
pastel (0.8.0)
|
pastel (0.8.0)
|
||||||
tty-color (~> 0.5)
|
tty-color (~> 0.5)
|
||||||
pg (1.2.3)
|
pg (1.2.3)
|
||||||
pghero (2.7.4)
|
pghero (2.8.0)
|
||||||
activerecord (>= 5)
|
activerecord (>= 5)
|
||||||
pkg-config (1.4.5)
|
pkg-config (1.4.5)
|
||||||
pluck_each (0.1.3)
|
pluck_each (0.1.3)
|
||||||
|
@ -482,7 +485,7 @@ GEM
|
||||||
thor (>= 0.19.0, < 2.0)
|
thor (>= 0.19.0, < 2.0)
|
||||||
rainbow (3.0.0)
|
rainbow (3.0.0)
|
||||||
rake (13.0.3)
|
rake (13.0.3)
|
||||||
rdf (3.1.12)
|
rdf (3.1.13)
|
||||||
hamster (~> 3.0)
|
hamster (~> 3.0)
|
||||||
link_header (~> 0.0, >= 0.0.8)
|
link_header (~> 0.0, >= 0.0.8)
|
||||||
rdf-normalize (0.4.0)
|
rdf-normalize (0.4.0)
|
||||||
|
@ -507,7 +510,7 @@ GEM
|
||||||
redis-store (>= 1.2, < 2)
|
redis-store (>= 1.2, < 2)
|
||||||
redis-store (1.9.0)
|
redis-store (1.9.0)
|
||||||
redis (>= 4, < 5)
|
redis (>= 4, < 5)
|
||||||
regexp_parser (2.0.3)
|
regexp_parser (2.1.1)
|
||||||
request_store (1.5.0)
|
request_store (1.5.0)
|
||||||
rack (>= 1.4)
|
rack (>= 1.4)
|
||||||
responders (3.0.1)
|
responders (3.0.1)
|
||||||
|
@ -542,7 +545,7 @@ GEM
|
||||||
rspec-support (3.10.2)
|
rspec-support (3.10.2)
|
||||||
rspec_junit_formatter (0.4.1)
|
rspec_junit_formatter (0.4.1)
|
||||||
rspec-core (>= 2, < 4, != 2.12.0)
|
rspec-core (>= 2, < 4, != 2.12.0)
|
||||||
rubocop (1.9.1)
|
rubocop (1.11.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.0.0.0)
|
parser (>= 3.0.0.0)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
|
@ -587,9 +590,10 @@ GEM
|
||||||
sidekiq (>= 3)
|
sidekiq (>= 3)
|
||||||
thwait
|
thwait
|
||||||
tilt (>= 1.4.0)
|
tilt (>= 1.4.0)
|
||||||
sidekiq-unique-jobs (6.0.25)
|
sidekiq-unique-jobs (7.0.4)
|
||||||
|
brpoplpush-redis_script (> 0.0.0, <= 2.0.0)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||||
sidekiq (>= 4.0, < 7.0)
|
sidekiq (>= 5.0, < 7.0)
|
||||||
thor (>= 0.20, < 2.0)
|
thor (>= 0.20, < 2.0)
|
||||||
simple-navigation (4.1.0)
|
simple-navigation (4.1.0)
|
||||||
activesupport (>= 2.3.2)
|
activesupport (>= 2.3.2)
|
||||||
|
@ -694,7 +698,7 @@ DEPENDENCIES
|
||||||
active_record_query_trace (~> 1.8)
|
active_record_query_trace (~> 1.8)
|
||||||
addressable (~> 2.7)
|
addressable (~> 2.7)
|
||||||
annotate (~> 3.1)
|
annotate (~> 3.1)
|
||||||
aws-sdk-s3 (~> 1.89)
|
aws-sdk-s3 (~> 1.91)
|
||||||
better_errors (~> 2.9)
|
better_errors (~> 2.9)
|
||||||
binding_of_caller (~> 1.0)
|
binding_of_caller (~> 1.0)
|
||||||
blurhash (~> 0.1)
|
blurhash (~> 0.1)
|
||||||
|
@ -723,7 +727,7 @@ DEPENDENCIES
|
||||||
dotenv-rails (~> 2.7)
|
dotenv-rails (~> 2.7)
|
||||||
ed25519 (~> 1.2)
|
ed25519 (~> 1.2)
|
||||||
fabrication (~> 2.21)
|
fabrication (~> 2.21)
|
||||||
faker (~> 2.16)
|
faker (~> 2.17)
|
||||||
fast_blank (~> 1.0)
|
fast_blank (~> 1.0)
|
||||||
fastimage
|
fastimage
|
||||||
fog-core (<= 2.1.0)
|
fog-core (<= 2.1.0)
|
||||||
|
@ -767,7 +771,7 @@ DEPENDENCIES
|
||||||
parallel_tests (~> 3.5)
|
parallel_tests (~> 3.5)
|
||||||
parslet
|
parslet
|
||||||
pg (~> 1.2)
|
pg (~> 1.2)
|
||||||
pghero (~> 2.7)
|
pghero (~> 2.8)
|
||||||
pkg-config (~> 1.4)
|
pkg-config (~> 1.4)
|
||||||
pluck_each (~> 0.1.3)
|
pluck_each (~> 0.1.3)
|
||||||
posix-spawn
|
posix-spawn
|
||||||
|
@ -793,7 +797,7 @@ DEPENDENCIES
|
||||||
rspec-rails (~> 4.1)
|
rspec-rails (~> 4.1)
|
||||||
rspec-sidekiq (~> 3.1)
|
rspec-sidekiq (~> 3.1)
|
||||||
rspec_junit_formatter (~> 0.4)
|
rspec_junit_formatter (~> 0.4)
|
||||||
rubocop (~> 1.9)
|
rubocop (~> 1.11)
|
||||||
rubocop-rails (~> 2.9)
|
rubocop-rails (~> 2.9)
|
||||||
ruby-progressbar (~> 1.11)
|
ruby-progressbar (~> 1.11)
|
||||||
sanitize (~> 5.2)
|
sanitize (~> 5.2)
|
||||||
|
@ -801,7 +805,7 @@ DEPENDENCIES
|
||||||
sidekiq (~> 6.1)
|
sidekiq (~> 6.1)
|
||||||
sidekiq-bulk (~> 0.2.0)
|
sidekiq-bulk (~> 0.2.0)
|
||||||
sidekiq-scheduler (~> 3.0)
|
sidekiq-scheduler (~> 3.0)
|
||||||
sidekiq-unique-jobs (~> 6.0)
|
sidekiq-unique-jobs (~> 7.0)
|
||||||
simple-navigation (~> 4.1)
|
simple-navigation (~> 4.1)
|
||||||
simple_form (~> 5.1)
|
simple_form (~> 5.1)
|
||||||
simplecov (~> 0.21)
|
simplecov (~> 0.21)
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
# header_file_size :integer
|
# header_file_size :integer
|
||||||
# header_updated_at :datetime
|
# header_updated_at :datetime
|
||||||
# avatar_remote_url :string
|
# avatar_remote_url :string
|
||||||
# subscription_expires_at :datetime
|
|
||||||
# locked :boolean default(FALSE), not null
|
# locked :boolean default(FALSE), not null
|
||||||
# header_remote_url :string default(""), not null
|
# header_remote_url :string default(""), not null
|
||||||
# last_webfingered_at :datetime
|
# last_webfingered_at :datetime
|
||||||
|
@ -55,6 +54,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
class Account < ApplicationRecord
|
class Account < ApplicationRecord
|
||||||
|
self.ignored_columns = %w(subscription_expires_at)
|
||||||
|
|
||||||
USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
|
USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
|
||||||
MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[a-z0-9]+)?)/i
|
MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[a-z0-9]+)?)/i
|
||||||
|
|
||||||
|
@ -97,7 +98,6 @@ class Account < ApplicationRecord
|
||||||
|
|
||||||
scope :remote, -> { where.not(domain: nil) }
|
scope :remote, -> { where.not(domain: nil) }
|
||||||
scope :local, -> { where(domain: nil) }
|
scope :local, -> { where(domain: nil) }
|
||||||
scope :expiring, ->(time) { remote.where.not(subscription_expires_at: nil).where('subscription_expires_at < ?', time) }
|
|
||||||
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
|
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
|
||||||
scope :silenced, -> { where.not(silenced_at: nil) }
|
scope :silenced, -> { where.not(silenced_at: nil) }
|
||||||
scope :suspended, -> { where.not(suspended_at: nil) }
|
scope :suspended, -> { where.not(suspended_at: nil) }
|
||||||
|
@ -194,10 +194,6 @@ class Account < ApplicationRecord
|
||||||
"acct:#{local_username_and_domain}"
|
"acct:#{local_username_and_domain}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def subscribed?
|
|
||||||
subscription_expires_at.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def searchable?
|
def searchable?
|
||||||
!(suspended? || moved?)
|
!(suspended? || moved?)
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ module Expireable
|
||||||
end
|
end
|
||||||
|
|
||||||
def expires_in=(interval)
|
def expires_in=(interval)
|
||||||
self.expires_at = interval.to_i.seconds.from_now if interval.present?
|
self.expires_at = interval.present? ? interval.to_i.seconds.from_now : nil
|
||||||
@expires_in = interval
|
@expires_in = interval
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
.fields-row__column.fields-row__column-6.fields-group
|
.fields-row__column.fields-row__column-6.fields-group
|
||||||
= f.input :phrase, as: :string, wrapper: :with_label, hint: false
|
= f.input :phrase, as: :string, wrapper: :with_label, hint: false
|
||||||
.fields-row__column.fields-row__column-6.fields-group
|
.fields-row__column.fields-row__column-6.fields-group
|
||||||
= f.input :expires_in, wrapper: :with_label, collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].map(&:to_i), label_method: lambda { |i| I18n.t("invites.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt')
|
= f.input :expires_in, wrapper: :with_label, collection: [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].map(&:to_i), label_method: lambda { |i| I18n.t("invites.expires_in.#{i}") }, include_blank: I18n.t('invites.expires_in_prompt')
|
||||||
|
|
||||||
.fields-group
|
.fields-group
|
||||||
= f.input :context, wrapper: :with_block_label, collection: CustomFilter::VALID_CONTEXTS, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label_method: lambda { |context| I18n.t("filters.contexts.#{context}") }, include_blank: false
|
= f.input :context, wrapper: :with_block_label, collection: CustomFilter::VALID_CONTEXTS, as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', label_method: lambda { |context| I18n.t("filters.contexts.#{context}") }, include_blank: false
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
%tr
|
%tr
|
||||||
%th= t('exports.bookmarks')
|
%th= t('exports.bookmarks')
|
||||||
%td= number_with_delimiter @export.total_bookmarks
|
%td= number_with_delimiter @export.total_bookmarks
|
||||||
%td= table_link_to 'download', t('bookmarks.csv'), settings_exports_bookmarks_path(format: :csv)
|
%td= table_link_to 'download', t('exports.csv'), settings_exports_bookmarks_path(format: :csv)
|
||||||
|
|
||||||
%hr.spacer/
|
%hr.spacer/
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::BackupCleanupScheduler
|
class Scheduler::BackupCleanupScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
old_backups.reorder(nil).find_each(&:destroy!)
|
old_backups.reorder(nil).find_each(&:destroy!)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::DoorkeeperCleanupScheduler
|
class Scheduler::DoorkeeperCleanupScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
Doorkeeper::AccessToken.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all
|
Doorkeeper::AccessToken.where('revoked_at IS NOT NULL').where('revoked_at < NOW()').delete_all
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::EmailScheduler
|
class Scheduler::EmailScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
FREQUENCY = 7.days.freeze
|
FREQUENCY = 7.days.freeze
|
||||||
SIGN_IN_OFFSET = 1.day.freeze
|
SIGN_IN_OFFSET = 1.day.freeze
|
||||||
|
|
|
@ -4,7 +4,7 @@ class Scheduler::FeedCleanupScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
include Redisable
|
include Redisable
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
clean_home_feeds!
|
clean_home_feeds!
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::InstanceRefreshScheduler
|
class Scheduler::InstanceRefreshScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
Instance.refresh
|
Instance.refresh
|
||||||
|
|
|
@ -5,7 +5,7 @@ class Scheduler::IpCleanupScheduler
|
||||||
|
|
||||||
IP_RETENTION_PERIOD = 1.year.freeze
|
IP_RETENTION_PERIOD = 1.year.freeze
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
clean_ip_columns!
|
clean_ip_columns!
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::MediaCleanupScheduler
|
class Scheduler::MediaCleanupScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
unattached_media.find_each(&:destroy)
|
unattached_media.find_each(&:destroy)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::PgheroScheduler
|
class Scheduler::PgheroScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
PgHero.capture_space_stats
|
PgHero.capture_space_stats
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::ScheduledStatusesScheduler
|
class Scheduler::ScheduledStatusesScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
publish_scheduled_statuses!
|
publish_scheduled_statuses!
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::TrendingTagsScheduler
|
class Scheduler::TrendingTagsScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
TrendingTags.update! if Setting.trends
|
TrendingTags.update! if Setting.trends
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class Scheduler::UserCleanupScheduler
|
class Scheduler::UserCleanupScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
|
||||||
sidekiq_options lock: :until_executed, retry: 0
|
sidekiq_options retry: 0
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
clean_unconfirmed_accounts!
|
clean_unconfirmed_accounts!
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: elasticsearch
|
- name: elasticsearch
|
||||||
repository: https://charts.bitnami.com/bitnami
|
repository: https://charts.bitnami.com/bitnami
|
||||||
version: 12.8.2
|
version: 14.2.3
|
||||||
- name: postgresql
|
- name: postgresql
|
||||||
repository: https://charts.bitnami.com/bitnami
|
repository: https://charts.bitnami.com/bitnami
|
||||||
version: 8.10.14
|
version: 8.10.14
|
||||||
- name: redis
|
- name: redis
|
||||||
repository: https://charts.bitnami.com/bitnami
|
repository: https://charts.bitnami.com/bitnami
|
||||||
version: 10.9.0
|
version: 10.9.0
|
||||||
digest: sha256:9e423aa9a7a46f49e44f0411d61afd685eedf4475752a2b1a24a86a83b0752d0
|
digest: sha256:9e3e7b987c6ffba9295a30b7fae2613fe680c2b1a1832ff5afb185414ce1898e
|
||||||
generated: "2021-02-16T17:10:49.594247-08:00"
|
generated: "2021-02-27T01:01:12.776919968Z"
|
||||||
|
|
|
@ -15,7 +15,7 @@ type: application
|
||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 1.1.0
|
version: 1.1.1
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
@ -24,7 +24,7 @@ appVersion: 3.3.0
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: elasticsearch
|
- name: elasticsearch
|
||||||
version: 12.8.2
|
version: 14.2.3
|
||||||
repository: https://charts.bitnami.com/bitnami
|
repository: https://charts.bitnami.com/bitnami
|
||||||
condition: elasticsearch.enabled
|
condition: elasticsearch.enabled
|
||||||
- name: postgresql
|
- name: postgresql
|
||||||
|
|
|
@ -14,14 +14,30 @@ Sidekiq.configure_server do |config|
|
||||||
chain.add SidekiqErrorHandler
|
chain.add SidekiqErrorHandler
|
||||||
end
|
end
|
||||||
|
|
||||||
config.death_handlers << lambda do |job, _ex|
|
config.server_middleware do |chain|
|
||||||
digest = job['lock_digest']
|
chain.add SidekiqUniqueJobs::Middleware::Server
|
||||||
SidekiqUniqueJobs::Digests.delete_by_digest(digest) if digest
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.client_middleware do |chain|
|
||||||
|
chain.add SidekiqUniqueJobs::Middleware::Client
|
||||||
|
end
|
||||||
|
|
||||||
|
SidekiqUniqueJobs::Server.configure(config)
|
||||||
end
|
end
|
||||||
|
|
||||||
Sidekiq.configure_client do |config|
|
Sidekiq.configure_client do |config|
|
||||||
config.redis = redis_params
|
config.redis = redis_params
|
||||||
|
|
||||||
|
config.client_middleware do |chain|
|
||||||
|
chain.add SidekiqUniqueJobs::Middleware::Client
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Sidekiq.logger.level = ::Logger.const_get(ENV.fetch('RAILS_LOG_LEVEL', 'info').upcase.to_s)
|
Sidekiq.logger.level = ::Logger.const_get(ENV.fetch('RAILS_LOG_LEVEL', 'info').upcase.to_s)
|
||||||
|
|
||||||
|
SidekiqUniqueJobs.configure do |config|
|
||||||
|
config.reaper = :ruby
|
||||||
|
config.reaper_count = 1000
|
||||||
|
config.reaper_interval = 600
|
||||||
|
config.reaper_timeout = 150
|
||||||
|
end
|
||||||
|
|
|
@ -5,7 +5,7 @@ class ResetUniqueJobsLocks < ActiveRecord::Migration[5.2]
|
||||||
# We do this to clean up unique job digests that were not properly
|
# We do this to clean up unique job digests that were not properly
|
||||||
# disposed of prior to https://github.com/tootsuite/mastodon/pull/13361
|
# disposed of prior to https://github.com/tootsuite/mastodon/pull/13361
|
||||||
|
|
||||||
SidekiqUniqueJobs::Digests.delete_by_pattern('*', count: SidekiqUniqueJobs::Digests.count)
|
until SidekiqUniqueJobs::Digests.new.delete_by_pattern('*').nil?; end
|
||||||
end
|
end
|
||||||
|
|
||||||
def down; end
|
def down; end
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
class RemoveSubscriptionExpiresAtFromAccounts < ActiveRecord::Migration[5.0]
|
||||||
|
def change
|
||||||
|
safety_assured do
|
||||||
|
remove_column :accounts, :subscription_expires_at, :datetime, null: true, default: nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2021_02_21_045109) do
|
ActiveRecord::Schema.define(version: 2021_03_08_133107) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -166,7 +166,6 @@ ActiveRecord::Schema.define(version: 2021_02_21_045109) do
|
||||||
t.integer "header_file_size"
|
t.integer "header_file_size"
|
||||||
t.datetime "header_updated_at"
|
t.datetime "header_updated_at"
|
||||||
t.string "avatar_remote_url"
|
t.string "avatar_remote_url"
|
||||||
t.datetime "subscription_expires_at"
|
|
||||||
t.boolean "locked", default: false, null: false
|
t.boolean "locked", default: false, null: false
|
||||||
t.string "header_remote_url", default: "", null: false
|
t.string "header_remote_url", default: "", null: false
|
||||||
t.datetime "last_webfingered_at"
|
t.datetime "last_webfingered_at"
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"last 2 versions",
|
"last 2 versions",
|
||||||
"IE >= 11",
|
"not IE 11",
|
||||||
"iOS >= 9",
|
"iOS >= 9",
|
||||||
"not dead"
|
"not dead"
|
||||||
],
|
],
|
||||||
|
|
|
@ -134,18 +134,6 @@ RSpec.describe Account, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#subscribed?' do
|
|
||||||
it 'returns false when no subscription expiration information is present' do
|
|
||||||
account = Fabricate(:account, subscription_expires_at: nil)
|
|
||||||
expect(account.subscribed?).to be false
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns true when subscription expiration has been set' do
|
|
||||||
account = Fabricate(:account, subscription_expires_at: 30.days.from_now)
|
|
||||||
expect(account.subscribed?).to be true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#possibly_stale?' do
|
describe '#possibly_stale?' do
|
||||||
let(:account) { Fabricate(:account, last_webfingered_at: last_webfingered_at) }
|
let(:account) { Fabricate(:account, last_webfingered_at: last_webfingered_at) }
|
||||||
|
|
||||||
|
@ -707,21 +695,6 @@ RSpec.describe Account, type: :model do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'expiring' do
|
|
||||||
it 'returns remote accounts with followers whose subscription expiration date is past or not given' do
|
|
||||||
local = Fabricate(:account, domain: nil)
|
|
||||||
matches = [
|
|
||||||
{ domain: 'remote', subscription_expires_at: '2000-01-01T00:00:00Z' },
|
|
||||||
].map(&method(:Fabricate).curry(2).call(:account))
|
|
||||||
matches.each(&local.method(:follow!))
|
|
||||||
Fabricate(:account, domain: 'remote', subscription_expires_at: nil)
|
|
||||||
local.follow!(Fabricate(:account, domain: 'remote', subscription_expires_at: '2000-01-03T00:00:00Z'))
|
|
||||||
local.follow!(Fabricate(:account, domain: nil, subscription_expires_at: nil))
|
|
||||||
|
|
||||||
expect(Account.expiring('2000-01-02T00:00:00Z').recent).to eq matches.reverse
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'remote' do
|
describe 'remote' do
|
||||||
it 'returns an array of accounts who have a domain' do
|
it 'returns an array of accounts who have a domain' do
|
||||||
account_1 = Fabricate(:account, domain: nil)
|
account_1 = Fabricate(:account, domain: nil)
|
||||||
|
|
Loading…
Reference in New Issue