@Gargron Gargron released this Jun 14, 2017 · 2843 commits to master since this release

Assets 2


  • JS performance improvements (#3402, #3300, #3475)
  • Unauthorized websockets access returns 401 instead of closing connection (#3411)
  • Fix webpack building on Windows (#3426)
  • Fix crash in TW locale (#3459)
  • Focus submit button on boost modal (#3494)
  • Usernames and hashtags no longer have influence over language detection (#3503)
  • Update Rails from 5.0.x to 5.1.x (#3121)
  • Add missing database indices (#3510)
  • Clicking label influences the connected toggle (#3530)
  • Only push updates to streaming API for recipients who are signed in to the streaming API (#3278)
  • Bulk pushes to sidekiq (#3536)
  • Refocus textarea after tooting (#3537)
  • Fix limits param in favourites controller (#3553)
  • No-op when following an already followed account (#3575)
  • No-op when favouriting/reblogging toot that has already been favourited/reblogged (#3641)
  • Fix embed page being broken (#3577)
  • Introduce foreign key constraints (#3562)
  • Fix failing thread resolving (#3599, #3622)
  • Fix exact hashtag search (#3611)
  • Fix crash when searching for invalid URLs (#3613)
  • Don't show business e-mail if it's blank (#3619)
  • Allow class attribute on anchors during sanitization to preserve microformats (#3623)
  • Display error message if JS is disabled (#3634)
  • Fix race condition when resolving remote account (#3606)
  • Support multiple trusted proxies (#3639)
  • When language cannot be reliably detected, set it to nil instead of to default locale of instance (#3666)
  • Fix RTL styles (#3669)
  • Improve RTL detection by ignoring whitespace, usernames, URLs and hashtags (#3682)
  • Fix issue where some Node.js versions wouldn't have "includes" function and the streaming API would crash (#3667)
  • Fix case sensitive e-mail check (#3688)
  • Fix deletion of toot sending the original toot to mentioned addresses instead of the "delete" Salmon (#3672)
  • Fix incompatibility with Hubzilla Salmon slaps (#3699)
  • Fix badly positioned unread indicator in column (#3720)
  • Fix unclickable onboarding modal links (#3724)
  • Adjust quality settings of GIFs converted to MP4s to actually save space (#3723)
  • Link the project website from "powered by" links (#3725)
  • Fix content jumping on scroll sometimes (#3734)
  • While the home feed is being regenerated for a returning user, display live results from database instead of nothing (#3721)
  • Batch status deletes for performance and less cross-instance payloads, when suspending accounts (#3735)
  • Save column settings when they are changed rather than when the area is collapsed (#3743)
  • Suspended/deleted accounts no longer come up in search/autocomplete (#3728)


  • Columns can be pinned, unpinned and moved (#3207)
  • Regex filters on local and federated timelines (#3564)
  • Preference for confirmation dialog on toot deletion (#3368)
  • Simplify stylesheets customization again (#3373)
  • Configurable reserved usernames, so people can't register e.g. "admin", "support", etc (#3566)
  • Dynamic app manifest so "Add to homescreen" will use configured instance name etc (#3563)
  • Image viewer modal uses low-res preview images before full-res is loaded for immediate feedback (#3595)
  • Admin buttons to control PuSH subscription to a remote account (#3640)
  • Admin button to re-download avatar/header of remote account (#3640)
  • Account deletion (#3728)

Upgrade notes:

This release adds database-level constraints for ensure cross-referential integrity. Previously, incorrect records could have persisted due to race conditions and request timeouts in the Ruby codebase. Because Postgres cannot create the constraints if violations of the constraints already exist, I have written a rake task for cleaning up the incorrect records in the database that you should execute before the migration.

If for some reason you cannot deploy the code first without running database migrations in the process (e.g. Capistrano deployments), you can simply copypaste the code from the rake task into the Rails console and execute it that way.

Because of how Postgres executes the creation of foreign keys, if Mastodon activity is happening at the same time, the migration may fail with a "deadlock". In such a case I recommend disabling user access to Mastodon during the migration, which shouldn't take longer than a minute.

Non-Docker only:

  • Dependency updates: bundle install and yarn install

Both Docker and non-Docker:

  • Run the rake task to prepare for the database migrations: RAILS_ENV=production bundle exec rails mastodon:maintenance:prepare_for_foreign_keys (in Docker: docker-compose run --rm web rails mastodon:maintenance:prepare_for_foreign_keys)
  • This release includes database migrations, that means you need to run RAILS_ENV=production bundle exec rails db:migrate (in Docker: docker-compose run --rm web rails db:migrate)
  • This release includes changes to assets, that means you need to run RAILS_ENV=production bundle exec rails assets:precompile (in Docker: docker-compose run --rm web rails assets:precompile)
  • The upgrade from Rails 5.0 to 5.1 will break cached entities. Cache lives for 10 minutes, so you can either wait for it to go away after 10 minutes, or clear Rails cache with RAILS_ENV=production bundle exec rails r Rails.cache.clear (in Docker: docker-compose run --rm web rails r Rails.cache.clear)