Commit Graph

400 Commits

Author SHA1 Message Date
David Heinemeier Hansson 8def7c5003 Excess CR 2025-04-06 21:11:04 +02:00
David Heinemeier Hansson c06802856e Move boosts under bubbles
But also remove the need for a bucket nesting
2025-04-06 21:04:28 +02:00
David Heinemeier Hansson 5c9f630fee Rearrange 2025-04-06 20:13:20 +02:00
David Heinemeier Hansson 5275394c2d Move resolves to the bottom for a cleaner reading 2025-04-06 20:13:09 +02:00
David Heinemeier Hansson 4fd1472fae Move bubble watch out from the needless bucket nesting 2025-04-06 19:22:40 +02:00
Mike Dalessio 9e1eba6bfb Enable Active Record load_async
Use of load_async was introduced in 49ef811d, but the feature has not
been enabled until this change.
2025-04-06 13:13:16 -04:00
David Heinemeier Hansson 540316e639 Move taggings under bubbles 2025-04-05 21:54:48 +02:00
David Heinemeier Hansson aaa4dd2967 Use modern CI setup 2025-04-05 17:18:26 +02:00
David Heinemeier Hansson d0953d6f87 Pull assignments out of the double nesting 2025-04-05 15:59:51 +02:00
David Heinemeier Hansson b4c0fec7a6 Move Assignments under Bubble
Since that what we are assigning
2025-04-05 15:51:53 +02:00
David Heinemeier Hansson e69c1bd0a1 Break pins out of the double nesting
Its cumbersome and needless
2025-04-05 15:45:16 +02:00
David Heinemeier Hansson bfb7ed1216 Move pins to my space
We used the my/ space in HEY to reflect anything that was primarily
hinged off Current.user. Good to use here too.
2025-04-05 14:57:24 +02:00
David Heinemeier Hansson 7494dad91e Drop the toggles scope for taggings as well 2025-04-05 14:20:06 +02:00
David Heinemeier Hansson 384de24132 Get rid of odd toggles concept
This is just assignments.
2025-04-05 14:16:04 +02:00
David Heinemeier Hansson 4c344d2c36 Use Rails 8.1 defaults
Avoids deprecation warnings during test runs
2025-04-05 12:34:02 +02:00
Jorge Manrubia 4ac2511771 Remove turbo frame for editing stages 2025-04-04 16:59:51 +02:00
Jorge Manrubia 6f93d4b72a Add system to auto reconsider inactive bubbles after 30 days 2025-04-04 10:04:39 +02:00
Jason Zimdars 1ea70d7d3b Merge branch 'main' into two-columns-refactor
* main:
  Fix image icons
  Revert "Merge pull request #345 from basecamp/cascade-layers"
  Fine tune notifications states
  Remove empty helper
  Use an icon for the button
  Show button on collection page and notif settings
  Add involvement types to accesses
  Extract a couple components
  Add cascade layers to all CSS files
2025-04-03 19:30:37 -05:00
Kevin McConnell 0820badcc3 Add involvement types to accesses
This provides a way to set the level of involvement that a user has with
a collection, and from which we determine the level of notifications to
send. Users can be access-only, watching, or being notified about
everything.

If you're access-only, you won't get an notifications. If you're
watching, you'll only get notifications for the items you're watching
(which includes the items you've been assigned, have commented on, etc).
If you're set to everything you'll get notifications about all activity
in that collection.

This change replaces our previous concept of subscriptions. Where
previously you'd subscribe to a collection to get notifications in it,
now you'll simply set the notification level on your access.
2025-04-03 16:35:13 +01:00
Jorge Manrubia 17c1b2051f Add toggles to switch between doing/considering 2025-04-03 13:46:29 +02:00
Mike Dalessio b7c2369988 Fix setting the workflow on a collection
The previous implementation would delete all accesses if the bucket
was not all_access.

I think it's simpler to move the bucket workflow into a separate
Buckets::WorkflowsController, rather than deal with different sets of
params from different forms in the existing BucketsController.
2025-03-30 09:24:56 -04:00
Mike Dalessio 91de604815 Move event activity loading into Events::DaysController 2025-03-26 07:46:56 -04:00
Kevin McConnell f099ab4dd9 Add console alias 2025-03-26 10:53:19 +00:00
Jason Zimdars 4bc125c7eb Load the form in a turbo frame so focused field doesn't intercept hotkeys 2025-03-24 14:15:28 -05:00
Jason Zimdars 9b9e09601e Introduce text-based UI 2025-03-24 11:33:04 -05:00
Mike Dalessio 4992c3f971 Set up tenanted Action Mailer URL helpers
and update AR::Tenanted to a version that supports it.
2025-03-20 21:58:36 -04:00
Mike Dalessio 33719b588c Restore the 404 page but allow the kamal health check 2025-03-20 11:36:32 -04:00
Mike Dalessio 987e420d05 Revert the tenant resolver fix
because it causes kamal healthchecks to fail
2025-03-20 11:04:03 -04:00
Mike Dalessio 743597d059 Quick fix to restore the 404 page 2025-03-20 10:58:44 -04:00
Mike Dalessio 2e70e0c3bd Update to AR::Tenanted with the extracted tenant resolver
- we no longer need to explicitly add the TenantSelector middleware
- and we can set up a properly-articulated tenant resolver proc that's
  used by both TenantSelector and Action Cable connections

ref: https://37s.fizzy.37signals.com/buckets/693169862/bubbles/999008671
2025-03-19 13:34:43 -04:00
Jason Zimdars 28a569c49b Tickets 2025-03-17 21:24:08 -05:00
Mike Dalessio e08f073d73 Structured logs for controller actions now contain the tenant 2025-03-13 17:21:31 -04:00
Kevin McConnell eabcc1d477 Use Docker Hub for deployments 2025-03-13 15:19:00 +00:00
Mike Dalessio 482aa90243 logging: suppress unstructured log lines 2025-03-13 09:46:14 -04:00
Mike Dalessio ed92687f4c logging: revert changes 2025-03-13 09:41:31 -04:00
Mike Dalessio 019a27787c logging: try just setting log level 2025-03-13 09:38:54 -04:00
Mike Dalessio 3c2e7b8ae3 logging: suppress log entries that are not structured
Borrowed from the BC4 configuration.
2025-03-13 09:31:11 -04:00
Mike Dalessio 31bbb6c76f deploy: keeping beta to one tenant 2025-03-12 12:14:53 -04:00
Mike Dalessio a337294650 deploy: update beta hosts for multi-tenancy 2025-03-12 11:56:58 -04:00
Mike Dalessio bb5ed28130 kamal-proxy: add fizzy.37signals.com so we can return 404
instead of the TLD handshake error now seen
2025-03-12 08:29:40 -04:00
Mike Dalessio d8075b74b7 hack: to handle tenantname.fizzy.37signals.com
Let's do the needful thing for now, and clean it up once the gem has
exposed the tenant resolver as a config in a cleaner way.
2025-03-12 07:53:31 -04:00
Mike Dalessio 300dffd376 Script and configuration for a multi-tenant migration
ref: https://3.basecamp.com/2914079/buckets/37331921/messages/8422006338

The script takes advantage of the fact that we can bind to the
existing untenanted database by adding it explicitly (and temporarily)
as a readonly shard to the database.yml, and so in the script
with_original_db is connected to the original database.

storage/tenants/%{tenant}/ is now the root directory for all
state stored for a particular tenant, including active storage and the
database.

We leave the existing files and production database in place after the
migration, in case we need to roll back (by reverting the code and
config).

We also don't do a granular active storage blob copy, since the
attachments are mostly on Account (and not on Bubble). Instead we
hardlink the blobs on disk (so we don't take up additional space with
duplicates).

Finally, we're manually adding the kamal-proxy hosts to the deploy
file, so that we can generate letsencrypt certs for the
subdomains. This is only intended to be a short-term solution, we'll
want something like a wildcard cert before we go live.
2025-03-12 07:53:31 -04:00
Mike Dalessio ca77968e55 Work around Rails' shard swapping lock in the Solid Cache config
Because solid cache started using shard swapping when given a
`database:` key in https://github.com/rails/solid_cache/pull/219, and
Rails doesn't distinguish which database is being swapped and which
was locked.

Hopefully I can make a change upstream that will enable swap locking
only for a specific databases. Until then, let's just use a slightly
more verbose configuration to work around it.
2025-03-12 07:53:31 -04:00
Mike Dalessio d9ece38753 Make the application multi-tenant 2025-03-12 07:53:31 -04:00
Mike Dalessio 232e5e4ed2 lint: tell brakeman 7 to ignore the class eval in has_markdown 2025-03-10 12:56:36 -04:00
Mike Dalessio 9c26633673 Inject the GITHUB_TOKEN secret into the container builder 2025-03-10 12:32:32 -04:00
Mike Dalessio 989600c590 Configure structured JSON logging
This configuration is emulating what we do in HEY.
2025-03-10 12:12:56 -04:00
Kevin McConnell a802b8de5a Allow managing bucket subscriptions 2025-02-26 10:53:03 +00:00
Kevin McConnell 694783e5f3 Allow toggling watch preference
We use a true/false preference so we can tell the difference between
disabling the watch vs never having the watch. This is so we can toggle
off and on the preferences for a container (like the bucket) without
losing any bubble-specific preferences.
2025-02-26 10:53:03 +00:00
Jason Zimdars 530b6e4a90 Stub notifications settings screen 2025-02-21 17:25:44 -06:00