Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
f0d7ea6
New Crowdin Translations (automated) (#37000)
github-actions[bot] Nov 25, 2025
204143b
Increase HTTP read timeout for expensive S3 batch delete operation (#…
ClearlyClaire Nov 25, 2025
a26636f
Fix compose autosuggest always lowercasing token (#36995)
ClearlyClaire Nov 25, 2025
ca53195
chore(deps): update dependency sass to v1.94.2 (#36826)
renovate[bot] Nov 25, 2025
861625f
Prevent vertical videos from overflowing the viewport (#36966)
diondiondion Nov 25, 2025
8c77202
Replace most unsafe React lifecycle methods (#36970)
diondiondion Nov 25, 2025
4ca458e
chore(deps): update devdependencies (non-major) (#36802)
renovate[bot] Nov 25, 2025
bd02cd4
chore(deps): update dependency addressable to v2.8.8 (#37002)
renovate[bot] Nov 25, 2025
3e77c3b
chore(deps): update dependency omniauth-rails_csrf_protection to v2 (…
renovate[bot] Nov 25, 2025
0969704
chore(deps): update dependency rails-i18n to v8.1.0 (#36992)
renovate[bot] Nov 25, 2025
0725afe
Collections: Add missing validations for boolean columns (#37005)
oneiros Nov 25, 2025
6f4f994
chore(deps): update dependency connection_pool to v2.5.5 (#37003)
renovate[bot] Nov 26, 2025
cd9d166
chore(deps): update dependency rqrcode to v3.1.1 (#37010)
renovate[bot] Nov 26, 2025
384594f
New Crowdin Translations (automated) (#37018)
github-actions[bot] Nov 26, 2025
59e4865
Fix issues in new theme tokens (#37019)
diondiondion Nov 26, 2025
00163e8
Fix `tootctl status remove` removing quoted posts and remote quotes o…
ClearlyClaire Nov 26, 2025
cb4f1cc
Improve `SessionActivation.activate` spec (#36983)
mjankowski Nov 26, 2025
1757a0f
chore(deps): update dependency public_suffix to v7 (#36920)
renovate[bot] Nov 26, 2025
f87f30c
Refactor `Card` component to TypeScript (#36982)
diondiondion Nov 26, 2025
ee7e756
Fix null access error in card component (#37022)
diondiondion Nov 26, 2025
8151045
chore(deps): update yarn to v4.12.0 (#36797)
renovate[bot] Nov 26, 2025
002632c
chore(deps): update dependency aws-sdk-core to v3.239.2 (#37015)
renovate[bot] Nov 26, 2025
be2caba
chore(deps): update dependency i18n-tasks to v1.1.2 (#37027)
renovate[bot] Nov 27, 2025
322a4fe
First steps towards a collection creation service (#37020)
oneiros Nov 27, 2025
e126cfc
Fix error page when logging out or boosting on mobile (#37028)
diondiondion Nov 27, 2025
199376a
Use existing time format string to generate backup archive filename (…
mjankowski Nov 27, 2025
90466d0
New Crowdin Translations (automated) (#37026)
github-actions[bot] Nov 27, 2025
07ecf64
Remove unused bundle-related Redux actions (#37030)
diondiondion Nov 27, 2025
0004ed4
chore(deps): update opentelemetry-ruby (non-major) (#37016)
renovate[bot] Nov 27, 2025
0d2e952
Replace Rails UJS library (#37031)
ChaosExAnima Nov 27, 2025
f07cff4
Fix media modal misalignment in Safari (#37034)
ChaosExAnima Nov 27, 2025
826e9d7
Make tootctl aware of 'require approval' for email domains (#34579)
e-nomem Nov 27, 2025
44ff2c3
Fix filters not applying to search results (#36346)
ClearlyClaire Nov 27, 2025
2bd7c85
Contain tall videos in full-width video container (#37032)
diondiondion Nov 27, 2025
5f33ac2
Limit height of tall images in posts (#37035)
diondiondion Nov 27, 2025
945ef5a
Remove unused data from 2025 annual reports (#37033)
ClearlyClaire Nov 28, 2025
e0912c1
Fix `Card` component using incorrect `punycode` module (#37043)
ClearlyClaire Nov 28, 2025
f12f198
Fix post navigation in single-column mode when Advanced UI is enabled…
diondiondion Nov 28, 2025
6b38352
New Crowdin Translations (automated) (#37042)
github-actions[bot] Nov 28, 2025
f896bba
Draft API to create Collections (#37049)
oneiros Nov 28, 2025
84ffb10
Adjust Chromatic to run conditionally (#37050)
ChaosExAnima Nov 28, 2025
37ccffa
Fix current item in pagination not highlighted with new theme tokens …
diondiondion Nov 28, 2025
9227879
Remove `theme_tokens` feature flag & make new styles the default (#37…
diondiondion Nov 28, 2025
801672e
Add method to quickly test for AnnualReport account eligibility (#37045)
ClearlyClaire Nov 28, 2025
9334bd9
Don't reset scroll when using hotkeys to focus columns, add hotkey `0…
diondiondion Nov 28, 2025
2f9ad8f
Merge remote-tracking branch 'upstream/main' into update/imastodon
takayamaki Nov 29, 2025
2f6b95f
docker-compose-dev.ymlのredisをアップデート
takayamaki Nov 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 33 additions & 12 deletions .github/workflows/chromatic.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,51 @@
name: 'Chromatic'
permissions:
contents: read

on:
push:
branches-ignore:
- renovate/*
- stable-*
paths:
- 'package.json'
- 'yarn.lock'
- '**/*.js'
- '**/*.jsx'
- '**/*.ts'
- '**/*.tsx'
- '**/*.css'
- '**/*.scss'
- '.github/workflows/chromatic.yml'

jobs:
pathcheck:
name: Check for relevant changes
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.filter.outputs.src }}
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
fetch-depth: 0

- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
src:
- 'package.json'
- 'yarn.lock'
- '**/*.js'
- '**/*.jsx'
- '**/*.ts'
- '**/*.tsx'
- '**/*.css'
- '**/*.scss'
- '.github/workflows/chromatic.yml'

chromatic:
name: Run Chromatic
runs-on: ubuntu-latest
if: github.repository == 'mastodon/mastodon'
needs: pathcheck
if: github.repository == 'mastodon/mastodon' && needs.pathcheck.outputs.changed == 'true'
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript

Expand All @@ -35,7 +55,8 @@ jobs:
- name: Run Chromatic
uses: chromaui/action@v13
with:
# ⚠️ Make sure to configure a `CHROMATIC_PROJECT_TOKEN` repository secret
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
zip: true
storybookBuildDir: 'storybook-static'
exitZeroOnChanges: false # Fail workflow if changes are found
autoAcceptChanges: 'main' # Auto-accept changes on main branch only
1 change: 0 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ docker-compose.override.yml

# Ignore vendored CSS reset
app/javascript/styles/mastodon/reset.scss
app/javascript/styles_new/mastodon/reset.scss

# Ignore Javascript pending https://github.com/mastodon/mastodon/pull/23631
*.js
Expand Down
2 changes: 1 addition & 1 deletion AUTHORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ and provided thanks to the work of the following contributors:
* [Drew Schuster](mailto:dtschust@gmail.com)
* [Dryusdan](mailto:dryusdan@dryusdan.fr)
* [Eai](mailto:eai@mizle.net)
* [Eashwar Ranganathan](mailto:eranganathan@lyft.com)
* [Eashwar Ranganathan](mailto:eashwar@eashwar.com)
* [Ed Knutson](mailto:knutsoned@gmail.com)
* [Elizabeth Martín Campos](mailto:me@elizabeth.sh)
* [Elizabeth Myers](mailto:elizabeth@interlinked.me)
Expand Down
4 changes: 2 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ gem 'net-ldap', '~> 0.18'
gem 'omniauth', '~> 2.0'
gem 'omniauth-cas', '~> 3.0.0.beta.1'
gem 'omniauth_openid_connect', '~> 0.8.0'
gem 'omniauth-rails_csrf_protection', '~> 1.0'
gem 'omniauth-rails_csrf_protection', '~> 2.0'
gem 'omniauth-saml', '~> 2.0'

gem 'color_diff', '~> 0.1'
Expand Down Expand Up @@ -71,7 +71,7 @@ gem 'oj', '~> 3.14'
gem 'ox', '~> 2.14'
gem 'parslet'
gem 'premailer-rails'
gem 'public_suffix', '~> 6.0'
gem 'public_suffix', '~> 7.0'
gem 'pundit', '~> 2.3'
gem 'rack-attack', '~> 6.6'
gem 'rack-cors', require: 'rack/cors'
Expand Down
36 changes: 18 additions & 18 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ GEM
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
uri (>= 0.13.1)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
addressable (2.8.8)
public_suffix (>= 2.0.2, < 8.0)
aes_key_wrap (1.1.0)
android_key_attestation (0.3.0)
annotaterb (4.20.0)
Expand All @@ -97,7 +97,7 @@ GEM
attr_required (1.0.2)
aws-eventstream (1.4.0)
aws-partitions (1.1186.0)
aws-sdk-core (3.239.1)
aws-sdk-core (3.239.2)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
Expand Down Expand Up @@ -170,7 +170,7 @@ GEM
cocoon (1.2.15)
color_diff (0.1)
concurrent-ruby (1.3.5)
connection_pool (2.5.4)
connection_pool (2.5.5)
cose (1.3.1)
cbor (~> 0.5.9)
openssl-signature_algorithm (~> 1.0)
Expand Down Expand Up @@ -327,7 +327,7 @@ GEM
rainbow (>= 2.0.0)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
i18n-tasks (1.1.1)
i18n-tasks (1.1.2)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
erubi
Expand Down Expand Up @@ -484,7 +484,7 @@ GEM
addressable (~> 2.8)
nokogiri (~> 1.12)
omniauth (~> 2.1)
omniauth-rails_csrf_protection (1.0.2)
omniauth-rails_csrf_protection (2.0.0)
actionpack (>= 4.2)
omniauth (~> 2.0)
omniauth-saml (2.2.4)
Expand Down Expand Up @@ -545,15 +545,15 @@ GEM
opentelemetry-registry (~> 0.1)
opentelemetry-instrumentation-concurrent_ruby (0.24.0)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-excon (0.26.0)
opentelemetry-instrumentation-excon (0.26.1)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-faraday (0.30.0)
opentelemetry-instrumentation-faraday (0.30.1)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-http (0.27.0)
opentelemetry-instrumentation-http (0.27.1)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-http_client (0.26.0)
opentelemetry-instrumentation-http_client (0.26.1)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-net_http (0.26.0)
opentelemetry-instrumentation-net_http (0.26.1)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-pg (0.33.0)
opentelemetry-helpers-sql
Expand Down Expand Up @@ -621,7 +621,7 @@ GEM
psych (5.2.6)
date
stringio
public_suffix (6.0.2)
public_suffix (7.0.0)
puma (7.1.0)
nio4r (~> 2.0)
pundit (2.5.2)
Expand All @@ -641,7 +641,7 @@ GEM
faraday-follow_redirects
json-jwt (>= 1.11.0)
rack (>= 2.1.0)
rack-protection (4.1.1)
rack-protection (4.2.1)
base64 (>= 0.1.0)
logger (>= 1.6.0)
rack (>= 3.0.0, < 4)
Expand Down Expand Up @@ -675,7 +675,7 @@ GEM
rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
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)
rails-i18n (8.0.2)
rails-i18n (8.1.0)
i18n (>= 0.7, < 2)
railties (>= 8.0.0, < 9)
railties (8.0.3)
Expand Down Expand Up @@ -720,10 +720,10 @@ GEM
rotp (6.3.0)
rouge (4.6.1)
rpam2 (4.0.2)
rqrcode (3.1.0)
rqrcode (3.1.1)
chunky_png (~> 1.0)
rqrcode_core (~> 2.0)
rqrcode_core (2.0.0)
rqrcode_core (2.0.1)
rspec (3.13.1)
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
Expand Down Expand Up @@ -1013,7 +1013,7 @@ DEPENDENCIES
oj (~> 3.14)
omniauth (~> 2.0)
omniauth-cas (~> 3.0.0.beta.1)
omniauth-rails_csrf_protection (~> 1.0)
omniauth-rails_csrf_protection (~> 2.0)
omniauth-saml (~> 2.0)
omniauth_openid_connect (~> 0.8.0)
opentelemetry-api (~> 1.7.0)
Expand All @@ -1040,7 +1040,7 @@ DEPENDENCIES
premailer-rails
prometheus_exporter (~> 2.2)
propshaft
public_suffix (~> 6.0)
public_suffix (~> 7.0)
puma (~> 7.0)
pundit (~> 2.3)
rack-attack (~> 6.6)
Expand Down
29 changes: 29 additions & 0 deletions app/controllers/api/v1_alpha/collections_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# frozen_string_literal: true

class Api::V1Alpha::CollectionsController < Api::BaseController
rescue_from ActiveRecord::RecordInvalid, Mastodon::ValidationError do |e|
render json: { error: ValidationErrorFormatter.new(e).as_json }, status: 422
end

before_action :check_feature_enabled

before_action -> { doorkeeper_authorize! :write, :'write:collections' }, only: [:create]

before_action :require_user!

def create
@collection = CreateCollectionService.new.call(collection_params, current_user.account)

render json: @collection, serializer: REST::CollectionSerializer
end

private

def collection_params
params.permit(:name, :description, :sensitive, :discoverable, :tag, account_ids: [])
end

def check_feature_enabled
raise ActionController::RoutingError unless Mastodon::Feature.collections_enabled?
end
end
10 changes: 3 additions & 7 deletions app/helpers/theme_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ module ThemeHelper
def theme_style_tags(theme)
if theme == 'system'
''.html_safe.tap do |tags|
tags << vite_stylesheet_tag(theme_path_for('mastodon-light'), type: :virtual, media: 'not all and (prefers-color-scheme: dark)', crossorigin: 'anonymous')
tags << vite_stylesheet_tag(theme_path_for('default'), type: :virtual, media: '(prefers-color-scheme: dark)', crossorigin: 'anonymous')
tags << vite_stylesheet_tag('themes/mastodon-light', type: :virtual, media: 'not all and (prefers-color-scheme: dark)', crossorigin: 'anonymous')
tags << vite_stylesheet_tag('themes/default', type: :virtual, media: '(prefers-color-scheme: dark)', crossorigin: 'anonymous')
end
else
vite_stylesheet_tag theme_path_for(theme), type: :virtual, media: 'all', crossorigin: 'anonymous'
vite_stylesheet_tag "themes/#{theme}", type: :virtual, media: 'all', crossorigin: 'anonymous'
end
end

Expand Down Expand Up @@ -53,8 +53,4 @@ def cached_custom_css_digest
def theme_color_for(theme)
theme == 'mastodon-light' ? Themes::THEME_COLORS[:light] : Themes::THEME_COLORS[:dark]
end

def theme_path_for(theme)
Mastodon::Feature.theme_tokens_enabled? ? "themes/#{theme}_theme_tokens" : "themes/#{theme}"
end
end
25 changes: 0 additions & 25 deletions app/javascript/mastodon/actions/bundles.js

This file was deleted.

2 changes: 1 addition & 1 deletion app/javascript/mastodon/api_types/statuses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export interface ApiPreviewCardJSON {
html: string;
width: number;
height: number;
image: string;
image: string | null;
image_description: string;
embed_url: string;
blurhash: string;
Expand Down
8 changes: 2 additions & 6 deletions app/javascript/mastodon/common.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import Rails from '@rails/ujs';
import { setupLinkListeners } from './utils/links';

export function start() {
try {
Rails.start();
} catch {
// If called twice
}
setupLinkListeners();
}
6 changes: 3 additions & 3 deletions app/javascript/mastodon/components/autosuggest_input.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const textAtCursorMatchesToken = (str, caretPosition, searchTokens) => {
return [null, null];
}

word = word.trim().toLowerCase();
word = word.trim();

if (word.length > 0) {
return [left + 1, word];
Expand Down Expand Up @@ -159,8 +159,8 @@ export default class AutosuggestInput extends ImmutablePureComponent {
this.input.focus();
};

UNSAFE_componentWillReceiveProps (nextProps) {
if (nextProps.suggestions !== this.props.suggestions && nextProps.suggestions.size > 0 && this.state.suggestionsHidden && this.state.focused) {
componentDidUpdate (prevProps) {
if (prevProps.suggestions !== this.props.suggestions && this.props.suggestions.size > 0 && this.state.suggestionsHidden && this.state.focused) {
this.setState({ suggestionsHidden: false });
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const textAtCursorMatchesToken = (str, caretPosition) => {
return [null, null];
}

word = word.trim().toLowerCase();
word = word.trim();

if (word.length > 0) {
return [left + 1, word];
Expand Down
1 change: 1 addition & 0 deletions app/javascript/mastodon/components/hotkeys/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ const hotkeyMatcherMap = {
openProfile: just('p'),
moveDown: just('j'),
moveUp: just('k'),
moveToTop: just('0'),
toggleHidden: just('x'),
toggleSensitive: just('h'),
toggleComposeSpoilers: optionPlus('x'),
Expand Down
10 changes: 5 additions & 5 deletions app/javascript/mastodon/components/media_gallery.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,11 @@ class MediaGallery extends PureComponent {
window.removeEventListener('resize', this.handleResize);
}

UNSAFE_componentWillReceiveProps (nextProps) {
if (!is(nextProps.media, this.props.media) && nextProps.visible === undefined) {
this.setState({ visible: displayMedia !== 'hide_all' && !nextProps.sensitive || displayMedia === 'show_all' });
} else if (!is(nextProps.visible, this.props.visible) && nextProps.visible !== undefined) {
this.setState({ visible: nextProps.visible });
componentDidUpdate (prevProps) {
if (!is(prevProps.media, this.props.media) && this.props.visible === undefined) {
this.setState({ visible: displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all' });
} else if (!is(prevProps.visible, this.props.visible) && this.props.visible !== undefined) {
this.setState({ visible: this.props.visible });
}
}

Expand Down
Loading
Loading