LogoLogo
WebsiteGarden Core
Edge
Edge
  • welcome
  • 🌳Getting Started
    • Adding Your First Project
    • Running Triggered Workflows
  • 🌿Guides
    • Authenticating to your Providers
    • Automatic Environment Cleanup
    • User Groups, Roles and Permissions
    • Authentication via SAML
    • StackStreams
    • Managing Secrets
    • One-click Preview Environments
  • 🌺VCS Providers
    • Setting Up a GitHub App
    • Setting Up a GitLab App
  • 💐Cloud
    • Requirements
  • 🌻Enterprise (Self-Hosted)
    • Requirements
    • Installation
    • Updating Garden Enterprise
    • Vault
    • PostgreSQL Configuration
    • Creating KMS Keys
    • Creating an AWS Load Balancer
    • Monitoring Services
    • Environment Configuration
    • Updating the Admin Console
  • 🌹Misc
    • Release Notes
    • FAQ
    • Troubleshooting
Powered by GitBook
On this page
  • Workflow Runners
  • Workflow Triggers
  • trigger.branches (and trigger.ignoreBranches)
  • trigger.baseBranches
  • trigger.events
  • A complete example
  • Resource requests and limits for workflow runners

Was this helpful?

  1. Getting Started

Running Triggered Workflows

PreviousAdding Your First ProjectNextAuthenticating to your Providers

Last updated 3 years ago

Was this helpful?

Garden Cloud will automatically run workflows in your Garden projects when it receives matching GitHub/GitLab events. Below is a guide to adding triggers to your workflows for use with Garden Cloud.

For an introduction to workflows, see the .

Workflow Runners

The workflow runners are ephemeral pods that are spun up in a dedicated workflow runner namespace. The contains the Garden Core CLI, and supporting tools such as bash, git, the Google Cloud CLI, the AWS CLI, and more.

By default, the workflow runner will have access to the same repositories as the or that was configured for Garden Cloud. This is useful if your project has remote sources that need to be cloned. If your workflows require cloning repositories that are not accessible by the GitHub App / GitLab access token, you'll need to manually configure git for that, e.g. in a workflow script step.

Workflow Triggers

When a webhook event is received from your VCS provider (GitHub or GitLab), Garden Cloud will match it against the trigger specs in all workflow configs found in the repository.

The trigger spec's environment (and namespace, if specified) is the environment (as defined in your Garden project configuration) that will be used when the workflow is run by Garden Cloud.

The matching is based on three filters:

trigger.branches (and trigger.ignoreBranches)

An optional list of branch patterns (which may include wildcards).

If the event's Git branch matches one of the patterns in trigger.branches (or if no branch patterns are configured), it passes the branch filter.

trigger.ignoreBranches has the opposite effect—if an event's Git branch matches one of the filters there, it doesn't match the trigger.

For pull/merge requests, the Git branch used is the pull/merge request's head branch (e.g. my-feature-branch), not the base branch that the pull/merge request would be merged into if approved (e.g. main).

Example:

kind: Workflow
...
triggers:
  - branches: [feature-*] # matches e.g. feature-foo
    ignoreBranches: [experimental-*]
    environment: staging

trigger.baseBranches

An optional list of base branch patterns (which may include wildcards).

This filter is only applied for pull/merge request events.

If pull/merge request's base branch matches one of the patterns in trigger.baseBranches (or if no base branch patterns are configured), it passes the base branch filter.

trigger.ignoreBaseBranches has the opposite effect—if the pull request's base branch matches one of the filters there, it doesn't match the trigger.

Example:

kind: Workflow
...
triggers:
  - baseBranches: [main]
    ignoreBaseBranches: [feature-*]
    environment: staging

trigger.events

An optional list of event types to match against. Currently, the following events are handled by Garden Cloud:

  • pull-request-opened

  • pull-request-reopened

  • pull-request-updated

    • This event matches when commits are pushed to an open pull request.

  • pull-request

    • This event is a shorthand event that matches any of pull-request-opened, pull-request-reopened or pull-request-updated.

  • pull-request-closed

    • This event matches whenever a pull request / merge request is closed (regardless of whether the pull request was merged).

    • The workflow will be run from the base branch (e.g. main).

  • pull-request-merged

    • This event matches when a pull request / merge request is merged (but not when it is closed without merging).

    • The workflow will be run from the base branch (e.g. main).

The pull-request-closed event will run from the base branch that the pull/merge request was created from. This is because the pull/merge request's branch could have been deleted by a user before any triggered workflows are able to run (which requires cloning the repo).

Due to this, workflows that use this trigger will not work until they have been merged to the main branch.

A complete example

Below is a full example of how you might configure workflows for a CI/CD process.

In this setup, we run all the project's tests when a pull request is created or updated. We also deploy a preview environment so that the code reviewer can walk through the live application as they inspect the changes.

When the pull request is closed, we make sure to delete the preview environment.

Finally, if the pull request is merged, we deploy to the staging environment after we merge to the main branch.

kind: Workflow
name: run-tests
description: Runs unit and integration tests.
steps:
  - command: [test]
  - command: [delete, environment]
    when: always # Delete the test namespace regardless of whether tests passed.
triggers:
  - events: [pull-request]
    environment: ci

---

kind: Workflow
name: deploy-preview
description: Deploys a preview environment for code review.
steps:
  - command: [deploy]
triggers:
  - events: [pull-request]
    environment: preview

---

kind: Workflow
name: cleanup-preview
description: Deletes the preview environment's namespace when the pull request is closed.
steps:
  - command: [delete, environment]
triggers:
  - events: [pull-request-closed]
    environment: preview

---

kind: Workflow
name: deploy-to-staging
description: Deploy to staging when merging into the main branch
triggers:
  - events: [pull-request-merged]
    baseBranches: [main]
    environment: staging

Resource requests and limits for workflow runners

The resources field on workflow configs can be used to configure the resource requests and limits used when scheduling workflow runner pods for that workflow config.

For example:

kind: Workflow
name: run-tests
description: Runs unit and integration tests.
steps:
  ...
triggers:
  ...
resources:
  requests:
    cpu: "100" # 100 millicpu = 0.1 CPU
    memory: "200" # 200 MB
  limits:
    cpu: "600" # 600 millicpu = 0.6 CPU
    memory: "750" # 750 MB

See the for more information.

🌳
workflows guide
container image used
GitHub App
GitLab user access token
Kubernetes documentation on container requests and limits