Merge commit 'db0cd9489c70e985da961a585f3a809ca449dccf' into glitch-soc/merge-upstream

Conflicts:
- `app/services/post_status_service.rb`:
  Upstream updated the logic to move the CW to the text content.
  Glitch-soc does not move CW to text content but has some logic
  to avoid the text being empty. Update the logic according to upstream's
  change.
- `docker-compose.yml`:
  Conflict because of different paths for composer images.
  Updated version as upstream did while keeping our path.
This commit is contained in:
Claire
2025-09-17 20:10:28 +02:00
4 changed files with 55 additions and 4 deletions

View File

@@ -2,6 +2,34 @@
All notable changes to this project will be documented in this file.
## [4.4.4] - 2025-09-16
### Security
- Update dependencies
### Fixed
- Fix missing memoization in `Web::PushNotificationWorker` (#36085 by @ClearlyClaire)
- Fix unresponsive areas around GIFV modals in some cases (#36059 by @ClearlyClaire)
- Fix missing `beforeUnload` confirmation when a poll is being authored (#36030 by @ClearlyClaire)
- Fix processing of remote edited statuses with new media and no text (#35970 by @unfokus)
- Fix polls not being displayed in moderation interface (#35644 and #35933 by @ThisIsMissEm)
- Fix WebUI handling of deleted quoted posts (#35909 and #35918 by @ClearlyClaire and @diondiondion)
- Fix “Edit” and “Delete & Redraft” on a poll not inserting empty option (#35892 by @ClearlyClaire)
- Fix loading of some compatibility CSS on some configurations (#35876 by @shleeable)
- Fix HttpLog not being enabled with `RAILS_LOG_LEVEL=debug` (#35833 by @mjankowski)
- Fix self-destruct scheduler behavior on some Redis setups (#35823 by @ClearlyClaire)
- Fix `tootctl admin create` not bypassing reserved username checks (#35779 by @ClearlyClaire)
- Fix interaction policy changes in implicit updates not being saved (#35751 by @ClearlyClaire)
- Fix quote revocation not being streamed (#35710 by @ClearlyClaire)
- Fix export of large user archives by enabling Zip64 (#35850 by @ClearlyClaire)
### Changed
- Change labels for quote policy settings (#35893 by @ClearlyClaire)
- Change standalone “Share” page to redirect to web interface after posting (#35763 by @ChaosExAnima)
## [4.4.3] - 2025-08-05
### Security

View File

@@ -65,7 +65,7 @@ class PostStatusService < BaseService
private
def fill_blank_text!
return unless @text.blank? && @options[:spoiler_text].present?
return unless @text.blank? && @options[:spoiler_text].present? && @quoted_status.blank?
@text = begin
if @media&.any?(&:video?) || @media&.any?(&:gifv?)

View File

@@ -59,7 +59,7 @@ services:
web:
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# build: .
image: ghcr.io/glitch-soc/mastodon:v4.4.3
image: ghcr.io/glitch-soc/mastodon:v4.4.4
restart: always
env_file: .env.production
command: bundle exec puma -C config/puma.rb
@@ -83,7 +83,7 @@ services:
# build:
# dockerfile: ./streaming/Dockerfile
# context: .
image: ghcr.io/glitch-soc/mastodon-streaming:v4.4.3
image: ghcr.io/glitch-soc/mastodon-streaming:v4.4.4
restart: always
env_file: .env.production
command: node ./streaming/index.js
@@ -102,7 +102,7 @@ services:
sidekiq:
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# build: .
image: ghcr.io/glitch-soc/mastodon:v4.4.3
image: ghcr.io/glitch-soc/mastodon:v4.4.4
restart: always
env_file: .env.production
command: bundle exec sidekiq

View File

@@ -226,6 +226,29 @@ RSpec.describe '/api/v1/statuses' do
end
end
context 'with a self-quote post and a CW but no text', feature: :outgoing_quotes do
let(:quoted_status) { Fabricate(:status, account: user.account) }
let(:params) do
{
spoiler_text: 'this is a CW',
quoted_status_id: quoted_status.id,
}
end
it 'returns a quote post, as well as rate limit headers', :aggregate_failures do
subject
expect(response).to have_http_status(200)
expect(response.content_type)
.to start_with('application/json')
expect(response.parsed_body[:quote]).to be_present
expect(response.parsed_body[:spoiler_text]).to eq 'this is a CW'
expect(response.parsed_body[:content]).to eq ''
expect(response.headers['X-RateLimit-Limit']).to eq RateLimiter::FAMILIES[:statuses][:limit].to_s
expect(response.headers['X-RateLimit-Remaining']).to eq (RateLimiter::FAMILIES[:statuses][:limit] - 1).to_s
end
end
context 'with a safeguard' do
let!(:alice) { Fabricate(:account, username: 'alice') }
let!(:bob) { Fabricate(:account, username: 'bob') }