Logbook - 2022-06-23

A 1950s style cartoon lady pointing at a vintage flight logbook
This is a Logbook post. It tells you what we’ve been up to here at Fly.io, to make running your code close to users better in all the ways. The proof of the pudding is in the eating, though, so you should dig in now; it’ll take you just a minute or two to get up and running.

We've had a lot of changelogs about our Phoenix/LiveView-based web UI in recent weeks. It's pretty rad; we've been vocal about being CLI-first, but we love a first-class dashboard. Our dashboard has sprouted a lot of new capabilities, and at this point you're missing out if you never use it!

That doesn't change the power and adaptability of the CLI—we'll never not love flyctl (alias fly). Speaking of which: we have a few flyctl✨ entries in this here collection. Because flyctl is open-source, you can peek in and see what that means in terms of commits, any updates we may have missed, and, notably, lots of fun activity around Fly Machines.

And now the changelog:

  • [Feature] We now have a YUL region (Montreal, QC, Canada) 🚀
  • [Feature] Optimized API queries in flyctl to make it a lot faster.
  • [Feature] fly deploy now displays plain Docker build output if you set NO_COLOR=1 first. NO_COLOR now properly disables all colorized output for deployments. The plain Docker output can be useful for debugging Docker builds while running in interactive terminals.
  • [Feature/Docs] We now have a Laravel launcher: fly launch will now detect and configure Laravel apps straight from source code. Bonus: Also handles Laravel Octane projects using Swoole or RoadRunner. (Updated docs)
  • [Feature] Changed the way we pre-verify DNS propagation to issue certificates with Let's Encrypt. We're now using a non-caching unbound alongside our app responsible for the pre-verification, and that's what we query for everything related to certificates and hostname checks.
  • [Feature] Updated some logic to prevent multiple reloads of the same data about an app’s current image (used for several GraphQL attributes). This should improve API performance on things like getting app status, and parts of the deployment workflow.
  • [Feature] Updated our app-discarding logic to put resource cleanup into a job, which should reduce user-facing issues with deleting apps, reduce database locking issues, and make the cleanup more retryable.
  • [Feature] We periodically come up against data-lock issues with our API’s database. We’ve added more context to our SQL calls, in the form of SQL comments, to provide information about where the queries are coming from. This will help target and debug issues when they come up.
  • [Feature] Optimized API calls used for first deploys, shaving about 6s off the process. People should see fewer weird CLI timeouts when they run fly launch or fly deploy for the first time on a new app.)
  • [Feature] Set up source coverage and test analytics for fly-proxy's all-Rust codebase before merging 22 new commits. This has already caught a handful of bad bugs before they could make it to production.
  • [Feature] Added additional TLVs to our Rust proxy's PROXYPROTO v2 support (tracking TLS ciphers, signature algorithms, hash algorithms, and authority/servername).
  • [Feature] Broke out a dedicated internal reference doc for diagnostics and troubleshooting from our ballooning Support knowledge base. This will help present and future Support team members 1) walk customers through solving common issues and 2) identify when a support request indicates a bug or issue that needs attention on the engineering side.
  • [Feature] Harmonized the styling in the Account Settings dashboard components with our old UI. Removed still more leftover Tailwind syntax.
  • [Feature] Shipped a page to showcase our selection of serious documents that go by acronymic names like DPA and HIPAA BAA. Previously, only logged-in customers could see these. Now prospective customers can, too!

Documents page showing Data Processing Agreement and HIPAA Business Associate Agreement options.

    • [Feature] Made the Plans UI clearer and simpler to use. Quickly switch between orgs with a dropdown selector.

Plans page with a dropdown to choose the organization

  • [Fix] Fixed a flyctl bug that wiped fly.toml env variables when --env (or -e) flags were used. Wrong type checks were causing existing ones to be overwritten. This was a neglected, annoying bug that Michael fixed (probably with glee) with his feet still moving on the hiring treadmill.
  • [Fix] You can now delete an organization if you’ve deleted your custom domains—previously having had a custom, Fly-managed domain at any point could have prevented you from doing this.
  • [Fix] Password-reset links from welcome emails were redirecting logged-in Oauth users to their dashboard instead. You might have encountered this if you were logged in via GitHub. This is fixed.
  • [Fix] Changed our GraphQL API query for listing app secrets. This should eliminate very rare 404s seen on both fly secrets list and the dashboard App Secrets tab. (Thanks macwilko in the forum for flagging up the error!)
  • [Fix] fly apps move was breaking metrics. It will now start sending metrics properly to the new organization.
  • [Fix] Fixed a bad if that was causing a 500 error on the app activity dashboard. (Looks like macwilko got hit with this one, too!)
  • [Fix] Fixed TLV values we'd just added to our proxy for PROXYPROTO V2 SSL. They were using 20 (decimal) instead of 0x20 (hexadecimal), in essence passing on an unknown 0x14 TLV type.
  • [Fix] Relaxed some email risk checks that were blocking signups from actual humans. For some reason, the email check service we use started detecting more emails as “mailbox does not exist”, even when we know they do. We don’t listen to that anymore; we just require an email confirmation instead.
  • [Docs] Updated buildpacks and NodeJS documentation to explain that build arguments are exposed to buildpacks as environment variables. Some buildpacks—like the Heroku NodeJS one—use env vars for configuration.
  • [Blog] Published How to Make Rust Leak Memory (Also: How to Make It Stop) on Rust and tracking down memory leaks.