Commit Graph

136 Commits

Author SHA1 Message Date
Alexander Zaytsev 8f3086daa9 Pretty-print dev server URL and login in bin/dev (#2808)
* Make dev server URL and login info look nicer

* DRY

* Adjust comments

* Adjust comments
2026-04-15 14:54:11 -04:00
Mike Dalessio 732126b5df Update bundle-drift to handle subdependencies (#2824) 2026-04-09 13:46:37 -04:00
Mike Dalessio e70047ca0f Default development environment to app.fizzy.localhost (#2822)
Using fizzy.localhost causes CORS errors when using minio for Active
Storage because the minio endpoint is at minio.fizzy.localhost — a
sibling subdomain, not a subdomain of the app host. Switching to
app.fizzy.localhost makes both hosts subdomains of fizzy.localhost,
resolving the CORS issue. See #2814 for the related minio CORS fix.

fizzy.localhost will continue to work if people want to use it, but all
docs and scripts have been updated to point to app.fizzy.localhost.
2026-04-09 12:43:01 -04:00
Mike Dalessio 759e6079e8 Update bin/bundle-drift to catch dependency requirement diffs (#2821)
* Detect dependency requirement drift in bin/bundle-drift

The checker only compared resolved spec versions between Gemfile.lock
and Gemfile.saas.lock. When dependabot bumped solid_queue from ~> 1.3
to ~> 1.4, the forward command patched the resolved version but left
the stale dependency requirement. The checker didn't catch it because
both lockfiles resolved to the same version.

Now find_drift also compares dependency requirements for shared direct
dependencies, and forward patches the DEPENDENCIES section too.

Includes built-in self-test (bin/bundle-drift self-test).

* Sync solid_queue dependency requirement in Gemfile.saas.lock

Updates ~> 1.3 to ~> 1.4 to match Gemfile.lock.
2026-04-09 12:19:52 -04:00
Stanko Krtalić 5701aad8d7 Merge pull request #2623 from basecamp/passkeys
Passkeys
2026-03-18 14:54:54 +01:00
Stanko K.R. b23660d897 Fix --tailscale not printing hostname 2026-03-18 11:49:59 +01:00
Mike Dalessio ba6fc495da ci: fix bin/bundle-drift forward to support native gems (#2723)
See #2704 where only the ruby platform gem for thruster was replaced.
2026-03-17 22:29:47 -04:00
Rosa Gutierrez d1500ad4ec Rename apns-dev to push-dev and unify 1Password credentials
- Rename script from apns-dev to push-dev (handles both APNs and FCM)
- Fetch credentials from Deploy/Fizzy Production (same as Kamal)
- Use _B64 env vars to avoid escaping issues with multiline keys
- Update bin/dev flag from --apns to --push

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-25 19:31:13 +01:00
Fernando Olivares 55336873b2 Fix database issues and add APNS configuration
- Fix owner_id type to UUID in devices migration
- Fix NOT NULL crash in device registration
- Add APNS config and 1Password integration
- Add --apns flag to bin/dev for local development
- Clean up devices controller
2026-02-25 19:31:13 +01:00
dependabot[bot] 0ead67f85b Bump the development-dependencies group across 1 directory with 3 updates (#2546)
* Bump the development-dependencies group across 1 directory with 3 updates

Bumps the development-dependencies group with 3 updates in the / directory: [brakeman](https://github.com/presidentbeef/brakeman), [faker](https://github.com/faker-ruby/faker) and [selenium-webdriver](https://github.com/SeleniumHQ/selenium).


Updates `brakeman` from 7.1.2 to 8.0.1
- [Release notes](https://github.com/presidentbeef/brakeman/releases)
- [Changelog](https://github.com/presidentbeef/brakeman/blob/main/CHANGES.md)
- [Commits](https://github.com/presidentbeef/brakeman/compare/v7.1.2...v8.0.1)

Updates `faker` from 3.5.3 to 3.6.0
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.5.3...v3.6.0)

Updates `selenium-webdriver` from 4.39.0 to 4.40.0
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.39.0...selenium-4.40.0)

---
updated-dependencies:
- dependency-name: brakeman
  dependency-version: 8.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: development-dependencies
- dependency-name: faker
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: selenium-webdriver
  dependency-version: 4.40.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>

* Auto-sync Gemfile.saas.lock on Dependabot PRs

Dependabot can't update custom-named Gemfiles, so Gemfile.saas.lock
drifts whenever it bumps shared gems in Gemfile.lock.

Add `bin/bundle-drift forward` to push oss lockfile changes into the
saas lockfile (the reverse of `correct`), and a GitHub Actions workflow
that runs it automatically on Dependabot bundler branches.

* Update brakeman ignore fingerprint for 8.0.1

Brakeman 8.0.1 changed how it computes warning fingerprints, so the
existing ignore entry for the safe_constantize warning in Notifier
became obsolete. Update to the new fingerprint.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jeremy Daer <jeremy@37signals.com>
2026-02-16 15:29:51 -08:00
David Heinemeier Hansson f0583888eb More missing dependencies for libvips 2026-02-13 17:47:30 +01:00
David Heinemeier Hansson d7a10bea1c Include missing vips dependencies 2026-02-13 17:40:08 +01:00
Jay Ohms ea43d81850 Support mobile app local development access from devices over nip.io 2026-01-05 09:31:27 -05:00
Luis Fernando Jiménez cca845a3e0 fix: use the right gh-cli arch package (#2232) 2025-12-26 21:11:02 -08:00
Mike Dalessio 605f4ed2a4 Move deploy broadcast to the saas gem 2025-12-17 12:46:00 -05:00
Jeremy Daer a5a0cda295 Fix tailscale serve: use localhost:PORT, helpful error on Linux
Tailscale serve only supports localhost or 127.0.0.1 as proxy targets.
On Linux, prompts user to run `sudo tailscale set --operator=$USER` if access denied.
2025-12-16 14:47:09 -08:00
David Heinemeier Hansson a755ecdec9 Must be run as sudo 2025-12-16 14:36:51 -08:00
Jeremy Daer c691d39ecf Integrate fizzy-saas as vendored gem at saas/
- Update Gemfile.saas to use path: "saas" instead of GitHub source
- Update config/database.yml to reference local saas/ directory
- Update bin/setup to source saas/bin/setup directly
- Remove redundant dotfiles (ruby-version, gitignore, rubocop, github workflows)
- Add saas/db exclusions to root rubocop config
2025-12-16 12:25:22 -08:00
Jeremy Daer bf6ddcb933 Add --tailscale flag to bin/dev for remote access (#2168)
Enables sharing dev sites over Tailscale serve. Uses port convention
4xxxx (prepending 4 to the dev port, echoing TLS 443) so multiple apps
can run simultaneously on different ports.

Usage: bin/dev --tailscale
2025-12-16 09:54:53 -08:00
Jeremy Daer 586015c3f9 Bundle drift detection and correction (#2101)
Gemfile.saas evals Gemfile, so shared gems should have identical versions
in both lockfiles. This adds bin/bundle-drift to detect and fix drift:

* `bin/bundle-drift check` compares shared gem versions
* `bin/bundle-drift correct` seeds Gemfile.lock from Gemfile.saas.lock
  and re-locks, letting Bundler prune SaaS-only gems while preserving
  shared versions

Adds drift check to bin/ci and GitHub CI. Corrects existing drift.
2025-12-11 21:32:34 -08:00
Jeremy Daer 2e17b78e08 bin/bundle-both (#2100)
Convenience for bundling both OSS and SaaS in lock-step:
```bash
> bin/bundle-both install

▸ OSS: Gemfile
bundle install
Bundle complete! 45 Gemfile dependencies, 161 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

▸ SaaS: Gemfile.saas
bundle install
Bundle complete! 63 Gemfile dependencies, 187 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
```
2025-12-11 20:26:06 -08:00
Kevin McConnell 6f002b66d8 In non-SaaS, run jobs in container by default 2025-12-10 12:32:35 +00:00
Stanko Krtalić 150e7caf03 Merge pull request #1908 from basecamp/install-runtime-and-ci-dependencies-on-mac
Install any runtime or ci dependencies in bin/setup on MacOS
2025-12-04 13:16:46 +01:00
Stanko K.R. ea826860e0 Install any runtime or ci dependencies in bin/setup 2025-12-04 09:16:30 +01:00
Mike Dalessio 6345aa4787 Update seeds to use @example.com
See also https://www.rfc-editor.org/rfc/rfc2606.html
2025-12-03 15:40:58 -05:00
David Heinemeier Hansson 737d92781b We now use GH actions instead of local CI since this project is public 2025-12-03 14:57:59 +01:00
Stanko K.R. 4885e220d7 Install missing tools needed by bin/setup 2025-12-03 11:40:39 +01:00
Joseph Lozano 9f527fa872 Fix bin/setup to explicitly use bash syntax for mise hook-env (#1813) 2025-12-02 13:43:37 -08:00
Jorge Manrubia cc6dcb6c5b Extract mysql setup to function 2025-12-01 12:51:06 +01:00
Jorge Manrubia 12de564176 Remove MySQL from default local development setup
https://3.basecamp.com/2914079/buckets/37331921/chats/9301300227@9334968661
2025-12-01 12:46:37 +01:00
Mike Dalessio bd19b91e05 Make sure the sqlite db is prepared in SAAS mode
Previously, the mysql database was prepared twice and sqlite not at all.
2025-11-29 14:09:55 -05:00
Mike Dalessio 027cfc02b1 Restore the ability to pass arguments to bin/rails test
The app is not loaded by rails/commands if there are additional arguments to "rails test"
2025-11-28 14:47:00 -05:00
Jorge Manrubia 81656ac260 Run SQLite in saas mode too 2025-11-28 15:53:58 +01:00
Jorge Manrubia f03fbba5ac Restore local CI, sensible setup for open source users 2025-11-28 15:53:58 +01:00
Jorge Manrubia cebd5d35f6 Revert "Remove local ci for now"
This reverts commit 7d6ed4a459f78d14767f1523b32553df84e627e5.
2025-11-28 15:53:58 +01:00
Jorge Manrubia 76d3ec0fc4 Remove local ci for now 2025-11-28 15:53:58 +01:00
Jorge Manrubia afbc0ca8e5 Include engine tests in saas mode
Notice that test is not a regular rake task you can enhance, but a hard-coded rails command.
2025-11-28 15:53:58 +01:00
Jorge Manrubia a5b02755b2 Add rake tasks for enabling/disabling saas mode 2025-11-28 15:53:58 +01:00
Jorge Manrubia 08cc02804d Invoke setup script in gem 2025-11-28 15:53:58 +01:00
Jorge Manrubia 3caf8d05a2 Remove line, this gets bin/setup confused, better to keep the rails output clean 2025-11-28 15:53:58 +01:00
Jorge Manrubia 97c280ddb1 Prepare bin/setup to work with SAAS env variable / txt file 2025-11-28 15:53:58 +01:00
Jorge Manrubia fb9aa5dfac Extract common method to configure bundle 2025-11-28 15:53:48 +01:00
Jorge Manrubia 5d32e40756 Use kamal from the 2025-11-28 15:53:48 +01:00
Jorge Manrubia 2c7079393a Move kamal deploy config to the gem 2025-11-28 15:53:48 +01:00
Jorge Manrubia 102827ff8d Use bundler groups instead of conditional
So that the gemfile.lock does not change across invocations
2025-11-28 15:53:48 +01:00
Jorge Manrubia e1e9a01720 Make open source the default, and check for sass instead 2025-11-28 15:53:48 +01:00
Mike Dalessio f0b2603ba4 Rename bin/gitleaks to gitleaks-audit
to prevent script recursion if bin is in user's $PATH
2025-11-26 21:36:01 -05:00
Mike Dalessio 7f46063c25 Introduce gitleaks to the codebase
- `bin/setup` installs gitleaks
- add `gitleaks dir` command to CI
- configure gitleaks to ignore tmp, log, and encrypted files
- tag existing false positives with `gitleaks:allow`
- add historical false positives to the ignore list
2025-11-26 15:46:47 -05:00
Kevin McConnell 11a38a4526 Initial (wip) staging deployment
This adds an initial configuration for staging. Note that we are doing
this ahead of having the full infrastructure in all 3 DCs. So this
this will result in some cross-DC writes for now (e.g. we have a single cache in
IAD). We'll correct this as the infrastructure becomes available.

We'll also run jobs on every app server, until we split them out to
separate instances.
2025-11-17 09:12:41 -05:00
Mike Dalessio 93b2cef419 Delete unused script migrate-primary-db 2025-11-17 09:11:57 -05:00