LogoLogo
Bonsai (0.13) DocsGitHubDiscord CommunityGarden Enterprise
Docs Edge
Docs Edge
  • Welcome to Garden!
  • Overview
    • What is Garden
    • Use Cases
      • Isolated On-Demand Preview Environments
      • Fast, Portable CI Pipelines that Run Anywhere
      • Shift Testing Left
      • Local Development With Remote Clusters
      • Jumpstart your Internal Developer Platform
    • Garden vs Other Tools
  • Getting Started
    • Quickstart
    • Garden Basics
    • Next Steps
  • Tutorials
    • Your First Project
      • 1. Create a Garden Project
      • 2. Pick a Kubernetes Plugin
      • 3. Add Actions
      • 4. Add Tests
      • 5. Code Syncing (Hot Reload)
      • 6. Next Steps
    • Setting up a Kubernetes cluster
      • 1. Create a Cluster
        • AWS
        • GCP
        • Azure
      • 2. Configure Container Registry
        • AWS
        • GCP
        • Azure
        • Docker Hub
      • 3. Set Up Ingress, TLS and DNS
      • 4. Configure the Provider
  • Using Garden With
    • Containers
      • Using Remote Container Builder
      • Building Containers
    • Kubernetes
      • Using Remote Kubernetes
      • Using Local Kubernetes
      • Deploying K8s Resources
      • Installing Helm charts
      • Running Tests and Tasks
    • Terraform
      • Using Terraform
      • Applying Terrform Stacks
    • Pulumi
      • Using Pulumi
      • Applying Pulumi Stacks
    • Local Scripts
  • Features
    • Remote Container Builder
    • Team Caching
    • Variables and Templating
    • Config Templates
    • Workflows
    • Code Synchronization
    • Custom Commands
    • Remote Sources
  • Guides
    • Connecting a Project
    • Environments and Namespaces
    • Installing Garden
    • Including/Excluding files
    • Installing Local Kubernetes
    • Migrating from Docker Compose to Garden
    • Using the CLI
    • Using Garden in CircleCI
    • Minimal RBAC Configuration for Development Clusters
    • Deploying to Production
    • Using a Registry Mirror
    • Local mode
  • Reference
    • Providers
      • container
      • ephemeral-kubernetes
      • exec
      • jib
      • kubernetes
      • local-kubernetes
      • otel-collector
      • pulumi
      • terraform
    • Action Types
      • Build
        • container Build
        • exec Build
        • jib-container Build
      • Deploy
        • configmap Deploy
        • container Deploy
        • exec Deploy
        • helm Deploy
        • kubernetes Deploy
        • persistentvolumeclaim Deploy
        • pulumi Deploy
        • terraform Deploy
      • Run
        • container Run
        • exec Run
        • helm-pod Run
        • kubernetes-exec Run
        • kubernetes-pod Run
      • Test
        • container Test
        • exec Test
        • helm-pod Test
        • kubernetes-exec Test
        • kubernetes-pod Test
    • Template Strings
      • Project template context
      • Environment template context
      • Provider template context
      • Action (all fields) template context
      • Action spec template context
      • Module template context
      • Remote Source template context
      • Project Output template context
      • Custom Command template context
      • Workflow template context
      • Template Helper Functions
    • Commands
    • Project Configuration
    • ConfigTemplate Reference
    • RenderTemplate Reference
    • Workflow Configuration
    • Garden Containers on Docker Hub
    • Glossary
    • Module Template Configuration
    • Module Types
      • configmap
      • container
      • exec
      • helm
      • jib-container
      • kubernetes
      • persistentvolumeclaim
      • pulumi
      • templated
      • terraform
  • Misc
    • FAQ
    • Troubleshooting
    • Telemetry
    • How Organizations Adopt Garden
    • New Garden Cloud Version
    • Migrating to Bonsai
  • Contributing to Garden
    • Contributor Covenant Code of Conduct
    • Contributing to the Docs
    • Setting up Your Developer Environment
    • Developing Garden
    • Config Resolution
    • Graph Execution
Powered by GitBook
On this page
  • base64Decode
  • base64Encode
  • camelCase
  • concat
  • formatDateUtc
  • indent
  • isEmpty
  • join
  • jsonDecode
  • jsonEncode
  • kebabCase
  • lower
  • modifyDateUtc
  • replace
  • sha256
  • shiftDateUtc
  • slice
  • split
  • string
  • trim
  • upper
  • uuidv4
  • yamlDecode
  • yamlEncode

Was this helpful?

  1. Reference
  2. Template Strings

Template Helper Functions

These are all the helper functions available in template strings, and some usage examples for each.

base64Decode

Decodes the given base64-encoded string.

Usage: base64Decode(string)

Examples:

  • ${base64Decode("bXkgdmFsdWU=")} -> "my value"

base64Encode

Encodes the given string as base64.

Usage: base64Encode(string)

Examples:

  • ${base64Encode("my value")} -> "bXkgdmFsdWU="

camelCase

Converts the given string to a valid camelCase identifier, changing the casing and removing characters as necessary.

Usage: camelCase(string)

Examples:

  • ${camelCase("Foo Bar")} -> "fooBar"

  • ${camelCase("--foo-bar--")} -> "fooBar"

  • ${camelCase("__FOO_BAR__")} -> "fooBar"

concat

Concatenates two arrays or strings.

Usage: concat(arg1, arg2)

Examples:

  • ${concat(["first","two"], ["second","list"])} -> ["first","two","second","list"]

  • ${concat([1,2,3], [4,5])} -> [1,2,3,4,5]

  • ${concat("string1", "string2")} -> "string1string2"

formatDateUtc

Formats the given date using the specified format. The input date is always converted to the UTC time zone before the modification. If no explicit timezone is specified on the input date, then the system default one will be used. The output date is always returned in the UTC time zone too.

Usage: formatDateUtc(date, format)

Examples:

  • ${formatDateUtc("2021-01-01T00:00:00Z", "yyyy-MM-dd")} -> "2021-01-01"

  • ${formatDateUtc("2021-01-01T00:00:00+0200", "yyyy-MM-dd")} -> "2020-12-31"

  • ${formatDateUtc("2021-01-01T00:00:00Z", "yyyy-MM-dd HH:mm:ss")} -> "2021-01-01 00:00:00"

  • ${formatDateUtc("2021-01-01T00:00:00+0200", "yyyy-MM-dd HH:mm:ss")} -> "2020-12-31 22:00:00"

indent

Indents each line in the given string with the specified number of spaces.

Usage: indent(string, spaces)

Examples:

  • ${indent("some: multiline\nyaml: document", 2)} -> " some: multiline\n yaml: document"

  • ${indent("My\nblock\nof\ntext", 4)} -> " My\n block\n of\n text"

isEmpty

Returns true if the given value is an empty string, object, array, null or undefined.

Usage: isEmpty([value])

Examples:

  • ${isEmpty({})} -> true

  • ${isEmpty({"not":"empty"})} -> false

  • ${isEmpty([])} -> true

  • ${isEmpty([1,2,3])} -> false

  • ${isEmpty("")} -> true

  • ${isEmpty("not empty")} -> false

  • ${isEmpty(null)} -> true

join

Takes an array of strings (or other primitives) and concatenates them into a string, with the given separator

Usage: join(input, separator)

Examples:

  • ${join(["some","list","of","strings"], " ")} -> "some list of strings"

  • ${join(["some","list","of","strings"], ".")} -> "some.list.of.strings"

jsonDecode

Decodes the given JSON-encoded string.

Usage: jsonDecode(string)

Examples:

  • ${jsonDecode("{\"foo\": \"bar\"}")} -> {"foo":"bar"}

  • ${jsonDecode("\"JSON encoded string\"")} -> "JSON encoded string"

  • ${jsonDecode("[\"my\", \"json\", \"array\"]")} -> ["my","json","array"]

jsonEncode

Encodes the given value as JSON.

Usage: jsonEncode(value)

Examples:

  • ${jsonEncode(["some","array"])} -> "[\"some\",\"array\"]"

  • ${jsonEncode({"some":"object"})} -> "{\"some\":\"object\"}"

kebabCase

Converts the given string to a valid kebab-case identifier, changing to all lowercase and removing characters as necessary.

Usage: kebabCase(string)

Examples:

  • ${kebabCase("Foo Bar")} -> "foo-bar"

  • ${kebabCase("fooBar")} -> "foo-bar"

  • ${kebabCase("__FOO_BAR__")} -> "foo-bar"

lower

Convert the given string to all lowercase.

Usage: lower(string)

Examples:

  • ${lower("Some String")} -> "some string"

modifyDateUtc

Modifies the date by setting the specified amount of time units. The input date is always converted to the UTC time zone before the modification. If no explicit timezone is specified on the input date, then the system default one will be used. The output date is always returned in the UTC time zone too.

Usage: modifyDateUtc(date, amount, unit)

Examples:

  • ${modifyDateUtc("2021-01-01T00:00:00.234Z", 345, "milliseconds")} -> "2021-01-01T00:00:00.345Z"

  • ${modifyDateUtc("2021-01-01T00:00:05Z", 30, "seconds")} -> "2021-01-01T00:00:30.000Z"

  • ${modifyDateUtc("2021-01-01T00:01:00Z", 15, "minutes")} -> "2021-01-01T00:15:00.000Z"

  • ${modifyDateUtc("2021-01-01T12:00:00Z", 11, "hours")} -> "2021-01-01T11:00:00.000Z"

  • ${modifyDateUtc("2021-01-01T10:00:00+0200", 11, "hours")} -> "2021-01-01T11:00:00.000Z"

  • ${modifyDateUtc("2021-01-31T00:00:00Z", 1, "days")} -> "2021-01-01T00:00:00.000Z"

  • ${modifyDateUtc("2021-03-01T00:00:00Z", 0, "months")} -> "2021-01-01T00:00:00.000Z"

  • ${modifyDateUtc("2021-01-01T00:00:00Z", 2024, "years")} -> "2024-01-01T00:00:00.000Z"

replace

Replaces all occurrences of a given substring in a string.

Usage: replace(string, substring, replacement)

Examples:

  • ${replace("string_with_underscores", "_", "-")} -> "string-with-underscores"

  • ${replace("remove.these.dots", ".", "")} -> "removethesedots"

sha256

Creates a SHA256 hash of the provided string.

Usage: sha256(string)

Examples:

  • ${sha256("Some String")} -> "7f0fd64653ba0bb1a579ced2b6bf375e916cc60662109ee0c0b24f0a750c3a6c"

shiftDateUtc

Shifts the date by the specified amount of time units. The input date is always converted to the UTC time zone before the modification. If no explicit timezone is specified on the input date, then the system default one will be used. The output date is always returned in the UTC time zone too.

Usage: shiftDateUtc(date, amount, unit)

Examples:

  • ${shiftDateUtc("2021-01-01T00:00:00Z", 1, "seconds")} -> "2021-01-01T00:00:01.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", -1, "seconds")} -> "2020-12-31T23:59:59.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", 1, "minutes")} -> "2021-01-01T00:01:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", -1, "minutes")} -> "2020-12-31T23:59:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", 1, "hours")} -> "2021-01-01T01:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", -1, "hours")} -> "2020-12-31T23:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T10:00:00+0200", 1, "hours")} -> "2021-01-01T09:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", 1, "days")} -> "2021-01-02T00:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", -1, "days")} -> "2020-12-31T00:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", 1, "months")} -> "2021-02-01T00:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", -1, "months")} -> "2020-12-01T00:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", 1, "years")} -> "2022-01-01T00:00:00.000Z"

  • ${shiftDateUtc("2021-01-01T00:00:00Z", -1, "years")} -> "2020-01-01T00:00:00.000Z"

slice

Slices a string or array at the specified start/end offsets. Note that you can use a negative number for the end offset to count backwards from the end.

Usage: slice(input, start, [end])

Examples:

  • ${slice("ThisIsALongStringThatINeedAPartOf", 11, -7)} -> "StringThatINeed"

  • ${slice(".foo", 1)} -> "foo"

split

Splits the given string by a substring (e.g. a comma, colon etc.).

Usage: split(string, separator)

Examples:

  • ${split("a,b,c", ",")} -> ["a","b","c"]

  • ${split("1:2:3:4", ":")} -> ["1","2","3","4"]

string

Converts the given value to a string.

Usage: string(value)

Examples:

  • ${string(1)} -> "1"

  • ${string(true)} -> "true"

trim

Trims whitespace (or other specified characters) off the ends of the given string.

Usage: trim(string, [characters])

Examples:

  • ${trim(" some string with surrounding whitespace ")} -> "some string with surrounding whitespace"

upper

Converts the given string to all uppercase.

Usage: upper(string)

Examples:

  • ${upper("Some String")} -> "SOME STRING"

uuidv4

Generates a random v4 UUID.

Usage: uuidv4()

Examples:

  • ${uuidv4()} -> "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"

yamlDecode

Decodes the given YAML-encoded string. Note that for multi-document YAML strings, you need to set the 2nd argument to true (see below).

Usage: yamlDecode(string, [multiDocument])

Examples:

  • ${yamlDecode("a: 1\nb: 2\n")} -> {"a":1,"b":2}

  • ${yamlDecode("a: 1\nb: 2\n---\na: 3\nb: 4\n", true)} -> [{"a":1,"b":2},{"a":3,"b":4}]

yamlEncode

Encodes the given value as YAML.

Usage: yamlEncode(value, [multiDocument])

Examples:

  • ${yamlEncode({"my":"simple document"})} -> "my: simple document\n"

  • ${yamlEncode([{"a":1,"b":2},{"a":3,"b":4}], true)} -> "---a: 1\nb: 2\n---a: 3\nb: 4\n"

PreviousWorkflow template contextNextCommands

Last updated 2 months ago

Was this helpful?