github garden-io/garden v0.9.0

Garden 0.9 is out!

We're pleased to share with you a new version of Garden that packs lots of exciting new functionality, improvements and fixes. Note that there are breaking changes in this release, please see the migration guide below for details.

Helm support

The Helm package manager is one of the most commonly used tools for managing Kubernetes applications. Helm Charts let you define, install and upgrade your application's components repeatedly and reliably. Additionally, the Helm Hub contains more than 500 actively maintained Charts for commonly used applications.

You can now use Helm Charts in your Garden projects. This integration removes the need to maintain separate stack definitions for your development and production environments. It also makes it easier to adopt Garden for existing applications and provides a robust mechanism to deploy your changes to QA environments and/or production.

You can use the newly added helm module type to integrate your own charts, or reference external ones. Check out the documentation here. We've also added an example project to showcase the integration in action.

Dashboard (alpha version)

The 0.9 release includes the first version of the Garden Dashboard. It visualizes the
dependency graph of your stack and reflects the status of services in real-time, as you develop. Having a comprehensive overview of the internal structure of your application makes it easier to debug and identify issues, particularly for applications with many dependencies between build steps, tasks, and tests. The dashboard also features in-browser access to your service logs and a summary of your stack's modules and services. As the Dashboard is still in alpha phase you will need to run Garden with the GARDEN_ENABLE_SERVER=1 flag. E.g. GARDEN_ENABLE_SERVER=1 garden dev.

And more

Apart from the Helm integration and dashboard, we've also enabled the use of custom ingresses, added hot-reloading support for remote Kubernetes clusters and other minor improvements and bugfixes. You can find the full changelog below and here.

--

We're looking for a frontend engineer and a platform engineer to join our team in Berlin. Check out the job descriptions here and feel free to reach out if you have any questions!

If you have any questions about the product, need help, or just feel like geeking out about dev tooling, hop into our Slack channel.

Migration Guide

After upgrading, the default namespace given to projects in Kubernetes clusters has been changed. Any project that doesn't have an explicitly configured namespace will be installed into a new namespace, and the old namespace needs to be manually removed using kubectl.

For projects using Kubernetes, Garden's new Helm functionality relies on installing Tiller in each project's namespace.

Because of this (and a few other related behind-the-scenes changes), you may need to run the following command in your project:

garden init --force

If you still encounter issues upgrading and are running a local Kubernetes cluster, resetting/wiping the cluster may be the quickest route.

However, this is not feasible for all users, so feel free to ask for help from the team in our community Slack workspace. We'll be happy to assist.

Breaking Changes to Project/Module Configuration

  • Module configurations using the services template key need to be updated to use the modules key instead.

  • We no longer default to nginx as the ingress class to use as an annotation on container module ingresses. If you need it configured, you need to set it via the ingressClass parameter in the local-kubernetes provider configuration.

  • The following configuration fields for container modules must be renamed as indicated:

    • service.command -> service.args
    • service.hotReloadCommand -> service.hotReloadArgs
    • test.command -> test.args
    • task.command -> task.args

This is done in preparation for a new configuration option (using the key command, hence the rename) that's planned for release soon, whereby users can override the container entrypoint in configs.

  • Projects using the generic module type need to update the relevant garden.yml files to reference the exec module type instead.

Please see the full list of changes below.

CHANGELOG

Bug Fixes

  • improved error messages when deps are missing (#484) (c5e6dce)
  • add path to module validation error messages (b1c54b0)
  • delete outdated system namespaces (cda0c7c)
  • add missing package to garden-service/package.json (4688e56)
  • don't watch project-level log files (81c8d04)
  • core: error in actions.getStatus helper (a4cf625)
  • core: missing module configs in dumpConfig response (c8609a2)
  • core: using module version in templates didn't work with watch (6c209af)
  • core: certain template strings could not be resolved in configs (3d582c4)
  • dashboard: conform to new "get config" response (bfa2c0f)
  • dashboard: handle empty ingress in service status (870d5f3)
  • dashboard: limit number of log lines that are fetched (#461) (3c214ce)
  • deploy: make watch parameter implicit when hot-reloading (0819605)
  • exec: missing tasks key in module schema (cc13f33)
  • get-tasks: print msg if no tasks found (f64d59c)
  • k8s: configure RBAC properly for Tiller (d182929)
  • k8s: fix issue with log following for K8s (6624964)
  • k8s: incorrect role binding for tiller service account (9a61840)
  • logger: only inherit parent level if option is set (#493) (99fdb12)
  • openfaas: override release name to avoid conflict across namespaces (2eea9bd)
  • perf: reuse port-forwards when hot-reloading (6db83a7)
  • server: ensure log entries have level silly (#496) (5b11322)
  • status: return more correct/granular statuses (d4a7cf2)

Code Refactoring

  • add configureProvider plugin action (bdf6994)
  • rename generic plugin to exec (4c85d46)
  • use events for file watching instead of callbacks (f6a99c2)
  • rename validate module action to configure (7b02fdd)
  • allow consecutive dashes in identifier regex (37fe9c3)
  • remove experimental Go CLI (e9ef3aa)
  • commands: remove create commands (88d18d8)
  • dashboard: use React Hooks API for state management (588dd6c)
  • dashboard: rename root dir to dashboard (6b48430)
  • go-cli: replace unison with mutagen (wip) (b7a0d33)
  • k8s: minor change to speed up container deploys (91da102)
  • k8s: shorten default namespace names (15aa5de)
  • logger: remove root prop from LogNode class (b1e8fa6)
  • logger: rename preserveLevel opt to childEntriesInheritLevel (0b3efab)

Features

  • rename command to args for container type (84f5a8d)
  • added get tasks command (250315d)
  • add servicePort config option (57b23f3)
  • cli: add --hot alias for --hot-reload flag (22ac4f6)
  • dashboard: update UI (closes #460) (e59897c)
  • dashboard: expose provider links in sidebar (48c9e13)
  • k8s: add Helm module inheritance via the base field (8a7a7e5)
  • k8s: proper support for Helm charts (48f0375)
  • k8s: make hot reloading work for remote clusters (7ca3dc3)
  • k8s: allow overriding release name in Helm modules (1530105)
  • k8s: allow disabling nginx setup in local-kubernetes provider (33511bc)
  • logger: allow controlling level with env var (#452) (ec8bd45)
  • versioncmd: add version command (8be4761)

BREAKING CHANGES

Module configurations using the services template key need to be updated to use modules instead.

The (admittedly poorly supported) google-cloud-function module type has been changed to include only one function per module. This is more consistent with other module types, and avoids complex refactoring
to fit with the changes in the templating context.

The create project and create module commands are no longer available. We're removing them for now because currently they're more confusing than they are useful. There's an open Github issue (#312) for properly implementing the "create" functionality.

We no longer default to nginx as the ingress class to use as an annotation on container module ingresses. If you need it configured, you need to set it via the ingressClass parameter in the local-kubernetes provider
configuration.

After updating, the following configuration fields for container modules must be renamed as indicated:

  • service.command -> service.args
  • service.hotReloadCommand -> service.hotReloadArgs
  • test.command -> test.args
  • task.command -> task.args

This is done in preparation for a new configuration option (using the key command, hence the rename) that's planned for release soon, whereby users can override the current default of running tests / tasks / ad-hoc commands inside containers via /bin/sh -c [args].

After updating, any project that doesn't have an explicitly configured namespace will be installed into a new namespace, and the old namespace needs to be manually removed.

Projects using the generic module type need to update the relevant garden.yml files to reference the exec module type instead.

The --tail|-t flag for the garden logs command now takes an integer parameter and specifies the number of log lines to display, whereas previously it was a boolean flag that determined whether or not to stream the logs. For streaming, we now have the --follow|-f flag. This conforms to other similar CLI tools.

latest releases: 0.12.5, 0.12.5-0, 0.12.4...
19 months ago