Commit Graph

937 Commits

Author SHA1 Message Date
Donal McBreen
1109a864d0 Bump version for 1.7.0 2024-06-18 10:33:02 +01:00
Donal McBreen
da599d90c1 Merge pull request #828 from basecamp/configuration-validation
Configuration validation
2024-06-18 08:31:47 +01:00
Donal McBreen
6bf3f4888a Allow aliases still 2024-06-18 08:20:27 +01:00
Donal McBreen
10e3229d7c Merge pull request #817 from nickhammond/grep-context
Add grep options to log commands
2024-06-13 14:38:54 +01:00
Nick Hammond
c7bd377fa5 Swap grep context with grep options 2024-06-06 09:26:12 -07:00
Donal McBreen
bdd951b756 Merge pull request #832 from basecamp/registry-skips
Allow registry commands to skip local and remote
2024-06-06 08:12:15 +01:00
Donal McBreen
080897dc4d Merge pull request #831 from basecamp/check-buildx-contexts
Check that we have valid contexts before building
2024-06-06 08:12:05 +01:00
Donal McBreen
d652221100 Merge pull request #818 from fabiosammy/fix-header-docker-setup-template
Fix the header template of the docker-setup hook
2024-06-05 12:18:59 +01:00
Donal McBreen
00e0e5073e Allow registry commands to skip local and remote
- Add local logout to `kamal registry logout`
- Add `skip_local` and `skip_remote` options to `kamal registry` commands
- Skip local login in `kamal deploy` when `--skip-push` is used
2024-06-05 12:10:36 +01:00
Donal McBreen
b52e66814a Check that we have valid contexts before building
Load the hosts from the contexts before trying to build.

If there is no context, we'll create one. If there is one but the hosts
don't match we'll re-create.

Where we just have a local context, there won't be any hosts but we
still inspect the builder to check that it exists.
2024-06-05 11:52:45 +01:00
Donal McBreen
29fbe7a98f Remove redundant Kamal::Configuration:: 2024-06-04 16:45:39 +01:00
Donal McBreen
4f317b8499 Configuration validation
Validate the Kamal configuration giving useful warning on errors.
Each section of the configuration has its own config class and a YAML
file containing documented example configuration.

You can run `kamal docs` to see the example configuration, and
`kamal docs <section>` to see the example configuration for a specific
section.

The validation matches the configuration to the example configuration
checking that there are no unknown keys and that the values are of
matching types.

Where there is more complex validation - e.g for envs and servers, we
have custom validators that implement those rules.

Additonally the configuration examples are used to generate the
configuration documentation in the kamal-site repo.

You generate them by running:

```
bundle exec bin/docs <kamal-site-checkout>
```
2024-06-04 14:19:29 +01:00
Donal McBreen
6e60ab918a Bump version for 1.6.0 2024-06-03 08:34:12 +01:00
Donal McBreen
2c2053558a Handle corrupt git clones
When cloning the git repo:
1. Try to clone
2. If there's already a build directory reset it
3. Check the clone is valid

If anything goes wrong during that process:
1. Delete the clone directory
2. Clone it again
3. Check the clone is valid

Raise any errors after that
2024-05-27 11:17:34 +01:00
fabiosammy
beac539d8c Fix the header template of the docker-setup hook 2024-05-24 13:25:01 -03:00
Nick Hammond
89994c8b20 Add grep's context option to show lines before and after a match 2024-05-24 08:59:33 -07:00
Donal McBreen
187861fa60 Space not tab 2024-05-21 12:20:19 +01:00
Donal McBreen
5ff1203c80 Always lock before pre-deploy hook 2024-05-21 12:02:16 +01:00
Donal McBreen
0e73f02743 Split lock and connection setup
Allow run the pre-connect hook before the first SSH command is executed,
but only run the locking in `with_lock` blocks.
2024-05-21 12:02:16 +01:00
Donal McBreen
83d0078525 Confirm outside mutating 2024-05-21 12:02:16 +01:00
Donal McBreen
96ef0fbc4d Fix merge error 2024-05-21 12:02:16 +01:00
Donal McBreen
b12654ccd0 Don't lock until confirmed 2024-05-21 12:02:16 +01:00
Donal McBreen
64f5955444 Don't hold lock on error 2024-05-21 12:02:12 +01:00
Donal McBreen
d2a719998a Building doesn't need a deploy lock 2024-05-21 12:01:08 +01:00
Donal McBreen
6a7c90cf4d Only stopping containers locks 2024-05-21 12:01:07 +01:00
Donal McBreen
2c2d94c6d9 Merge pull request #740 from basecamp/remove-healthcheck-step
Remove the healthcheck step
2024-05-21 12:00:25 +01:00
Donal McBreen
c62bd1dc31 Merge pull request #815 from basecamp/envify-already-pushes-env
Envify already env pushes
2024-05-21 11:57:55 +01:00
Donal McBreen
a83df9e135 Merge pull request #620 from mlitwiniuk/allow_custom_ports_for_ssh
Allow custom user and port for builder host
2024-05-21 11:49:06 +01:00
Donal McBreen
7b55f4734e Envify already env pushes
`kamal envify` will do `kamal env push` for us, so no need to call it
ourselves during setup.
2024-05-21 11:47:51 +01:00
Donal McBreen
1e296c4140 Update sshkit_with_ext.rb 2024-05-21 11:38:30 +01:00
Donal McBreen
9700e2b3c4 Merge pull request #646 from nickhammond/server/exec
Add in a server exec command for running ad-hoc commands directly on the server
2024-05-21 11:34:20 +01:00
Donal McBreen
706b82baa1 Simplify messages and remove multiple execute error 2024-05-21 10:40:01 +01:00
Donal McBreen
fa7e941648 Make SSHKit::Runner::Parallel fail slow
Using a different SSHKit runner doesn't work well, because the group
runner uses the Parallel runner internally. So instead we'll patch its
behaviour to fail slow.

We'll also get it to return all the errors so we can report on all the
hosts that failed.
2024-05-21 09:33:22 +01:00
Donal McBreen
78c0a0ba4b Don't start other roles we have a healthy container
If a primary role container is unhealthy, we might take a while to
timeout the health check poller. In the meantime if we have started the
other roles, they'll be running tow containers.

This could be a problem, especially if they read run jobs as that
doubles the worker capacity which could cause exessive load.

We'll wait for the first primary role container to boot successfully
before starting the other containers from other roles.
2024-05-21 08:37:36 +01:00
Donal McBreen
060e5d2027 Update lib/kamal/cli/server.rb
Co-authored-by: Sijawusz Pur Rahnama <sija@sija.pl>
2024-05-21 08:22:20 +01:00
Nick Hammond
8a4f7163bb Apply suggestions from code review
Co-authored-by: Donal McBreen <dmcbreen@gmail.com>
2024-05-20 11:15:14 -07:00
Donal McBreen
ee758d951a Only use barrier when needed, more descriptive info 2024-05-20 12:18:30 +01:00
Donal McBreen
bb2ca81d87 Fix rebase method duplication 2024-05-20 12:18:30 +01:00
Donal McBreen
773ba3a5ab Show container logs and healthcheck status on failure 2024-05-20 12:18:30 +01:00
Donal McBreen
5be6fa3b4e Improve comments 2024-05-20 12:18:30 +01:00
Donal McBreen
07c5658396 Remove redundant method 2024-05-20 12:18:30 +01:00
Donal McBreen
0efb5ccfff Remove the healthcheck step
To speed up deployments, we'll remove the healthcheck step.

This adds some risk to deployments for non-web roles - if they don't
have a Docker healthcheck configured then the only check we do is if
the container is running.

If there is a bad image we might see the container running before it
exits and deploy it. Previously the healthcheck step would have avoided
this by ensuring a web container could boot and serve traffic first.

To mitigate this, we'll add a deployment barrier. Until one of the
primary role containers passes its healthcheck, we'll keep the barrier
up and avoid stopping the containers on the non-primary roles.

It the primary role container fails its healthcheck, we'll close the
barrier and shut down the new containers on the waiting roles.

We also have a new integration test to check we correctly handle a
a broken image. This highlighted that SSHKit's default runner will
stop at the first error it encounters. We'll now have a custom runner
that waits for all threads to finish allowing them to clean up.
2024-05-20 12:18:30 +01:00
Donal McBreen
990f1b4413 Merge pull request #798 from basecamp/git-clone
Build from within a git clone by default
2024-05-20 12:18:07 +01:00
Donal McBreen
17dcaccb6a Don't blow up if there are no env tags 2024-05-20 10:50:07 +01:00
Donal McBreen
0ea2a2c509 Don't include destination in clone directory
Reusing the clone directory should allow caching of the build context
between deployments to different destinations.
2024-05-20 09:34:42 +01:00
Donal McBreen
307750ff70 Build from within a git clone by default
Docker does not respect the .dockerignore file when building from a tar.

Instead by default we'll make a local clone into a tmp directory and
build from there. Subsequent builds will reset the clone to match the
checkout.

Compared to building directly in the repo, we'll have reproducible
builds.

Compared to using a git archive:
1. .dockerignore is respected
2. We'll have faster builds - docker can be smarter about caching the
build context on subsequent builds from a directory

To build from the repo directly, set the build context to "." in the
config.

If there are uncommitted changes, we'll warn about them either being
included or ignored depending on whether we build from the clone.
2024-05-20 09:30:56 +01:00
Donal McBreen
f48c227768 Move env_tags under env key
Instead of:

```
env:
  CLEAR_TAG: untagged
env_tags:
  tag1:
    CLEAR_TAG: tagged
```

We'll have:

```
env:
  clear:
    CLEAR_TAG: untagged
  tags:
    tag1:
      CLEAR_TAG: tagged
```
2024-05-15 10:19:22 +01:00
David Heinemeier Hansson
e58d2f67f2 Fix env template path check and tests 2024-05-14 10:07:31 -07:00
David Heinemeier Hansson
938ac375a1 Only envify if there is a template file available 2024-05-13 17:08:53 -07:00
David Heinemeier Hansson
033f2a3401 Correct invocation 2024-05-13 16:59:50 -07:00