Compare commits

..

899 Commits
v1.0.2 ... main

Author SHA1 Message Date
Echo
eb848d082a Profile editing: Rearranging and adding fields (#38083) 2026-03-06 12:57:06 +00:00
github-actions[bot]
11fb1df7a6 New Crowdin Translations (automated) (#38091)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-03-06 11:39:35 +00:00
renovate[bot]
169552ff06 Update dependency aws-sdk-core to v3.243.0 (#38089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-06 11:16:28 +00:00
Matt Jankowski
812c109e87 Remove message argument from NoteLengthValidator error approach (#37977) 2026-03-05 17:44:52 +00:00
diondiondion
3d8d5f6dc7 Remove minimum account limit on collections (#38082) 2026-03-05 15:57:27 +00:00
diondiondion
3557be5d4d Hide account list in sensitive collections (#38081) 2026-03-05 15:43:57 +00:00
renovate[bot]
0f37901955 Update dependency htmlentities to v4.4.2 (#38080)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-05 15:34:22 +00:00
Matt Jankowski
58ef0f6aee Move chewy enable for spec to search data manager (#38054) 2026-03-05 15:07:41 +00:00
Claire
9b4a09f760 Fix poll expiration notification being re-triggered on implicit updates (#38078) 2026-03-05 14:53:00 +00:00
Matt Jankowski
4e3866dbaf Replace email_spec gem with built-in matchers (#38079) 2026-03-05 14:42:21 +00:00
renovate[bot]
5d4271a3cc Update dependency rollup-plugin-visualizer to v6.0.11 (#38051)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-05 14:37:58 +00:00
Echo
dae0926c1f Profile editing: Custom fields (deleting, editing) (#38066) 2026-03-05 10:48:19 +00:00
Matt Jankowski
6d9c16e4a1 Fix incorrect I18n string in webauthn mailers (#38062) 2026-03-05 10:37:12 +00:00
github-actions[bot]
94954aed5e New Crowdin Translations (automated) (#38070)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-03-05 09:27:43 +00:00
Claire
dd27c7b917 Fix “Unblock” and “Unmute” actions being disabled when blocked (#38075) 2026-03-05 09:10:49 +00:00
diondiondion
748dbf3217 Add "Collections" link to main navigation (#38065) 2026-03-05 09:01:08 +00:00
renovate[bot]
eefdf7ecdf Update dependency linzer to v0.7.8 (#38050)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-05 08:56:32 +00:00
Claire
922fbb8c17 Add for searching already-known private GtS posts (#38057) 2026-03-05 08:56:18 +00:00
Claire
1add29cf40 Redirect to short account URLs when requesting HTML for one of the AP endpoints (#38056) 2026-03-04 17:44:27 +00:00
diondiondion
a70079968c Break ScrollableList component into parts (#38059) 2026-03-04 16:18:05 +00:00
Echo
3fbb7424fa Emoji text input and character counter components (#38052) 2026-03-04 16:13:45 +00:00
Matt Jankowski
43b0113a4a Update ES versions in CI/devcontainer to match primary compose (#38041) 2026-03-04 15:33:25 +00:00
Matt Jankowski
a89754f288 Re-run db:schema:dump with rails 8.1 (#38044) 2026-03-04 13:57:53 +00:00
Claire
8a0261c51c Add missing_attribution boolean to preview cards (#38043) 2026-03-04 11:18:37 +00:00
Claire
5472ab251a Fix existing posts not being removed from lists when a list member is unfollowed (#38048) 2026-03-04 11:18:28 +00:00
github-actions[bot]
078b87bdc1 New Crowdin Translations (automated) (#38047)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-03-04 11:06:26 +00:00
Matt Jankowski
177f4ee3ae Update haml_lint to version 0.72.0 (#38042) 2026-03-04 11:03:25 +00:00
renovate[bot]
0a4f96be21 Update dependency tzinfo-data to v1.2026.1 (#38035)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-04 11:01:47 +00:00
renovate[bot]
0f2ad41f89 Update dependency public_suffix to v7.0.5 (#38034)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-04 11:01:44 +00:00
diondiondion
d0e7692d79 Fix local collection link resulting in error page (#38038) 2026-03-03 17:34:37 +00:00
diondiondion
c0b2286871 Profile redesign: Fix timeline filter button color on Safari iOS (#38040) 2026-03-03 17:34:01 +00:00
Claire
a3aeae0288 Add test to cover proper URL for media in DELETE /api/v1/statuses/:id (#38037) 2026-03-03 15:36:54 +00:00
diondiondion
de4ee8565c Prevent hover card from showing on touch devices (#38039) 2026-03-03 15:26:56 +00:00
diondiondion
1d21d9d4c2 Convert ColumnsArea component to TS (#38031) 2026-03-03 12:48:50 +00:00
diondiondion
6e5aa00436 Anchor post navigation via hotkeys to top of viewport (#38036) 2026-03-03 11:02:04 +00:00
github-actions[bot]
80066631ee New Crowdin Translations (automated) (#38032)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-03-03 10:47:19 +00:00
diondiondion
396d9dd12a Allow scrolling alt text popover with keyboard & improved media focus outlines (#38033) 2026-03-03 10:27:46 +00:00
Echo
74b3b6c798 Profile editing: Allow adding arbitrary featured tags (#38012) 2026-03-02 16:32:08 +00:00
diondiondion
03b2f77ad2 Collection share modal cleanup (#38030) 2026-03-02 16:19:13 +00:00
David Roetzel
ceaadc791e Change cursor to make clear summary is clickable (#38029) 2026-03-02 15:13:56 +00:00
Matt Jankowski
e7cec161fd Reduce haml-lint LineLength configuration to 240 (#37287) 2026-03-02 14:43:57 +00:00
diondiondion
816e63d2a5 Add "skip to content", "skip to navigation" links (#38006) 2026-03-02 14:37:33 +00:00
Antoine Cellerier
87004ddb96 Add g+e keyboard shortcut for /explore (trending) (#38014) 2026-03-02 13:49:28 +00:00
David Roetzel
f953d40289 Add API to revoke collection item (#38027) 2026-03-02 13:38:03 +00:00
David Roetzel
2f65701920 Add service to revoke inclusion in a Collection (#38026) 2026-03-02 10:16:41 +00:00
Shlee
6ab24de659 trustworthy_attribution - Bounce bad URIs (#37372) 2026-03-02 10:03:21 +00:00
renovate[bot]
ba8e495631 Update dependency pg to v8.19.0 (#37978)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 09:30:52 +00:00
renovate[bot]
178e8c23b1 Update dependency eslint-plugin-jsdoc to v62 (#37433)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 09:30:17 +00:00
Matt Jankowski
c86a8f8798 Use file_field support for array to accept attribute (#37844) 2026-03-02 09:27:04 +00:00
renovate[bot]
e3a53b6f5a Update Node.js to 24.14 (#37971)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 09:08:04 +00:00
Matt Jankowski
74f7a5e8e9 Remove unneeded stylelint-config-prettier-scss package (#37973) 2026-03-02 09:07:50 +00:00
renovate[bot]
68163e5975 Update dependency brakeman to v8.0.4 (#38002)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 09:06:15 +00:00
renovate[bot]
c9282d980d Update dependency addressable to v2.8.9 (#38013)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 09:04:53 +00:00
github-actions[bot]
7444c8f82e New Crowdin Translations (automated) (#38018)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-03-02 08:51:13 +00:00
Matt Jankowski
5fd1235ba2 Update binding_of_caller to version 2.0.0 (#38017) 2026-03-02 08:51:09 +00:00
renovate[bot]
db241b5c2c Update dependency axios to v1.13.6 (#38009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 08:50:54 +00:00
renovate[bot]
786fcac4a1 Update dependency ioredis to v5.10.0 (#38010)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 08:50:50 +00:00
Matt Jankowski
d845a8a289 Fix violations to existing cops from rubocop v1.85.0 (#38015) 2026-03-02 08:47:45 +00:00
Matt Jankowski
7f16397f3c Add validation spec for Form::Redirect model (#38011) 2026-02-27 17:05:29 +00:00
Matt Jankowski
7e5e96739f Use consistent calling style for TagManager#normalize_domain (#35764) 2026-02-27 16:38:34 +00:00
Matt Jankowski
9762b4a75c Use normalizes for tag name attribute (#37119) 2026-02-27 15:56:08 +00:00
Matt Jankowski
e92b7beb75 Refactor tests for FeaturedTag#display_name (#38007) 2026-02-27 15:23:48 +00:00
Dock
3c8e37907d Fix avatar alt-text running into other elements on image load failure. (#38000) 2026-02-27 15:22:19 +00:00
Echo
1e5cad072e Profile redesign: Profile fields feedback (#38005) 2026-02-27 13:54:08 +00:00
Echo
d69d7c0507 Profile editing: Tab display controls (#37994) 2026-02-27 13:36:19 +00:00
David Roetzel
6b88dd4923 Issue FeatureAuthorizations (#38004) 2026-02-27 11:00:21 +00:00
Claire
3b7c33e763 Add exclude_direct flag to /api/v1/accounts/:id/statuses to exclude direct messages (#37763) 2026-02-27 09:34:12 +00:00
github-actions[bot]
fc1f57b5f1 New Crowdin Translations (automated) (#38001)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-27 09:29:07 +00:00
Matt Jankowski
1bc5cc4fcf Use bundler version 4.0.7 (#37995) 2026-02-27 09:14:46 +00:00
renovate[bot]
dd1623e988 Update dependency storybook to v10.2.10 [SECURITY] (#37998)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-27 08:46:48 +00:00
Matt Jankowski
1dbb258d53 Update rails to version 8.1.2 (#36505) 2026-02-27 07:50:35 +00:00
diondiondion
7970eb392a Add share dialog for collections (#37986) 2026-02-26 17:45:09 +00:00
Echo
bca57020a0 Profile redesign: Fix fields in Chromium (#37996) 2026-02-26 17:04:46 +00:00
Claire
9c4d11f927 Add featured_tags to GET /api/v1/profile (#37932) 2026-02-26 16:18:42 +00:00
Matt Jankowski
5026bf6ac7 Use validation matchers for DisallowedHashtagValidator spec (#37636) 2026-02-26 15:56:16 +00:00
David Roetzel
b09e63da87 Federate activity when remote account is added to a Collection (#37992) 2026-02-26 15:11:02 +00:00
Claire
951a42f491 Add max_note_length and max_display_name_length to configuration.accounts in Instance entity (#37991) 2026-02-26 14:58:07 +00:00
Echo
d18a47b6a7 Profile editing: Utilize new API (#37990) 2026-02-26 13:55:10 +00:00
David Roetzel
51b81b3ce9 Allow remote accounts in Collections (#37989) 2026-02-26 13:31:23 +00:00
github-actions[bot]
970ac04be7 New Crowdin Translations (automated) (#37985)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-26 10:07:33 +00:00
Claire
4d2a148ccb Fix profile redesign profile fields gap (#37979) 2026-02-25 17:45:51 +00:00
Echo
dcbf7ab8dc Profile redesign: Account fields grid (#37976) 2026-02-25 16:59:18 +00:00
David Roetzel
f9326efef6 Add moderation consequences for collections (#37974) 2026-02-25 14:32:07 +00:00
Claire
ea34d35b32 Fix username availability check being wrongly applied on race conditions (#37975) 2026-02-25 14:30:01 +00:00
diondiondion
440466c246 Display public collections on profile "Featured tab" (#37967) 2026-02-25 14:14:55 +00:00
Matt Jankowski
32873e63cf Remove references to removed prettier config files (#37962) 2026-02-25 14:13:32 +00:00
github-actions[bot]
953472b40d New Crowdin Translations (automated) (#37968)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-25 10:14:08 +00:00
David Roetzel
e2c9426c77 Split status batch and moderation actions (#37970) 2026-02-25 10:07:46 +00:00
diondiondion
919b1e69b8 Add collection report modal (#37961) 2026-02-24 14:29:46 +00:00
David Roetzel
72406a1cd1 Refactor: Introduce admin base action class (#37960) 2026-02-24 14:22:44 +00:00
Claire
1e87bd178d Bump version to v4.5.7 (#37965) 2026-02-24 13:54:33 +00:00
Claire
43ef9f66b6 Add PATCH /api/v1/profile (#37934) 2026-02-24 10:48:56 +00:00
Echo
3ed16489d0 Profile editing: Add singular to translated string (#37958) 2026-02-24 10:04:11 +00:00
renovate[bot]
49bcaba628 Update dependency postcss-preset-env to v11.2.0 (#37945)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 09:08:37 +00:00
github-actions[bot]
c5b6881c1d New Crowdin Translations (automated) (#37956)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-24 09:08:25 +00:00
renovate[bot]
96bff0e4cd Update dependency omniauth-saml to v2.2.5 (#37944)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 08:37:41 +00:00
Echo
ef6405ab28 Profile editing: Featured tags (#37952) 2026-02-23 15:53:49 +00:00
David Roetzel
e2aecd040c Collapse posts/collections in moderation interface (#37929) 2026-02-23 15:14:24 +00:00
diondiondion
e0cc3a30ef Allow displaying icon in TextInput component (#37951) 2026-02-23 14:12:02 +00:00
David Roetzel
b785f05ddb Add coverage for StatusBatchAction (#37949) 2026-02-23 13:22:24 +00:00
diondiondion
f9c18ba170 Fix overly large avatars in report modal (#37950) 2026-02-23 12:16:54 +00:00
Matt Jankowski
1d513966bd Remove unneeded haml-lint problem matcher (#37930) 2026-02-23 09:54:50 +00:00
github-actions[bot]
6bd4d79802 New Crowdin Translations (automated) (#37940)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-23 09:03:07 +00:00
renovate[bot]
5fc2be54c7 Update dependency rspec-sidekiq to v5.3.0 (#37938)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-23 09:03:03 +00:00
David Roetzel
6ba6285a73 Reject unconfirmed FASPs (#37926) 2026-02-20 14:40:31 +00:00
David Roetzel
7b85d21823 Re-use custom socket class for FASP requests (#37925) 2026-02-20 14:27:50 +00:00
diondiondion
3d33294870 Collection accounts editor: Show info badge on accounts that haven't posted in over a week (#37928) 2026-02-20 14:01:39 +00:00
diondiondion
68a7cd404d Require following accounts before being able to add them to a collection (#37927) 2026-02-20 13:14:36 +00:00
github-actions[bot]
4d2ca8c92a New Crowdin Translations (automated) (#37924)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-20 10:52:57 +00:00
Claire
cc1e65dcec Add GET /api/v1/profile (#37912) 2026-02-20 10:16:04 +00:00
Renaud Chaput
e24737c612 Replace prettier with oxfmt (#37893) 2026-02-19 18:04:25 +00:00
Echo
8e7c3973dc Remove conditional check for timeline data (#37922) 2026-02-19 17:20:33 +00:00
diondiondion
39ff07bc89 Only suggest discoverable accounts in collection account editor (#37920) 2026-02-19 16:43:31 +00:00
github-actions[bot]
7eb4b907eb New Crowdin Translations (automated) (#37918)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-19 14:42:24 +00:00
Matt Jankowski
2a9de97cb6 Use validation matchers for UserEmailValidator spec (#37908) 2026-02-19 14:25:58 +00:00
diondiondion
c118ff708f Merge collection settings into single editor page (#37916) 2026-02-19 14:09:52 +00:00
Echo
ed4787c1b1 Profile editing: Name and bio (#37907) 2026-02-19 13:53:29 +00:00
Matt Jankowski
157583659a Use validation matchers for UniqueUsernameValidator spec (#37909) 2026-02-19 13:14:12 +00:00
Matt Jankowski
40f92f3af8 Use validation matchers for UnreservedUsernameValidator spec (#37910) 2026-02-19 12:50:09 +00:00
David Roetzel
e288bf6516 Show reported collections in moderation interface (#37898) 2026-02-19 12:46:38 +00:00
renovate[bot]
6f859364fb Update dependency rack to v3.2.5 (#37895)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 12:46:32 +00:00
renovate[bot]
238d0f8e1d Update dependency devise to v5.0.2 (#37903)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-19 11:12:08 +00:00
Matt Jankowski
f48a299004 Use validation matchers for UrlValidator spec (#37911) 2026-02-19 11:11:46 +00:00
github-actions[bot]
093528ef17 New Crowdin Translations (automated) (#37915)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-19 11:11:41 +00:00
diondiondion
3df8fb8fe9 Fix visibility of video overlay controls in light mode (#37906) 2026-02-18 15:28:49 +00:00
Matt Jankowski
66052e3ddd Use validation matchers for StatusLengthValidator spec (#37905) 2026-02-18 15:22:22 +00:00
Matt Jankowski
e8ecf1719c Use validation matchers for StatusPinValidator spec (#37904) 2026-02-18 15:09:38 +00:00
Matt Jankowski
a411b7eccb Use validation matchers for PollOptionsValidator spec (#37901) 2026-02-18 13:44:59 +00:00
Matt Jankowski
9e40d3ef37 Use validation matchers for ReactionValidator spec (#37900) 2026-02-18 13:43:21 +00:00
diondiondion
488e0b2617 Add collection detail page (#37897) 2026-02-18 13:19:39 +00:00
Claire
bd64ca2583 Add new profile settings (#37890) 2026-02-18 13:18:44 +00:00
Echo
079f8615fe Profile redesign: Design fixes (#37892) 2026-02-18 12:05:02 +00:00
github-actions[bot]
b62ba9e29e New Crowdin Translations (automated) (#37896)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-18 10:33:31 +00:00
Matt Jankowski
f95cd68667 Use validation matchers for NoteLengthValidator spec (#37891) 2026-02-18 10:33:26 +00:00
renovate[bot]
61b9bc4fac Update dependency rspec-rails to v8.0.3 (#37888)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-18 10:26:47 +00:00
Matt Jankowski
3c3a1b1684 Use separate rules with same groupName for playwright updates (#37809) 2026-02-17 17:49:19 +00:00
Echo
4b1f66418b Profile editing: Add initial route (#37885) 2026-02-17 15:45:24 +00:00
Matt Jankowski
371946fa80 Use validation matchers for LanguageValidator spec (#37886) 2026-02-17 14:59:31 +00:00
Nicholas La Roux
438602c488 Upgrade rubocop from v1.84.0 to v1.84.2, update config, and correct offences (#37795) 2026-02-17 14:56:46 +00:00
Claire
0b66e74426 Add GET /api/v1/donation_campaigns (#37880) 2026-02-17 10:54:21 +00:00
Claire
4a6d17ad7b Fix hashtag matching by replacing negative lookbehind with positive lookbehind (#37684) 2026-02-17 10:27:36 +00:00
github-actions[bot]
0a6412faf9 New Crowdin Translations (automated) (#37884)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-17 09:21:35 +00:00
Matt Jankowski
7f28dd1179 Use validation matchers for FollowLimitValidator spec (#37792) 2026-02-17 09:03:46 +00:00
Matt Jankowski
2cb8471d81 Update doorkeeper i18n for invalid code challenge method (#37827) 2026-02-17 09:01:59 +00:00
renovate[bot]
1618c28a48 Update dependency dotenv to v17.3.1 (#37855)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-17 09:01:19 +00:00
Estel
335eeb6239 Add try_files directive comments to nginx.conf (#37866) 2026-02-17 08:55:11 +00:00
diondiondion
a644a4a762 Allow managing collection accounts (#37812) 2026-02-16 18:17:20 +00:00
Claire
cff25c186b Fix race condition when processing statuses twice with the same idempotency key (#37879) 2026-02-16 14:58:22 +00:00
Echo
f7bf804a3f Profile redesign: Switch to server flag (#37876) 2026-02-16 13:06:49 +00:00
Claire
f199d7995c Add missing “Filter action” source string (#37838) 2026-02-16 12:34:38 +00:00
Claire
284c53f439 Remove disabled bundlesize-compare workflow (#37875) 2026-02-16 09:51:24 +00:00
renovate[bot]
ed6d8fad9e Update dependency ioredis to v5.9.3 (#37849)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 09:30:56 +00:00
github-actions[bot]
6d3eb43500 New Crowdin Translations (automated) (#37863)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-16 09:14:21 +00:00
renovate[bot]
4425b8a0b2 Update dependency stackprof to v0.2.28 (#37873)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 08:32:29 +00:00
renovate[bot]
4396217434 Update dependency jsdom to v28.1.0 (#37874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 08:32:12 +00:00
renovate[bot]
9baa51c67e Update dependency capybara-playwright-driver to v0.5.8 (#37840)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 08:29:38 +00:00
renovate[bot]
e8ca5f633e Update dependency devise to v5.0.1 (#37860)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-16 08:25:24 +00:00
Matt Jankowski
1b724e9e12 Capture output in cli/emoji spec (#37861) 2026-02-16 08:24:39 +00:00
Matt Jankowski
56ecdde152 Add ContentPoliciesHelper#policy_list to wrap string building in views (#37856) 2026-02-13 15:54:41 +00:00
Echo
3d0a6ba831 Emoji: Cache data by path instead of just Etag (#37858) 2026-02-13 15:23:22 +00:00
Claire
c1a5bd52f2 Update devcontainer image version (#37857) 2026-02-13 15:17:12 +00:00
Echo
f5aa5adcf7 Profile redesign: About tab (#37851) 2026-02-13 13:37:39 +00:00
David Roetzel
6c3bd944f8 Allow reporting (local) Collections (#37848) 2026-02-13 11:11:44 +00:00
github-actions[bot]
a3f34137fd New Crowdin Translations (automated) (#37853)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-13 10:45:32 +00:00
renovate[bot]
747ec35885 Update dependency annotaterb to v4.22.0 (#37835)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-13 10:32:29 +00:00
Claire
ab9aa25cd3 Fix delete & redraft of pending posts (#37839) 2026-02-13 10:32:16 +00:00
renovate[bot]
83182f9e13 Update dependency vite-tsconfig-paths to v6.1.1 (#37834)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-13 10:16:00 +00:00
Echo
45057d1df2 Fixes appearing in Following list (#37854) 2026-02-13 10:03:57 +00:00
diondiondion
c44cc1f5c3 Implement Collection list item design (#37850) 2026-02-12 16:30:10 +00:00
David Roetzel
f57167c61a Add ID/URI to collection items (#37842) 2026-02-12 15:31:45 +00:00
Matt Jankowski
db64ae368f Use implicit class_names in 2FA partials (#37846) 2026-02-12 15:19:43 +00:00
Claire
bfec82e5f9 Add nan-TW to interface languages (#37822) 2026-02-12 15:12:08 +00:00
diondiondion
46fd341685 Fix bad visibility of scroll buttons on follow-suggestions carousel (#37843) 2026-02-12 15:10:53 +00:00
diondiondion
e4bb347f72 Theme tokens sync (#37841) 2026-02-12 11:33:28 +00:00
David Roetzel
37d859db29 Federate deletion of collection item (#37837) 2026-02-12 10:39:13 +00:00
Claire
37e82ee66f Add --suspended-only option to tootctl emoji purge (#37828) 2026-02-12 10:25:29 +00:00
github-actions[bot]
6e8df21233 New Crowdin Translations (automated) (#37836)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-12 08:59:31 +00:00
Echo
ca9966ce2f Make pinning and unpinning directly modify state (#37831) 2026-02-11 16:58:00 +00:00
Claire
9129f98776 Process actor public keys when they are in a separate document without the ActivityStreams context (#37826) 2026-02-11 15:47:24 +00:00
Claire
dfe44bcaef Add ability to require 2FA for specific roles (including Everybody) (#37701) 2026-02-11 14:34:09 +00:00
David Roetzel
3e1127d27b Federate Add when item is added to Collection (#37823) 2026-02-11 13:52:29 +00:00
diondiondion
f99c60a8f3 Add useStorageState hook (#37825) 2026-02-11 13:30:53 +00:00
Echo
bbd88d356d Profile redesign: Show yourself in follower list (#37813) 2026-02-11 13:19:18 +00:00
Claire
20fedab093 Fix mistakenly included glitch-soc database columns (#37824) 2026-02-11 12:34:34 +00:00
Nicholas La Roux
062d0b454b Update various eslint packages and correct offences (#37814) 2026-02-11 11:24:22 +00:00
diondiondion
8c2c94fa6c Add Cmd/Ctrl+Enter to submit when Textarea is focused (#37821) 2026-02-11 10:44:20 +00:00
Claire
c53bb3b33e Rename “Mode” to “Color scheme” (#37819) 2026-02-11 10:36:59 +00:00
renovate[bot]
94524dd29c Update dependency @vitejs/plugin-react to v5.1.4 (#37798)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 10:34:45 +00:00
renovate[bot]
3faefafdcb Update dependency pino to v10.3.1 (#37799)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-11 10:15:53 +00:00
github-actions[bot]
cc75188a76 New Crowdin Translations (automated) (#37817)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-11 09:11:56 +00:00
Claire
d13d7b4566 Fix server theme migration (#37810) 2026-02-10 20:53:43 +00:00
Echo
0279a52216 Profile redesign: Account filter fixes (#37811) 2026-02-10 17:20:02 +00:00
Matt Jankowski
66b09318ed Remove unneeded rescue from DOB Validator (#37785) 2026-02-10 16:24:23 +00:00
Claire
63aac77b61 Purge custom emojis on domain suspension (#37808) 2026-02-10 16:13:06 +00:00
Matt Jankowski
34514bcfe9 Move theme-related helper methods out of controller (#37807) 2026-02-10 15:34:42 +00:00
Claire
040555be7f Fix NoMethodError in ActivityPub::FetchFeaturedTagsCollectionService (#37806) 2026-02-10 15:24:54 +00:00
renovate[bot]
f3347b1c67 Update dependency irb to v1.17.0 (#37780)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-10 13:30:21 +00:00
Claire
46e4b5ae37 Fix streaming of disabled timelines with special permissions (#37791) 2026-02-10 13:27:00 +00:00
David Roetzel
ae30c40335 Auto accept account added to collection (#37805) 2026-02-10 12:48:28 +00:00
Claire
75ba314e6b Migrate to new theming infrastructure (#37612) 2026-02-10 10:59:47 +00:00
Echo
fb89198460 Profile redesign: Quality pass (#37766) 2026-02-10 10:56:03 +00:00
Matt Jankowski
2774e0fbfa Reduce stubbing SUT for EmailMxValidator spec (#37750) 2026-02-10 10:49:49 +00:00
renovate[bot]
b8d735411f Update dependency vite-tsconfig-paths to v6.1.0 (#37773)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-10 10:49:41 +00:00
renovate[bot]
920e9fa9d3 Update dependency axios to v1.13.5 [SECURITY] (#37803)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-10 10:30:35 +00:00
github-actions[bot]
662df23793 New Crowdin Translations (automated) (#37797)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-10 10:16:57 +00:00
David Roetzel
03f73377d9 Federate updates to collections (#37790) 2026-02-10 10:08:55 +00:00
David Roetzel
0763ad0d96 Set a more explicit version number for GH Action (#37800) 2026-02-10 10:00:27 +00:00
Claire
8aabc8628d Fix i18n check for missing source strings (#37801) 2026-02-10 09:56:16 +00:00
Renaud Chaput
837d1decc9 Add a i18n check in pre-commit for JS files (#37793) 2026-02-10 09:13:09 +00:00
Matt Jankowski
0b8ce7200a Use validation matchers for ExistingUsernameValidator spec (#37749) 2026-02-09 15:24:31 +00:00
Jonny Saunders
e17bbed88f Change: Consolidate collection handling in jsonld helper (#34595) 2026-02-09 15:19:36 +00:00
renovate[bot]
665f746165 Update artifact actions (major) (major) (#37788)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 15:06:12 +00:00
renovate[bot]
da91639b43 Update twk3/rollup-size-compare-action action to v1.2.0 (#37787)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 14:52:08 +00:00
renovate[bot]
c1b945425c Update peter-evans/create-pull-request action to v8 (#37783)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 14:11:10 +00:00
renovate[bot]
624c25edd8 Update actions/cache action to v5 (#37781)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 14:11:06 +00:00
renovate[bot]
c0f809cb5b Update actions/checkout action to v6 (#37782)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 13:57:47 +00:00
Echo
b4fb25643a Fix: Changes to pins update immediately (#37765) 2026-02-09 13:14:24 +00:00
Claire
d3cef82401 Refactor store_current_location before_action in OAuth::AuthorizationsController (#37779) 2026-02-09 11:05:32 +00:00
David Roetzel
b9a538e57a Pin Actions to SHA (#37764) 2026-02-09 09:58:42 +00:00
Matt Jankowski
3f845e649b Use bundler version 4.0.6 (#37745) 2026-02-09 09:43:28 +00:00
github-actions[bot]
6ec4bd5927 New Crowdin Translations (automated) (#37767)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-09 09:04:32 +00:00
renovate[bot]
77bc8f7aac Update dependency @types/react to v18.3.28 (#37777)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 09:04:25 +00:00
renovate[bot]
08f9af986b Update dependency dotenv to v17.2.4 (#37753)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 08:58:21 +00:00
renovate[bot]
1dbf69d78f Update dependency oj to v3.16.15 (#37757)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 08:58:13 +00:00
renovate[bot]
08003ba6b9 Update dependency postcss-preset-env to v11.1.3 (#37758)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-09 08:57:49 +00:00
Echo
2e30044a37 Profile redesign: Pinned posts (#37761)
Co-authored-by: diondiondion <mail@diondiondion.com>
2026-02-06 14:53:34 +00:00
Echo
1310628a60 Bust relationship cache key (#37760) 2026-02-06 14:36:12 +00:00
diondiondion
7e27ba990e Move account search into hook (#37762) 2026-02-06 13:08:29 +00:00
diondiondion
2768ab77e5 Add new components Combobox and EmptyState (#37748) 2026-02-06 12:51:27 +00:00
Claire
5b24f4097d Fix processing of object updates with duplicate hashtags (#37756) 2026-02-06 10:09:42 +00:00
github-actions[bot]
b1d4459267 New Crowdin Translations (automated) (#37755)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-06 09:52:28 +00:00
Itoh Shimon
96de28dd6f Enable coexistence of horizontal and vertical posts (#37204) 2026-02-06 09:51:22 +00:00
Echo
7a4945c0d3 Show mute end date in badge (#37747) 2026-02-05 20:01:28 +00:00
Matt Jankowski
acdd0b33a3 Pre-update some config file no-op changes from 8.1 branch (#37746) 2026-02-05 16:40:18 +00:00
renovate[bot]
da4a1495d8 Update dependency oj to v3.16.14 (#37736)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-05 16:34:30 +00:00
Matt Jankowski
af5ce5dad9 Use validation matchers for DomainValidator spec (#37662) 2026-02-05 15:55:31 +00:00
Shlee
ecdc7ff3f9 Add defensive check to AfterUnallowDomainService (#37744)
Co-authored-by: Your Name <you@example.com>
2026-02-05 14:13:56 +00:00
Echo
d2dca826dd Cancel quote button appearing in all statuses (#37742) 2026-02-05 12:58:00 +00:00
Matt Jankowski
f652c54c33 Update devise to version 5.0 (#37419) 2026-02-05 11:05:32 +00:00
David Roetzel
9cd94168b3 Federate Remove when collection is deleted (#37741) 2026-02-05 10:33:39 +00:00
Matt Jankowski
ffb84ea79d Remove bin/bundle stub for bundler (#37461) 2026-02-05 10:29:41 +00:00
renovate[bot]
c53c42b650 Update dependency @vitejs/plugin-react to v5.1.3 (#37698)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-05 10:27:13 +00:00
renovate[bot]
e24a19f8bf Update dependency jsdom to v28 (#37697)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-05 10:23:08 +00:00
github-actions[bot]
ed649fbdb7 New Crowdin Translations (automated) (#37740)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-05 10:08:56 +00:00
Matt Jankowski
e82eb2b037 Convert admin/confirmations spec controller->request/system (#37738) 2026-02-05 10:04:10 +00:00
renovate[bot]
8a65965ded Update dependency brakeman to v8.0.2 (#37728)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-05 09:56:45 +00:00
renovate[bot]
6f47a7709e Update dependency test-prof to v1.5.2 (#37726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-05 09:56:38 +00:00
renovate[bot]
8949ef57aa Update dependency kt-paperclip to v7.3.0 (#37689)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-05 09:56:33 +00:00
David Roetzel
73206856c5 Refactor activity serialization (#37678) 2026-02-05 09:39:27 +00:00
diondiondion
8ebe2e673e Split collection editor into dedicated routes (#37731) 2026-02-04 17:45:41 +00:00
Matt Jankowski
0d6fc8026d Convert auth/confirmations spec controller->request (#37735) 2026-02-04 17:42:50 +00:00
github-actions[bot]
015d88b4c6 New Crowdin Translations (automated) (#37733)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-04 17:03:08 +00:00
Echo
7f53a77fa3 Refactors header from Status component (#37732) 2026-02-04 13:12:21 +00:00
Valtteri Laitinen
ee631bf826 Make “Following” correctly translatable (#37671) 2026-02-04 10:56:33 +00:00
Matt Jankowski
4f99b48e8e Convert admin/accounts controller->request specs (#37727) 2026-02-04 10:42:34 +00:00
renovate[bot]
a7aa52c7ef Update dependency aws-sdk-core to v3.242.0 (#37711)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-04 09:02:40 +00:00
renovate[bot]
7d4f5ec8e6 Update dependency devise-two-factor to v6.4.0 (#37708)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-04 08:55:24 +00:00
github-actions[bot]
1cb3b49537 New Crowdin Translations (automated) (#37729)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-04 08:48:44 +00:00
Claire
c48634cf5f Bump version to v4.5.6 (#37722) 2026-02-03 14:28:23 +00:00
Claire
629125cc3d Merge commit from fork 2026-02-03 14:59:53 +01:00
Echo
0923e2cb26 Profile redesign: Fields iteration (#37682) 2026-02-03 13:02:33 +00:00
Echo
346ca87ee8 Profile redesign: Follow button and menu reorg (#37707) 2026-02-03 11:33:20 +00:00
diondiondion
218ca36653 Add components TextInput, TextArea, and FormStack (#37705) 2026-02-03 10:02:13 +00:00
github-actions[bot]
c1272c4b68 New Crowdin Translations (automated) (#37714)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-03 09:29:43 +00:00
diondiondion
ceb4a878fb Add Select component (#37702) 2026-02-02 17:31:34 +00:00
David Roetzel
6188de3efc Add ActivityPub serializer specs (#37706) 2026-02-02 16:47:42 +00:00
Matt Jankowski
9de54635ed Add coverage for "too many IDs" scenario in api/v1/statuses (#37699) 2026-02-02 15:11:15 +00:00
renovate[bot]
d0cd436ac9 Update dependency pg to v8.18.0 (#37686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 14:45:04 +00:00
ahxxm
c6f5315aa9 Add text-autospace to status content (#37694) 2026-02-02 14:03:55 +00:00
diondiondion
29e5532870 Add components RadioButton and Fieldset (#37685) 2026-02-02 13:26:31 +00:00
renovate[bot]
69351b3b74 Update dependency aws-sdk-s3 to v1.213.0 (#37656)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 10:27:59 +00:00
renovate[bot]
b3086ffbf3 Update dependency annotaterb to v4.21.0 (#37672)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 10:27:53 +00:00
renovate[bot]
89be2030d4 Update dependency brakeman to v8 (#37673)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 10:27:38 +00:00
Echo
1100035af4 Profile redesign: Additional badges (#37683) 2026-02-02 10:23:08 +00:00
renovate[bot]
65ccf89bfc Update dependency pg-connection-string to v2.11.0 (#37687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-02 10:02:01 +00:00
github-actions[bot]
6bf2b27b5b New Crowdin Translations (automated) (#37688)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-02-02 09:39:24 +00:00
diondiondion
a7a33ef6bc Adds new Checkbox and CheckboxField components (#37665) 2026-01-30 14:44:28 +00:00
Claire
a75790143c Change bundlesize-compare workflow to compare with the result of the merge (#37680) 2026-01-30 13:59:54 +00:00
github-actions[bot]
6a5578a0db New Crowdin Translations (automated) (#37668)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-30 10:09:15 +00:00
Claire
3f16c48838 Fix connection recycling pushing symbols to connection pool (#37674) 2026-01-30 09:59:04 +00:00
Echo
0688e64a0b Fix instance api account merging (#37666) 2026-01-30 09:30:22 +00:00
Claire
0997ae0627 Clear affected relationship cache on Move activities (#37664) 2026-01-30 09:15:22 +00:00
Matt Jankowski
d0502ac3c1 Use "namespace style" for URL generation in admin/ area forms (#35080) 2026-01-29 15:56:10 +00:00
Daniel King
d5d57ac25a Add flag to preserve cached media on cleanup (#36200)
Co-authored-by: Daniel King <git@kin.gy>
2026-01-29 15:53:51 +00:00
renovate[bot]
0196c12e7f Update dependency dotenv to v17 (#35216)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2026-01-29 14:48:09 +00:00
diondiondion
6f53b0b634 Implement editing collection settings and deleting collections (#37658) 2026-01-29 11:01:40 +00:00
github-actions[bot]
21f8fc808e New Crowdin Translations (automated) (#37655)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-29 10:59:30 +00:00
renovate[bot]
2cea3ccba0 Update dependency axios to v1.13.4 (#37640)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-29 10:14:44 +00:00
Matt Jankowski
23148dc536 Update rubocop to version 1.8.40 (#37628) 2026-01-29 10:14:14 +00:00
Claire
bc3871f992 Fix followers with profile subscription (bell icon) being notified of post edits (#37646) 2026-01-29 09:38:57 +00:00
diondiondion
2427e14446 Add initial collections editor page (#37643) 2026-01-29 09:06:49 +00:00
Echo
8a42689268 Prevent account note from appearing on your own profile (#37653) 2026-01-29 09:02:42 +00:00
Echo
9079a75574 Profile redesign: Featured tags (#37645) 2026-01-29 09:01:36 +00:00
Tan, Kian-ting
8efcdc04eb Add nan-TW to interface languages (#34923) 2026-01-28 17:56:29 +00:00
Claire
a6883242e3 Remove unused nan locale files (replaced by nan-TW) (#37650) 2026-01-28 16:32:19 +00:00
github-actions[bot]
42dfd6c031 New Crowdin Translations (automated) (#37647)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-28 16:04:42 +00:00
Matt Jankowski
14ca5d0e6b Use collection partial for rule translation in signup flow (#35932) 2026-01-28 14:05:02 +00:00
Claire
a495a0cbfc Fix avatar and header descriptions being returned for suspended accounts (#37641) 2026-01-28 11:06:30 +00:00
Matt Jankowski
f861a5cee0 Add action_logs association for account (#36022) 2026-01-28 11:04:00 +00:00
Matt Jankowski
c1626486bc Group classes in media proxy rescue_from declaration (#37304) 2026-01-28 10:52:31 +00:00
Echo
6a995decb8 Experiment with adding a bundle comparison tool (#37630) 2026-01-28 10:33:31 +00:00
PGray
f1c00feb5c Fix quote cancel button not appearing after edit then delete-and-redraft (#37066) 2026-01-28 10:33:04 +00:00
Echo
ec76288dff Profile redesign: Timeline filters (#37626) 2026-01-28 10:17:32 +00:00
Echo
3f46034039 Tags component (#37638) 2026-01-28 10:17:11 +00:00
Shlee
d438161b9b Unclosed connection leak when replacing pooled connection in SharedTimedStack.try_create (#37335) 2026-01-28 10:14:03 +00:00
Claire
6af4696c70 Add backend support for storing remote actors profile pic and header descriptions (#37634) 2026-01-28 09:32:59 +00:00
Matt Jankowski
1ae6b52c47 Reduce oauth/authorizations monkey-patch size (#37615) 2026-01-28 09:29:59 +00:00
github-actions[bot]
8ba87ef568 New Crowdin Translations (automated) (#37639)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-28 09:25:20 +00:00
renovate[bot]
17533cba12 Update dependency simple-navigation to v4.4.1 (#37622)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-28 09:07:42 +00:00
renovate[bot]
5a05c97749 Update dependency test-prof to v1.5.1 (#37629)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-28 09:06:56 +00:00
Claire
7af5ba271d Fix error when encountering invalid tag in updated object (#37635) 2026-01-27 16:01:22 +00:00
Claire
a20519d671 Clean up arg handling for notification worker (#37587) 2026-01-27 15:59:51 +00:00
Matt Jankowski
48c102aabe Use validation matchers for DateOfBirthValidator spec (#37631) 2026-01-27 15:36:55 +00:00
Echo
34f0482ad4 Profile redesign: Account notes (#37593) 2026-01-27 15:34:09 +00:00
Echo
c0616bcab6 Profile redesign: Username update (#37627) 2026-01-27 15:03:52 +00:00
Echo
7a7c42b50c Makes bundle visualizer output JSON when in CI (#37633) 2026-01-27 15:03:00 +00:00
Echo
76ab866d93 Deprecate need for revert-layer CSS (#37632) 2026-01-27 14:45:35 +00:00
Claire
9ea64fcb5a Fix last_status_at not accurately tracking last status time for remote accounts (#37619) 2026-01-27 13:23:12 +00:00
Matt Jankowski
a28ccf2950 Use validation matchers for PollExpirationValidator spec (#37616) 2026-01-27 12:54:50 +00:00
David Roetzel
1d4c2c5670 Federate creation of collections (#37618) 2026-01-27 10:52:54 +00:00
Matt Jankowski
aa347708f5 Convert oauth/authorized_applications spec controller->request (#37614) 2026-01-27 10:44:24 +00:00
renovate[bot]
142714cd1e Update dependency pino to v10.3.0 (#37588)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 10:21:44 +00:00
Matt Jankowski
604bed2930 Convert oauth/authorizations spec controller->request (#37613) 2026-01-27 10:20:25 +00:00
Matt Jankowski
634ff77d82 Convert settings/aliases spec controller->system (#37617) 2026-01-27 10:18:07 +00:00
Claire
73fc40993b Fix filtering of mentions from filtered-on-their-origin-server accounts (#37583) 2026-01-27 09:53:21 +00:00
renovate[bot]
cd7ffb5a10 Update dependency hiredis-client to v0.26.4 (#37610)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 09:53:16 +00:00
renovate[bot]
f1e0d81d03 Update dependency postcss-preset-env to v11.1.2 (#37609)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 09:53:13 +00:00
renovate[bot]
60e5e7e097 Update dependency axios to v1.13.3 (#37608)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-27 09:53:10 +00:00
github-actions[bot]
6a73618f3d New Crowdin Translations (automated) (#37621)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-27 09:52:41 +00:00
renovate[bot]
89c1b9a8fd Update dependency devise-two-factor to v6.3.1 (#37430)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-26 10:44:13 +00:00
github-actions[bot]
e317645ed9 New Crowdin Translations (automated) (#37598)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-26 10:10:31 +00:00
Matt Jankowski
24fb3e8465 Use collection render on admin dashboard system checks (#35976) 2026-01-26 09:43:30 +00:00
Matt Jankowski
876ccfe0a3 Use Report#local? delegation more broadly (#37596) 2026-01-26 09:43:21 +00:00
Matt Jankowski
f7a2e5c715 Use validation matchers for InstanceModerationNote spec (#37597) 2026-01-26 09:42:55 +00:00
renovate[bot]
2edcb234e0 Update dependency vite-tsconfig-paths to v6.0.5 (#37446)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-26 09:32:30 +00:00
Claire
1b748eaeb0 Fix irrelevant accounts being passed through silenced_account_ids to DistributionWorker (#37589) 2026-01-26 09:26:19 +00:00
Michael Stanclift
7022572011 Change 'anyone can quote' label to 'quotes allowed' (#37427) 2026-01-26 08:50:35 +00:00
Matt Jankowski
29ec2cd186 Add targeted_account_notes association to simplify usage (#35540) 2026-01-23 16:35:19 +00:00
renovate[bot]
c36db57ace Update dependency faker to v3.6.0 (#37575)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 16:20:33 +00:00
Echo
c1414f1161 Callout component (#37590) 2026-01-23 15:53:48 +00:00
diondiondion
a1acf8f4bc Add "My collections" page (#37552) 2026-01-23 13:51:39 +00:00
Claire
d05df5c197 Fix quote cache invalidation (#37592) 2026-01-23 13:35:43 +00:00
renovate[bot]
93bda9c76d Update dependency core-js to v3.48.0 (#37574)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 13:15:39 +00:00
David Roetzel
c5c70311d8 Return empty array when requesting collections of an account that blocked you (#37591) 2026-01-23 13:11:57 +00:00
Echo
0a0e253614 Toggle component (#37582) 2026-01-23 12:20:56 +00:00
renovate[bot]
53c620ba69 Update dependency lodash to v4.17.23 [SECURITY] (#37572)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 11:08:39 +00:00
renovate[bot]
e203795ebd Update dependency cors to v2.8.6 (#37579)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 10:59:52 +00:00
renovate[bot]
6a1afa2580 Update dependency sass to v1.97.3 (#37573)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 10:57:10 +00:00
Echo
ad735d350c Set up modes for Chromatic (#37586) 2026-01-23 10:44:15 +00:00
David Roetzel
de63b61943 Change Collections API shape (#37580) 2026-01-23 10:22:37 +00:00
github-actions[bot]
e12f39aa04 New Crowdin Translations (automated) (#37584)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-23 09:19:24 +00:00
renovate[bot]
1835ce357e Update dependency stylelint to v17 (#37509)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 16:10:53 +00:00
diondiondion
0924171c0f Add form field components: TextInputField, TextAreaField, SelectField (#37578) 2026-01-22 16:08:57 +00:00
Shlee
1809048105 Safefy: Updated Admin::AccountDeletionWorker to match AccountDeletionWorker (#37577) 2026-01-22 16:01:44 +00:00
renovate[bot]
3806d15d99 Update dependency pg to v8.17.2 (#37557)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 15:00:53 +00:00
Matt Jankowski
157d8c0d99 Remove deprecated usage of imagemagick (#37488) 2026-01-22 14:57:19 +00:00
github-actions[bot]
3a84b73d80 New Crowdin Translations (automated) (#37569)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-22 14:26:33 +00:00
Matt Jankowski
7b9479239a Typo fix in federation document (#37564) 2026-01-22 13:59:36 +00:00
renovate[bot]
8dcd388189 Update dependency aws-sdk-s3 to v1.212.0 (#37536)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 13:50:59 +00:00
renovate[bot]
52ca91c43d Update dependency pg-connection-string to v2.10.1 (#37558)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-22 13:50:23 +00:00
Claire
958103368e Shorten caching of quote posts pending approval (#37570) 2026-01-22 12:38:00 +00:00
Echo
42b2fdb0ac Re-download Material Icons (#37571) 2026-01-22 12:04:15 +00:00
Matt Jankowski
562ea656f4 Add coverage for TagManager#normalize_domain (#35994) 2026-01-21 16:11:38 +00:00
nicole mikołajczyk
3219373d56 Add profile field limits to instance serializer (#37535) 2026-01-21 16:01:33 +00:00
Echo
6897475f9b Adds theming to Storybook (#37562) 2026-01-21 15:54:52 +00:00
renovate[bot]
22e438d7bd Update dependency @csstools/stylelint-formatter-github to v2 (#37515)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-21 14:14:48 +00:00
github-actions[bot]
1468f94509 New Crowdin Translations (automated) (#37555)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-21 13:08:16 +00:00
Echo
e79d51ce19 Profile redesign: verified badges (#37538) 2026-01-21 13:08:08 +00:00
renovate[bot]
5d82d48af3 Update dependency stylelint-config-standard-scss to v17 (#37511)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-21 12:31:35 +00:00
renovate[bot]
24ffa00bca Update dependency pino to v10.2.1 (#37543)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-21 12:31:19 +00:00
David Roetzel
783504f36a Do not return undiscoverable collections (#37560) 2026-01-21 12:30:07 +00:00
Claire
e7c6600d83 Fix cross-server conversation tracking (#37559) 2026-01-21 12:02:41 +00:00
David Roetzel
e65103bd3d Fix rendering of initial state when collections feature is enabled (#37556) 2026-01-21 09:18:16 +00:00
Echo
22ec368574 Profile redesign: Badges (#37550) 2026-01-20 15:15:49 +00:00
Claire
400c1f3e8e Bump version to v4.5.5 (#37551) 2026-01-20 15:00:10 +00:00
Claire
028e76f770 Merge commit from fork
* Add limit on inbox payload size

The 1MB limit is consistent with the limit we use when fetching remote resources

* Add limit to number of options from federated polls

* Add a limit to the number of federated profile fields

* Add limit on federated username length

* Add hard limits for federated display name and account bio

* Add hard limits for `alsoKnownAs` and `attributionDomains`

* Add hard limit on federated custom emoji shortcode

* Highlight most destructive limits and expand on their reasoning
2026-01-20 15:14:45 +01:00
Claire
841dfce9f7 Merge commit from fork 2026-01-20 15:13:43 +01:00
Claire
7a0d3d3bf8 Merge commit from fork 2026-01-20 15:13:10 +01:00
Claire
c2f776b747 Merge commit from fork 2026-01-20 15:10:38 +01:00
David Roetzel
7cdc05b9a8 Add language attribute to collections (#37549) 2026-01-20 13:22:54 +00:00
Echo
a1c17fef3a Profile redesign: Account name (#37527) 2026-01-20 11:10:46 +00:00
diondiondion
fa9b905fdf Improve apiRequest helper types (#37544) 2026-01-20 11:04:06 +00:00
github-actions[bot]
8ff7662918 New Crowdin Translations (automated) (#37545)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-20 08:31:49 +00:00
David Roetzel
51224bb437 Add "featured collections" collection to actors (#37512) 2026-01-20 08:27:05 +00:00
Matt Jankowski
ad77ee7f8b Add coverage for misc "policy" classes (#37525) 2026-01-19 15:53:52 +00:00
Claire
220115757d Fix potential duplicate handling of quote accept/reject/delete (#37537) 2026-01-19 13:47:27 +00:00
Claire
9b6500f74a Skip tombstone creation on deleting from 404 (#37533) 2026-01-19 10:36:58 +00:00
github-actions[bot]
e4c6130f77 New Crowdin Translations (automated) (#37532)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-19 09:40:47 +00:00
renovate[bot]
fd78aa9eab Update dependency haml_lint to v0.69.0 (#37531)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-19 09:23:01 +00:00
renovate[bot]
4339f0ea71 Update dependency ioredis to v5.9.2 (#37510)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-19 09:22:42 +00:00
renovate[bot]
f05e76e591 Update dependency postcss-preset-env to v11.1.1 (#37508)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-19 09:22:35 +00:00
Claire
cc3c7ba532 Fix system theme being included twice (#37526) 2026-01-16 15:55:16 +00:00
renovate[bot]
e21cb9f0d0 Update dependency pg to v8.17.1 (#37494)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-16 15:43:36 +00:00
Claire
5727b866b1 Fix error pages not using the new theming infrastructure (#37524) 2026-01-16 14:44:58 +00:00
renovate[bot]
a9bdf5eef9 Update dependency pg-connection-string to v2.10.0 (#37495)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-16 14:35:51 +00:00
renovate[bot]
5b5b00055e Update dependency pino to v10.2.0 (#37507)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-16 14:35:42 +00:00
diondiondion
e715bb5075 Add high-contrast styles to common stylesheet (#37523) 2026-01-16 13:57:48 +00:00
Echo
047338e684 Profile fields redesign (#37513) 2026-01-16 12:44:49 +00:00
Claire
918563704f Update the “embedded” styling to the new theme infrastructure (#37520) 2026-01-16 10:28:50 +00:00
Claire
e58084a85f Update theme_color_tags helper for new theme infrastructure (#37519) 2026-01-16 10:00:04 +00:00
David Roetzel
be00db4fa3 Use snowflake ids for collections and their items (#37514) 2026-01-16 09:49:53 +00:00
github-actions[bot]
0d9fcb59a4 New Crowdin Translations (automated) (#37517)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-16 09:17:56 +00:00
Heath Dutton🕴️
93f5ed0fce Fix directory showing load more button when no more profiles exist (#37465) 2026-01-15 17:02:17 +00:00
diondiondion
bc2f8a358f Enable theming via new HTML element attributes (#37477) 2026-01-15 16:04:27 +00:00
Echo
c09fbeb32f MiniCard and MiniCardList components (#37479) 2026-01-15 13:53:42 +00:00
Echo
f2fb232e37 Account header split up (#37490) 2026-01-15 13:45:30 +00:00
Claire
2a6c084aa1 Update SECURITY.md (#37506) 2026-01-15 13:17:41 +00:00
github-actions[bot]
47557f5b9e New Crowdin Translations (automated) (#37492)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-15 10:41:11 +00:00
renovate[bot]
1482a7bf20 Update dependency postcss-preset-env to v11 (#37485)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-15 10:14:00 +00:00
renovate[bot]
dd52e61c24 Update opentelemetry-ruby (non-major) (#37480)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-15 10:13:56 +00:00
renovate[bot]
8eff59b106 Update dependency httplog to '~> 1.8.0' (#37484)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-15 10:13:53 +00:00
Claire
10de65e41c Fix FeedManager#filter_from_home error when handling a reblog of a deleted status (#37486) 2026-01-14 10:51:23 +00:00
renovate[bot]
4bdc9d5e1e Update dependency vite to v7.3.1 (#37248)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 10:37:43 +00:00
renovate[bot]
5d03d5d15c Update dependency libvips to v8.18.0 (#37282)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 10:37:05 +00:00
renovate[bot]
6fdef1191a Update dependency globals to v17 (#37360)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 10:35:40 +00:00
renovate[bot]
d612119b3e Update dependency thor to v1.5.0 (#37406)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 10:17:40 +00:00
renovate[bot]
8390f0dbbf Update dependency rqrcode to v3.2.0 (#37431)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 10:10:52 +00:00
David Roetzel
c218849204 Add collection endpoint (#37468) 2026-01-14 10:08:29 +00:00
github-actions[bot]
2f91d9755d New Crowdin Translations (automated) (#37482)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-14 10:02:11 +00:00
renovate[bot]
ccf3ed0ddf Update Node.js to 24.13 (#37473)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 10:02:07 +00:00
Matt Jankowski
19bc3e76ea Add spec for quote policy update change (#37474) 2026-01-13 16:21:55 +00:00
Matt Jankowski
92ad380e11 Update rubocop to version 1.82.1 (#37475) 2026-01-13 16:21:25 +00:00
Shlee
c6be114cef Non-ActivityPub Link header alternate blocks HTML ActivityPub discovery in FetchResourceService (#37439)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2026-01-13 15:47:48 +00:00
Echo
122b1592ed Add feature flag detection for profile redesign (#37472) 2026-01-13 14:17:43 +00:00
Shlee
232b9e9cc6 Fix delivery worker counting unsalvageable HTTP errors as successes (#37235) 2026-01-13 13:49:36 +00:00
renovate[bot]
d5264b3722 Update dependency aws-sdk-s3 to v1.211.0 (#37396)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-13 13:32:11 +00:00
diondiondion
41639655ff Fix isDarkMode utility (#37470) 2026-01-13 11:06:54 +00:00
Heath Dutton🕴️
be60c4585e Fix keyboard navigation in media modal after clicking image (#37464) 2026-01-13 10:47:04 +00:00
Claire
5b54cd7f76 Add ability to include inline javascript (#37459) 2026-01-13 10:40:26 +00:00
Shlee
9b5986b36e Fix quote_approval_policy being reset to user defaults when omitted in status update (#37436) 2026-01-13 10:40:08 +00:00
Claire
9332f48abe Simplify status batch removal SQL query (#37469) 2026-01-13 10:18:26 +00:00
renovate[bot]
f8b8fa16f5 Update dependency pino to v10.1.1 (#37443)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-13 09:18:34 +00:00
github-actions[bot]
6cb533311a New Crowdin Translations (automated) (#37466)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-13 09:14:27 +00:00
renovate[bot]
a63a0db568 Update dependency postcss-preset-env to v10.6.1 (#37457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-13 09:03:59 +00:00
renovate[bot]
972ed73062 Update DefinitelyTyped types (non-major) (#37456)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-13 09:03:56 +00:00
renovate[bot]
ed17b3a7ec Update dependency use-debounce to v10.1.0 (#37432)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-12 10:09:25 +00:00
renovate[bot]
aa3d76999d Update dependency ioredis to v5.9.1 (#37388)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-12 10:09:04 +00:00
renovate[bot]
012c62132f Update dependency sidekiq-unique-jobs to v8.0.13 (#37408)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-12 09:55:12 +00:00
github-actions[bot]
8f70cfc8b1 New Crowdin Translations (automated) (#37447)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-12 09:54:19 +00:00
Matt Jankowski
0fb4e26cfe Add details to JS browser error spec failure helpers (#37441) 2026-01-12 09:38:00 +00:00
David Roetzel
a9cfddf28e AP/AS serialization of Collections (#37434) 2026-01-12 08:39:25 +00:00
Echo
a4b8b9fe98 Fix bug with how Emojibase wasn't stripping characters (#37442) 2026-01-09 18:38:22 +00:00
Joshua Rogers
b55982cc1a Fix Vary parsing in cache control enforcement (#37426) 2026-01-09 16:21:18 +00:00
Joshua Rogers
b35b3a8bcc Fix arg order for non_matching_uri_hosts? call in QuoteRequest (#37425) 2026-01-09 16:21:05 +00:00
Joshua Rogers
48ce49260d Fix thread-unsafe ActivityPub activity dispatch (#37423) 2026-01-09 16:20:59 +00:00
Shlee
f97a015cf9 SharedConnectionPool - NoMethodError: undefined method 'site' for Integer (#37374) 2026-01-09 16:20:50 +00:00
renovate[bot]
1211bbc064 Update dependency hiredis-client to v0.26.3 (#37404)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-09 16:20:33 +00:00
diondiondion
973fef4b69 Further clean up types for the card object (#37023) 2026-01-09 14:40:27 +00:00
Echo
628fc9b95b Emoji: Adds search (#37418)
Co-authored-by: diondiondion <mail@diondiondion.com>
2026-01-09 10:37:14 +00:00
Joshua Rogers
25053db22b Fix modal closeModal ignoreFocus payload type (#37424)
Co-authored-by: diondiondion <mail@diondiondion.com>
2026-01-08 13:22:31 +00:00
github-actions[bot]
780c6378e0 New Crowdin Translations (automated) (#37407)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-08 11:18:50 +00:00
renovate[bot]
13fcb6d2f1 Update dependency ws to v8.19.0 (#37397)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-08 10:58:09 +00:00
Shlee
e0cca5c3ba Fix SignatureParser accepting duplicate parameters in HTTP Signature header (#37375)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2026-01-08 10:47:53 +00:00
Echo
de7b405e55 Video modals should not be pushed down on mobile (#37421) 2026-01-08 09:44:17 +00:00
David Roetzel
aa2110025e Fix URI generation for reblogs by accounts with numerical AP ids (#37415) 2026-01-07 15:39:22 +00:00
Claire
bdcdd539f6 Fix unnecessary downcasing of some words in moderation/settings interface (#37364) 2026-01-07 15:34:39 +00:00
renovate[bot]
f840d7bf9f Update dependency sass to v1.97.2 (#37395)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-07 14:36:26 +00:00
Matt Jankowski
dd26964f1b Use bundler version 4.0.3 (#37392) 2026-01-07 14:36:21 +00:00
Claire
9fe14a3072 Bump version to v4.5.4 (#37413) 2026-01-07 13:40:06 +00:00
Claire
0f79e29188 Merge commit from fork 2026-01-07 14:15:14 +01:00
Claire
0b1b98c4f2 Merge commit from fork 2026-01-07 14:14:42 +01:00
Claire
84128e1526 Downgrade sidekiq-unique-jobs (#37402) 2026-01-07 09:00:16 +00:00
github-actions[bot]
7e634eecbc New Crowdin Translations (automated) (#37394)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-06 10:40:22 +00:00
Nicholas La Roux
fd5539084c Increase OCR spec timeout from 10 to 20 seconds to improve CI stability (#37393) 2026-01-06 09:51:57 +00:00
Claire
d9cd75400c Fix heartbeat comment not being its own event (#37389) 2026-01-06 09:50:28 +00:00
Claire
82fb2596c7 Fix posts with edited out media attachments being returned in /api/v1/accounts/:id/statuses?only_media=true (#37363) 2026-01-05 15:06:20 +00:00
renovate[bot]
2d711d63d0 Update dependency simple_form to v5.4.1 (#37387)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-05 14:38:10 +00:00
Claire
b622f4c698 Fix custom emojis not being rendered in profile fields (#37365) 2026-01-05 14:24:59 +00:00
renovate[bot]
ad9cc10014 Update dependency vite_rails to v3.0.20 (#37380)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-05 14:22:44 +00:00
Claire
b5bc301cbd Fix serialization of context pages (#37376) 2026-01-05 11:59:10 +00:00
Claire
f711e222dc Fix quotes with CWs but no text not having fallback link (#37361) 2026-01-05 10:35:35 +00:00
Claire
1fe737e0bd Add translation string for Webauthn key nickname (#37371) 2026-01-05 10:35:28 +00:00
Claire
e8a49bd6ae Fix outdated link target for “locked” warning (#37366) 2026-01-05 10:35:23 +00:00
github-actions[bot]
bdf490e949 New Crowdin Translations (automated) (#37378)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-05 09:56:40 +00:00
renovate[bot]
ab7293238f Update dependency public_suffix to v7.0.2 (#37385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-05 09:38:35 +00:00
renovate[bot]
cd980645d6 Update dependency public_suffix to v7.0.1 (#37383)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-05 08:43:55 +00:00
renovate[bot]
e89acc2302 Update dependency irb to v1.16.0 (#37275)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 16:46:03 +00:00
renovate[bot]
628cbd2999 Update dependency postcss-preset-env to v10.6.0 (#37353)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 14:38:34 +00:00
Matt Jankowski
6628d8e769 Update “Automatic post deletion” explanation text (#37286) 2026-01-02 14:19:49 +00:00
renovate[bot]
d98a18510a Update dependency aws-sdk-s3 to v1.208.0 [SECURITY] (#37313)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 13:54:48 +00:00
renovate[bot]
9173a81b0b Update dependency debug to v1.11.1 (#37318)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 13:52:15 +00:00
github-actions[bot]
04f7638224 New Crowdin Translations (automated) (#37326)
Co-authored-by: GitHub Actions <noreply@github.com>
2026-01-02 13:48:08 +00:00
renovate[bot]
37eb1ec84c Update dependency bufferutil to v4.1.0 (#37309)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 13:44:14 +00:00
renovate[bot]
b2c0e0c5a7 Update dependency utf-8-validate to v6.0.6 (#37308)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 13:38:08 +00:00
Chan Nyein Tun
54bc97cfce Hide empty padding box if no status in Wrapstodon highlighted post (#37289)
Co-authored-by: Chan Nyein Tun <29679269+channyeintun@users.noreply.github.com>
2026-01-02 13:20:11 +00:00
renovate[bot]
2b74572ebd Update dependency playwright-ruby-client to v1.57.1 (#37356)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 13:07:31 +00:00
renovate[bot]
0afe85e967 Update dependency jsdom to v27.4.0 (#37349)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 13:03:49 +00:00
renovate[bot]
99e16e6b21 Update dependency color_diff to v0.2 (#37331)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 13:03:01 +00:00
renovate[bot]
5a7db6649e Update dependency strong_migrations to v2.5.2 (#37329)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 12:54:00 +00:00
renovate[bot]
86a2e650aa Update dependency brakeman to v7.1.2 (#37348)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 12:28:23 +00:00
renovate[bot]
334e30492e Update dependency i18n to v1.14.8 (#37337)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 11:41:06 +00:00
Andy Piper
f32bed6809 Update keyboard shortcut description for direct mentions (#37347) 2026-01-02 11:15:24 +00:00
renovate[bot]
c772a8fb43 Update dependency json-schema to v6.1.0 (#37338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 11:09:10 +00:00
renovate[bot]
0f55bb6735 Update dependency sass to v1.97.1 (#37328)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-02 11:08:48 +00:00
Claire
bc3f68b46a Fix date-related wrapstodon test failures (#37362) 2026-01-02 10:52:22 +00:00
Echo
4bae3da85c Prevents swiping when zoomed in (#37323) 2025-12-19 16:18:50 +00:00
diondiondion
a0ce77673c Add dedicated user preferences for theme mode & contrast (#37288) 2025-12-19 15:31:44 +00:00
David Roetzel
0231b6d350 Expose feature policy in API (#37322) 2025-12-19 15:20:30 +00:00
diondiondion
8d9192835d Add stub story for StatusQuoteManager / Status component (#37321) 2025-12-19 15:18:10 +00:00
David Roetzel
4e63958914 Federated "featureable in collections" preference (#37298) 2025-12-19 13:44:27 +00:00
Echo
f254b47067 Remove trailing variation selector code for legacy emojis (#37320) 2025-12-19 13:43:27 +00:00
renovate[bot]
06a5199c44 Update dependency storybook to v10.1.10 [SECURITY] (#37314)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-19 13:41:58 +00:00
github-actions[bot]
ff005bae0b New Crowdin Translations (automated) (#37312)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-19 10:40:07 +00:00
renovate[bot]
77b685e749 Update dependency vite-tsconfig-paths to v6.0.3 (#37303)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-19 10:07:44 +00:00
diondiondion
a505c2efd8 Fix mobile admin sidebar displaying under batch table toolbar (#37307) 2025-12-19 08:39:25 +00:00
renovate[bot]
6480e16c17 Update dependency sass to v1.97.0 (#37266)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-19 08:13:07 +00:00
Echo
ff20ab7510 Fixes CDN domain loading (#37310) 2025-12-18 17:41:21 +00:00
Echo
ba4710debe Emoji loading fixes (#37300) 2025-12-18 16:58:44 +00:00
Claire
a8109e50fc Fix custom emojis not displaying in CWs and fav/boost notifications (#37306) 2025-12-18 16:49:03 +00:00
Claire
2a7e5fb3f7 Skip followers synchronization for accounts with 25k followers or more (#37302) 2025-12-18 14:42:47 +00:00
renovate[bot]
8bc0170c02 Update docker.io/ruby Docker tag to v3.4.8 (#37297)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-18 14:42:07 +00:00
renovate[bot]
787b00813e Update dependency ruby to v3.4.8 (#37278)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-18 14:41:35 +00:00
Claire
ffdf56b1e6 Fix default Admin role not including view_feeds permission (#37301) 2025-12-18 14:26:31 +00:00
Joshua Rogers
38bc7d2864 Use HTTPS when downloading unicode.org's emoji-test.txt (#37290) 2025-12-18 10:11:54 +00:00
github-actions[bot]
ed2a8c32ce New Crowdin Translations (automated) (#37293)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-18 09:20:07 +00:00
diondiondion
830ffbe2da Remove required field markers from unclearable fields in user preferences (#37291) 2025-12-18 08:58:06 +00:00
Matt Jankowski
009275e66b Use link_to for contribute translation link (#36011) 2025-12-17 15:19:21 +00:00
Echo
3d55dcdf7f Emoji: Refresh custom emoji on new (#37271) 2025-12-17 14:58:22 +00:00
Matt Jankowski
7e817f2471 Extract filter_keywords helper method for listing filter keyword groups (#35921) 2025-12-17 14:48:58 +00:00
diondiondion
c4a760d6ba Improve search menu keyboard navigation (#37255) 2025-12-17 14:42:07 +00:00
Echo
dbc5af6641 Remove rendering of custom emoji using the database (#37284) 2025-12-17 14:40:34 +00:00
diondiondion
71af094f97 Fix notifications page error in Tor browser (#37285) 2025-12-17 14:38:46 +00:00
Claire
d6a40c2891 Fix hashtag autocomplete replacing suggestion's first characters with input (#37281) 2025-12-17 14:28:53 +00:00
Nicholas La Roux
a5362a4002 Upgrade Bundler from 4.0.1 to 4.0.2 (#37283) 2025-12-17 14:06:45 +00:00
renovate[bot]
42d4753d30 Update dependency vite-tsconfig-paths to v6.0.2 (#37279)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-17 13:15:05 +00:00
github-actions[bot]
8debc5760b New Crowdin Translations (automated) (#37174)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-17 11:18:17 +00:00
David Roetzel
5e8b8f9c23 Extract interaction policy class (#37277) 2025-12-17 10:12:43 +00:00
Claire
db62d70492 Change Wrapstodon switch from feature flag to admin setting (#37273) 2025-12-17 09:47:02 +00:00
Matt Jankowski
a292162c5f Mark Form::AdminSettings#persisted? as true (#35872) 2025-12-17 08:32:24 +00:00
Matt Jankowski
53be8392ec Add coverage for blocked account scenario in following/followers (#36042) 2025-12-16 16:13:03 +00:00
Echo
f118d61334 Emojis: Show in embedded statuses (#37272) 2025-12-16 16:06:59 +00:00
Matt Jankowski
95432b47eb Add coverage for user model registration time validation (#35993) 2025-12-16 15:58:39 +00:00
Matt Jankowski
dbf8d77cbb Add spec for missing username value in create account API (#37057) 2025-12-16 15:43:04 +00:00
diondiondion
e6b0cdcc83 Updates Wrapstodon footer with dedicated local server info (#37270) 2025-12-16 15:35:26 +00:00
Matt Jankowski
7e81e03531 Reduce factory creation across spec/helpers (#35527) 2025-12-16 15:26:04 +00:00
Matt Jankowski
92df1c4458 Add coverage for Account.representative from finder concern (#35996) 2025-12-16 15:05:26 +00:00
Echo
a9c84529b2 Wrapstodon: Load report data only on display (#37269) 2025-12-16 13:00:40 +00:00
diondiondion
9e97ad04d8 Fix bad contrast on disabled dropdown menu items (#37268) 2025-12-16 11:38:47 +00:00
Echo
8c2845906c Improve Redux Storybook (#37227) 2025-12-16 11:27:18 +00:00
Matt Jankowski
7230c2059f Add coverage for "domain variants" consumers (#35995) 2025-12-16 10:24:27 +00:00
Matt Jankowski
c8f608839b Use bundler version 4.0.1 (#37191) 2025-12-16 10:13:43 +00:00
Claire
550a6d4765 Add wrapstodon to initial state and show wrapstodon sidebar item on load (#37261) 2025-12-16 09:47:18 +00:00
renovate[bot]
4c679c698f Update dependency vite-tsconfig-paths to v6 (#37247)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-16 09:46:39 +00:00
renovate[bot]
71821eb9c1 Update dependency tzinfo-data to v1.2025.3 (#37242)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-16 09:45:59 +00:00
Claire
0801104729 Fix mentions of domain-blocked users being processed (#37257) 2025-12-16 08:49:48 +00:00
Echo
cbe1352103 Emoji: Import and use shortcode data (#37178) 2025-12-15 15:38:13 +00:00
David Roetzel
a3fa441e0c Check "featureable" policy on creation of collections (#37254) 2025-12-15 15:29:28 +00:00
diondiondion
807e1254e6 Prevent "invalid access token" error when opening Mastodon while logged out (#37256) 2025-12-15 15:24:03 +00:00
Isa S.
9d18df4f8a Add REPLICA_DB_HOST to replica_enabled helper (#37240) 2025-12-15 13:25:42 +00:00
Nicholas La Roux
09ab2829da Upgrade rubocop-rails from 2.33.4 to 2.34.2 and address related offenses (#37243) 2025-12-15 12:57:16 +00:00
Echo
5fa7654688 Fixes display names not rendering with emojis (#37251) 2025-12-15 12:54:46 +00:00
renovate[bot]
2984f377e8 Update devDependencies (non-major) (#37074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: ChaosExAnima <ChaosExAnima@users.noreply.github.com>
2025-12-15 12:53:21 +00:00
diondiondion
a9e228361c Fix badly visible focus outlines in composer (#37250) 2025-12-15 12:39:04 +00:00
renovate[bot]
d7f632f6ba Update dependency tesseract.js to v7 (#37246)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-15 12:07:57 +00:00
Claire
dc4fb51e52 Increase cache duration on public shared wrapstodon page (#37249) 2025-12-15 10:19:17 +00:00
renovate[bot]
c112c6d3a2 Update Node.js to 24.12 (#37196)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-15 08:03:56 +00:00
renovate[bot]
ffba47a30f Update dependency ruby-vips to v2.3.0 (#37194)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-15 08:03:52 +00:00
David Roetzel
bb72ecd466 Add simple API to remove item from collection (#37225) 2025-12-15 08:03:49 +00:00
renovate[bot]
372de345d7 Update dependency sass to v1.96.0 (#37175)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-15 08:03:45 +00:00
David Roetzel
1766616ebc Refactor relation preloading (#37217) 2025-12-15 07:35:46 +00:00
Claire
4af8e83c8a Fix wrapstodon not falling back to username when display name is not set (#37229) 2025-12-12 16:30:22 +00:00
diondiondion
861202fd08 Change Emoji in Wrapstodon footer 🐘 (#37226) 2025-12-12 14:31:21 +00:00
diondiondion
6821b70796 Add secondary Wrapstodon share button (#37224) 2025-12-12 13:39:56 +00:00
David Roetzel
3cc4b59b41 First draft of API to add items to a collection (#37222) 2025-12-12 13:09:55 +00:00
Claire
1e67567d8f Change HTTP Signature verification status from 401 to 503 on temporary failure to get remote actor (#37221) 2025-12-12 12:42:43 +00:00
diondiondion
b72b507584 Remember revealed archetype on future Wrapstodon visits (#37219) 2025-12-12 11:03:00 +00:00
diondiondion
8748f0812d Convert Settings class to TS (#37218) 2025-12-12 10:20:32 +00:00
Echo
e206b0d0de Wrapstodon: Add nav modal (#37210) 2025-12-12 10:11:47 +00:00
diondiondion
571c93c563 Change Wrapstodon 'About' link to point to joinmastodon.org (#37216) 2025-12-12 09:43:34 +00:00
Echo
10f232ca08 Wrapstodon: Allow dismissing banner (#37202) 2025-12-12 09:40:45 +00:00
Claire
dfbf908870 Fix wrapstodon modal closing on any click (#37209) 2025-12-11 17:49:26 +00:00
diondiondion
c06eb371e6 Add Wrapstodon footer links (#37207) 2025-12-11 17:06:26 +00:00
Emelia Smith
d730f6b0c5 Add spec for client_credentials being used with /api/v1/apps/verify_credentials (#37195) 2025-12-11 16:40:22 +00:00
Claire
addeb28292 Change wrapstodon 2025 to allow unlisted posts in top statuses (#37206) 2025-12-11 16:35:35 +00:00
Claire
5e3387539e Add image to Wrapstodon OpenGraph banner (#37205) 2025-12-11 16:22:48 +00:00
diondiondion
4323963053 Fix Wrapstodon modal scrolling not working on iOS (#37203) 2025-12-11 14:25:28 +00:00
diondiondion
5651900b89 Wrapstodon design QA tweaks (#37201) 2025-12-11 11:40:53 +00:00
renovate[bot]
d1b996b7e3 Update dependency omniauth-rails_csrf_protection to v2.0.1 (#37199)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 11:12:07 +00:00
renovate[bot]
fed26a41fa Update dependency jsdom to v27.3.0 (#37165)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 10:33:47 +00:00
Claire
37d309bcaf Fix Wrapstodon font loading by disabling inlining of fonts in Vite (#37198) 2025-12-11 10:33:15 +00:00
renovate[bot]
d25f672c50 Update dependency active_model_serializers to v0.10.16 (#37167)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 10:07:52 +00:00
renovate[bot]
15c9088761 Update dependency vite to v7.2.7 (#37156)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 10:07:38 +00:00
renovate[bot]
da1505a495 Update dependency @vitejs/plugin-react to v5.1.2 (#37155)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 10:07:30 +00:00
renovate[bot]
d1f690f50c Update dependency stoplight to v5.7.0 (#37151)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-11 10:07:25 +00:00
Claire
da2b75bdcd Change build-releases workflow to tag images latest based on latest stable-x.y branch (#37179)
Co-authored-by: emilweth <7402764+emilweth@users.noreply.github.com>
2025-12-10 17:01:25 +00:00
David Roetzel
adf8a3601d Add service to add item to a collection (#37192) 2025-12-10 16:59:21 +00:00
Claire
d6f2a3ac8d Bump version to v4.5.3 (#37166) 2025-12-10 16:42:19 +00:00
diondiondion
c42b9f6996 Implement custom font for Wrapstodon heading (#37193) 2025-12-10 16:26:46 +00:00
Echo
76184c998c Fix issue where Wrapstodon was pushed to the bottom of the feed (#37190) 2025-12-10 15:55:12 +00:00
diondiondion
8137ce87ce Fix Wrapstodon Storybook & other Wrapstodon issues (#37189) 2025-12-10 14:07:25 +00:00
renovate[bot]
37426288d9 Update dependency postcss-preset-env to v10.5.0 (#37132)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-10 12:53:39 +00:00
renovate[bot]
801fee7593 Update dependency test-prof to v1.5.0 (#37127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-10 12:53:29 +00:00
Claire
6838497fe8 Add title and description to Opengraph data for Wrapstodon share page (#37188) 2025-12-10 11:27:10 +00:00
Claire
7b8a5d42f1 Remove unused time series details from 2025 annual report (#37187) 2025-12-10 11:02:24 +00:00
diondiondion
91500a7f53 Minor Wrapstodon tweaks, add stub Storybook page (#37186) 2025-12-10 09:05:14 +00:00
diondiondion
9d81561bb2 Update Wrapstodon design (#37169) 2025-12-09 16:51:05 +00:00
Matt Jankowski
ac71771d98 Fix misc comment typos (#37183) 2025-12-09 16:09:01 +00:00
Claire
697569e5f9 Add account_id attribute to AnnualReport entity (#37182) 2025-12-09 15:59:40 +00:00
Claire
4cdcdaa7d9 Fix streaming image build after removal of .yarn (#37181) 2025-12-09 15:36:46 +00:00
Echo
9702cbb41c Fix emoji on Wrapstodon (#37177) 2025-12-09 10:36:08 +00:00
David Roetzel
ea768c17db Add counter cache to collections (#37176) 2025-12-09 10:31:35 +00:00
renovate[bot]
5347cabf3e Update dependency oj to v3.16.13 (#37135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-09 10:07:35 +00:00
renovate[bot]
eef40ba96b Update dependency hiredis-client to v0.26.2 (#37137)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-09 09:47:12 +00:00
Matt Jankowski
9063c3b660 Remove yarn patch for babel-plugin-lodash, removed during Vite upgrade (#37161) 2025-12-09 09:30:57 +00:00
Matt Jankowski
e147947eb8 Add wrapstodon page spec (#37168) 2025-12-09 09:27:29 +00:00
Claire
607449336d Merge commit from fork 2025-12-08 15:44:08 +01:00
github-actions[bot]
85bf5be604 New Crowdin Translations (automated) (#37146)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-08 11:42:24 +00:00
David Roetzel
cf23f0414f Add id to collection serializers (#37157) 2025-12-08 11:40:17 +00:00
David Roetzel
55becaa1b5 Preload tag to prevent n+1 (#37154) 2025-12-08 10:30:10 +00:00
David Roetzel
8625721805 Draft API to get all collections by an account (#37139) 2025-12-08 08:56:13 +00:00
Matt Jankowski
7fe3e80758 Rely on locale for options order in DOB input (#36895) 2025-12-05 15:21:22 +00:00
Claire
1ae3b4672b Fix “Delete and Redraft” on a non-quote being treated as a quote post in some cases (#37140) 2025-12-05 15:17:48 +00:00
Echo
007ae588d8 Fix incorrect date for Wrapstodon start (#37138) 2025-12-05 14:12:26 +00:00
diondiondion
ce22c835ac Increase maximum height of media items on desktop (#37136) 2025-12-05 13:39:48 +00:00
Claire
9b851616fe Remove more unused data from 2025 annual reports (#37134) 2025-12-05 13:36:37 +00:00
diondiondion
591776d7ad Fix inversion of emoji colours based on dark/light mode (#37120) 2025-12-05 10:08:59 +00:00
renovate[bot]
7f1f3236c6 Update opentelemetry-ruby (non-major) (#37101)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-05 09:57:18 +00:00
renovate[bot]
852727a226 Update dependency aws-sdk-s3 to v1.206.0 (#37100)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-05 09:57:02 +00:00
github-actions[bot]
429d6bcab4 New Crowdin Translations (automated) (#37131)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-05 09:43:12 +00:00
renovate[bot]
e47a5dd1c2 Update dependency faker to v3.5.3 (#37099)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-05 09:22:32 +00:00
renovate[bot]
4ec761debd Update dependency sidekiq to v8.0.10 (#37090)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-05 09:20:54 +00:00
renovate[bot]
d895ea3433 Update dependency vite to v7.2.6 (#37076)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-05 09:20:45 +00:00
renovate[bot]
49105a28a3 Update eslint (non-major) (#36801)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-05 09:20:34 +00:00
renovate[bot]
1cb650d107 Update dependency jsdom to v27.2.0 (#36845)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-05 09:20:17 +00:00
Echo
46f3b39fae Fixes YouTube embeds (#37126) 2025-12-04 16:27:20 +00:00
diondiondion
65b216353e Handle dark/light/contrast theme modes in common CSS (#37095) 2025-12-04 15:56:35 +00:00
Echo
0dac31dfd5 Create new entrypoint for sharable Wrapstodon (#37121) 2025-12-04 15:48:10 +00:00
David Roetzel
75b9e9a8b0 Enable missing before actions in Collection API (#37122) 2025-12-04 15:35:47 +00:00
Claire
88aed3c11a Fix streamed quoted polls not being hydrated correctly (#37118) 2025-12-04 14:10:48 +00:00
David Roetzel
9921fa1af7 First draft API to delete collections (#37117) 2025-12-04 13:47:23 +00:00
David Roetzel
5a7a4fff11 First draft of Collection update API (#37110) 2025-12-04 10:00:21 +00:00
github-actions[bot]
9cf52fb976 New Crowdin Translations (automated) (#37115)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-04 09:19:08 +00:00
renovate[bot]
baef5b1659 Update dependency @optimize-lodash/rollup-plugin to v6 (#37062)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-04 09:16:13 +00:00
Matt Jankowski
832d8c7397 Use thread support helper in concurrent insert tag spec (#37112) 2025-12-04 09:11:53 +00:00
Matt Jankowski
d063af2594 Add coverage for array vs string in Tag.find_or_create_by (#37113) 2025-12-04 08:46:24 +00:00
Echo
31c392b1bc Wrapstodon modal with new share button (#37109) 2025-12-03 16:25:36 +00:00
diondiondion
498e88f059 Fix color contrast issues caused by new theme tokens (#37105) 2025-12-03 15:43:26 +00:00
Matt Jankowski
7c730e9041 Use normalizes API for Tag display_name value (#35797) 2025-12-03 15:39:01 +00:00
Matt Jankowski
b3b5bf26d1 Remove duplicate set_locale around action in auth/registrations (#36455) 2025-12-03 15:34:10 +00:00
David Roetzel
4e6d1892b9 Fix creation of duplicate conversations (#37108) 2025-12-03 14:33:27 +00:00
Echo
e5e3a64a9b Display Wrapstodon inline widget (#37106) 2025-12-03 13:58:38 +00:00
Echo
234990cc37 Remove noreferrer from external links (#37107) 2025-12-03 13:54:58 +00:00
Claire
08da9d8fc5 Fix serialization of annual reports with share code (#37104) 2025-12-03 13:05:33 +00:00
Claire
c97d25fcbd Fix serialization of 2025 wrapstodon reports (#37103) 2025-12-03 12:53:16 +00:00
renovate[bot]
e222664539 Update DefinitelyTyped types (non-major) (#37073)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-03 11:17:01 +00:00
renovate[bot]
9d10137c7c Update dependency bundler-audit to v0.9.3 (#37061)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-03 11:15:47 +00:00
Claire
5d84957117 Add shareable wrapstodon links (#37047) 2025-12-03 11:00:41 +00:00
github-actions[bot]
954f397743 New Crowdin Translations (automated) (#37098)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-03 10:11:20 +00:00
Claire
73294e2561 Fix typo in AsyncRefresh ID for GenerateAnnualReportWorker (#37096) 2025-12-03 08:31:14 +00:00
renovate[bot]
f393ff93cb Update dependency @optimize-lodash/rollup-plugin to v5.1.0 (#37039)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-02 13:45:33 +00:00
renovate[bot]
9c3b41f0a4 Update dependency vite-plugin-pwa to v1.2.0 (#37040)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-02 13:45:27 +00:00
renovate[bot]
e45ecc7d13 Update dependency express to v5.2.0 [SECURITY] (#37089)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-02 13:43:46 +00:00
Claire
f8422e1fa4 Add API for on-demand generation of annual reports (#37055) 2025-12-02 13:37:05 +00:00
diondiondion
9aec6936e5 Add Wrapstodon timeline announcement component (#37093) 2025-12-02 11:36:20 +00:00
Claire
2b25b65972 Add missing translations for web push notifications (#37078) 2025-12-02 10:52:08 +00:00
Echo
100b20f290 Add UJS to buttons (#37091) 2025-12-02 10:35:29 +00:00
Echo
c5c8100d02 Emoji: Update emoji categories with featured emoji (#37084) 2025-12-02 10:30:08 +00:00
github-actions[bot]
2e5744e8c6 New Crowdin Translations (automated) (#37088)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-02 10:20:40 +00:00
David Roetzel
2d203ca72a First draft of API to get a single collection (#37053) 2025-12-01 15:04:52 +00:00
Christian Oelschlegel
1f9ddb7cf6 fix(tag): prevent dupl. tags on concurrent inserts (#35792)
Co-authored-by: Christian Oelschlegel <oelschle@sciphy.de>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2025-12-01 14:56:52 +00:00
Echo
048746e56b Hide domain for local emojis in admin (#37080) 2025-12-01 14:24:24 +00:00
diondiondion
f5d6f60ca7 Ensure all pages have a solid background color (#37081) 2025-12-01 14:16:27 +00:00
Claire
e5651e7e04 Make settings-related database migrations more robust (#37079) 2025-12-01 14:11:49 +00:00
Claire
edfbcfb3f5 Fix error handling when re-fetching already-known statuses (#37077) 2025-12-01 10:52:06 +00:00
github-actions[bot]
f562ad9f67 New Crowdin Translations (automated) (#37063)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-12-01 09:42:49 +00:00
diondiondion
9334bd9ede Don't reset scroll when using hotkeys to focus columns, add hotkey 0 to scroll to top (#37052) 2025-11-28 16:19:23 +00:00
Claire
801672e3cb Add method to quickly test for AnnualReport account eligibility (#37045) 2025-11-28 16:19:23 +00:00
diondiondion
92278796c3 Remove theme_tokens feature flag & make new styles the default (#37056) 2025-11-28 15:58:46 +00:00
diondiondion
37ccffa95a Fix current item in pagination not highlighted with new theme tokens (#37054) 2025-11-28 14:45:38 +00:00
Echo
84ffb107c3 Adjust Chromatic to run conditionally (#37050) 2025-11-28 13:37:04 +00:00
David Roetzel
f896bbac3b Draft API to create Collections (#37049) 2025-11-28 13:30:43 +00:00
github-actions[bot]
6b38352b17 New Crowdin Translations (automated) (#37042)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-28 10:44:50 +00:00
diondiondion
f12f198f61 Fix post navigation in single-column mode when Advanced UI is enabled (#37044) 2025-11-28 10:05:54 +00:00
Claire
e0912c1729 Fix Card component using incorrect punycode module (#37043) 2025-11-28 09:50:37 +00:00
Claire
945ef5a8e1 Remove unused data from 2025 annual reports (#37033) 2025-11-28 08:58:34 +00:00
diondiondion
5f33ac208f Limit height of tall images in posts (#37035) 2025-11-27 17:05:56 +00:00
diondiondion
2bd7c855b0 Contain tall videos in full-width video container (#37032) 2025-11-27 17:05:21 +00:00
Claire
44ff2c32d3 Fix filters not applying to search results (#36346) 2025-11-27 16:23:11 +00:00
Eashwar Ranganathan
826e9d7047 Make tootctl aware of 'require approval' for email domains (#34579) 2025-11-27 15:52:59 +00:00
Echo
f07cff42c2 Fix media modal misalignment in Safari (#37034) 2025-11-27 15:27:18 +00:00
Echo
0d2e9522ff Replace Rails UJS library (#37031) 2025-11-27 13:10:55 +00:00
renovate[bot]
0004ed4c80 chore(deps): update opentelemetry-ruby (non-major) (#37016)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-27 10:51:57 +00:00
diondiondion
07ecf648dd Remove unused bundle-related Redux actions (#37030) 2025-11-27 10:50:48 +00:00
github-actions[bot]
90466d0262 New Crowdin Translations (automated) (#37026)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-27 09:51:15 +00:00
Matt Jankowski
199376a080 Use existing time format string to generate backup archive filename (#36469) 2025-11-27 09:38:27 +00:00
diondiondion
e126cfc76d Fix error page when logging out or boosting on mobile (#37028) 2025-11-27 09:36:58 +00:00
David Roetzel
322a4fee53 First steps towards a collection creation service (#37020)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2025-11-27 09:36:44 +00:00
renovate[bot]
be2caba527 chore(deps): update dependency i18n-tasks to v1.1.2 (#37027)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-27 09:29:14 +00:00
renovate[bot]
002632c3bb chore(deps): update dependency aws-sdk-core to v3.239.2 (#37015)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 16:18:51 +00:00
renovate[bot]
81510455d1 chore(deps): update yarn to v4.12.0 (#36797)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 16:18:48 +00:00
diondiondion
ee7e756e89 Fix null access error in card component (#37022) 2025-11-26 14:55:40 +00:00
diondiondion
f87f30c1ac Refactor Card component to TypeScript (#36982) 2025-11-26 12:56:17 +00:00
renovate[bot]
1757a0f0f3 chore(deps): update dependency public_suffix to v7 (#36920)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 10:48:12 +00:00
Matt Jankowski
cb4f1cc89c Improve SessionActivation.activate spec (#36983) 2025-11-26 10:26:39 +00:00
Claire
00163e89bf Fix tootctl status remove removing quoted posts and remote quotes of local posts (#37009) 2025-11-26 10:26:26 +00:00
diondiondion
59e48657cf Fix issues in new theme tokens (#37019) 2025-11-26 10:25:49 +00:00
github-actions[bot]
384594f462 New Crowdin Translations (automated) (#37018)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-26 10:25:41 +00:00
renovate[bot]
cd9d166312 chore(deps): update dependency rqrcode to v3.1.1 (#37010)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 09:54:11 +00:00
renovate[bot]
6f4f9942b9 chore(deps): update dependency connection_pool to v2.5.5 (#37003)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 09:53:38 +00:00
David Roetzel
0725afe1a9 Collections: Add missing validations for boolean columns (#37005) 2025-11-25 14:46:50 +00:00
renovate[bot]
09697045a9 chore(deps): update dependency rails-i18n to v8.1.0 (#36992)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-25 14:18:48 +00:00
renovate[bot]
3e77c3bc8c chore(deps): update dependency omniauth-rails_csrf_protection to v2 (#36993)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-25 14:18:32 +00:00
renovate[bot]
bd02cd4591 chore(deps): update dependency addressable to v2.8.8 (#37002)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-25 14:07:06 +00:00
renovate[bot]
4ca458e0b4 chore(deps): update devdependencies (non-major) (#36802)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-25 13:53:23 +00:00
diondiondion
8c772028ac Replace most unsafe React lifecycle methods (#36970) 2025-11-25 13:49:45 +00:00
diondiondion
861625fdca Prevent vertical videos from overflowing the viewport (#36966) 2025-11-25 13:21:59 +00:00
renovate[bot]
ca53195b31 chore(deps): update dependency sass to v1.94.2 (#36826)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-25 13:21:25 +00:00
Claire
a26636ff1f Fix compose autosuggest always lowercasing token (#36995) 2025-11-25 13:17:44 +00:00
Claire
204143becc Increase HTTP read timeout for expensive S3 batch delete operation (#37004) 2025-11-25 10:18:34 +00:00
github-actions[bot]
f0d7ea61ef New Crowdin Translations (automated) (#37000)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-25 09:52:51 +00:00
renovate[bot]
76d8ac3fe6 chore(deps): update dependency i18n-tasks to v1.1.1 (#36997)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-24 15:34:10 +00:00
Claire
96d5e57351 Revert "Increase HTTP read timeout for expensive S3 batch delete operation (#36971)" (#36996) 2025-11-24 13:33:37 +00:00
renovate[bot]
57bfe863f3 chore(deps): update dependency aws-sdk-core to v3.239.1 (#36955)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-24 09:10:07 +00:00
David Roetzel
b16452dd99 Add shared context for API authentication (#36981) 2025-11-24 08:48:49 +00:00
renovate[bot]
1bc13609ab chore(deps): update dependency aws-sdk-s3 to v1.205.0 (#36956)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-24 08:42:56 +00:00
github-actions[bot]
e44a9c0879 New Crowdin Translations (automated) (#36984)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-24 08:08:01 +00:00
Matt Jankowski
f1bf6e6344 Remove unused from_limited? method from NotifyService (#36988) 2025-11-24 07:57:46 +00:00
Matt Jankowski
585545d0d5 Add coverage for media#player scenarios (#35947) 2025-11-21 14:46:29 +00:00
Matt Jankowski
d967137adf Remove unneeded type check on Status in og_image partial (#36980) 2025-11-21 14:29:03 +00:00
Pēteris Caune
ad7839e551 Fix the translation of "Latvian" (#36876) 2025-11-21 13:56:20 +00:00
diondiondion
8a235dd187 Refactor PrivacyDropdown to TypeScript (#36979) 2025-11-21 13:33:27 +00:00
Shugo Maeda
48fe679728 Separate remote thumbnails into cache/ directory (#36911) 2025-11-21 13:27:04 +00:00
renovate[bot]
687f3a2a01 chore(deps): update dependency vite to v7.2.4 (#36964)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-21 11:00:29 +00:00
David Roetzel
7ffa5fa0c4 Add models to represent "Collections" (#36977) 2025-11-21 10:28:23 +00:00
github-actions[bot]
cfa4f402ef New Crowdin Translations (automated) (#36976)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-21 09:34:55 +00:00
renovate[bot]
aa131e538c chore(deps): update dependency core-js to v3.47.0 (#36931)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-21 09:17:57 +00:00
Matt Jankowski
6151febd73 Suggest ES image version 7.17.29 in docker compose (#36972) 2025-11-21 09:16:50 +00:00
Claire
a54334b714 Increase HTTP read timeout for expensive S3 batch delete operation (#36971) 2025-11-21 08:59:07 +00:00
Claire
21ce99f746 Bump version to v4.5.2 (#36968) 2025-11-20 15:04:22 +00:00
github-actions[bot]
8e8669b5ef New Crowdin Translations (automated) (#36957)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-20 10:54:39 +00:00
Claire
a28f1d0110 Fix missing fallback link in CW-only quote posts (#36963) 2025-11-20 10:08:36 +00:00
diondiondion
f01e80bed3 Fix error when visiting non-public hashtag timelines (#36961) 2025-11-20 10:08:00 +00:00
Darius Kazemi
dc67dbba82 Remove stray Font Awesome styles (#36960) 2025-11-20 10:02:50 +00:00
Claire
bb9a633b99 Fix statuses without text disappearing on reload (#36962) 2025-11-20 09:52:53 +00:00
Echo
ea616ac4a4 Improve media modal swipe animation (#36916) 2025-11-19 15:56:24 +00:00
renovate[bot]
01b11c328c chore(deps): update dependency i18n-tasks to v1.1.0 (#36907)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-19 15:37:02 +00:00
Claire
bc7c83ba76 Update glob dependency (#36940) 2025-11-19 15:28:57 +00:00
diondiondion
366856f3bc Fix theme-related Vite errors even when theme_tokens feature flag is disabled (#36936) 2025-11-19 12:37:15 +00:00
diondiondion
4d0aab4a31 Fix g + h keyboard shortcut not working when a post is focused (#36935) 2025-11-19 10:58:07 +00:00
Claire
c22b203bca Fix quoting overwriting current content warning (#36934) 2025-11-19 10:35:10 +00:00
renovate[bot]
52b92bdc9c chore(deps): update dependency bootsnap to '~> 1.19.0' (#36906)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-19 10:19:49 +00:00
Matt Jankowski
4f6a7e44d1 Update rubocop-rspec to version 3.8.0 (#36853) 2025-11-19 10:14:51 +00:00
github-actions[bot]
81ffd1d3c7 New Crowdin Translations (automated) (#36933)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-19 10:09:54 +00:00
Matt Jankowski
9872197d1f Fix Rails/RedirectBackOrTo cop (#36930) 2025-11-19 09:28:43 +00:00
Claire
be0e23bb0a Fix scroll-to-status in threaded view being unreliable (#36927) 2025-11-18 16:20:50 +00:00
Claire
c820c66d3c Change private quote education modal to not show up on self-quotes (#36926) 2025-11-18 16:17:26 +00:00
Claire
b4daad8c89 Fix double encoding in links (#36925) 2025-11-18 15:37:14 +00:00
github-actions[bot]
b14f113929 New Crowdin Translations (automated) (#36922)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-18 08:22:25 +00:00
Echo
caffb0fd63 Emoji: Fix path resolution for emoji worker (#36897) 2025-11-17 15:34:18 +00:00
Matt Jankowski
53703202fb Add IpBlock#to_cidr method to build string (#35773) 2025-11-17 14:51:05 +00:00
Matt Jankowski
59fdff5dc5 Add spec for translation attempt with ineligible target language (#36813) 2025-11-17 14:13:52 +00:00
renovate[bot]
04bdfa1957 chore(deps): update dependency @vitejs/plugin-react to v5.1.1 (#36841)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-17 14:12:38 +00:00
Shugo Maeda
04c566e2e9 Fix ArgumentError of tootctl upgrade storage-schema (#36914) 2025-11-17 13:34:20 +00:00
diondiondion
72c582e7e5 Fix superfluous border & spacing in domains list on the Moderation > Federation page (#36915) 2025-11-17 12:07:44 +00:00
diondiondion
284b46fee7 Implement CSS theme tokens behind feature flag (#36861) 2025-11-17 09:44:55 +00:00
github-actions[bot]
489bee8f4e New Crowdin Translations (automated) (#36898)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-17 09:33:15 +00:00
Claire
c87b052829 Fix inability to paste links (#36896) 2025-11-14 16:44:08 +00:00
github-actions[bot]
ebc99cd597 New Crowdin Translations (automated) (#36893)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-14 15:57:35 +00:00
Claire
6db4297193 Fix cross-origin handling of CSS modules (#36890) 2025-11-14 15:42:26 +00:00
renovate[bot]
bc47cba123 chore(deps): update dependency js-yaml to v4.1.1 [security] (#36891)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-14 15:27:43 +00:00
Matt Jankowski
f8ffb85566 Use date attribute for date of birth (#36039) 2025-11-14 15:17:53 +00:00
Echo
7dbb2ac79a Remove rails delegate (#36835)
Co-authored-by: Renaud Chaput <renchap@gmail.com>
2025-11-14 14:18:14 +00:00
renovate[bot]
bc81e299f2 chore(deps): update dependency stoplight to v5.6.0 (#36803)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-14 14:17:50 +00:00
renovate[bot]
277a4c80c0 chore(deps): update dependency prometheus_exporter to v2.3.1 (#36842)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-14 14:17:38 +00:00
renovate[bot]
7be8fe6370 chore(deps): update dependency aws-sdk-core to v3.237.0 (#36823)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-14 14:15:56 +00:00
Jeong Arm
4ab1d5d724 Allow drag&drop of link to quote in compose form (#36859) 2025-11-14 14:14:37 +00:00
Echo
c5eca8ffb2 Fix error with remote tags including percent signs (#36886) 2025-11-14 14:11:41 +00:00
Claire
f25e066112 Fix bogus quote approval policy not always being replaced correctly (#36885) 2025-11-14 12:39:04 +00:00
Claire
6d8c43ab85 Fix hashtag completion not being inserted correctly (#36884) 2025-11-14 12:23:40 +00:00
Claire
0d7c23469b Bump version to v4.5.1 (#36872) 2025-11-14 10:43:08 +00:00
github-actions[bot]
f243a00b90 New Crowdin Translations (automated) (#36875)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-14 10:27:20 +00:00
diondiondion
6e294828d6 Fix Cmd/Ctrl + Enter in the composer triggering confirmation dialog action (#36870) 2025-11-14 09:39:42 +00:00
Claire
98c8c1ebd2 Fix error when sending new posts (#36869) 2025-11-13 15:42:14 +00:00
diondiondion
998d4cc0dc Fix Cmd/Ctrl + Enter not submitting Alt text modal on some browsers (#36866) 2025-11-13 15:35:25 +00:00
Claire
9dbebbb2ee Fix posts coming from public/hashtag streaming being marked as unquotable (#36860) 2025-11-13 12:54:28 +00:00
github-actions[bot]
3f292e0f5b New Crowdin Translations (automated) (#36858)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-13 10:18:16 +00:00
Itoh Shimon
7e7f63a2ef Use the native script for Divehi (#36254) 2025-11-12 16:58:40 +00:00
Claire
ed3710e58f Fix Update importing old previously-unknown activities and treating them as recent ones (#36848) 2025-11-12 16:09:00 +00:00
Claire
8abec0ffcb Revert "Ensure the boost button shows a numeric value (#36805)" (#36850) 2025-11-12 15:32:55 +00:00
Echo
00cbc1b910 Fix deprecation warning in Vite (#36849) 2025-11-12 14:25:25 +00:00
diondiondion
f303f3458d Fixes blank screen in browsers that don't support Intl.DisplayNames (#36847) 2025-11-12 11:11:48 +00:00
Claire
9f3573d446 Fix filters not being applied to quotes in detailed view (#36843) 2025-11-12 11:09:51 +00:00
Echo
4b1532e008 Fix duplicate counters (#36844) 2025-11-12 11:01:34 +00:00
github-actions[bot]
ff0fca018a New Crowdin Translations (automated) (#36838)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-12 10:24:50 +00:00
Echo
b5a2fe715d Revert "Fix duplicated counters (fix #32614)" (#36834) 2025-11-11 18:05:44 +00:00
renovate[bot]
11b75d616a chore(deps): update dependency aws-sdk-s3 to v1.203.1 (#36822)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-11 15:47:08 +00:00
Matt Jankowski
a002048c8c Update storybook/msw/chromatic (#36739) 2025-11-11 11:17:23 +00:00
Matt Jankowski
fa5318b333 Remove webpack hints IDE config (#36769) 2025-11-11 11:16:15 +00:00
diondiondion
b53ee04475 Fix icon buttons animating when they haven't changed (#36824) 2025-11-11 11:10:27 +00:00
xatier
84cdb6cc66 Fix duplicated counters (fix #32614) (#36785) 2025-11-11 11:02:41 +00:00
Echo
ff5d745e3d Emoji: Load emoji with hash in URL (#36808) 2025-11-11 10:03:06 +00:00
github-actions[bot]
391c77f277 New Crowdin Translations (automated) (#36820)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-11 08:38:02 +00:00
Renaud Chaput
bc5397a0db Remove the 2 PRs-per-hour Renovate limit (#36814) 2025-11-11 08:26:43 +00:00
Matt Jankowski
1c3e7545cb Add spec for translation attempt on private status (#36810) 2025-11-10 16:05:20 +00:00
diondiondion
400943cb4e Fix scroll shift caused by fetch-all-replies alerts (#36807) 2025-11-10 15:33:56 +00:00
Echo
9a42d00c12 Ensure the boost button shows a numeric value (#36805) 2025-11-10 15:10:24 +00:00
Renaud Chaput
9addad8ce5 Update to latest eslint-plugin-react-hooks (#36702)
Co-authored-by: diondiondion <mail@diondiondion.com>
2025-11-10 14:50:04 +00:00
Echo
4ddddc2573 Centers GIFs in media modal (#36806) 2025-11-10 13:21:45 +00:00
diondiondion
1280792678 Fix dropdown menu not focusing first item when opened via keyboard (#36804) 2025-11-10 11:44:10 +00:00
Matt Jankowski
63e2ca5d27 Add spec for hitting max status pins limit in pin api (#36789) 2025-11-10 10:06:47 +00:00
github-actions[bot]
b0790d828c New Crowdin Translations (automated) (#36786)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-10 10:06:07 +00:00
renovate[bot]
89b5ceb5dc chore(deps): update dependency vite to v7.2.2 (#36751)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-10 09:03:33 +00:00
renovate[bot]
441eb89537 chore(deps): update dependency axios to v1.13.2 (#36726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-07 13:25:41 +00:00
Echo
882afd7748 Reset background color on media modal (#36782) 2025-11-07 10:44:31 +00:00
Claire
8fb06ea0ca Update dependency rollup from 4.46.2 to 4.46.4 (#36781) 2025-11-07 10:29:05 +00:00
Matt Jankowski
c7dc5767d3 Rely on puma default environment setting (#36760) 2025-11-07 10:06:22 +00:00
Matt Jankowski
6833878f95 Clarify hint for bootstrap account instructions (#36771) 2025-11-07 10:05:52 +00:00
Claire
70d71c10c8 Fix /api/v1/statuses/:id/context sometimes returing Mastodon-Async-Refresh without result_count (#36779) 2025-11-07 10:02:25 +00:00
Claire
315833cb75 Fix prepared quote not being discarded with contents when replying (#36778) 2025-11-07 09:11:10 +00:00
github-actions[bot]
dcf7fc1028 New Crowdin Translations (automated) (#36777)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-07 08:34:18 +00:00
Claire
0ace564537 Add 4.5.x to the list of supported branches (#36762) 2025-11-06 16:23:56 +00:00
Matt Jankowski
16dfa32578 Update express to version 5.1.0 (#36669)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 14:46:08 +00:00
Matt Jankowski
0d48005b8a Remove legacy AR connection boot from puma config (#36757) 2025-11-06 14:36:23 +00:00
renovate[bot]
59e0ead418 chore(deps): update dependency stoplight to v5.5.0 (#36731)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 14:24:43 +00:00
renovate[bot]
76fb15dced chore(deps): update dependency aws-sdk-s3 to v1.203.0 (#36746)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 14:17:04 +00:00
renovate[bot]
5d3c1cdc9b chore(deps): update libretranslate/libretranslate docker tag to v1.7.3 (#36724)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 14:03:35 +00:00
github-actions[bot]
15c33a16f7 New Crowdin Translations (automated) (#36749)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-06 13:55:37 +00:00
Claire
6f1a30c4a6 Bump version to v4.5.0 (#36754) 2025-11-06 13:24:58 +00:00
diondiondion
58b3fc0379 Refactor "New/Edit list" page to avoid setting state in effect (#36753) 2025-11-06 11:00:37 +00:00
Echo
41a4022988 Fix: correctly dismisses announcement when viewed (#36750) 2025-11-06 09:48:34 +00:00
Emelia Smith
532bb7ea3c Add systemd service file for prometheus exporter (#35130) 2025-11-06 09:25:56 +00:00
Echo
987104f435 Add default visualizer for audio upload without poster (#36734) 2025-11-05 15:33:26 +00:00
Josh Soref
50e1320c8d Improve account migration warnings (#20387)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Co-authored-by: diondiondion <mail@diondiondion.com>
2025-11-05 15:27:40 +00:00
Echo
6337e036f3 Add new ESLint rule requiring explicit button types (#36738) 2025-11-05 15:11:04 +00:00
Yurii Izorkin
1a31c412ca nginx: optimize location blocks (part 2) (#19644) 2025-11-05 15:08:16 +00:00
Claire
4a6f479535 Update changelog (#36737) 2025-11-05 14:43:22 +00:00
Renaud Chaput
15a7abd581 Resume Renovate updates for tesseract (#36705) 2025-11-05 14:25:40 +00:00
diondiondion
1b8d1cd6e4 Fix spoiler toggle button being able to submit compose form (#36736) 2025-11-05 14:00:42 +00:00
Shlee
35bd985727 Increase nginx.conf proxy_read_timeout (#30599) 2025-11-05 13:36:14 +00:00
Oneric
c0c6f5ea32 Fix Accept headers when fetching AP objects to match spec (#30354) 2025-11-05 13:32:29 +00:00
github-actions[bot]
3aeae8cafd New Crowdin Translations (automated) (#36727)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-05 13:20:34 +00:00
diondiondion
947dfcc548 Add some outer page spacing when viewport width equals content width (#36733) 2025-11-05 12:17:42 +00:00
renovate[bot]
049dcebf9a chore(deps): update devdependencies (non-major) (#36722)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-05 11:37:25 +00:00
renovate[bot]
f361a2c766 chore(deps): update dependency vite to v7.2.0 (#36729)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-05 11:36:58 +00:00
renovate[bot]
d4ec991126 chore(deps): update dependency aws-sdk-s3 to v1.202.0 (#36488)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-05 11:36:35 +00:00
Matt Jankowski
1f4fe91708 Relax aws-sdk-core version limit (#36719) 2025-11-05 10:43:10 +00:00
Claire
26e7fe9771 Change paste-link-to-quote loading state from generic loading bar to compose placeholder (#36695) 2025-11-04 19:20:39 +00:00
Claire
1b795c12e9 Change quote action to error instead of insert link in Private Mentions (#36721) 2025-11-04 17:58:50 +00:00
mkljczk
afd5d5c2e5 fix spelling (#35738) 2025-11-04 16:49:12 +00:00
Echo
3ab5ae1e4a Quote Posts: Add notifications for DMs and private posts (#36696) 2025-11-04 16:32:52 +00:00
Claire
4a9460f7bd Fix Skeleton placeholders being animated when setting to reduce animations is enabled (#36716) 2025-11-04 15:30:10 +00:00
renovate[bot]
e7692d0de8 chore(deps): update artifact actions (major) (major) (#36711)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 15:28:26 +00:00
renovate[bot]
cc77844540 chore(deps): update github/codeql-action action to v4 (#36713)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 15:28:17 +00:00
Matt Jankowski
337f16d33e Remove unused DomainControlHelper include from SignedRequest (#35856) 2025-11-04 15:27:42 +00:00
renovate[bot]
ef20dcbf95 chore(deps): update definitelytyped types (non-major) (#36706)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 15:01:23 +00:00
renovate[bot]
0c101b47bf chore(deps): update dependency typescript to v5.9.3 (#36707)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 14:59:42 +00:00
renovate[bot]
f221ce530b chore(deps): update actions/setup-node action to v6 (#36710)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 14:30:29 +00:00
renovate[bot]
8f1c73ed99 chore(deps): update eslint (non-major) (#36708)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 14:30:01 +00:00
renovate[bot]
1a698d3b35 chore(deps): update chromaui/action action to v13 (#36712)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 14:29:19 +00:00
renovate[bot]
5a2edebc2b chore(deps): update actions/checkout action to v5 (#36709)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 14:25:48 +00:00
Echo
90d4b3b943 Refactor: Media Modal (#36673) 2025-11-04 13:58:35 +00:00
Echo
13457111d5 Remove announcement margin when in Advanced Web Interface (#36714) 2025-11-04 13:37:34 +00:00
Claire
3a54d56fbd Fix quote dropdown menu item in detailed status view (#36704) 2025-11-04 11:01:25 +00:00
Claire
b5c550ff0b Remove option to disable access to local topic feeds for logged-in users (#36703) 2025-11-04 10:37:43 +00:00
renovate[bot]
6c176e56ee chore(deps): update dependency opentelemetry-instrumentation-pg to '~> 0.33.0' (#36701)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 10:36:04 +00:00
Jeong Arm
b999a626e5 Reverse 'Hide/Show all' eye icon for thread view (#22301) 2025-11-04 10:35:50 +00:00
renovate[bot]
bb084da1f5 fix(deps): update dependency pino-http to v11 (#36359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 10:28:30 +00:00
renovate[bot]
84e351cc3a chore(deps): update dependency shoulda-matchers to v7 (#36680)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 10:21:27 +00:00
renovate[bot]
7fced55ce7 fix(deps): update dependency pino to v10 (#36357)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 09:56:12 +00:00
Matt Jankowski
8f37f9d012 Update vitest to version 4.0.5 (#36652) 2025-11-04 09:47:30 +00:00
Matt Jankowski
8e4c9cf933 Update lint-staged to version 16.2.6 (#36668) 2025-11-04 09:43:38 +00:00
Matt Jankowski
cf87da25ad Update storybook to version 10.0.2 (#36657) 2025-11-04 09:42:27 +00:00
renovate[bot]
966aaaaf56 chore(deps): update dependency sidekiq to v8.0.9 (#36699)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 09:41:59 +00:00
renovate[bot]
5b880a2046 chore(deps): update dependency brakeman to v7.1.1 (#35434)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 09:32:38 +00:00
renovate[bot]
24aa5d0460 fix(deps): update dependency @rails/ujs to v7.1.600 (#36634)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-04 08:41:19 +00:00
Claire
5ac3cceaf5 Increase number of quote approval job retries (#36698) 2025-11-04 08:29:27 +00:00
github-actions[bot]
e5fbb49033 New Crowdin Translations (automated) (#36697)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-04 08:10:20 +00:00
Rachael Wright-Munn
d1f57822af Move "Privacy and reach" from "Public profile" to top-level navigation (#27294) 2025-11-03 17:56:17 +00:00
Claire
9b3e92bf17 Prevent creation of Private Mentions quoting someone who is not mentioned (#36689) 2025-11-03 14:16:25 +00:00
Claire
e79e42f8f1 Fix issuance of quote approval for remote private statuses (#36693) 2025-11-03 14:15:18 +00:00
Claire
bae5877c84 Disable paste-link-to-quote flow when composing Private Mentions (#36690) 2025-11-03 13:56:07 +00:00
github-actions[bot]
61c0daffc9 New Crowdin Translations (automated) (#36676)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-11-03 12:21:04 +00:00
renovate[bot]
f10c79c8d1 chore(deps): update dependency irb to v1.15.3 (#36682)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 11:05:26 +00:00
renovate[bot]
8781abf2bd chore(deps): update dependency sass to v1.93.3 (#36674)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 09:26:54 +00:00
renovate[bot]
7faf2eaa79 chore(deps): update dependency jsdom to v27.1.0 (#36663)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 09:23:25 +00:00
renovate[bot]
0bf974a758 chore(deps): update dependency haml_lint to v0.67.0 (#36645)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 09:21:51 +00:00
renovate[bot]
5c0c77223b chore(deps): update node.js to 24.11 (#36630)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 09:21:07 +00:00
renovate[bot]
5fe74d2092 chore(deps): update dependency rubyzip to v3.2.2 (#36687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-03 09:09:54 +00:00
diondiondion
055f581ca5 Fix initially selected language in Rules panel, hide selector when no alternative translations exist (#36672) 2025-10-31 14:20:59 +00:00
Claire
8a2826604c Bump version to v4.6.0-alpha.1 (#36667) 2025-10-31 13:24:26 +00:00
Matt Jankowski
d865a095d0 Update eslint-plugin-jsdoc to version 61.1.11 (#36653) 2025-10-31 11:07:48 +00:00
renovate[bot]
35abaa7ff1 chore(deps): update dependency axios to v1.13.1 (#36633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 10:31:57 +00:00
renovate[bot]
fd4e51b3d8 chore(deps): update dependency libvips to v8.17.3 (#36654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 10:30:55 +00:00
renovate[bot]
2c4367bcfc chore(deps): update dependency rubocop to v1.81.7 (#36662)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-31 10:24:36 +00:00
github-actions[bot]
d47ca1cc36 New Crowdin Translations (automated) (#36660)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-10-31 10:24:16 +00:00
diondiondion
499ddfe8e1 Add separate translation key for "About this server" string (#36664) 2025-10-31 10:07:10 +00:00
Matt Jankowski
7b61ad936d Update playwright-ruby-client to version 1.56.0 (#36655) 2025-10-31 09:52:23 +00:00
diondiondion
fcecbf31ed Show error when submitting empty post rather than failing silently (#36650) 2025-10-30 19:29:25 +00:00
Matt Jankowski
aefd728309 Use before_action to protect hidden collections in following/followers lists (#35783) 2025-10-30 16:34:19 +00:00
renovate[bot]
13a070f8d1 chore(deps): update dependency webmock to v3.26.1 (#36648)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-30 16:03:47 +00:00
Echo
28cb345131 Fix: Ensure carousel focuses on wrapper (#36649) 2025-10-30 13:08:24 +00:00
Echo
f3d9a4ed44 Add CSS Module support (#36637) 2025-10-30 12:30:42 +00:00
Claire
762e87b121 Fix SMTP configuration with mail 2.9.0 (#36646) 2025-10-30 11:21:32 +00:00
Joshua Byrd
e5e9f8da93 Fix og:images from The Guardian (and possibly other CDNs that check URL hashes) (#36139)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2025-10-30 10:57:07 +00:00
Echo
ff1e19a506 Silence Storybook build warning (#36647) 2025-10-30 10:51:34 +00:00
renovate[bot]
2c5d3f934c chore(deps): update dependency oj to v3.16.12 (#36644)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-30 08:13:50 +00:00
github-actions[bot]
a77038b288 New Crowdin Translations (automated) (#36641)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-10-30 07:52:39 +00:00
Dima
ebf5cee38e Fix media URL inconsistency when deleting statuses via API (#35880) 2025-10-29 16:46:16 +00:00
Echo
e7cd5a430e Refactor carousel components (#36425)
Co-authored-by: diondiondion <mail@diondiondion.com>
2025-10-29 14:44:46 +00:00
2760 changed files with 53562 additions and 126472 deletions

View File

@@ -1,5 +1,5 @@
# For details, see https://github.com/devcontainers/images/tree/main/src/ruby
FROM mcr.microsoft.com/devcontainers/ruby:1-3.3-bookworm
FROM mcr.microsoft.com/devcontainers/ruby:3.4-trixie
# Install node version from .nvmrc
WORKDIR /app
@@ -9,7 +9,7 @@ RUN /bin/bash --login -i -c "nvm install"
# Install additional OS packages
RUN apt-get update && \
export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install --no-install-recommends libicu-dev libidn11-dev ffmpeg imagemagick libvips42 libpam-dev
apt-get -y install --no-install-recommends libicu-dev libidn11-dev ffmpeg libvips42 libpam-dev
# Disable download prompt for Corepack
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0

View File

@@ -56,7 +56,7 @@ services:
- internal_network
es:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.29
restart: unless-stopped
environment:
ES_JAVA_OPTS: -Xms512m -Xmx512m
@@ -73,7 +73,7 @@ services:
hard: -1
libretranslate:
image: libretranslate/libretranslate:v1.6.2
image: libretranslate/libretranslate:v1.7.3
restart: unless-stopped
volumes:
- lt-data:/home/libretranslate/.local

View File

@@ -16,37 +16,11 @@
# ----------
LOCAL_DOMAIN=example.com
# Use this only if you need to run mastodon on a different domain than the one used for federation.
# You can read more about this option on https://docs.joinmastodon.org/admin/config/#web-domain
# DO *NOT* USE THIS UNLESS YOU KNOW *EXACTLY* WHAT YOU ARE DOING.
# WEB_DOMAIN=mastodon.example.com
# Use this if you want to have several aliases handler@example1.com
# handler@example2.com etc. for the same user. LOCAL_DOMAIN should not
# be added. Comma separated values
# ALTERNATE_DOMAINS=example1.com,example2.com
# Use HTTP proxy for outgoing request (optional)
# http_proxy=http://gateway.local:8118
# Access control for hidden service.
# ALLOW_ACCESS_TO_HIDDEN_SERVICE=true
# Authorized fetch mode (optional)
# Require remote servers to authentify when fetching toots, see
# https://docs.joinmastodon.org/admin/config/#authorized_fetch
# AUTHORIZED_FETCH=true
# Limited federation mode (optional)
# Only allow federation with specific domains, see
# https://docs.joinmastodon.org/admin/config/#whitelist_mode
# LIMITED_FEDERATION_MODE=true
# Redis
# -----
REDIS_HOST=localhost
REDIS_PORT=6379
# PostgreSQL
# ----------
DB_HOST=/var/run/postgresql
@@ -55,20 +29,18 @@ DB_NAME=mastodon_production
DB_PASS=
DB_PORT=5432
# Elasticsearch (optional)
# ------------------------
#ES_ENABLED=true
#ES_HOST=localhost
#ES_PORT=9200
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
# Authentication for ES (optional)
#ES_USER=elastic
#ES_PASS=password
ES_USER=elastic
ES_PASS=password
# Secrets
# -------
# Generate each with the `RAILS_ENV=production bundle exec rails secret` task (`docker-compose run --rm web bundle exec rails secret` if you use docker compose)
# Make sure to use `bundle exec rails secret` to generate secrets
# -------
SECRET_KEY_BASE=
@@ -85,31 +57,11 @@ SECRET_KEY_BASE=
# Web Push
# --------
# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` (first is the private key, second is the public one)
# You should only generate this once per instance. If you later decide to change it, all push subscription will
# be invalidated, requiring the users to access the website again to resubscribe.
# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key`
# --------
VAPID_PRIVATE_KEY=
VAPID_PUBLIC_KEY=
# Registrations
# -------------
# Single user mode will disable registrations and redirect frontpage to the first profile
# SINGLE_USER_MODE=true
# Prevent registrations with following e-mail domains
# EMAIL_DOMAIN_DENYLIST=example1.com|example2.de|etc
# Only allow registrations with the following e-mail domains
# EMAIL_DOMAIN_ALLOWLIST=example1.com|example2.de|etc
#TODO move this
# Optionally change default language
# DEFAULT_LOCALE=de
# Sending mail
# ------------
SMTP_SERVER=
@@ -118,195 +70,13 @@ SMTP_LOGIN=
SMTP_PASSWORD=
SMTP_FROM_ADDRESS=notifications@example.com
# File storage (optional)
# -----------------------
# The attachment host must allow cross origin request from WEB_DOMAIN or
# LOCAL_DOMAIN if WEB_DOMAIN is not set. For example, the server may have the
# following header field:
# Access-Control-Allow-Origin: https://192.168.1.123:9000/
# -----------------------
#S3_ENABLED=true
#S3_BUCKET=files.example.com
#AWS_ACCESS_KEY_ID=
#AWS_SECRET_ACCESS_KEY=
#S3_ALIAS_HOST=files.example.com
# Swift (optional)
# The attachment host must allow cross origin request - see the description
# above.
# SWIFT_ENABLED=true
# SWIFT_USERNAME=
# For Keystone V3, the value for SWIFT_TENANT should be the project name
# SWIFT_TENANT=
# SWIFT_PASSWORD=
# Some OpenStack V3 providers require PROJECT_ID (optional)
# SWIFT_PROJECT_ID=
# Keystone V2 and V3 URLs are supported. Use a V3 URL if possible to avoid
# issues with token rate-limiting during high load.
# SWIFT_AUTH_URL=
# SWIFT_CONTAINER=
# SWIFT_OBJECT_URL=
# SWIFT_REGION=
# Defaults to 'default'
# SWIFT_DOMAIN_NAME=
# Defaults to 60 seconds. Set to 0 to disable
# SWIFT_CACHE_TTL=
# Optional asset host for multi-server setups
# The asset host must allow cross origin request from WEB_DOMAIN or LOCAL_DOMAIN
# if WEB_DOMAIN is not set. For example, the server may have the
# following header field:
# Access-Control-Allow-Origin: https://example.com/
# CDN_HOST=https://assets.example.com
# Optional list of hosts that are allowed to serve media for your instance
# This is useful if you include external media in your custom CSS or about page,
# or if your data storage provider makes use of redirects to other domains.
# EXTRA_DATA_HOSTS=https://data.example1.com|https://data.example2.com
# Optional alias for S3 (e.g. to serve files on a custom domain, possibly using Cloudfront or Cloudflare)
# S3_ALIAS_HOST=
# Streaming API integration
# STREAMING_API_BASE_URL=
# External authentication (optional)
# ----------------------------------
# LDAP authentication (optional)
# LDAP_ENABLED=true
# LDAP_HOST=localhost
# LDAP_PORT=389
# LDAP_METHOD=simple_tls
# LDAP_BASE=
# LDAP_BIND_DN=
# LDAP_PASSWORD=
# LDAP_UID=cn
# LDAP_MAIL=mail
# LDAP_SEARCH_FILTER=(|(%{uid}=%{email})(%{mail}=%{email}))
# LDAP_UID_CONVERSION_ENABLED=true
# LDAP_UID_CONVERSION_SEARCH=., -
# LDAP_UID_CONVERSION_REPLACE=_
# PAM authentication (optional)
# PAM authentication uses for the email generation the "email" pam variable
# and optional as fallback PAM_DEFAULT_SUFFIX
# The pam environment variable "email" is provided by:
# https://github.com/devkral/pam_email_extractor
# PAM_ENABLED=true
# Fallback email domain for email address generation (LOCAL_DOMAIN by default)
# PAM_EMAIL_DOMAIN=example.com
# Name of the pam service (pam "auth" section is evaluated)
# PAM_DEFAULT_SERVICE=rpam
# Name of the pam service used for checking if an user can register (pam "account" section is evaluated) (nil (disabled) by default)
# PAM_CONTROLLED_SERVICE=rpam
# Global OAuth settings (optional) :
# If you have only one strategy, you may want to enable this
# OAUTH_REDIRECT_AT_SIGN_IN=true
# Optional CAS authentication (cf. omniauth-cas) :
# CAS_ENABLED=true
# CAS_URL=https://sso.myserver.com/
# CAS_HOST=sso.myserver.com/
# CAS_PORT=443
# CAS_SSL=true
# CAS_VALIDATE_URL=
# CAS_CALLBACK_URL=
# CAS_LOGOUT_URL=
# CAS_LOGIN_URL=
# CAS_UID_FIELD='user'
# CAS_CA_PATH=
# CAS_DISABLE_SSL_VERIFICATION=false
# CAS_UID_KEY='user'
# CAS_NAME_KEY='name'
# CAS_EMAIL_KEY='email'
# CAS_NICKNAME_KEY='nickname'
# CAS_FIRST_NAME_KEY='firstname'
# CAS_LAST_NAME_KEY='lastname'
# CAS_LOCATION_KEY='location'
# CAS_IMAGE_KEY='image'
# CAS_PHONE_KEY='phone'
# Optional SAML authentication (cf. omniauth-saml)
# SAML_ENABLED=true
# SAML_ACS_URL=http://localhost:3000/auth/auth/saml/callback
# SAML_ISSUER=https://example.com
# SAML_IDP_SSO_TARGET_URL=https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO
# SAML_IDP_CERT=
# SAML_IDP_CERT_FINGERPRINT=
# SAML_NAME_IDENTIFIER_FORMAT=
# SAML_CERT=
# SAML_PRIVATE_KEY=
# SAML_SECURITY_WANT_ASSERTION_SIGNED=true
# SAML_SECURITY_WANT_ASSERTION_ENCRYPTED=true
# SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED=true
# SAML_ATTRIBUTES_STATEMENTS_UID="urn:oid:0.9.2342.19200300.100.1.1"
# SAML_ATTRIBUTES_STATEMENTS_EMAIL="urn:oid:1.3.6.1.4.1.5923.1.1.1.6"
# SAML_ATTRIBUTES_STATEMENTS_FULL_NAME="urn:oid:2.16.840.1.113730.3.1.241"
# SAML_ATTRIBUTES_STATEMENTS_FIRST_NAME="urn:oid:2.5.4.42"
# SAML_ATTRIBUTES_STATEMENTS_LAST_NAME="urn:oid:2.5.4.4"
# SAML_UID_ATTRIBUTE="urn:oid:0.9.2342.19200300.100.1.1"
# SAML_ATTRIBUTES_STATEMENTS_VERIFIED=
# SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL=
# Custom settings
# ---------------
# Various ways to customize Mastodon's behavior
# ---------------
# Maximum allowed character count
MAX_TOOT_CHARS=500
# Maximum allowed hashtags to follow in a feed column
# Note that setting this value higher may cause significant
# database load
MAX_FEED_HASHTAGS=4
# Maximum number of pinned posts
MAX_PINNED_TOOTS=5
# Maximum allowed bio characters
MAX_BIO_CHARS=500
# Maximim number of profile fields allowed
MAX_PROFILE_FIELDS=4
# Maximum allowed display name characters
MAX_DISPLAY_NAME_CHARS=30
# Maximum allowed poll options
MAX_POLL_OPTIONS=5
# Maximum allowed poll option characters
MAX_POLL_OPTION_CHARS=100
# Maximum image and video/audio upload sizes
# Units are in bytes
# 1048576 bytes equals 1 megabyte
# MAX_IMAGE_SIZE=8388608
# MAX_VIDEO_SIZE=41943040
# Maximum search results to display
# Only relevant when elasticsearch is installed
# MAX_SEARCH_RESULTS=20
# Maximum hashtags to display
# Customize the number of hashtags shown in 'Explore'
# MAX_TRENDING_TAGS=10
# Maximum custom emoji file sizes
# If undefined or smaller than MAX_EMOJI_SIZE, the value
# of MAX_EMOJI_SIZE will be used for MAX_REMOTE_EMOJI_SIZE
# Units are in bytes
# MAX_EMOJI_SIZE=262144
# MAX_REMOTE_EMOJI_SIZE=262144
# Optional hCaptcha support
# HCAPTCHA_SECRET_KEY=
# HCAPTCHA_SITE_KEY=
S3_ENABLED=true
S3_BUCKET=files.example.com
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
S3_ALIAS_HOST=files.example.com
# Optional list of hosts that are allowed to serve media for your instance
# EXTRA_MEDIA_HOSTS=https://data.example1.com,https://data.example2.com

View File

@@ -1,6 +1,7 @@
name: Bug Report (Web Interface)
description: There is a problem using Mastodon's web interface.
labels: [bug, 'status/to triage', 'area/web interface']
labels: ['area/web interface']
type: Bug
body:
- type: markdown
attributes:

View File

@@ -1,7 +1,7 @@
name: Bug Report (server / API)
description: |
There is a problem with the HTTP server, REST API, ActivityPub interaction, etc.
labels: [bug, 'status/to triage']
type: 'Bug'
body:
- type: markdown
attributes:

View File

@@ -1,7 +1,8 @@
name: Deployment troubleshooting
description: |
You are a server administrator and you are encountering a technical issue during installation, upgrade or operations of Mastodon.
labels: [bug, 'status/to triage']
labels: ['status/to triage']
type: 'Troubleshooting'
body:
- type: markdown
attributes:

View File

@@ -1,6 +1,6 @@
name: Feature Request
description: I have a suggestion
labels: [suggestion]
type: Suggestion
body:
- type: markdown
attributes:

View File

@@ -9,7 +9,7 @@ runs:
using: 'composite'
steps:
- name: Set up Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
node-version-file: '.nvmrc'
@@ -23,7 +23,7 @@ runs:
shell: bash
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
- uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}

View File

@@ -17,7 +17,7 @@ runs:
sudo apt-get install -y libicu-dev libidn11-dev libvips42 ${{ inputs.additional-system-dependencies }}
- name: Set up Ruby
uses: ruby/setup-ruby@v1
uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1
with:
ruby-version: ${{ inputs.ruby-version }}
bundler-cache: true

View File

@@ -5,7 +5,6 @@
'customManagers:dockerfileVersions',
':labels(dependencies)',
':prConcurrentLimitNone', // Remove limit for open PRs at any time.
':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour.
':enableVulnerabilityAlertsWithLabel(security)',
],
rebaseWhen: 'conflicted',
@@ -23,8 +22,6 @@
// Require Dependency Dashboard Approval for major version bumps of these node packages
matchManagers: ['npm'],
matchPackageNames: [
'tesseract.js', // Requires code changes
// react-router: Requires manual upgrade
'history',
'react-router-dom',
@@ -116,6 +113,7 @@
],
matchUpdateTypes: ['major'],
groupName: 'artifact actions (major)',
extends: ['helpers:pinGitHubActionDigests'],
},
{
// Update @types/* packages every week, with one grouped PR
@@ -156,9 +154,15 @@
groupName: 'opentelemetry-ruby (non-major)',
},
{
// Group Playwright Ruby & JS deps in the same PR, as they need to be in sync
matchManagers: ['bundler', 'npm'],
matchPackageNames: ['playwright-ruby-client', 'playwright'],
// The ruby portion of the Playwright group
matchManagers: ['bundler'],
matchPackageNames: ['playwright-ruby-client'],
groupName: 'Playwright',
},
{
// The node portion of the Playwright group
matchManagers: ['npm'],
matchPackageNames: ['playwright'],
groupName: 'Playwright',
},
// Add labels depending on package manager

View File

@@ -35,7 +35,7 @@ jobs:
- linux/arm64
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Prepare
env:
@@ -47,19 +47,19 @@ jobs:
image_names=${PUSH_TO_IMAGES//$'\n'/,}
echo "IMAGE_NAMES=${image_names%,}" >> $GITHUB_ENV
- uses: docker/setup-buildx-action@v3
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
id: buildx
- name: Log in to Docker Hub
if: contains(inputs.push_to_images, 'tootsuite')
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to the GitHub Container registry
if: contains(inputs.push_to_images, 'ghcr.io')
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
registry: ghcr.io
username: ${{ github.actor }}
@@ -67,7 +67,7 @@ jobs:
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5
if: ${{ inputs.push_to_images != '' }}
with:
images: ${{ inputs.push_to_images }}
@@ -76,7 +76,7 @@ jobs:
- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
with:
context: .
file: ${{ inputs.file_to_build }}
@@ -100,7 +100,7 @@ jobs:
- name: Upload digest
if: ${{ inputs.push_to_images != '' }}
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
# `hashFiles` is used to disambiguate between streaming and non-streaming images
name: digests-${{ hashFiles(inputs.file_to_build) }}-${{ env.PLATFORM_PAIR }}
@@ -119,10 +119,10 @@ jobs:
PUSH_TO_IMAGES: ${{ inputs.push_to_images }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Download digests
uses: actions/download-artifact@v4
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
path: ${{ runner.temp }}/digests
# `hashFiles` is used to disambiguate between streaming and non-streaming images
@@ -131,25 +131,25 @@ jobs:
- name: Log in to Docker Hub
if: contains(inputs.push_to_images, 'tootsuite')
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to the GitHub Container registry
if: contains(inputs.push_to_images, 'ghcr.io')
uses: docker/login-action@v3
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5
if: ${{ inputs.push_to_images != '' }}
with:
images: ${{ inputs.push_to_images }}

View File

@@ -11,7 +11,7 @@ permissions:
jobs:
compute-suffix:
runs-on: ubuntu-latest
if: github.repository == 'glitch-soc/mastodon'
if: github.repository == 'mastodon/mastodon'
steps:
- id: version_vars
env:
@@ -28,7 +28,8 @@ jobs:
file_to_build: Dockerfile
cache: false
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon
tootsuite/mastodon
ghcr.io/mastodon/mastodon
version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
labels: |
org.opencontainers.image.description=Nightly build image used for testing purposes
@@ -47,7 +48,8 @@ jobs:
file_to_build: streaming/Dockerfile
cache: false
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming
tootsuite/mastodon-streaming
ghcr.io/mastodon/mastodon-streaming
version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
labels: |
org.opencontainers.image.description=Nightly build image used for testing purposes

View File

@@ -18,7 +18,7 @@ jobs:
steps:
# Repository needs to be cloned so `git rev-parse` below works
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- id: version_vars
run: |
echo mastodon_version_metadata=pr-${{ github.event.pull_request.number }}-$(git rev-parse --short ${{github.event.pull_request.head.sha}}) >> $GITHUB_OUTPUT
@@ -33,7 +33,7 @@ jobs:
with:
file_to_build: Dockerfile
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon
ghcr.io/mastodon/mastodon
version_metadata: ${{ needs.compute-suffix.outputs.metadata }}
flavor: |
latest=auto
@@ -48,7 +48,7 @@ jobs:
with:
file_to_build: streaming/Dockerfile
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming
ghcr.io/mastodon/mastodon-streaming
version_metadata: ${{ needs.compute-suffix.outputs.metadata }}
flavor: |
latest=auto

View File

@@ -16,7 +16,7 @@ jobs:
steps:
# Repository needs to be cloned to list branches
- name: Clone repository
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
@@ -51,7 +51,8 @@ jobs:
with:
file_to_build: Dockerfile
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon
tootsuite/mastodon
ghcr.io/mastodon/mastodon
# Do not use cache when building releases, so apt update is always ran and the release always contain the latest packages
cache: false
# Only tag with latest when ran against the latest stable branch
@@ -69,7 +70,8 @@ jobs:
with:
file_to_build: streaming/Dockerfile
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming
tootsuite/mastodon-streaming
ghcr.io/mastodon/mastodon-streaming
# Do not use cache when building releases, so apt update is always ran and the release always contain the latest packages
cache: false
# Only tag with latest when ran against the latest stable branch

View File

@@ -25,7 +25,8 @@ jobs:
file_to_build: Dockerfile
cache: false
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon
tootsuite/mastodon
ghcr.io/mastodon/mastodon
version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
labels: |
org.opencontainers.image.description=Nightly build image used for testing purposes
@@ -44,7 +45,8 @@ jobs:
file_to_build: streaming/Dockerfile
cache: false
push_to_images: |
ghcr.io/${{ github.repository_owner }}/mastodon-streaming
tootsuite/mastodon-streaming
ghcr.io/mastodon/mastodon-streaming
version_prerelease: ${{ needs.compute-suffix.outputs.prerelease }}
labels: |
org.opencontainers.image.description=Nightly build image used for testing purposes

View File

@@ -28,10 +28,10 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1
with:
bundler-cache: true

View File

@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby environment
uses: ./.github/actions/setup-ruby
@@ -42,8 +42,7 @@ jobs:
- name: Check for missing strings in English YML
run: |
bin/i18n-tasks add-missing -l en
git diff --exit-code
bin/i18n-tasks missing -t used -l en
- name: Check for wrong string interpolations
run: bin/i18n-tasks check-consistent-interpolations

View File

@@ -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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # 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@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript
@@ -33,9 +53,10 @@ jobs:
run: yarn build-storybook
- name: Run Chromatic
uses: chromaui/action@v12
uses: chromaui/action@07791f8243f4cb2698bf4d00426baf4b2d1cb7e0 # v13
with:
# ⚠️ Make sure to configure a `CHROMATIC_PROJECT_TOKEN` repository secret
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
zip: true
storybookBuildDir: 'storybook-static'
exitOnceUploaded: true # Exit immediately after upload
autoAcceptChanges: 'main' # Auto-accept changes on main branch only

View File

@@ -31,11 +31,11 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -48,7 +48,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -61,6 +61,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4
with:
category: '/language:${{matrix.language}}'

View File

@@ -9,11 +9,11 @@ permissions:
jobs:
download-translations-stable:
runs-on: ubuntu-latest
if: github.repository == 'glitch-soc/mastodon'
if: github.repository == 'mastodon/mastodon'
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Increase Git http.postBuffer
# This is needed due to a bug in Ubuntu's cURL version?
@@ -24,9 +24,8 @@ jobs:
# Download the translation files from Crowdin
- name: crowdin action
uses: crowdin/github-action@v2
uses: crowdin/github-action@b4b468cffefb50bdd99dd83e5d2eaeb63c880380 # v2
with:
config: crowdin-glitch.yml
upload_sources: false
upload_translations: false
download_translations: true
@@ -51,7 +50,7 @@ jobs:
# Create or update the pull request
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.8
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
with:
commit-message: 'New Crowdin translations'
title: 'New Crowdin Translations for ${{ github.base_ref || github.ref_name }} (automated)'

View File

@@ -11,11 +11,11 @@ permissions:
jobs:
download-translations:
runs-on: ubuntu-latest
if: github.repository == 'glitch-soc/mastodon'
if: github.repository == 'mastodon/mastodon'
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Increase Git http.postBuffer
# This is needed due to a bug in Ubuntu's cURL version?
@@ -26,9 +26,8 @@ jobs:
# Download the translation files from Crowdin
- name: crowdin action
uses: crowdin/github-action@v2
uses: crowdin/github-action@b4b468cffefb50bdd99dd83e5d2eaeb63c880380 # v2
with:
config: crowdin-glitch.yml
upload_sources: false
upload_translations: false
download_translations: true
@@ -53,7 +52,7 @@ jobs:
# Create or update the pull request
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8
with:
commit-message: 'New Crowdin translations'
title: 'New Crowdin Translations (automated)'

View File

@@ -6,29 +6,28 @@ on:
- 'main'
- 'stable-*'
paths:
- crowdin-glitch.yml
- app/javascript/flavours/glitch/locales/en.json
- config/locales-glitch/en.yml
- config/locales-glitch/simple_form.en.yml
- config/locales-glitch/activerecord.en.yml
- config/locales-glitch/devise.en.yml
- config/locales-glitch/doorkeeper.en.yml
- crowdin.yml
- app/javascript/mastodon/locales/en.json
- config/locales/en.yml
- config/locales/simple_form.en.yml
- config/locales/activerecord.en.yml
- config/locales/devise.en.yml
- config/locales/doorkeeper.en.yml
- .github/workflows/crowdin-upload.yml
workflow_dispatch:
jobs:
upload-translations:
runs-on: ubuntu-latest
if: github.repository == 'glitch-soc/mastodon'
if: github.repository == 'mastodon/mastodon'
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: crowdin action
uses: crowdin/github-action@v2
uses: crowdin/github-action@b4b468cffefb50bdd99dd83e5d2eaeb63c880380 # v2
with:
config: crowdin-glitch.yml
upload_sources: true
upload_translations: false
download_translations: false

View File

@@ -13,10 +13,10 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript
- name: Check formatting with Prettier
- name: Check formatting
run: yarn format:check

View File

@@ -1,17 +0,0 @@
{
"problemMatcher": [
{
"owner": "haml-lint",
"severity": "warning",
"pattern": [
{
"regexp": "^(.*):(\\d+)\\s\\[W]\\s(.*):\\s(.*)$",
"file": 1,
"line": 2,
"code": 3,
"message": 4
}
]
}
]
}

View File

@@ -9,7 +9,6 @@ on:
- 'package.json'
- 'yarn.lock'
- '.nvmrc'
- '.prettier*'
- 'stylelint.config.js'
- '**/*.css'
- '**/*.scss'
@@ -21,7 +20,6 @@ on:
- 'package.json'
- 'yarn.lock'
- '.nvmrc'
- '.prettier*'
- 'stylelint.config.js'
- '**/*.css'
- '**/*.scss'
@@ -34,7 +32,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript

View File

@@ -33,14 +33,13 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1
with:
bundler-cache: true
- name: Run haml-lint
run: |
echo "::add-matcher::.github/workflows/haml-lint-problem-matcher.json"
bin/haml-lint --reporter github

View File

@@ -10,7 +10,6 @@ on:
- 'yarn.lock'
- 'tsconfig.json'
- '.nvmrc'
- '.prettier*'
- 'eslint.config.mjs'
- '**/*.js'
- '**/*.jsx'
@@ -24,7 +23,6 @@ on:
- 'yarn.lock'
- 'tsconfig.json'
- '.nvmrc'
- '.prettier*'
- 'eslint.config.mjs'
- '**/*.js'
- '**/*.jsx'
@@ -38,7 +36,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript

View File

@@ -35,15 +35,15 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby
uses: ruby/setup-ruby@v1
uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1
with:
bundler-cache: true
- name: Set-up RuboCop Problem Matcher
uses: r7kamura/rubocop-problem-matchers-action@v1
uses: r7kamura/rubocop-problem-matchers-action@59f1a0759f50cc2649849fd850b8487594bb5a81 # v1.2.2
- name: Run rubocop
run: bin/rubocop

View File

@@ -10,7 +10,7 @@ permissions:
jobs:
label-rebase-needed:
runs-on: ubuntu-latest
if: github.repository == 'glitch-soc/mastodon'
if: github.repository == 'mastodon/mastodon'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Check for merge conflicts
uses: eps1lon/actions-label-merge-conflict@v3
uses: eps1lon/actions-label-merge-conflict@1df065ebe6e3310545d4f4c4e862e43bdca146f0 # v3
with:
dirtyLabel: 'rebase needed :construction:'
repoToken: '${{ secrets.GITHUB_TOKEN }}'

View File

@@ -34,7 +34,7 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Javascript environment
uses: ./.github/actions/setup-javascript

View File

@@ -72,7 +72,7 @@ jobs:
BUNDLE_RETRY: 3
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby environment
uses: ./.github/actions/setup-ruby

View File

@@ -32,7 +32,7 @@ jobs:
SECRET_KEY_BASE_DUMMY: 1
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby environment
uses: ./.github/actions/setup-ruby
@@ -43,7 +43,7 @@ jobs:
onlyProduction: 'true'
- name: Cache assets from compilation
uses: actions/cache@v4
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
with:
path: |
public/assets
@@ -65,7 +65,7 @@ jobs:
run: |
tar --exclude={"*.br","*.gz"} -zcf artifacts.tar.gz public/assets public/packs* tmp/cache/vite/last-build*.json
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
if: matrix.mode == 'test'
with:
path: |-
@@ -128,9 +128,9 @@ jobs:
- '3.3'
- '.ruby-version'
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
path: './'
name: ${{ github.sha }}
@@ -151,7 +151,7 @@ jobs:
bin/flatware fan bin/rails db:test:prepare
- name: Cache RSpec persistence file
uses: actions/cache@v4
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
with:
path: |
tmp/rspec/examples.txt
@@ -167,99 +167,12 @@ jobs:
- name: Upload coverage reports to Codecov
if: matrix.ruby-version == '.ruby-version'
uses: codecov/codecov-action@v5
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
with:
files: coverage/lcov/*.lcov
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
test-imagemagick:
name: ImageMagick tests
runs-on: ubuntu-latest
needs:
- build
services:
postgres:
image: postgres:14-alpine
env:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
options: >-
--health-cmd pg_isready
--health-interval 10ms
--health-timeout 3s
--health-retries 50
ports:
- 5432:5432
redis:
image: redis:7-alpine
options: >-
--health-cmd "redis-cli ping"
--health-interval 10ms
--health-timeout 3s
--health-retries 50
ports:
- 6379:6379
env:
DB_HOST: localhost
DB_USER: postgres
DB_PASS: postgres
COVERAGE: ${{ matrix.ruby-version == '.ruby-version' }}
RAILS_ENV: test
ALLOW_NOPAM: true
PAM_ENABLED: true
PAM_DEFAULT_SERVICE: pam_test
PAM_CONTROLLED_SERVICE: pam_test_controlled
OIDC_ENABLED: true
OIDC_SCOPE: read
SAML_ENABLED: true
CAS_ENABLED: true
BUNDLE_WITH: 'pam_authentication test'
GITHUB_RSPEC: ${{ matrix.ruby-version == '.ruby-version' && github.event.pull_request && 'true' }}
MASTODON_USE_LIBVIPS: false
strategy:
fail-fast: false
matrix:
ruby-version:
- '3.2'
- '3.3'
- '.ruby-version'
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: './'
name: ${{ github.sha }}
- name: Expand archived asset artifacts
run: |
tar xvzf artifacts.tar.gz
- name: Set up Ruby environment
uses: ./.github/actions/setup-ruby
with:
ruby-version: ${{ matrix.ruby-version}}
additional-system-dependencies: ffmpeg imagemagick libpam-dev
- name: Load database schema
run: './bin/rails db:create db:schema:load db:seed'
- run: bin/rspec --tag attachment_processing
- name: Upload coverage reports to Codecov
if: matrix.ruby-version == '.ruby-version'
uses: codecov/codecov-action@v5
with:
files: coverage/lcov/mastodon.lcov
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
test-e2e:
name: End to End testing
runs-on: ubuntu-latest
@@ -309,9 +222,9 @@ jobs:
- '.ruby-version'
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
path: './'
name: ${{ github.sha }}
@@ -334,7 +247,7 @@ jobs:
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
@@ -350,14 +263,14 @@ jobs:
- run: bin/rspec spec/system --tag streaming --tag js
- name: Archive logs
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
if: failure()
with:
name: e2e-logs-${{ matrix.ruby-version }}
path: log/
- name: Archive test screenshots
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
if: failure()
with:
name: e2e-screenshots-${{ matrix.ruby-version }}
@@ -439,17 +352,17 @@ jobs:
- '3.3'
- '.ruby-version'
search-image:
- docker.elastic.co/elasticsearch/elasticsearch:7.17.13
- docker.elastic.co/elasticsearch/elasticsearch:7.17.29
include:
- ruby-version: '.ruby-version'
search-image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2
search-image: docker.elastic.co/elasticsearch/elasticsearch:8.19.2
- ruby-version: '.ruby-version'
search-image: opensearchproject/opensearch:2
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
path: './'
name: ${{ github.sha }}
@@ -469,14 +382,14 @@ jobs:
- run: bin/rspec --tag search
- name: Archive logs
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
if: failure()
with:
name: test-search-logs-${{ matrix.ruby-version }}
path: log/
- name: Archive test screenshots
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
if: failure()
with:
name: test-search-screenshots

5
.gitignore vendored
View File

@@ -79,8 +79,3 @@ docker-compose.override.yml
*storybook.log
storybook-static
# exclude all bak, save, logs
*.bak
*.save
*.log

0
.gitmodules vendored
View File

View File

@@ -10,6 +10,6 @@ linters:
MiddleDot:
enabled: true
LineLength:
max: 300
max: 240 # Override default value of 80 inherited from rubocop
ViewLength:
max: 200 # Override default value of 100 inherited from rubocop

2
.nvmrc
View File

@@ -1 +1 @@
24.10
24.14

92
.oxfmtrc.json Normal file
View File

@@ -0,0 +1,92 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"singleQuote": true,
"jsxSingleQuote": true,
"printWidth": 80,
"ignorePatterns": [
"/tmp",
"/coverage",
"/public/assets",
"/public/emoji",
"/public/packs",
"/public/packs-test",
"/public/system",
"/public/vite*",
"*.html",
"docker-compose.override.yml",
// Ignore config YAML files that include ERB/ruby code
"config/email.yml",
// Vendored CSS
"app/javascript/styles/mastodon/reset.scss",
// Automatically generated
"/app/javascript/mastodon/features/emoji/emoji_map.json",
"/app/javascript/mastodon/features/emoji/emoji_data.json",
"AUTHORS.md",
"/app/javascript/mastodon/locales/*.json",
"/config/locales",
".storybook/static/mockServiceWorker.js",
// do not reformat JS files as this will change too many files and cause merge conflicts with open PRs and forks
"app/javascript/**/*.js",
"app/javascript/**/*.jsx",
"streaming/**/*.js"
],
"experimentalSortPackageJson": false,
"experimentalSortImports": {
"groups": [
["builtin"],
["react"],
["react-intl"],
["react-utils"],
["redux"],
["external", "type-external"],
["internal", "type-internal"],
["mastodon-internals"],
["parent", "type-parent"],
["sibling", "type-sibling", "index", "type-index"],
["side_effect"]
],
"customGroups": [
{
"groupName": "react",
"elementNamePattern": [
"react",
"react-dom",
"react-dom/client",
"prop-types"
]
},
{
"groupName": "react-intl",
"elementNamePattern": ["react-intl", "intl-messageformat"]
},
{
"groupName": "react-utils",
"elementNamePattern": [
"classnames",
"react-helmet",
"react-router",
"react-router-dom"
]
},
{
"groupName": "redux",
"elementNamePattern": [
"immutable",
"@reduxjs/toolkit",
"react-redux",
"react-immutable-proptypes",
"react-immutable-pure-component"
]
},
{
"groupName": "mastodon-internals",
"elementNamePattern": ["mastodon/**", "@/**"]
}
]
}
}

View File

@@ -1,100 +0,0 @@
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global'
# Ignore bundler config and downloaded libraries.
/.bundle
/vendor/bundle
# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal
# Ignore all logfiles and tempfiles.
.eslintcache
/log/*
!/log/.keep
/tmp
/coverage
.env
.env.production
.env.development
/node_modules/
/build/
# Ignore Vagrant files
.vagrant/
# Ignore IDE files
.vscode/
.idea/
# Ignore postgres + redis + elasticsearch volume optionally created by docker-compose
/postgres
/postgres14
/redis
/elasticsearch
# Ignore Apple files
.DS_Store
# Ignore vim files
*~
*.swp
# Ignore log files
*.log
# Ignore Docker option files
docker-compose.override.yml
# Ignore public
/public/assets
/public/emoji
/public/packs
/public/packs-test
/public/system
/public/vite*
# Ignore emoji map file
/app/javascript/mastodon/features/emoji/emoji_map.json
/app/javascript/mastodon/features/emoji/emoji_data.json
# Ignore locale files
/app/javascript/mastodon/locales/*.json
/config/locales
# Ignore vendored CSS reset
app/javascript/styles/mastodon/reset.scss
# Ignore Javascript pending https://github.com/mastodon/mastodon/pull/23631
*.js
*.jsx
# Ignore HTML till cleaned and included in CI
*.html
# Ignore the generated AUTHORS.md
AUTHORS.md
# Process a few selected JS files
!lint-staged.config.js
# Ignore config YAML files that include ERB/ruby code prettier does not understand
/config/email.yml
# Ignore glitch-soc emoji map file
/app/javascript/flavours/glitch/features/emoji/emoji_map.json
/app/javascript/flavours/glitch/features/emoji/emoji_data.json
# Ignore glitch-soc locale files
/app/javascript/flavours/glitch/locales
/config/locales-glitch
# Ignore glitch-soc vendored CSS reset
app/javascript/flavours/glitch/styles/reset.scss
# Ignore win95 theme
app/javascript/styles/win95.scss

View File

@@ -1,4 +0,0 @@
module.exports = {
singleQuote: true,
jsxSingleQuote: true
};

View File

@@ -4,3 +4,6 @@ Layout/FirstHashElementIndentation:
Layout/LineLength:
Max: 300 # Default of 120 causes a duplicate entry in generated todo file
Layout/MultilineMethodCallIndentation:
EnforcedStyle: indented

View File

@@ -1 +1 @@
3.4.7
3.4.8

View File

@@ -27,11 +27,12 @@ const config: StorybookConfig = {
'oops.gif',
'oops.png',
].map((path) => ({ from: `../public/${path}`, to: `/${path}` })),
{ from: '../app/javascript/images/logo.svg', to: '/custom-emoji/logo.svg' },
],
viteFinal(config) {
// For an unknown reason, Storybook does not use the root
// from the Vite config so we need to set it manually.
config.root = resolve(__dirname, '../app/javascript');
config.root = resolve(import.meta.dirname, '../app/javascript');
return config;
},
};

8
.storybook/modes.ts Normal file
View File

@@ -0,0 +1,8 @@
export const modes = {
darkTheme: {
theme: 'dark',
},
lightTheme: {
theme: 'light',
},
} as const;

View File

@@ -1,2 +1,2 @@
<html class="no-reduce-motion">
<html class="no-reduce-motion" data-color-scheme="light">
</html>

View File

@@ -11,14 +11,19 @@ import type { Preview } from '@storybook/react-vite';
import { initialize, mswLoader } from 'msw-storybook-addon';
import { action } from 'storybook/actions';
import {
importCustomEmojiData,
importLegacyShortcodes,
importEmojiData,
} from '@/mastodon/features/emoji/loader';
import type { LocaleData } from '@/mastodon/locales';
import { reducerWithInitialState } from '@/mastodon/reducers';
import { defaultMiddleware } from '@/mastodon/store/store';
import { mockHandlers, unhandledRequestHandler } from '@/testing/api';
// If you want to run the dark theme during development,
// you can change the below to `/application.scss`
import '../app/javascript/styles/mastodon-light.scss';
import { modes } from './modes';
import '../app/javascript/styles/application.scss';
import './styles.css';
const localeFiles = import.meta.glob('@/mastodon/locales/*.json', {
@@ -45,17 +50,46 @@ const preview: Preview = {
dynamicTitle: true,
},
},
theme: {
description: 'Theme for the story',
toolbar: {
title: 'Theme',
icon: 'circlehollow',
items: [{ value: 'light' }, { value: 'dark' }],
dynamicTitle: true,
},
},
},
initialGlobals: {
locale: 'en',
theme: 'light',
},
decorators: [
(Story, { parameters, globals, args }) => {
(Story, { parameters, globals, args, argTypes }) => {
// Get the locale from the global toolbar
// and merge it with any parameters or args state.
const { locale } = globals as { locale: string };
const { state = {} } = parameters;
const { state: argsState = {} } = args;
const argsState: Record<string, unknown> = {};
for (const [key, value] of Object.entries(args)) {
const argType = argTypes[key];
if (argType?.reduxPath) {
const reduxPath = Array.isArray(argType.reduxPath)
? argType.reduxPath.map((p) => p.toString())
: argType.reduxPath.split('.');
reduxPath.reduce((acc, key, i) => {
if (acc[key] === undefined) {
acc[key] = {};
}
if (i === reduxPath.length - 1) {
acc[key] = value;
}
return acc[key] as Record<string, unknown>;
}, argsState);
}
}
const reducer = reducerWithInitialState(
{
@@ -64,7 +98,7 @@ const preview: Preview = {
},
},
state as Record<string, unknown>,
argsState as Record<string, unknown>,
argsState,
);
const store = configureStore({
@@ -111,6 +145,13 @@ const preview: Preview = {
</IntlProvider>
);
},
(Story, { globals }) => {
const theme = (globals.theme as string) || 'light';
useEffect(() => {
document.body.setAttribute('data-color-scheme', theme);
}, [theme]);
return <Story />;
},
(Story) => (
<MemoryRouter>
<Story />
@@ -127,7 +168,12 @@ const preview: Preview = {
</MemoryRouter>
),
],
loaders: [mswLoader],
loaders: [
mswLoader,
importCustomEmojiData,
importLegacyShortcodes,
({ globals: { locale } }) => importEmojiData(locale as string),
],
parameters: {
layout: 'centered',
@@ -152,6 +198,13 @@ const preview: Preview = {
msw: {
handlers: mockHandlers,
},
chromatic: {
modes: {
dark: modes.darkTheme,
light: modes.lightTheme,
},
},
},
};

View File

@@ -7,7 +7,7 @@
* - Please do NOT modify this file.
*/
const PACKAGE_VERSION = '2.11.3'
const PACKAGE_VERSION = '2.12.1'
const INTEGRITY_CHECKSUM = '4db4a41e972cec1b64cc569c66952d82'
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
const activeClientIds = new Set()
@@ -205,6 +205,7 @@ async function resolveMainClient(event) {
* @param {FetchEvent} event
* @param {Client | undefined} client
* @param {string} requestId
* @param {number} requestInterceptedAt
* @returns {Promise<Response>}
*/
async function getResponse(event, client, requestId, requestInterceptedAt) {

View File

@@ -1,7 +1,20 @@
// The addon package.json incorrectly exports types, so we need to override them here.
import type { RootState } from '@/mastodon/store';
// See: https://github.com/storybookjs/storybook/blob/v9.0.4/code/addons/vitest/package.json#L70-L76
declare module '@storybook/addon-vitest/vitest-plugin' {
export * from '@storybook/addon-vitest/dist/vitest-plugin/index';
}
type RootPathKeys = keyof RootState;
declare module 'storybook/internal/csf' {
export interface InputType {
reduxPath?:
| `${RootPathKeys}.${string}`
| [RootPathKeys, ...(string | number)[]];
}
}
export {};

View File

@@ -1,13 +0,0 @@
diff --git a/lib/index.js b/lib/index.js
index 16ed6be8be8f555cc99096c2ff60954b42dc313d..d009c069770d066ad0db7ad02de1ea473a29334e 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -99,7 +99,7 @@ function lodash(_ref) {
var node = _ref3;
- if ((0, _types.isModuleDeclaration)(node)) {
+ if ((0, _types.isImportDeclaration)(node) || (0, _types.isExportDeclaration)(node)) {
isModule = true;
break;
}

View File

@@ -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)

View File

@@ -2,36 +2,6 @@
All notable changes to this project will be documented in this file.
## [4.5.8] - 2026-03-24
### Security
- Fix insufficient checks on quote authorizations ([GHSA-q4g8-82c5-9h33](https://github.com/mastodon/mastodon/security/advisories/GHSA-q4g8-82c5-9h33))
- Fix open redirect in legacy path handler ([GHSA-xqw8-4j56-5hj6](https://github.com/mastodon/mastodon/security/advisories/GHSA-xqw8-4j56-5hj6))
- Updated dependencies
### Added
- Add for searching already-known private GtS posts (#38057 by @ClearlyClaire)
### Changed
- Change media description length limit for remote media attachments from 1500 to 10000 characters (#37921 by @ClearlyClaire)
- Change HTTP signatures to skip the `Accept` header (#38132 by @ClearlyClaire)
- Change numeric AP endpoints to redirect to short account URLs when HTML is requested (#38056 by @ClearlyClaire)
### Fixed
- Fix some model definitions in `tootctl maintenance fix-duplicates` (#38214 by @ClearlyClaire)
- Fix overly strict checks for current username on account migration page (#38183 by @mjankowski)
- Fix OpenStack Swift Keystone token rate limiting (#38145 by @hugogameiro)
- Fix poll expiration notification being re-triggered on implicit updates (#38078 by @ClearlyClaire)
- Fix incorrect translation string in webauthn mailers (#38062 by @mjankowski)
- Fix “Unblock” and “Unmute” actions being disabled when blocked (#38075 by @ClearlyClaire)
- Fix username availability check being wrongly applied on race conditions (#37975 by @ClearlyClaire)
- Fix hover card unintentionally being shown in some cases (#38039 and #38112 by @diondiondion)
- Fix existing posts not being removed from lists when a list member is unfollowed (#38048 by @ClearlyClaire)
## [4.5.7] - 2026-02-24
### Security

View File

@@ -2,45 +2,131 @@
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
Examples of behavior that contributes to a positive environment for our
community include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior by participants include:
Examples of unacceptable behavior include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- The use of sexualized language or imagery, and sexual attention or advances of
any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
- Publishing others' private information, such as a physical or email address,
without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
## Enforcement Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at glitch-abuse@sitedethib.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[hello@joinmastodon.org](mailto:hello@joinmastodon.org).
All complaints will be reviewed and investigated promptly and fairly.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4][version]
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
[homepage]: https://contributor-covenant.org
[version]: https://contributor-covenant.org/version/1/4/
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

View File

@@ -1,42 +1,3 @@
# Contributing to Mastodon Glitch Edition
Thank you for your interest in contributing to the `glitch-soc` project!
Here are some guidelines, and ways you can help.
> (This document is a bit of a work-in-progress, so please bear with us.
> If you don't see what you're looking for here, please don't hesitate to reach out!)
## Translations
You can submit glitch-soc-specific translations via [Crowdin](https://crowdin.com/project/glitch-soc). They are periodically merged into the codebase.
[![Crowdin](https://badges.crowdin.net/glitch-soc/localized.svg)](https://crowdin.com/project/glitch-soc)
## Planning
Right now a lot of the planning for this project takes place in our development Discord, or through GitHub Issues and Projects.
We're working on ways to improve the planning structure and better solicit feedback, and if you feel like you can help in this respect, feel free to give us a holler.
## Documentation
The documentation for this repository is available at [`glitch-soc/docs`](https://github.com/glitch-soc/docs) (online at [glitch-soc.github.io/docs/](https://glitch-soc.github.io/docs/)).
Right now, we've mostly focused on the features that make this fork different from upstream in some manner.
Adding screenshots, improving descriptions, and so forth are all ways to help contribute to the project even if you don't know any code.
## Frontend Development
Check out [the documentation here](https://glitch-soc.github.io/docs/contributing/frontend/) for more information.
## Backend Development
See the guidelines below.
---
You should also try to follow the guidelines set out in the original `CONTRIBUTING.md` from `mastodon/mastodon`, reproduced below.
<blockquote>
# Contributing
Thank you for considering contributing to Mastodon 🐘
@@ -120,8 +81,6 @@ particular, please keep in mind:
The [Mastodon documentation] is a statically generated site that contains guides
and API docs. Improvements are made via PRs to the [documentation repository].
</blockquote>
[contribution guidelines]: https://github.com/mastodon/.github/blob/main/CONTRIBUTING.md
[Crowdin]: https://crowdin.com/project/mastodon
[DEVELOPMENT]: docs/DEVELOPMENT.md

View File

@@ -13,7 +13,7 @@ ARG BASE_REGISTRY="docker.io"
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"]
# renovate: datasource=docker depName=docker.io/ruby
ARG RUBY_VERSION="3.4.7"
ARG RUBY_VERSION="3.4.8"
# # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="22"]
# renovate: datasource=node-version depName=node
ARG NODE_MAJOR_VERSION="24"
@@ -70,8 +70,6 @@ ENV \
PATH="${PATH}:/opt/ruby/bin:/opt/mastodon/bin" \
# Optimize jemalloc 5.x performance
MALLOC_CONF="narenas:2,background_thread:true,thp:never,dirty_decay_ms:1000,muzzy_decay_ms:0" \
# Enable libvips, should not be changed
MASTODON_USE_LIBVIPS=true \
# Sidekiq will touch tmp/sidekiq_process_has_started_and_will_begin_processing_jobs to indicate it is ready. This can be used for a readiness check in Kubernetes
MASTODON_SIDEKIQ_READY_FILENAME=sidekiq_process_has_started_and_will_begin_processing_jobs
@@ -183,7 +181,7 @@ FROM build AS libvips
# libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"]
# renovate: datasource=github-releases depName=libvips packageName=libvips/libvips
ARG VIPS_VERSION=8.17.3
ARG VIPS_VERSION=8.18.0
# libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"]
ARG VIPS_URL=https://github.com/libvips/libvips/releases/download

View File

@@ -52,8 +52,8 @@ Mastodon requires all `POST` requests to be signed, and MAY require `GET` reques
## Size limits
Mastodon imposes a few hard limits on federated content.
These limits are intended to be very generous and way above what the Mastodon user experience is optimized for, so as to accomodate future changes and unusual or unforeseen usage patterns, while still providing some limits for performance reasons.
The following table attempts to summary those limits.
These limits are intended to be very generous and way above what the Mastodon user experience is optimized for, so as to accommodate future changes and unusual or unforeseen usage patterns, while still providing some limits for performance reasons.
The following table summarizes those limits.
| Limited property | Size limit | Consequence of exceeding the limit |
| ------------------------------------------------------------- | ---------- | ---------------------------------- |
@@ -67,4 +67,4 @@ The following table attempts to summary those limits.
| Account `attributionDomains` | 256 | List will be truncated |
| Account aliases (actor `alsoKnownAs`) | 256 | List will be truncated |
| Custom emoji shortcode (`Emoji` `name`) | 2048 | Emoji will be rejected |
| Media descriptions (`name`/`summary`) | 10000 | Description will be truncated |
| Media and avatar/header descriptions (`name`/`summary`) | 1500 | Description will be truncated |

33
Gemfile
View File

@@ -5,7 +5,7 @@ ruby '>= 3.2.0', '< 3.5.0'
gem 'propshaft'
gem 'puma', '~> 7.0'
gem 'rails', '~> 8.0'
gem 'rails', '~> 8.1.0'
gem 'thor', '~> 1.2'
gem 'dotenv'
@@ -13,7 +13,7 @@ gem 'haml-rails', '~>3.0'
gem 'pg', '~> 1.5'
gem 'pghero'
gem 'aws-sdk-core', '< 3.216.0', require: false # TODO: https://github.com/mastodon/mastodon/pull/34173#issuecomment-2733378873
gem 'aws-sdk-core', require: false
gem 'aws-sdk-s3', '~> 1.123', require: false
gem 'blurhash', '~> 0.1'
gem 'fog-core', '<= 2.6.0'
@@ -24,7 +24,7 @@ gem 'ruby-vips', '~> 2.2', require: false
gem 'active_model_serializers', '~> 0.10'
gem 'addressable', '~> 2.8'
gem 'bootsnap', '~> 1.18.0', require: false
gem 'bootsnap', require: false
gem 'browser'
gem 'charlock_holmes', '~> 0.7.7'
gem 'chewy', '~> 7.3'
@@ -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'
@@ -55,7 +55,7 @@ gem 'hiredis-client'
gem 'htmlentities', '~> 4.3'
gem 'http', '~> 5.3.0'
gem 'http_accept_language', '~> 2.1'
gem 'httplog', '~> 1.7.0', require: false
gem 'httplog', '~> 1.8.0', require: false
gem 'i18n'
gem 'idn-ruby', require: 'idn'
gem 'inline_svg'
@@ -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'
@@ -109,12 +109,12 @@ group :opentelemetry do
gem 'opentelemetry-instrumentation-active_job', '~> 0.10.0', require: false
gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.24.0', require: false
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.24.0', require: false
gem 'opentelemetry-instrumentation-excon', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-faraday', '~> 0.30.0', require: false
gem 'opentelemetry-instrumentation-http', '~> 0.27.0', require: false
gem 'opentelemetry-instrumentation-http_client', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-net_http', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-pg', '~> 0.32.0', require: false
gem 'opentelemetry-instrumentation-excon', '~> 0.27.0', require: false
gem 'opentelemetry-instrumentation-faraday', '~> 0.31.0', require: false
gem 'opentelemetry-instrumentation-http', '~> 0.28.0', require: false
gem 'opentelemetry-instrumentation-http_client', '~> 0.27.0', require: false
gem 'opentelemetry-instrumentation-net_http', '~> 0.27.0', require: false
gem 'opentelemetry-instrumentation-pg', '~> 0.35.0', require: false
gem 'opentelemetry-instrumentation-rack', '~> 0.29.0', require: false
gem 'opentelemetry-instrumentation-rails', '~> 0.39.0', require: false
gem 'opentelemetry-instrumentation-redis', '~> 0.28.0', require: false
@@ -129,16 +129,13 @@ group :test do
# Adds RSpec Error/Warning annotations to GitHub PRs on the Files tab
gem 'rspec-github', '~> 3.0', require: false
# RSpec helpers for email specs
gem 'email_spec'
# Extra RSpec extension methods and helpers for sidekiq
gem 'rspec-sidekiq', '~> 5.0'
# Browser integration testing
gem 'capybara', '~> 3.39'
gem 'capybara-playwright-driver'
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
gem 'playwright-ruby-client', '1.57.1', require: false # Pinning the exact version as it needs to be kept in sync with the installed npm package
# Used to reset the database between system tests
gem 'database_cleaner-active_record'
@@ -180,14 +177,14 @@ group :development do
# Enhanced error message pages for development
gem 'better_errors', '~> 2.9'
gem 'binding_of_caller', '~> 1.0'
gem 'binding_of_caller'
# Preview mail in the browser
gem 'letter_opener', '~> 1.8'
gem 'letter_opener_web', '~> 3.0'
# Security analysis CLI tools
gem 'brakeman', '~> 7.0', require: false
gem 'brakeman', '~> 8.0', require: false
gem 'bundler-audit', '~> 0.9', require: false
# Linter CLI for HAML files

View File

@@ -10,29 +10,31 @@ GIT
GEM
remote: https://rubygems.org/
specs:
actioncable (8.0.4.1)
actionpack (= 8.0.4.1)
activesupport (= 8.0.4.1)
action_text-trix (2.1.16)
railties
actioncable (8.1.2)
actionpack (= 8.1.2)
activesupport (= 8.1.2)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (8.0.4.1)
actionpack (= 8.0.4.1)
activejob (= 8.0.4.1)
activerecord (= 8.0.4.1)
activestorage (= 8.0.4.1)
activesupport (= 8.0.4.1)
actionmailbox (8.1.2)
actionpack (= 8.1.2)
activejob (= 8.1.2)
activerecord (= 8.1.2)
activestorage (= 8.1.2)
activesupport (= 8.1.2)
mail (>= 2.8.0)
actionmailer (8.0.4.1)
actionpack (= 8.0.4.1)
actionview (= 8.0.4.1)
activejob (= 8.0.4.1)
activesupport (= 8.0.4.1)
actionmailer (8.1.2)
actionpack (= 8.1.2)
actionview (= 8.1.2)
activejob (= 8.1.2)
activesupport (= 8.1.2)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
actionpack (8.0.4.1)
actionview (= 8.0.4.1)
activesupport (= 8.0.4.1)
actionpack (8.1.2)
actionview (= 8.1.2)
activesupport (= 8.1.2)
nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
@@ -40,73 +42,77 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
actiontext (8.0.4.1)
actionpack (= 8.0.4.1)
activerecord (= 8.0.4.1)
activestorage (= 8.0.4.1)
activesupport (= 8.0.4.1)
actiontext (8.1.2)
action_text-trix (~> 2.1.15)
actionpack (= 8.1.2)
activerecord (= 8.1.2)
activestorage (= 8.1.2)
activesupport (= 8.1.2)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (8.0.4.1)
activesupport (= 8.0.4.1)
actionview (8.1.2)
activesupport (= 8.1.2)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
active_model_serializers (0.10.15)
active_model_serializers (0.10.16)
actionpack (>= 4.1)
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activejob (8.0.4.1)
activesupport (= 8.0.4.1)
activejob (8.1.2)
activesupport (= 8.1.2)
globalid (>= 0.3.6)
activemodel (8.0.4.1)
activesupport (= 8.0.4.1)
activerecord (8.0.4.1)
activemodel (= 8.0.4.1)
activesupport (= 8.0.4.1)
activemodel (8.1.2)
activesupport (= 8.1.2)
activerecord (8.1.2)
activemodel (= 8.1.2)
activesupport (= 8.1.2)
timeout (>= 0.4.0)
activestorage (8.0.4.1)
actionpack (= 8.0.4.1)
activejob (= 8.0.4.1)
activerecord (= 8.0.4.1)
activesupport (= 8.0.4.1)
activestorage (8.1.2)
actionpack (= 8.1.2)
activejob (= 8.1.2)
activerecord (= 8.1.2)
activesupport (= 8.1.2)
marcel (~> 1.0)
activesupport (8.0.4.1)
activesupport (8.1.2)
base64
benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
json
logger (>= 1.4.2)
minitest (>= 5.1, < 6)
minitest (>= 5.1)
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.9)
public_suffix (>= 2.0.2, < 8.0)
aes_key_wrap (1.1.0)
android_key_attestation (0.3.0)
annotaterb (4.20.0)
annotaterb (4.22.0)
activerecord (>= 6.0.0)
activesupport (>= 6.0.0)
ast (2.4.3)
attr_required (1.0.2)
aws-eventstream (1.4.0)
aws-partitions (1.1168.0)
aws-sdk-core (3.215.1)
aws-partitions (1.1222.0)
aws-sdk-core (3.243.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
bigdecimal
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.96.0)
aws-sdk-core (~> 3, >= 3.210.0)
logger
aws-sdk-kms (1.122.0)
aws-sdk-core (~> 3, >= 3.241.4)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.177.0)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sdk-s3 (1.213.0)
aws-sdk-core (~> 3, >= 3.241.4)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
@@ -115,7 +121,7 @@ GEM
rexml
base64 (0.3.0)
bcp47_spec (0.2.1)
bcrypt (3.1.20)
bcrypt (3.1.21)
benchmark (0.5.0)
better_errors (2.10.1)
erubi (>= 1.0.0)
@@ -123,17 +129,17 @@ GEM
rouge (>= 1.0.0)
bigdecimal (3.3.1)
bindata (2.5.1)
binding_of_caller (1.0.1)
binding_of_caller (2.0.0)
debug_inspector (>= 1.2.0)
blurhash (0.1.8)
bootsnap (1.18.6)
bootsnap (1.23.0)
msgpack (~> 1.2)
brakeman (7.1.1)
brakeman (8.0.4)
racc
browser (6.2.0)
builder (3.3.0)
bundler-audit (0.9.2)
bundler (>= 1.2.0, < 3)
bundler-audit (0.9.3)
bundler (>= 1.2.0)
thor (~> 1.0)
capybara (3.40.0)
addressable
@@ -144,7 +150,7 @@ GEM
rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
capybara-playwright-driver (0.5.7)
capybara-playwright-driver (0.5.8)
addressable
capybara
playwright-ruby-client (>= 1.16.0)
@@ -162,9 +168,9 @@ GEM
chunky_png (1.4.0)
climate_control (1.2.0)
cocoon (1.2.15)
color_diff (0.1)
concurrent-ruby (1.3.5)
connection_pool (2.5.4)
color_diff (0.2)
concurrent-ruby (1.3.6)
connection_pool (2.5.5)
cose (1.3.1)
cbor (~> 0.5.9)
openssl-signature_algorithm (~> 1.0)
@@ -179,12 +185,12 @@ GEM
activerecord (>= 5.a)
database_cleaner-core (~> 2.0)
database_cleaner-core (2.0.1)
date (3.4.1)
debug (1.11.0)
date (3.5.1)
debug (1.11.1)
irb (~> 1.10)
reline (>= 0.3.8)
debug_inspector (1.2.0)
devise (5.0.3)
devise (5.0.2)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 7.0)
@@ -205,9 +211,9 @@ GEM
domain_name (0.6.20240107)
doorkeeper (5.8.2)
railties (>= 5)
dotenv (3.1.8)
dotenv (3.2.0)
drb (2.2.3)
dry-cli (1.3.0)
dry-cli (1.4.1)
elasticsearch (7.17.11)
elasticsearch-api (= 7.17.11)
elasticsearch-transport (= 7.17.11)
@@ -218,34 +224,30 @@ GEM
base64
faraday (>= 1, < 3)
multi_json
email_spec (2.3.0)
htmlentities (~> 4.3.3)
launchy (>= 2.1, < 4.0)
mail (~> 2.7)
email_validator (2.2.4)
activemodel
erb (5.1.3)
erb (6.0.2)
erubi (1.13.1)
et-orbi (1.4.0)
tzinfo
excon (1.3.0)
excon (1.3.2)
logger
fabrication (3.0.0)
faker (3.5.2)
faker (3.6.0)
i18n (>= 1.8.11, < 2)
faraday (2.14.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-follow_redirects (0.4.0)
faraday-follow_redirects (0.5.0)
faraday (>= 1, < 3)
faraday-httpclient (2.0.2)
httpclient (>= 2.2)
faraday-net_http (3.4.1)
net-http (>= 0.5.0)
faraday-net_http (3.4.2)
net-http (~> 0.5)
fast_blank (1.0.1)
fastimage (2.4.0)
ffi (1.17.2)
ffi (1.17.3)
ffi-compiler (1.3.2)
ffi (>= 1.15.5)
rake
@@ -266,20 +268,20 @@ GEM
fog-openstack (1.1.5)
fog-core (~> 2.1)
fog-json (>= 1.0)
formatador (1.2.1)
formatador (1.2.3)
reline
forwardable (1.3.3)
fugit (1.12.0)
forwardable (1.4.0)
fugit (1.12.1)
et-orbi (~> 1.4)
raabro (~> 1.4)
globalid (1.3.0)
activesupport (>= 6.1)
google-protobuf (4.32.1)
google-protobuf (4.33.5)
bigdecimal
rake (>= 13)
googleapis-common-protos-types (1.22.0)
google-protobuf (~> 4.26)
haml (6.3.0)
haml (7.2.0)
temple (>= 0.8.2)
thor
tilt
@@ -288,23 +290,24 @@ GEM
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
haml_lint (0.66.0)
haml_lint (0.72.0)
haml (>= 5.0)
parallel (~> 1.10)
rainbow
rubocop (>= 1.0)
sysexits (~> 1.1)
hashdiff (1.2.1)
hashie (5.0.0)
hashie (5.1.0)
logger
hcaptcha (7.1.0)
json
highline (3.1.2)
reline
hiredis (0.6.3)
hiredis-client (0.26.1)
redis-client (= 0.26.1)
hiredis-client (0.26.4)
redis-client (= 0.26.4)
hkdf (0.3.0)
htmlentities (4.3.4)
htmlentities (4.4.2)
http (5.3.1)
addressable (~> 2.8)
http-cookie (~> 1.0)
@@ -316,18 +319,20 @@ GEM
http_accept_language (2.1.1)
httpclient (2.9.0)
mutex_m
httplog (1.7.3)
httplog (1.8.0)
benchmark
rack (>= 2.0)
rainbow (>= 2.0.0)
i18n (1.14.7)
i18n (1.14.8)
concurrent-ruby (~> 1.0)
i18n-tasks (1.0.15)
i18n-tasks (1.1.2)
activesupport (>= 4.0.2)
ast (>= 2.1.0)
erubi
highline (>= 2.0.0)
highline (>= 3.0.0)
i18n
parser (>= 3.2.2.1)
prism
rails-i18n
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.8, >= 1.8.1)
@@ -336,9 +341,10 @@ GEM
inline_svg (1.10.0)
activesupport (>= 3.0)
nokogiri (>= 1.6)
io-console (0.8.1)
irb (1.15.3)
io-console (0.8.2)
irb (1.17.0)
pp (>= 0.6.0)
prism (>= 1.3.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jd-paperclip-azure (3.0.0)
@@ -346,7 +352,7 @@ GEM
azure-blob (~> 0.5.2)
hashie (~> 5.0)
jmespath (1.6.2)
json (2.15.1)
json (2.18.1)
json-canonicalization (1.0.0)
json-jwt (1.17.0)
activesupport (>= 4.2)
@@ -366,9 +372,9 @@ GEM
json-ld-preloaded (3.3.2)
json-ld (~> 3.3)
rdf (~> 3.3)
json-schema (6.0.0)
json-schema (6.1.0)
addressable (~> 2.8)
bigdecimal (~> 3.1)
bigdecimal (>= 3.1, < 5)
jsonapi-renderer (0.2.2)
jwt (2.10.2)
base64
@@ -384,7 +390,7 @@ GEM
activerecord
kaminari-core (= 1.2.2)
kaminari-core (1.2.2)
kt-paperclip (7.2.2)
kt-paperclip (7.3.0)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
marcel (~> 1.0.1)
@@ -404,12 +410,12 @@ GEM
rexml
link_header (0.0.8)
lint_roller (1.1.0)
linzer (0.7.7)
cgi (~> 0.4.2)
linzer (0.7.8)
cgi (>= 0.4.2, < 0.6.0)
forwardable (~> 1.3, >= 1.3.3)
logger (~> 1.7, >= 1.7.0)
net-http (~> 0.6.0)
openssl (~> 3.0, >= 3.0.0)
net-http (>= 0.6, < 0.10)
openssl (>= 3, < 5)
rack (>= 2.2, < 4.0)
starry (~> 0.2)
stringio (~> 3.1, >= 3.1.2)
@@ -423,7 +429,7 @@ GEM
activesupport (>= 4)
railties (>= 4)
request_store (~> 1.0)
loofah (2.24.1)
loofah (2.25.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.9.0)
@@ -440,16 +446,18 @@ GEM
mime-types (3.7.0)
logger
mime-types-data (~> 3.2025, >= 3.2025.0507)
mime-types-data (3.2025.0924)
mime-types-data (3.2026.0224)
mini_mime (1.1.5)
mini_portile2 (2.8.9)
minitest (5.26.0)
minitest (6.0.2)
drb (~> 2.0)
prism (~> 1.5)
msgpack (1.8.0)
multi_json (1.17.0)
multi_json (1.19.1)
mutex_m (0.3.0)
net-http (0.6.0)
uri
net-imap (0.5.12)
net-imap (0.6.3)
date
net-protocol
net-ldap (0.20.0)
@@ -461,11 +469,11 @@ GEM
timeout
net-smtp (0.5.1)
net-protocol
nio4r (2.7.4)
nokogiri (1.19.2)
nio4r (2.7.5)
nokogiri (1.19.1)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.11)
oj (3.16.15)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (2.1.4)
@@ -477,10 +485,10 @@ GEM
addressable (~> 2.8)
nokogiri (~> 1.12)
omniauth (~> 2.1)
omniauth-rails_csrf_protection (1.0.2)
omniauth-rails_csrf_protection (2.0.1)
actionpack (>= 4.2)
omniauth (~> 2.0)
omniauth-saml (2.2.4)
omniauth-saml (2.2.5)
omniauth (~> 2.1)
ruby-saml (~> 1.18)
omniauth_openid_connect (0.8.0)
@@ -512,15 +520,16 @@ GEM
opentelemetry-common (~> 0.20)
opentelemetry-sdk (~> 1.10)
opentelemetry-semantic_conventions
opentelemetry-helpers-sql (0.2.0)
opentelemetry-helpers-sql (0.3.0)
opentelemetry-api (~> 1.7)
opentelemetry-helpers-sql-obfuscation (0.4.0)
opentelemetry-helpers-sql-processor (0.4.0)
opentelemetry-api (~> 1.0)
opentelemetry-common (~> 0.21)
opentelemetry-instrumentation-action_mailer (0.6.1)
opentelemetry-instrumentation-active_support (~> 0.10)
opentelemetry-instrumentation-action_pack (0.15.1)
opentelemetry-instrumentation-rack (~> 0.29)
opentelemetry-instrumentation-action_view (0.11.1)
opentelemetry-instrumentation-action_view (0.11.2)
opentelemetry-instrumentation-active_support (~> 0.10)
opentelemetry-instrumentation-active_job (0.10.1)
opentelemetry-instrumentation-base (~> 0.25)
@@ -538,19 +547,19 @@ 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.27.0)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-faraday (0.30.0)
opentelemetry-instrumentation-faraday (0.31.0)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-http (0.27.0)
opentelemetry-instrumentation-http (0.28.0)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-http_client (0.26.0)
opentelemetry-instrumentation-http_client (0.27.0)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-net_http (0.26.0)
opentelemetry-instrumentation-net_http (0.27.0)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-pg (0.32.0)
opentelemetry-instrumentation-pg (0.35.0)
opentelemetry-helpers-sql
opentelemetry-helpers-sql-obfuscation
opentelemetry-helpers-sql-processor
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-rack (0.29.0)
opentelemetry-instrumentation-base (~> 0.25)
@@ -565,7 +574,7 @@ GEM
opentelemetry-instrumentation-concurrent_ruby (~> 0.23)
opentelemetry-instrumentation-redis (0.28.0)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-instrumentation-sidekiq (0.28.0)
opentelemetry-instrumentation-sidekiq (0.28.1)
opentelemetry-instrumentation-base (~> 0.25)
opentelemetry-registry (0.4.0)
opentelemetry-api (~> 1.1)
@@ -581,16 +590,17 @@ GEM
ox (2.14.23)
bigdecimal (>= 3.0)
parallel (1.27.0)
parser (3.3.9.0)
parser (3.3.10.2)
ast (~> 2.4.1)
racc
parslet (2.0.0)
pastel (0.8.0)
tty-color (~> 0.5)
pg (1.6.2)
pg (1.6.3)
pghero (3.7.0)
activerecord (>= 7.1)
playwright-ruby-client (1.55.0)
playwright-ruby-client (1.57.1)
base64
concurrent-ruby (>= 1.1.6)
mime-types (>= 3.0)
pp (0.6.3)
@@ -604,18 +614,18 @@ GEM
net-smtp
premailer (~> 1.7, >= 1.7.9)
prettyprint (0.2.0)
prism (1.5.2)
prometheus_exporter (2.3.0)
prism (1.9.0)
prometheus_exporter (2.3.1)
webrick
propshaft (1.3.1)
actionpack (>= 7.0.0)
activesupport (>= 7.0.0)
rack
psych (5.2.6)
psych (5.3.1)
date
stringio
public_suffix (6.0.2)
puma (7.1.0)
public_suffix (7.0.5)
puma (7.2.0)
nio4r (~> 2.0)
pundit (2.5.2)
activesupport (>= 3.0.0)
@@ -627,14 +637,14 @@ GEM
rack-cors (3.0.0)
logger
rack (>= 3.0.14)
rack-oauth2 (2.2.1)
rack-oauth2 (2.3.0)
activesupport
attr_required
faraday (~> 2.0)
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)
@@ -645,35 +655,35 @@ GEM
rack (>= 3.0.0)
rack-test (2.2.0)
rack (>= 1.3)
rackup (2.2.1)
rackup (2.3.1)
rack (>= 3)
rails (8.0.4.1)
actioncable (= 8.0.4.1)
actionmailbox (= 8.0.4.1)
actionmailer (= 8.0.4.1)
actionpack (= 8.0.4.1)
actiontext (= 8.0.4.1)
actionview (= 8.0.4.1)
activejob (= 8.0.4.1)
activemodel (= 8.0.4.1)
activerecord (= 8.0.4.1)
activestorage (= 8.0.4.1)
activesupport (= 8.0.4.1)
rails (8.1.2)
actioncable (= 8.1.2)
actionmailbox (= 8.1.2)
actionmailer (= 8.1.2)
actionpack (= 8.1.2)
actiontext (= 8.1.2)
actionview (= 8.1.2)
activejob (= 8.1.2)
activemodel (= 8.1.2)
activerecord (= 8.1.2)
activestorage (= 8.1.2)
activesupport (= 8.1.2)
bundler (>= 1.15.0)
railties (= 8.0.4.1)
railties (= 8.1.2)
rails-dom-testing (2.3.0)
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
rails-html-sanitizer (1.7.0)
loofah (~> 2.25)
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.4.1)
actionpack (= 8.0.4.1)
activesupport (= 8.0.4.1)
railties (8.1.2)
actionpack (= 8.1.2)
activesupport (= 8.1.2)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -681,7 +691,7 @@ GEM
tsort (>= 0.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.3.0)
rake (13.3.1)
rdf (3.3.4)
bcp47_spec (~> 0.2)
bigdecimal (~> 3.1, >= 3.1.5)
@@ -691,7 +701,7 @@ GEM
readline (~> 0.0)
rdf-normalize (0.7.0)
rdf (~> 3.3)
rdoc (6.15.1)
rdoc (7.2.0)
erb
psych (>= 4.0.0)
tsort
@@ -699,10 +709,10 @@ GEM
reline
redcarpet (3.6.1)
redis (4.8.1)
redis-client (0.26.1)
redis-client (0.26.4)
connection_pool
regexp_parser (2.11.3)
reline (0.6.2)
reline (0.6.3)
io-console (~> 0.5)
request_store (1.7.0)
rack (>= 1.4)
@@ -711,27 +721,27 @@ GEM
railties (>= 7.0)
rexml (3.4.4)
rotp (6.3.0)
rouge (4.6.1)
rouge (4.7.0)
rpam2 (4.0.2)
rqrcode (3.1.0)
rqrcode (3.2.0)
chunky_png (~> 1.0)
rqrcode_core (~> 2.0)
rqrcode_core (2.0.0)
rspec (3.13.1)
rqrcode_core (2.1.0)
rspec (3.13.2)
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.5)
rspec-core (3.13.6)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-github (3.0.0)
rspec-core (~> 3.0)
rspec-mocks (3.13.5)
rspec-mocks (3.13.7)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (8.0.2)
rspec-rails (8.0.3)
actionpack (>= 7.2)
activesupport (>= 7.2)
railties (>= 7.2)
@@ -739,13 +749,13 @@ GEM
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
rspec-support (~> 3.13)
rspec-sidekiq (5.2.0)
rspec-sidekiq (5.3.0)
rspec-core (~> 3.0)
rspec-expectations (~> 3.0)
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 9)
rspec-support (3.13.6)
rubocop (1.81.6)
rspec-support (3.13.7)
rubocop (1.84.2)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@@ -753,12 +763,12 @@ GEM
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.47.1, < 2.0)
rubocop-ast (>= 1.49.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.47.1)
rubocop-ast (1.49.0)
parser (>= 3.3.7.2)
prism (~> 1.4)
prism (~> 1.7)
rubocop-capybara (2.22.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
@@ -769,26 +779,27 @@ GEM
lint_roller (~> 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.47.1, < 2.0)
rubocop-rails (2.33.4)
rubocop-rails (2.34.3)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.44.0, < 2.0)
rubocop-rspec (3.7.0)
rubocop-rspec (3.9.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rspec_rails (2.31.0)
rubocop (~> 1.81)
rubocop-rspec_rails (2.32.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rspec (~> 3.5)
ruby-prof (1.7.2)
ruby-prof (2.0.2)
base64
ostruct
ruby-progressbar (1.13.0)
ruby-saml (1.18.1)
nokogiri (>= 1.13.10)
rexml
ruby-vips (2.2.5)
ruby-vips (2.3.0)
ffi (~> 1.12)
logger
rubyzip (3.2.2)
@@ -803,9 +814,9 @@ GEM
activerecord (>= 4.0.0)
railties (>= 4.0.0)
securerandom (0.4.1)
shoulda-matchers (6.5.0)
activesupport (>= 5.2.0)
sidekiq (8.0.9)
shoulda-matchers (7.0.1)
activesupport (>= 7.1)
sidekiq (8.0.10)
connection_pool (>= 2.5.0)
json (>= 2.9.0)
logger (>= 1.6.2)
@@ -816,13 +827,14 @@ GEM
sidekiq-scheduler (6.0.1)
rufus-scheduler (~> 3.2)
sidekiq (>= 7.3, < 9)
sidekiq-unique-jobs (8.0.11)
sidekiq-unique-jobs (8.0.13)
concurrent-ruby (~> 1.0, >= 1.0.5)
sidekiq (>= 7.0.0, < 9.0.0)
thor (>= 1.0, < 3.0)
simple-navigation (4.4.0)
simple-navigation (4.4.1)
activesupport (>= 2.3.2)
simple_form (5.4.0)
ostruct
simple_form (5.4.1)
actionpack (>= 7.0)
activemodel (>= 7.0)
simplecov (0.22.0)
@@ -832,13 +844,14 @@ GEM
simplecov-html (0.13.2)
simplecov-lcov (0.9.0)
simplecov_json_formatter (0.1.4)
stackprof (0.2.27)
stackprof (0.2.28)
starry (0.2.0)
base64
stoplight (5.4.0)
stoplight (5.7.0)
concurrent-ruby
zeitwerk
stringio (3.1.7)
strong_migrations (2.5.1)
stringio (3.2.0)
strong_migrations (2.5.2)
activerecord (>= 7.1)
swd (2.0.3)
activesupport (>= 3)
@@ -851,10 +864,10 @@ GEM
unicode-display_width (>= 1.1.1, < 4)
terrapin (1.1.1)
climate_control
test-prof (1.4.4)
thor (1.4.0)
tilt (2.6.1)
timeout (0.4.3)
test-prof (1.5.2)
thor (1.5.0)
tilt (2.7.0)
timeout (0.6.0)
tpm-key_attestation (0.14.1)
bindata (~> 2.4)
openssl (> 2.0)
@@ -875,23 +888,23 @@ GEM
unf (~> 0.1.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2025.2)
tzinfo-data (1.2026.1)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.9.1)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.1.0)
uri (1.0.4)
unicode-emoji (4.2.0)
uri (1.1.1)
useragent (0.16.11)
validate_url (1.0.15)
activemodel (>= 3.0.0)
public_suffix
vite_rails (3.0.19)
vite_rails (3.0.20)
railties (>= 5.1, < 9)
vite_ruby (~> 3.0, >= 3.2.2)
vite_ruby (3.9.2)
vite_ruby (3.9.3)
dry-cli (>= 0.7, < 2)
logger (~> 1.6)
mutex_m
@@ -911,11 +924,11 @@ GEM
activesupport
faraday (~> 2.0)
faraday-follow_redirects
webmock (3.26.0)
webmock (3.26.1)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
webrick (1.9.1)
webrick (1.9.2)
websocket-driver (0.8.0)
base64
websocket-extensions (>= 0.1.0)
@@ -924,7 +937,7 @@ GEM
xorcist (1.1.3)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.7.3)
zeitwerk (2.7.5)
PLATFORMS
ruby
@@ -933,13 +946,13 @@ DEPENDENCIES
active_model_serializers (~> 0.10)
addressable (~> 2.8)
annotaterb (~> 4.13)
aws-sdk-core (< 3.216.0)
aws-sdk-core
aws-sdk-s3 (~> 1.123)
better_errors (~> 2.9)
binding_of_caller (~> 1.0)
binding_of_caller
blurhash (~> 0.1)
bootsnap (~> 1.18.0)
brakeman (~> 7.0)
bootsnap
brakeman (~> 8.0)
browser
bundler-audit (~> 0.9)
capybara (~> 3.39)
@@ -960,7 +973,6 @@ DEPENDENCIES
discard (~> 1.2)
doorkeeper (~> 5.6)
dotenv
email_spec
fabrication
faker (~> 3.2)
faraday-httpclient
@@ -977,7 +989,7 @@ DEPENDENCIES
htmlentities (~> 4.3)
http (~> 5.3.0)
http_accept_language (~> 2.1)
httplog (~> 1.7.0)
httplog (~> 1.8.0)
i18n
i18n-tasks (~> 1.0)
idn-ruby
@@ -1005,7 +1017,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)
@@ -1013,12 +1025,12 @@ DEPENDENCIES
opentelemetry-instrumentation-active_job (~> 0.10.0)
opentelemetry-instrumentation-active_model_serializers (~> 0.24.0)
opentelemetry-instrumentation-concurrent_ruby (~> 0.24.0)
opentelemetry-instrumentation-excon (~> 0.26.0)
opentelemetry-instrumentation-faraday (~> 0.30.0)
opentelemetry-instrumentation-http (~> 0.27.0)
opentelemetry-instrumentation-http_client (~> 0.26.0)
opentelemetry-instrumentation-net_http (~> 0.26.0)
opentelemetry-instrumentation-pg (~> 0.32.0)
opentelemetry-instrumentation-excon (~> 0.27.0)
opentelemetry-instrumentation-faraday (~> 0.31.0)
opentelemetry-instrumentation-http (~> 0.28.0)
opentelemetry-instrumentation-http_client (~> 0.27.0)
opentelemetry-instrumentation-net_http (~> 0.27.0)
opentelemetry-instrumentation-pg (~> 0.35.0)
opentelemetry-instrumentation-rack (~> 0.29.0)
opentelemetry-instrumentation-rails (~> 0.39.0)
opentelemetry-instrumentation-redis (~> 0.28.0)
@@ -1028,17 +1040,17 @@ DEPENDENCIES
parslet
pg (~> 1.5)
pghero
playwright-ruby-client (= 1.55.0)
playwright-ruby-client (= 1.57.1)
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)
rack-cors
rack-test (~> 2.1)
rails (~> 8.0)
rails (~> 8.1.0)
rails-i18n (~> 8.0)
rdf-normalize (~> 0.5)
redcarpet (~> 3.6)
@@ -1085,7 +1097,7 @@ DEPENDENCIES
xorcist (~> 1.1)
RUBY VERSION
ruby 3.4.1p0
ruby 3.4.8
BUNDLED WITH
2.7.2
4.0.7

View File

@@ -1,19 +1,3 @@
# Mastodon Glitch Edition
[![Ruby Testing](https://github.com/glitch-soc/mastodon/actions/workflows/test-ruby.yml/badge.svg)](https://github.com/glitch-soc/mastodon/actions/workflows/test-ruby.yml)
[![Crowdin](https://badges.crowdin.net/glitch-soc/localized.svg)][glitch-crowdin]
[glitch-crowdin]: https://crowdin.com/project/glitch-soc
So here's the deal: we all work on this code, and anyone who uses that does so absolutely at their own risk. can you dig it?
- You can view documentation for this project at [glitch-soc.github.io/docs/](https://glitch-soc.github.io/docs/).
- And contributing guidelines are available [here](CONTRIBUTING.md) and [here](https://glitch-soc.github.io/docs/contributing/).
Mastodon Glitch Edition is a fork of [Mastodon](https://github.com/mastodon/mastodon). Upstream's README file is reproduced below.
---
> [!NOTE]
> Want to learn more about Mastodon?
> Click below to find out more in a video.

1
Vagrantfile vendored
View File

@@ -29,7 +29,6 @@ sudo apt-get install \
libpq-dev \
libxml2-dev \
libxslt1-dev \
imagemagick \
nodejs \
redis-server \
redis-tools \

View File

@@ -53,9 +53,9 @@ class PublicStatusesIndex < Chewy::Index
}
index_scope ::Status.unscoped
.kept
.indexable
.includes(:media_attachments, :preloadable_poll, :tags, preview_cards_status: :preview_card)
.kept
.indexable
.includes(:media_attachments, :preloadable_poll, :tags, preview_cards_status: :preview_card)
root date_detection: false do
field(:id, type: 'long')

View File

@@ -48,7 +48,7 @@ class AccountsController < ApplicationController
end
def default_statuses
@account.statuses.not_local_only.distributable_visibility
@account.statuses.distributable_visibility
end
def only_media_scope

View File

@@ -1,6 +1,8 @@
# frozen_string_literal: true
class ActivityPub::CollectionsController < ActivityPub::BaseController
SUPPORTED_COLLECTIONS = %w(featured tags).freeze
vary_by -> { 'Signature' if authorized_fetch_mode? }
before_action :require_account_signature!, if: :authorized_fetch_mode?
@@ -32,7 +34,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
def set_items
case params[:id]
when 'featured'
@items = for_signed_account { preload_collection(@account.pinned_statuses.not_local_only, Status) }
@items = for_signed_account { preload_collection(@account.pinned_statuses, Status) }
@items = @items.map { |item| item.distributable? ? item : ActivityPub::TagManager.instance.uri_for(item) }
when 'tags'
@items = for_signed_account { @account.featured_tags }

View File

@@ -0,0 +1,29 @@
# frozen_string_literal: true
class ActivityPub::FeatureAuthorizationsController < ActivityPub::BaseController
include Authorization
vary_by -> { 'Signature' if authorized_fetch_mode? }
before_action :require_account_signature!, if: :authorized_fetch_mode?
before_action :set_collection_item
def show
expires_in 30.seconds, public: true if public_fetch_mode?
render json: @collection_item, serializer: ActivityPub::FeatureAuthorizationSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json'
end
private
def pundit_user
signed_request_account
end
def set_collection_item
@collection_item = @account.collection_items.accepted.find(params[:id])
authorize @collection_item.collection, :show?
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
not_found
end
end

View File

@@ -0,0 +1,77 @@
# frozen_string_literal: true
class ActivityPub::FeaturedCollectionsController < ApplicationController
include SignatureAuthentication
include Authorization
include AccountOwnedConcern
PER_PAGE = 5
vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' }
before_action :check_feature_enabled
before_action :require_account_signature!, if: -> { authorized_fetch_mode? }
before_action :set_collections
skip_around_action :set_locale
skip_before_action :require_functional!, unless: :limited_federation_mode?
def index
respond_to do |format|
format.json do
expires_in(page_requested? ? 0 : 3.minutes, public: public_fetch_mode?)
render json: collection_presenter,
serializer: ActivityPub::CollectionSerializer,
adapter: ActivityPub::Adapter,
content_type: 'application/activity+json'
end
end
end
private
def set_collections
authorize @account, :index_collections?
@collections = @account.collections.page(params[:page]).per(PER_PAGE)
rescue Mastodon::NotPermittedError
not_found
end
def page_requested?
params[:page].present?
end
def next_page_url
ap_account_featured_collections_url(@account, page: @collections.next_page) if @collections.respond_to?(:next_page)
end
def prev_page_url
ap_account_featured_collections_url(@account, page: @collections.prev_page) if @collections.respond_to?(:prev_page)
end
def collection_presenter
if page_requested?
ActivityPub::CollectionPresenter.new(
id: ap_account_featured_collections_url(@account, page: params.fetch(:page, 1)),
type: :unordered,
size: @account.collections.count,
items: @collections,
part_of: ap_account_featured_collections_url(@account),
next: next_page_url,
prev: prev_page_url
)
else
ActivityPub::CollectionPresenter.new(
id: ap_account_featured_collections_url(@account),
type: :unordered,
size: @account.collections.count,
first: ap_account_featured_collections_url(@account, page: 1)
)
end
end
def check_feature_enabled
raise ActionController::RoutingError unless Mastodon::Feature.collections_enabled?
end
end

View File

@@ -44,7 +44,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
return @body if defined?(@body)
@body = request.body.read
@body.force_encoding('UTF-8') if @body.present?
@body.presence&.force_encoding('UTF-8')
request.body.rewind if request.body.respond_to?(:rewind)

View File

@@ -0,0 +1,22 @@
# frozen_string_literal: true
module Admin
class CollectionsController < BaseController
before_action :set_account
before_action :set_collection, only: :show
def show
authorize @collection, :show?
end
private
def set_account
@account = Account.find(params[:account_id])
end
def set_collection
@collection = @account.collections.includes(accepted_collection_items: :account).find(params[:id])
end
end
end

View File

@@ -5,6 +5,15 @@ module Admin
def index
authorize :custom_emoji, :index?
# If filtering by local emojis, remove by_domain filter.
params.delete(:by_domain) if params[:local].present?
# If filtering by domain, ensure remote filter is set.
if params[:by_domain].present?
params.delete(:local)
params[:remote] = '1'
end
@custom_emojis = filtered_custom_emojis.eager_load(:local_counterpart).page(params[:page])
@form = Form::CustomEmojiBatch.new
end
@@ -37,9 +46,6 @@ module Admin
flash[:alert] = I18n.t('admin.custom_emojis.no_emoji_selected')
rescue Mastodon::NotPermittedError
flash[:alert] = I18n.t('admin.custom_emojis.not_permitted')
rescue ActiveRecord::RecordInvalid => e
error_message = action_from_button == 'copy' ? 'admin.custom_emojis.batch_copy_error' : 'admin.custom_emojis.batch_error'
flash[:alert] = I18n.t(error_message, message: e.message)
ensure
redirect_to admin_custom_emojis_path(filter_params)
end

View File

@@ -54,7 +54,7 @@ module Admin
end
# Allow transparently upgrading a domain block
if existing_domain_block.present? && existing_domain_block.domain == TagManager.instance.normalize_domain(@domain_block.domain.strip)
if existing_domain_block.present? && existing_domain_block.domain == TagManager.instance.normalize_domain(@domain_block.domain)
@domain_block = existing_domain_block
@domain_block.assign_attributes(resource_params)
end

View File

@@ -5,8 +5,8 @@ class Admin::Fasp::Debug::CallbacksController < Admin::BaseController
authorize [:admin, :fasp, :provider], :update?
@callbacks = Fasp::DebugCallback
.includes(:fasp_provider)
.order(created_at: :desc)
.includes(:fasp_provider)
.order(created_at: :desc)
end
def destroy

View File

@@ -34,8 +34,11 @@ class Admin::Instances::ModerationNotesController < Admin::BaseController
end
def set_instance
domain = params[:instance_id]&.strip
@instance = Instance.find_or_initialize_by(domain: TagManager.instance.normalize_domain(domain))
@instance = Instance.find_or_initialize_by(domain: normalized_domain)
end
def normalized_domain
TagManager.instance.normalize_domain(params[:instance_id])
end
def set_instance_note

View File

@@ -55,8 +55,11 @@ module Admin
private
def set_instance
domain = params[:id]&.strip
@instance = Instance.find_or_initialize_by(domain: TagManager.instance.normalize_domain(domain))
@instance = Instance.find_or_initialize_by(domain: normalized_domain)
end
def normalized_domain
TagManager.instance.normalize_domain(params[:id])
end
def set_instances

View File

@@ -13,7 +13,7 @@ class Admin::Reports::ActionsController < Admin::BaseController
case action_from_button
when 'delete', 'mark_as_sensitive'
Admin::StatusBatchAction.new(status_batch_action_params).save!
Admin::ModerationAction.new(moderation_action_params).save!
when 'silence', 'suspend'
Admin::AccountAction.new(account_action_params).save!
else
@@ -25,9 +25,8 @@ class Admin::Reports::ActionsController < Admin::BaseController
private
def status_batch_action_params
def moderation_action_params
shared_params
.merge(status_ids: @report.status_ids)
end
def account_action_params

View File

@@ -50,7 +50,7 @@ module Admin
private
def filtered_reports
ReportFilter.new(filter_params).results.order(id: :desc).includes(:account, :target_account)
ReportFilter.new(filter_params).results.order(id: :desc).includes(:account, :target_account, :collections)
end
def filter_params
@@ -58,7 +58,7 @@ module Admin
end
def set_report
@report = Report.find(params[:id])
@report = Report.includes(collections: :accepted_collection_items).find(params[:id])
end
end
end

View File

@@ -62,7 +62,7 @@ module Admin
def resource_params
params
.expect(user_role: [:name, :color, :highlighted, :position, permissions_as_keys: []])
.expect(user_role: [:name, :color, :highlighted, :position, :require_2fa, permissions_as_keys: []])
end
end
end

View File

@@ -1,9 +0,0 @@
# frozen_string_literal: true
class Admin::Settings::OtherController < Admin::SettingsController
private
def after_update_redirect_path
admin_settings_other_path
end
end

View File

@@ -9,7 +9,7 @@ module Admin
@site_upload.destroy!
redirect_back fallback_location: admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg')
redirect_back_or_to admin_settings_path, notice: I18n.t('admin.site_uploads.destroyed_msg')
end
private

View File

@@ -78,8 +78,6 @@ module Admin
'report'
elsif params[:remove_from_report]
'remove_from_report'
elsif params[:delete]
'delete'
end
end
end

View File

@@ -9,9 +9,9 @@ class Api::V1::Accounts::NotesController < Api::BaseController
def create
if params[:comment].blank?
AccountNote.find_by(account: current_account, target_account: @account)&.destroy
current_account.account_notes.find_by(target_account: @account)&.destroy
else
@note = AccountNote.find_or_initialize_by(account: current_account, target_account: @account)
@note = current_account.account_notes.find_or_initialize_by(target_account: @account)
@note.comment = params[:comment]
@note.save! if @note.changed?
end

View File

@@ -1,10 +1,12 @@
# frozen_string_literal: true
class Api::V1::AnnualReportsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index
include AsyncRefreshesConcern
before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, except: [:read, :generate]
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:read, :generate]
before_action :require_user!
before_action :set_annual_report, except: :index
before_action :set_annual_report, only: [:show, :read]
def index
with_read_replica do
@@ -28,6 +30,28 @@ class Api::V1::AnnualReportsController < Api::BaseController
relationships: @relationships
end
def state
render json: { state: report_state }
end
def generate
return render_empty unless year == AnnualReport.current_campaign
return render_empty if GeneratedAnnualReport.exists?(account_id: current_account.id, year: year)
async_refresh = AsyncRefresh.new(refresh_key)
if async_refresh.running?
add_async_refresh_header(async_refresh, retry_seconds: 2)
return head 202
end
add_async_refresh_header(AsyncRefresh.create(refresh_key), retry_seconds: 2)
GenerateAnnualReportWorker.perform_async(current_account.id, year)
head 202
end
def read
@annual_report.view!
render_empty
@@ -35,7 +59,21 @@ class Api::V1::AnnualReportsController < Api::BaseController
private
def report_state
AnnualReport.new(current_account, year).state do |async_refresh|
add_async_refresh_header(async_refresh, retry_seconds: 2)
end
end
def refresh_key
"wrapstodon:#{current_account.id}:#{year}"
end
def year
params[:id]&.to_i
end
def set_annual_report
@annual_report = GeneratedAnnualReport.find_by!(account_id: current_account.id, year: params[:id])
@annual_report = GeneratedAnnualReport.find_by!(account_id: current_account.id, year: year)
end
end

View File

@@ -18,14 +18,14 @@ class Api::V1::BlocksController < Api::BaseController
def paginated_blocks
@paginated_blocks ||= Block.eager_load(target_account: [:account_stat, :user])
.joins(:target_account)
.merge(Account.without_suspended)
.where(account: current_account)
.paginate_by_max_id(
limit_param(DEFAULT_ACCOUNTS_LIMIT),
params[:max_id],
params[:since_id]
)
.joins(:target_account)
.merge(Account.without_suspended)
.where(account: current_account)
.paginate_by_max_id(
limit_param(DEFAULT_ACCOUNTS_LIMIT),
params[:max_id],
params[:since_id]
)
end
def next_path

View File

@@ -37,20 +37,20 @@ class Api::V1::ConversationsController < Api::BaseController
def paginated_conversations
AccountConversation.where(account: current_account)
.includes(
account: [:account_stat, user: :role],
last_status: [
:media_attachments,
:status_stat,
:tags,
{
preview_cards_status: { preview_card: { author_account: [:account_stat, user: :role] } },
active_mentions: :account,
account: [:account_stat, user: :role],
},
]
)
.to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
.includes(
account: [:account_stat, user: :role],
last_status: [
:media_attachments,
:status_stat,
:tags,
{
preview_cards_status: { preview_card: { author_account: [:account_stat, user: :role] } },
active_mentions: :account,
account: [:account_stat, user: :role],
},
]
)
.to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end
def next_path

View File

@@ -0,0 +1,86 @@
# frozen_string_literal: true
class Api::V1::DonationCampaignsController < Api::BaseController
before_action :require_user!
STOPLIGHT_COOL_OFF_TIME = 60
STOPLIGHT_FAILURE_THRESHOLD = 10
def index
return head 204 if api_url.blank?
json = from_cache
return render json: json if json.present?
campaign = fetch_campaign
return head 204 if campaign.nil?
save_to_cache!(campaign)
render json: campaign
end
private
def api_url
Rails.configuration.x.donation_campaigns.api_url
end
def seed
@seed ||= Random.new(current_account.id).rand(100)
end
def from_cache
key = Rails.cache.read(request_key, raw: true)
return if key.blank?
campaign = Rails.cache.read("donation_campaign:#{key}", raw: true)
Oj.load(campaign) if campaign.present?
end
def save_to_cache!(campaign)
return if campaign.blank?
Rails.cache.write_multi(
{
request_key => campaign_key(campaign),
"donation_campaign:#{campaign_key(campaign)}" => Oj.dump(campaign),
},
expires_in: 1.hour,
raw: true
)
end
def fetch_campaign
stoplight_wrapper.run do
url = Addressable::URI.parse(api_url)
url.query_values = { platform: 'web', seed: seed, locale: locale, environment: Rails.configuration.x.donation_campaigns.environment }.compact
Request.new(:get, url.to_s).perform do |res|
return Oj.load(res.body_with_limit, mode: :strict) if res.code == 200
end
end
rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError
nil
end
def stoplight_wrapper
Stoplight(
'donation_campaigns',
cool_off_time: STOPLIGHT_COOL_OFF_TIME,
threshold: STOPLIGHT_FAILURE_THRESHOLD
)
end
def request_key
"donation_campaign_request:#{seed}:#{locale}"
end
def campaign_key(campaign)
"#{campaign['id']}:#{campaign['locale']}"
end
def locale
I18n.locale.to_s
end
end

View File

@@ -18,14 +18,14 @@ class Api::V1::MutesController < Api::BaseController
def paginated_mutes
@paginated_mutes ||= Mute.eager_load(target_account: [:account_stat, :user])
.joins(:target_account)
.merge(Account.without_suspended)
.where(account: current_account)
.paginate_by_max_id(
limit_param(DEFAULT_ACCOUNTS_LIMIT),
params[:max_id],
params[:since_id]
)
.joins(:target_account)
.merge(Account.without_suspended)
.where(account: current_account)
.paginate_by_max_id(
limit_param(DEFAULT_ACCOUNTS_LIMIT),
params[:max_id],
params[:since_id]
)
end
def next_path

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
class Api::V1::NotificationsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, except: [:clear, :dismiss, :destroy, :destroy_multiple]
before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, only: [:clear, :dismiss, :destroy, :destroy_multiple]
before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, except: [:clear, :dismiss]
before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, only: [:clear, :dismiss]
before_action :require_user!
after_action :insert_pagination_headers, only: :index
@@ -37,20 +37,11 @@ class Api::V1::NotificationsController < Api::BaseController
render_empty
end
def destroy
dismiss
end
def dismiss
current_account.notifications.find(params[:id]).destroy!
render_empty
end
def destroy_multiple
current_account.notifications.where(id: params[:ids]).destroy_all
render_empty
end
private
def load_notifications

View File

@@ -47,10 +47,6 @@ class Api::V1::Peers::SearchController < Api::BaseController
end
def normalized_domain
TagManager.instance.normalize_domain(query_value)
end
def query_value
params[:q].strip
TagManager.instance.normalize_domain(params[:q])
end
end

View File

@@ -0,0 +1,41 @@
# frozen_string_literal: true
class Api::V1::ProfilesController < Api::BaseController
before_action -> { doorkeeper_authorize! :profile, :read, :'read:accounts' }, except: [:update]
before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, only: [:update]
before_action :require_user!
def show
@account = current_account
render json: @account, serializer: REST::ProfileSerializer
end
def update
@account = current_account
UpdateAccountService.new.call(@account, account_params, raise_error: true)
ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id)
render json: @account, serializer: REST::ProfileSerializer
rescue ActiveRecord::RecordInvalid => e
render json: ValidationErrorFormatter.new(e).as_json, status: 422
end
def account_params
params.permit(
:display_name,
:note,
:avatar,
:header,
:locked,
:bot,
:discoverable,
:hide_collections,
:indexable,
:show_media,
:show_media_replies,
:show_featured,
attribution_domains: [],
fields_attributes: [:name, :value]
)
end
end

View File

@@ -23,6 +23,10 @@ class Api::V1::ReportsController < Api::BaseController
end
def report_params
params.permit(:account_id, :comment, :category, :forward, forward_to_domains: [], status_ids: [], rule_ids: [])
if Mastodon::Feature.collections_enabled?
params.permit(:account_id, :comment, :category, :forward, forward_to_domains: [], status_ids: [], collection_ids: [], rule_ids: [])
else
params.permit(:account_id, :comment, :category, :forward, forward_to_domains: [], status_ids: [], rule_ids: [])
end
end
end

View File

@@ -26,7 +26,7 @@ class Api::V1::Statuses::PinsController < Api::V1::Statuses::BaseController
def distribute_add_activity!
json = ActiveModelSerializers::SerializableResource.new(
@status,
serializer: ActivityPub::AddSerializer,
serializer: ActivityPub::AddNoteSerializer,
adapter: ActivityPub::Adapter
).as_json
@@ -36,7 +36,7 @@ class Api::V1::Statuses::PinsController < Api::V1::Statuses::BaseController
def distribute_remove_activity!
json = ActiveModelSerializers::SerializableResource.new(
@status,
serializer: ActivityPub::RemoveSerializer,
serializer: ActivityPub::RemoveNoteSerializer,
adapter: ActivityPub::Adapter
).as_json

View File

@@ -41,8 +41,8 @@ class Api::V1::Statuses::QuotesController < Api::V1::Statuses::BaseController
if current_account&.id != @status.account_id
domains = @statuses.filter_map(&:account_domain).uniq
account_ids = @statuses.map(&:account_id).uniq
relations = current_account&.relations_map(account_ids, domains) || {}
@statuses.reject! { |status| StatusFilter.new(status, current_account, relations).filtered? }
current_account&.preload_relations!(account_ids, domains)
@statuses.reject! { |status| StatusFilter.new(status, current_account).filtered? }
end
end

View File

@@ -92,8 +92,6 @@ class Api::V1::StatusesController < Api::BaseController
scheduled_at: status_params[:scheduled_at],
application: doorkeeper_token.application,
poll: status_params[:poll],
content_type: status_params[:content_type],
local_only: status_params[:local_only],
allowed_mentions: status_params[:allowed_mentions],
idempotency: request.headers['Idempotency-Key'],
with_rate_limit: true
@@ -116,7 +114,6 @@ class Api::V1::StatusesController < Api::BaseController
language: status_params[:language],
spoiler_text: status_params[:spoiler_text],
poll: status_params[:poll],
content_type: status_params[:content_type],
}
update_options[:quote_approval_policy] = quote_approval_policy if status_params[:quote_approval_policy].present?
@@ -130,10 +127,13 @@ class Api::V1::StatusesController < Api::BaseController
@status = Status.where(account: current_account).find(params[:id])
authorize @status, :destroy?
# JSON is generated before `discard_with_reblogs` in order to have the proper URL
# for media attachments, as it would otherwise redirect to the media proxy
json = render_to_body json: @status, serializer: REST::StatusSerializer, source_requested: true
@status.discard_with_reblogs
StatusPin.find_by(status: @status)&.destroy
@status.account.statuses_count = @status.account.statuses_count - 1
json = render_to_body json: @status, serializer: REST::StatusSerializer, source_requested: true
RemovalWorker.perform_async(@status.id, { 'redraft' => !truthy_param?(:delete_media) })
@@ -191,8 +191,6 @@ class Api::V1::StatusesController < Api::BaseController
:visibility,
:language,
:scheduled_at,
:content_type,
:local_only,
allowed_mentions: [],
media_ids: [],
media_attributes: [

View File

@@ -39,6 +39,6 @@ class Api::V1::TagsController < Api::BaseController
def set_or_create_tag
return not_found unless Tag::HASHTAG_NAME_RE.match?(params[:id])
@tag = Tag.find_normalized(params[:id]) || Tag.new(name: Tag.normalize(params[:id]), display_name: params[:id])
@tag = Tag.find_normalized(params[:id]) || Tag.new(name: params[:id], display_name: params[:id])
end
end

View File

@@ -1,65 +0,0 @@
# frozen_string_literal: true
class Api::V1::Timelines::DirectController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:statuses' }, only: [:show]
before_action :require_user!, only: [:show]
after_action :insert_pagination_headers, unless: -> { @statuses.empty? }
respond_to :json
def show
@statuses = load_statuses
render json: @statuses, each_serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id)
end
private
def load_statuses
preloaded_direct_statuses
end
def preloaded_direct_statuses
preload_collection direct_statuses, Status
end
def direct_statuses
direct_timeline_statuses
end
def direct_timeline_statuses
account_direct_feed.get(
limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id],
params[:since_id],
params[:min_id]
)
end
def account_direct_feed
DirectFeed.new(current_account)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def pagination_params(core_params)
params.permit(:local, :limit).merge(core_params)
end
def next_path
api_v1_timelines_direct_url pagination_params(max_id: pagination_max_id)
end
def prev_path
api_v1_timelines_direct_url pagination_params(since_id: pagination_since_id)
end
def pagination_max_id
@statuses.last.id
end
def pagination_since_id
@statuses.first.id
end
end

View File

@@ -4,7 +4,7 @@ class Api::V1::Timelines::PublicController < Api::V1::Timelines::BaseController
before_action -> { authorize_if_got_token! :read, :'read:statuses' }
before_action :require_user!, if: :require_auth?
PERMITTED_PARAMS = %i(local remote limit only_media allow_local_only).freeze
PERMITTED_PARAMS = %i(local remote limit only_media).freeze
def show
cache_if_unauthenticated!
@@ -46,10 +46,7 @@ class Api::V1::Timelines::PublicController < Api::V1::Timelines::BaseController
current_account,
local: truthy_param?(:local),
remote: truthy_param?(:remote),
only_media: truthy_param?(:only_media),
allow_local_only: truthy_param?(:allow_local_only),
with_replies: Setting.show_replies_in_public_timelines,
with_reblogs: Setting.show_reblogs_in_public_timelines
only_media: truthy_param?(:only_media)
)
end

View File

@@ -7,7 +7,7 @@ class Api::V1::Trends::TagsController < Api::BaseController
after_action :insert_pagination_headers
DEFAULT_TAGS_LIMIT = (ENV['MAX_TRENDING_TAGS'] || 10).to_i
DEFAULT_TAGS_LIMIT = 10
deprecate_api '2022-03-30', only: :index, if: -> { request.path == '/api/v1/trends' }

View File

@@ -0,0 +1,62 @@
# frozen_string_literal: true
class Api::V1Alpha::CollectionItemsController < Api::BaseController
include Authorization
before_action :check_feature_enabled
before_action -> { doorkeeper_authorize! :write, :'write:collections' }
before_action :require_user!
before_action :set_collection
before_action :set_account, only: [:create]
before_action :set_collection_item, only: [:destroy, :revoke]
after_action :verify_authorized
def create
authorize @collection, :update?
authorize @account, :feature?
@item = AddAccountToCollectionService.new.call(@collection, @account)
render json: @item, serializer: REST::CollectionItemSerializer, adapter: :json
end
def destroy
authorize @collection, :update?
DeleteCollectionItemService.new.call(@collection_item)
head 200
end
def revoke
authorize @collection_item, :revoke?
RevokeCollectionItemService.new.call(@collection_item)
head 200
end
private
def set_collection
@collection = Collection.find(params[:collection_id])
end
def set_account
return render(json: { error: '`account_id` parameter is missing' }, status: 422) if params[:account_id].blank?
@account = Account.find(params[:account_id])
end
def set_collection_item
@collection_item = @collection.collection_items.find(params[:id])
end
def check_feature_enabled
raise ActionController::RoutingError unless Mastodon::Feature.collections_enabled?
end
end

View File

@@ -0,0 +1,117 @@
# frozen_string_literal: true
class Api::V1Alpha::CollectionsController < Api::BaseController
include Authorization
DEFAULT_COLLECTIONS_LIMIT = 40
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 -> { authorize_if_got_token! :read, :'read:collections' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :write, :'write:collections' }, only: [:create, :update, :destroy]
before_action :require_user!, only: [:create, :update, :destroy]
before_action :set_account, only: [:index]
before_action :set_collections, only: [:index]
before_action :set_collection, only: [:show, :update, :destroy]
after_action :insert_pagination_headers, only: [:index]
after_action :verify_authorized
def index
cache_if_unauthenticated!
authorize @account, :index_collections?
render json: @collections, each_serializer: REST::CollectionSerializer, adapter: :json
rescue Mastodon::NotPermittedError
render json: { collections: [] }
end
def show
cache_if_unauthenticated!
authorize @collection, :show?
render json: @collection, serializer: REST::CollectionWithAccountsSerializer
end
def create
authorize Collection, :create?
@collection = CreateCollectionService.new.call(collection_creation_params, current_user.account)
render json: @collection, serializer: REST::CollectionSerializer, adapter: :json
end
def update
authorize @collection, :update?
UpdateCollectionService.new.call(@collection, collection_update_params)
render json: @collection, serializer: REST::CollectionSerializer, adapter: :json
end
def destroy
authorize @collection, :destroy?
DeleteCollectionService.new.call(@collection)
head 200
end
private
def set_account
@account = Account.find(params[:account_id])
end
def set_collections
@collections = @account.collections
.with_tag
.order(created_at: :desc)
.offset(offset_param)
.limit(limit_param(DEFAULT_COLLECTIONS_LIMIT))
@collections = @collections.discoverable unless @account == current_account
end
def set_collection
@collection = Collection.find(params[:id])
end
def collection_creation_params
params.permit(:name, :description, :language, :sensitive, :discoverable, :tag_name, account_ids: [])
end
def collection_update_params
params.permit(:name, :description, :language, :sensitive, :discoverable, :tag_name)
end
def check_feature_enabled
raise ActionController::RoutingError unless Mastodon::Feature.collections_enabled?
end
def next_path
return unless records_continue?
api_v1_alpha_account_collections_url(@account, pagination_params(offset: offset_param + limit_param(DEFAULT_COLLECTIONS_LIMIT)))
end
def prev_path
return if offset_param.zero?
api_v1_alpha_account_collections_url(@account, pagination_params(offset: offset_param - limit_param(DEFAULT_COLLECTIONS_LIMIT)))
end
def records_continue?
((offset_param * limit_param(DEFAULT_COLLECTIONS_LIMIT)) + @collections.size) < @account.collections.size
end
def offset_param
params[:offset].to_i
end
end

View File

@@ -4,7 +4,7 @@ class Api::V2::SearchController < Api::BaseController
include AsyncRefreshesConcern
include Authorization
RESULTS_LIMIT = (ENV['MAX_SEARCH_RESULTS'] || 20).to_i
RESULTS_LIMIT = 20
before_action -> { authorize_if_got_token! :read, :'read:search' }
before_action :validate_search_params!

View File

@@ -11,16 +11,12 @@ class ApplicationController < ActionController::Base
include CacheConcern
include PreloadingConcern
include DomainControlHelper
include ThemingConcern
include DatabaseHelper
include AuthorizedFetchHelper
include SelfDestructHelper
helper_method :current_account
helper_method :current_session
helper_method :current_flavour
helper_method :current_skin
helper_method :current_theme
helper_method :single_user_mode?
helper_method :use_seamless_external_login?
helper_method :sso_account_settings
@@ -65,19 +61,25 @@ class ApplicationController < ActionController::Base
return if request.referer.blank?
redirect_uri = URI(request.referer)
return if redirect_uri.path.start_with?('/auth')
return if redirect_uri.path.start_with?('/auth', '/settings/two_factor_authentication', '/settings/otp_authentication')
stored_url = redirect_uri.to_s if redirect_uri.host == request.host && redirect_uri.port == request.port
store_location_for(:user, stored_url)
end
def mfa_setup_path(path_params = {})
settings_two_factor_authentication_methods_path(path_params)
end
def require_functional!
return if current_user.functional?
respond_to do |format|
format.any do
if current_user.confirmed?
if current_user.missing_2fa?
redirect_to mfa_setup_path
elsif current_user.confirmed?
redirect_to edit_user_registration_path
else
redirect_to auth_setup_path
@@ -89,6 +91,8 @@ class ApplicationController < ActionController::Base
render json: { error: 'Your login is missing a confirmed e-mail address' }, status: 403
elsif !current_user.approved?
render json: { error: 'Your login is currently pending approval' }, status: 403
elsif current_user.missing_2fa?
render json: { error: 'Your account requires two-factor authentication' }, status: 403
elsif !current_user.functional?
render json: { error: 'Your login is currently disabled' }, status: 403
end

View File

@@ -130,12 +130,17 @@ class Auth::RegistrationsController < Devise::RegistrationsController
end
def require_rules_acceptance!
return if @rules.empty? || (session[:accept_token].present? && params[:accept] == session[:accept_token])
return if @rules.empty? || validated_accept_token?
@accept_token = session[:accept_token] = SecureRandom.hex
@invite_code = invite_code
@invite_code = invite_code
@rule_translations = @rules.map { |rule| rule.translation_for(I18n.locale) }
set_locale { render :rules }
render :rules
end
def validated_accept_token?
session[:accept_token].present? && params[:accept] == session[:accept_token]
end
def is_flashing_format? # rubocop:disable Naming/PredicatePrefix

View File

@@ -0,0 +1,42 @@
# frozen_string_literal: true
class CollectionItemsController < ApplicationController
include SignatureAuthentication
include Authorization
include AccountOwnedConcern
vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' }
before_action :check_feature_enabled
before_action :require_account_signature!, if: -> { authorized_fetch_mode? }
before_action :set_collection_item
skip_around_action :set_locale
skip_before_action :require_functional!, unless: :limited_federation_mode?
def show
respond_to do |format|
format.json do
expires_in(3.minutes, public: public_fetch_mode?)
render json: @collection_item,
serializer: ActivityPub::FeaturedItemSerializer,
adapter: ActivityPub::Adapter,
content_type: 'application/activity+json'
end
end
end
private
def set_collection_item
@collection_item = @account.curated_collection_items.find(params[:id])
authorize @collection_item.collection, :show?
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
not_found
end
def check_feature_enabled
raise ActionController::RoutingError unless Mastodon::Feature.collections_enabled?
end
end

View File

@@ -0,0 +1,46 @@
# frozen_string_literal: true
class CollectionsController < ApplicationController
include WebAppControllerConcern
include SignatureAuthentication
include Authorization
include AccountOwnedConcern
vary_by -> { public_fetch_mode? ? 'Accept, Accept-Language, Cookie' : 'Accept, Accept-Language, Cookie, Signature' }
before_action :check_feature_enabled
before_action :require_account_signature!, only: :show, if: -> { request.format == :json && authorized_fetch_mode? }
before_action :set_collection
skip_around_action :set_locale, if: -> { request.format == :json }
skip_before_action :require_functional!, only: :show, unless: :limited_federation_mode?
def show
respond_to do |format|
# TODO: format.html
format.json do
expires_in expiration_duration, public: true if public_fetch_mode?
render_with_cache json: @collection, content_type: 'application/activity+json', serializer: ActivityPub::FeaturedCollectionSerializer, adapter: ActivityPub::Adapter
end
end
end
private
def set_collection
@collection = @account.collections.find(params[:id])
authorize @collection, :show?
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
not_found
end
def expiration_duration
recently_updated = @collection.updated_at > 15.minutes.ago
recently_updated ? 30.seconds : 5.minutes
end
def check_feature_enabled
raise ActionController::RoutingError unless Mastodon::Feature.collections_enabled?
end
end

Some files were not shown because too many files have changed in this diff Show More