Skip to content

Commit 40563f0

Browse files
authored
Merge pull request #1051 from kmycode/upstream-20250924
Upstream 20250924
2 parents 43f7ff1 + 8bc5e85 commit 40563f0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+921
-765
lines changed

.github/renovate.json5

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
':labels(dependencies)',
77
':prConcurrentLimitNone', // Remove limit for open PRs at any time.
88
':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour.
9+
':enableVulnerabilityAlertsWithLabel(security)',
910
],
1011
rebaseWhen: 'conflicted',
1112
minimumReleaseAge: '3', // Wait 3 days after the package has been published before upgrading it
@@ -93,6 +94,19 @@
9394
matchUpdateTypes: ['patch', 'minor'],
9495
groupName: 'eslint (non-major)',
9596
},
97+
{
98+
// Group all Storybook-related packages in the same PR
99+
matchManagers: ['npm'],
100+
matchPackageNames: [
101+
'chromatic',
102+
'storybook',
103+
'@storybook/*',
104+
'msw',
105+
'msw-storybook-addon',
106+
],
107+
matchUpdateTypes: ['patch', 'minor'],
108+
groupName: 'storybook (non-major)',
109+
},
96110
{
97111
// Group actions/*-artifact in the same PR
98112
matchManagers: ['github-actions'],
@@ -141,6 +155,12 @@
141155
matchUpdateTypes: ['patch', 'minor'],
142156
groupName: 'opentelemetry-ruby (non-major)',
143157
},
158+
{
159+
// Group Playwright Ruby & JS deps in the same PR, as they need to be in sync
160+
matchManagers: ['bundler', 'npm'],
161+
matchPackageNames: ['playwright-ruby-client', 'playwright'],
162+
groupName: 'Playwright',
163+
},
144164
// Add labels depending on package manager
145165
{ matchManagers: ['npm', 'nvm'], addLabels: ['javascript'] },
146166
{ matchManagers: ['bundler', 'ruby-version'], addLabels: ['ruby'] },

.storybook/static/mockServiceWorker.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
* - Please do NOT modify this file.
88
*/
99

10-
const PACKAGE_VERSION = '2.10.4'
11-
const INTEGRITY_CHECKSUM = 'f5825c521429caf22a4dd13b66e243af'
10+
const PACKAGE_VERSION = '2.11.3'
11+
const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82'
1212
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
1313
const activeClientIds = new Set()
1414

@@ -71,11 +71,6 @@ addEventListener('message', async function (event) {
7171
break
7272
}
7373

74-
case 'MOCK_DEACTIVATE': {
75-
activeClientIds.delete(clientId)
76-
break
77-
}
78-
7974
case 'CLIENT_CLOSED': {
8075
activeClientIds.delete(clientId)
8176

@@ -94,6 +89,8 @@ addEventListener('message', async function (event) {
9489
})
9590

9691
addEventListener('fetch', function (event) {
92+
const requestInterceptedAt = Date.now()
93+
9794
// Bypass navigation requests.
9895
if (event.request.mode === 'navigate') {
9996
return
@@ -110,23 +107,29 @@ addEventListener('fetch', function (event) {
110107

111108
// Bypass all requests when there are no active clients.
112109
// Prevents the self-unregistered worked from handling requests
113-
// after it's been deleted (still remains active until the next reload).
110+
// after it's been terminated (still remains active until the next reload).
114111
if (activeClientIds.size === 0) {
115112
return
116113
}
117114

118115
const requestId = crypto.randomUUID()
119-
event.respondWith(handleRequest(event, requestId))
116+
event.respondWith(handleRequest(event, requestId, requestInterceptedAt))
120117
})
121118

122119
/**
123120
* @param {FetchEvent} event
124121
* @param {string} requestId
122+
* @param {number} requestInterceptedAt
125123
*/
126-
async function handleRequest(event, requestId) {
124+
async function handleRequest(event, requestId, requestInterceptedAt) {
127125
const client = await resolveMainClient(event)
128126
const requestCloneForEvents = event.request.clone()
129-
const response = await getResponse(event, client, requestId)
127+
const response = await getResponse(
128+
event,
129+
client,
130+
requestId,
131+
requestInterceptedAt,
132+
)
130133

131134
// Send back the response clone for the "response:*" life-cycle events.
132135
// Ensure MSW is active and ready to handle the message, otherwise
@@ -204,7 +207,7 @@ async function resolveMainClient(event) {
204207
* @param {string} requestId
205208
* @returns {Promise<Response>}
206209
*/
207-
async function getResponse(event, client, requestId) {
210+
async function getResponse(event, client, requestId, requestInterceptedAt) {
208211
// Clone the request because it might've been already used
209212
// (i.e. its body has been read and sent to the client).
210213
const requestClone = event.request.clone()
@@ -255,6 +258,7 @@ async function getResponse(event, client, requestId) {
255258
type: 'REQUEST',
256259
payload: {
257260
id: requestId,
261+
interceptedAt: requestInterceptedAt,
258262
...serializedRequest,
259263
},
260264
},

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# syntax=docker/dockerfile:1.12
1+
# syntax=docker/dockerfile:1.18
22

33
# This file is designed for production server deployment, not local development work
44
# For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/docs/DEVELOPMENT.md#docker
@@ -206,7 +206,7 @@ FROM build AS ffmpeg
206206

207207
# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"]
208208
# renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg
209-
ARG FFMPEG_VERSION=7.1.1
209+
ARG FFMPEG_VERSION=8.0
210210
# ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"]
211211
ARG FFMPEG_URL=https://ffmpeg.org/releases
212212

Gemfile

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ source 'https://rubygems.org'
44
ruby '>= 3.2.0', '< 3.5.0'
55

66
gem 'propshaft'
7-
gem 'puma', '~> 6.3'
7+
gem 'puma', '~> 7.0'
88
gem 'rails', '~> 8.0'
99
gem 'thor', '~> 1.2'
1010

@@ -102,7 +102,7 @@ gem 'rdf-normalize', '~> 0.5'
102102

103103
gem 'prometheus_exporter', '~> 2.2', require: false
104104

105-
gem 'opentelemetry-api', '~> 1.6.0'
105+
gem 'opentelemetry-api', '~> 1.7.0'
106106

107107
group :opentelemetry do
108108
gem 'opentelemetry-exporter-otlp', '~> 0.30.0', require: false
@@ -113,10 +113,10 @@ group :opentelemetry do
113113
gem 'opentelemetry-instrumentation-faraday', '~> 0.28.0', require: false
114114
gem 'opentelemetry-instrumentation-http', '~> 0.25.0', require: false
115115
gem 'opentelemetry-instrumentation-http_client', '~> 0.24.0', require: false
116-
gem 'opentelemetry-instrumentation-net_http', '~> 0.23.0', require: false
116+
gem 'opentelemetry-instrumentation-net_http', '~> 0.24.0', require: false
117117
gem 'opentelemetry-instrumentation-pg', '~> 0.30.0', require: false
118-
gem 'opentelemetry-instrumentation-rack', '~> 0.26.0', require: false
119-
gem 'opentelemetry-instrumentation-rails', '~> 0.36.0', require: false
118+
gem 'opentelemetry-instrumentation-rack', '~> 0.27.0', require: false
119+
gem 'opentelemetry-instrumentation-rails', '~> 0.37.0', require: false
120120
gem 'opentelemetry-instrumentation-redis', '~> 0.26.0', require: false
121121
gem 'opentelemetry-instrumentation-sidekiq', '~> 0.26.0', require: false
122122
gem 'opentelemetry-sdk', '~> 1.4', require: false
@@ -138,6 +138,7 @@ group :test do
138138
# Browser integration testing
139139
gem 'capybara', '~> 3.39'
140140
gem 'capybara-playwright-driver'
141+
gem 'playwright-ruby-client', '1.55.0', require: false # Pinning the exact version as it needs to be kept in sync with the installed npm package
141142

142143
# Used to reset the database between system tests
143144
gem 'database_cleaner-active_record'

Gemfile.lock

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ GEM
9090
public_suffix (>= 2.0.2, < 7.0)
9191
aes_key_wrap (1.1.0)
9292
android_key_attestation (0.3.0)
93-
annotaterb (4.18.0)
93+
annotaterb (4.19.0)
9494
activerecord (>= 6.0.0)
9595
activesupport (>= 6.0.0)
9696
ast (2.4.3)
@@ -438,7 +438,7 @@ GEM
438438
mime-types (3.7.0)
439439
logger
440440
mime-types-data (~> 3.2025, >= 3.2025.0507)
441-
mime-types-data (3.2025.0729)
441+
mime-types-data (3.2025.0916)
442442
mini_mime (1.1.5)
443443
mini_portile2 (2.8.9)
444444
minitest (5.25.5)
@@ -450,15 +450,17 @@ GEM
450450
net-imap (0.5.9)
451451
date
452452
net-protocol
453-
net-ldap (0.19.0)
453+
net-ldap (0.20.0)
454+
base64
455+
ostruct
454456
net-pop (0.1.2)
455457
net-protocol
456458
net-protocol (0.2.2)
457459
timeout
458460
net-smtp (0.5.1)
459461
net-protocol
460462
nio4r (2.7.4)
461-
nokogiri (1.18.9)
463+
nokogiri (1.18.10)
462464
mini_portile2 (~> 2.8.2)
463465
racc (~> 1.4)
464466
oj (3.16.11)
@@ -497,7 +499,7 @@ GEM
497499
openssl (3.3.0)
498500
openssl-signature_algorithm (1.3.0)
499501
openssl (> 2.0)
500-
opentelemetry-api (1.6.0)
502+
opentelemetry-api (1.7.0)
501503
opentelemetry-common (0.22.0)
502504
opentelemetry-api (~> 1.0)
503505
opentelemetry-exporter-otlp (0.30.0)
@@ -515,7 +517,7 @@ GEM
515517
opentelemetry-api (~> 1.0)
516518
opentelemetry-instrumentation-active_support (~> 0.7)
517519
opentelemetry-instrumentation-base (~> 0.23.0)
518-
opentelemetry-instrumentation-action_pack (0.12.3)
520+
opentelemetry-instrumentation-action_pack (0.13.0)
519521
opentelemetry-api (~> 1.0)
520522
opentelemetry-instrumentation-base (~> 0.23.0)
521523
opentelemetry-instrumentation-rack (~> 0.21)
@@ -559,21 +561,21 @@ GEM
559561
opentelemetry-instrumentation-http_client (0.24.0)
560562
opentelemetry-api (~> 1.0)
561563
opentelemetry-instrumentation-base (~> 0.23.0)
562-
opentelemetry-instrumentation-net_http (0.23.1)
564+
opentelemetry-instrumentation-net_http (0.24.0)
563565
opentelemetry-api (~> 1.0)
564566
opentelemetry-instrumentation-base (~> 0.23.0)
565567
opentelemetry-instrumentation-pg (0.30.1)
566568
opentelemetry-api (~> 1.0)
567569
opentelemetry-helpers-sql
568570
opentelemetry-helpers-sql-obfuscation
569571
opentelemetry-instrumentation-base (~> 0.23.0)
570-
opentelemetry-instrumentation-rack (0.26.0)
572+
opentelemetry-instrumentation-rack (0.27.1)
571573
opentelemetry-api (~> 1.0)
572574
opentelemetry-instrumentation-base (~> 0.23.0)
573-
opentelemetry-instrumentation-rails (0.36.0)
575+
opentelemetry-instrumentation-rails (0.37.0)
574576
opentelemetry-api (~> 1.0)
575577
opentelemetry-instrumentation-action_mailer (~> 0.4.0)
576-
opentelemetry-instrumentation-action_pack (~> 0.12.0)
578+
opentelemetry-instrumentation-action_pack (~> 0.13.0)
577579
opentelemetry-instrumentation-action_view (~> 0.9.0)
578580
opentelemetry-instrumentation-active_job (~> 0.8.0)
579581
opentelemetry-instrumentation-active_record (~> 0.9.0)
@@ -589,12 +591,12 @@ GEM
589591
opentelemetry-instrumentation-base (~> 0.23.0)
590592
opentelemetry-registry (0.4.0)
591593
opentelemetry-api (~> 1.1)
592-
opentelemetry-sdk (1.8.1)
594+
opentelemetry-sdk (1.9.0)
593595
opentelemetry-api (~> 1.1)
594596
opentelemetry-common (~> 0.20)
595597
opentelemetry-registry (~> 0.2)
596598
opentelemetry-semantic_conventions
597-
opentelemetry-semantic_conventions (1.11.0)
599+
opentelemetry-semantic_conventions (1.36.0)
598600
opentelemetry-api (~> 1.0)
599601
orm_adapter (0.5.0)
600602
ostruct (0.6.3)
@@ -610,7 +612,7 @@ GEM
610612
pg (1.6.2)
611613
pghero (3.7.0)
612614
activerecord (>= 7.1)
613-
playwright-ruby-client (1.54.1)
615+
playwright-ruby-client (1.55.0)
614616
concurrent-ruby (>= 1.1.6)
615617
mime-types (>= 3.0)
616618
pp (0.6.2)
@@ -635,7 +637,7 @@ GEM
635637
date
636638
stringio
637639
public_suffix (6.0.2)
638-
puma (6.6.1)
640+
puma (7.0.3)
639641
nio4r (~> 2.0)
640642
pundit (2.5.1)
641643
activesupport (>= 3.0.0)
@@ -848,12 +850,12 @@ GEM
848850
simplecov-html (~> 0.11)
849851
simplecov_json_formatter (~> 0.1)
850852
simplecov-html (0.13.2)
851-
simplecov-lcov (0.8.0)
853+
simplecov-lcov (0.9.0)
852854
simplecov_json_formatter (0.1.4)
853855
stackprof (0.2.27)
854856
starry (0.2.0)
855857
base64
856-
stoplight (5.3.5)
858+
stoplight (5.3.8)
857859
zeitwerk
858860
stringio (3.1.7)
859861
strong_migrations (2.5.0)
@@ -1025,7 +1027,7 @@ DEPENDENCIES
10251027
omniauth-rails_csrf_protection (~> 1.0)
10261028
omniauth-saml (~> 2.0)
10271029
omniauth_openid_connect (~> 0.8.0)
1028-
opentelemetry-api (~> 1.6.0)
1030+
opentelemetry-api (~> 1.7.0)
10291031
opentelemetry-exporter-otlp (~> 0.30.0)
10301032
opentelemetry-instrumentation-active_job (~> 0.8.0)
10311033
opentelemetry-instrumentation-active_model_serializers (~> 0.22.0)
@@ -1034,22 +1036,23 @@ DEPENDENCIES
10341036
opentelemetry-instrumentation-faraday (~> 0.28.0)
10351037
opentelemetry-instrumentation-http (~> 0.25.0)
10361038
opentelemetry-instrumentation-http_client (~> 0.24.0)
1037-
opentelemetry-instrumentation-net_http (~> 0.23.0)
1039+
opentelemetry-instrumentation-net_http (~> 0.24.0)
10381040
opentelemetry-instrumentation-pg (~> 0.30.0)
1039-
opentelemetry-instrumentation-rack (~> 0.26.0)
1040-
opentelemetry-instrumentation-rails (~> 0.36.0)
1041+
opentelemetry-instrumentation-rack (~> 0.27.0)
1042+
opentelemetry-instrumentation-rails (~> 0.37.0)
10411043
opentelemetry-instrumentation-redis (~> 0.26.0)
10421044
opentelemetry-instrumentation-sidekiq (~> 0.26.0)
10431045
opentelemetry-sdk (~> 1.4)
10441046
ox (~> 2.14)
10451047
parslet
10461048
pg (~> 1.5)
10471049
pghero
1050+
playwright-ruby-client (= 1.55.0)
10481051
premailer-rails
10491052
prometheus_exporter (~> 2.2)
10501053
propshaft
10511054
public_suffix (~> 6.0)
1052-
puma (~> 6.3)
1055+
puma (~> 7.0)
10531056
pundit (~> 2.3)
10541057
rack-attack (~> 6.6)
10551058
rack-cors

app/helpers/languages_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ module LanguagesHelper
107107
mk: ['Macedonian', 'македонски јазик'].freeze,
108108
ml: ['Malayalam', 'മലയാളം'].freeze,
109109
mn: ['Mongolian', 'Монгол хэл'].freeze,
110+
'mn-Mong': ['Traditional Mongolian', 'ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡ'].freeze,
110111
mr: ['Marathi', 'मराठी'].freeze,
111112
ms: ['Malay', 'Bahasa Melayu'].freeze,
112113
'ms-Arab': ['Jawi Malay', 'بهاس ملايو'].freeze,

app/javascript/mastodon/components/display_name/no-domain.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ export const DisplayNameWithoutDomain: FC<
1414
ComponentPropsWithoutRef<'span'>
1515
> = ({ account, className, children, ...props }) => {
1616
return (
17-
<span {...props} className={classNames('display-name', className)}>
17+
<span
18+
{...props}
19+
className={classNames('display-name animate-parent', className)}
20+
>
1821
<bdi>
1922
{account ? (
2023
<EmojiHTML

app/javascript/mastodon/components/dropdown_menu.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ interface DropdownProps<Item extends object | null = MenuItem> {
334334
scrollable?: boolean;
335335
active?: boolean;
336336
placement?: Placement;
337+
offset?: OffsetValue;
337338
/**
338339
* Prevent the `ScrollableList` with this scrollKey
339340
* from being scrolled while the dropdown is open
@@ -349,7 +350,6 @@ interface DropdownProps<Item extends object | null = MenuItem> {
349350
onItemClick?: ItemClickFn<Item>;
350351
}
351352

352-
const offset = [5, 5] as OffsetValue;
353353
const popperConfig = { strategy: 'fixed' } as UsePopperOptions;
354354

355355
export const Dropdown = <Item extends object | null = MenuItem>({
@@ -363,6 +363,7 @@ export const Dropdown = <Item extends object | null = MenuItem>({
363363
scrollable,
364364
active,
365365
placement = 'bottom',
366+
offset = [5, 5],
366367
status,
367368
forceDropdown = false,
368369
renderItem,

0 commit comments

Comments
 (0)