Skip to content

Releases: basecamp/kamal

v1.5.1

26 Apr 13:27
Compare
Choose a tag to compare

What's Changed

  • Allow glob matches for roles and hosts by @djmb in #778
  • Escape single quotes to fix log following by @djmb in #779

Full Changelog: v1.5.0...v1.5.1

v1.5.0

25 Apr 12:40
Compare
Choose a tag to compare

What's Changed

  • Added -y option to kamal traefik reboot command by @igor-alexandrov in #730
  • Always send the clear env to the container by @djmb in #732
  • Fix accessory name checking that is passing to command kamal accessory by @latyshev in #502
  • Add tip how to apply changes to traefik by "traefik reboot" by @morgoth in #736
  • Build from a git archive by @djmb in #700
  • Label containers with empty destinations by @djmb in #745
  • Added destination to the lock directory by @igor-alexandrov in #741
  • Use default verbosity for hooks by @djmb in #752
  • Set env variables when running kamal app exec by @djmb in #751
  • Latest by tag by @djmb in #748
  • Include error message on failure by @djmb in #753
  • Make the sample docker setup hook executable by @djmb in #757
  • Allow capital letters to match valid service name, such as in MyApp by @ttilberg in #770
  • don't escape non-ascii characters in docker env file by @xiaohui-zhangxh in #773
  • Take accessory hosts into account for --hosts by @aishek in #772

New Contributors

Full Changelog: v1.4.0...v1.5.0

v1.4.0

20 Mar 09:28
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v1.3.1...v1.4.0

v1.3.1

10 Jan 08:58
Compare
Choose a tag to compare

What's Changed

  • Fix duplicate role env vars by @mdkent in #598
  • Rails 7.2 compatible Rubies by @djmb in #638
  • Add a missing base64 require by @mdkent in #635
  • Fix Net::SSH::HostKeyMismatch between bin/test runs by @mdkent in #636
  • Be a bit more patient during tests by @mdkent in #637

Full Changelog: v1.3.0...v1.3.1

v1.3.0

28 Nov 14:08
Compare
Choose a tag to compare

What's Changed

  • Allow Kamal to run without traefik by @yoelcabo in #580
  • feature: add NAME=all option for accessory reboot by @dmitrytrager in #550
  • Fix duplicate error message in pre-build.sample by @rmacklin in #523
  • Error out when roles or host filters don't match anything by @mdkent in #595
  • Try to match primary_role when roles are filtered by @mdkent in #594
  • Add option to set an absolute directory path by @leonvogt in #507

New Contributors

Full Changelog: v1.2.0...v1.3.0

v1.2.0

15 Nov 14:50
Compare
Choose a tag to compare

What's Changed

  • Configurable SSH port by @leonvogt in #508
  • Return a 502 when container is down by @djmb in #564
  • Support customizing the primary_web_role by @mdkent in #577
  • Enable yaml aliases by @mdkent in #578
  • Add allow_empty_roles to control aborting on roles with no hosts. by @mdkent in #582
  • Add wildcards to roles and hosts filters by @mdkent in #583
  • Pre and post Traefik reboot hooks by @djmb in #573

New Contributors

Full Changelog: v1.1.0...v1.2.0

v1.1.0

03 Nov 12:13
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v1.0.0...v1.1.0

v1.0.0

19 Sep 00:59
@dhh dhh
Compare
Choose a tag to compare

What's changed

  • Asset bridging by @djmb in #449 and #467
  • Copy env files to remote hosts by @djmb in #438
  • Add a require_destination setting by @djmb in #451
  • Configurable Healthcheck Expose Port by @rience in #443
  • Configurable Kamal directory by @djmb in #437
  • Configurable Number of Lines in Healthcheck Log Output by @rience in #444
  • Zero downtime deployment with cord file by @djmb in #439
  • Fix: do not hardcode Net::SSH auth_methods by @gf3 in #440
  • Fix: Prune healthcheck containers by @djmb in #425
  • Fix: Stop stale containers when deploying by @djmb in #450
  • Fix: Connect to remote host before creating builder by @djmb in #452
  • Fix: Validate the build image by @djmb in #456
  • Fix: Run interactive commands with the correct host by @djmb in #476

Full changelog: v0.16.1...v1.0.0

πŸŽ‰πŸŽ‰

Upgrading to 1.0

There are some significant changes in v1.0 of Kamal. You should test out the upgrade in a non-production environment first.

Upgrade steps

  1. First push your env files to the hosts, either with:
  • kamal envify [-d destination]
  • Or if you manage .env files yourself, kamal env push [-d destination]
  1. You should then reboot traefik and any accessories to pick up the new env files.
  2. Then you can deploy your app

ENV files

Environment variables are now passed to the Docker containers via ENV files. The files are written to the hosts by the kamal env push command. This allows more control of when environment variables are changed and means that someone can run commands without needing to set up the environment locally.

Shell expansion no longer works with environment variables because they are no longer passed to docker run as command line arguments.

Run directory

Files are stored under in .kamal on the hosts. Existing lock and audit files are not migrated. You can configure this with the run_directory setting.

Zero-downtime deployments

To prevent Traefik from sending requests to a container that is shutting down, it needs to see the container as unhealthy before we call docker stop. We do this via a "cord". This is a file in a volume mounted into /tmp/kamal-cord in the container. The healthcheck is re-written to also check for the file.

To mark a container as unhealthy we delete the file or "cut the cord". The healthcheck will fail, Traefik will stop sending requests and then we can shut down the container safely. You can change the directory the cord will be stored in with:

healthcheck:
  cord: /var/run/kamal/cord

Or set it to false to disable the cord. However, this will remove the zero-downtime guarantee.

Assets

During a deployment you may get requests for old JS/CSS going to the new container and visa versa. To prevent 404s, tell Kamal where the those assets are stored in the container. Kamal will mount a volume containing both old and new files into that location.

asset_path: /rails/public/assets

External image verification

If you pull your own images (using kamal deploy --skip_push), they now need to be tagged with a label service=<app name>. This is so we find them when pruning old images.

v0.16.1

24 Aug 16:17
@dhh dhh
Compare
Choose a tag to compare

What's Changed

  • Fix picking the first available role on primary_host by @tbuehlmann in #428
  • Fix require ActiveSupport module to provide String#remove by @fig in #422
  • Allow Traefik to run without publishing port by @tsvallender in #368

New Contributors

Full Changelog: v0.16.0...v0.16.1

v0.16.0

22 Aug 18:46
@dhh dhh
Compare
Choose a tag to compare

What's Changed

Due to a trademark claim, we've renamed the project to Kamal after the ancient Arab navigational tool. The new executable is now kamal and all env variables are prefixed with KAMAL_*. The new website going forward will live at https://kamal-deploy.org.

Full Changelog: v0.15.1...v0.16.0