Skip to main content

Applications

The applications array in .greyhound/applications.yaml defines which repositories greyhound should import and how to track them. Each entry represents a primary application — a GitHub repository containing a .greyhound/config.yaml that greyhound will use to build the deployment topology.

Defining an Application

At minimum, an application needs a name, a repository, and a branch or tag to track:

applications:
- name: api
repository: your-org/api
branch: main
FieldDescription
nameUnique identifier for the application (RFC 1123 compliant)
repositoryGitHub repository in owner/repo format (min 3 characters per segment)
branchGit branch to track — mutually exclusive with tag
tagGit tag to track — mutually exclusive with branch

Config Source

By default, greyhound looks for .greyhound/config.yaml in the repository root. Override this with config_source:

applications:
- name: api
repository: your-org/api
branch: main
config_source: .greyhound/api-config.yaml

Default Cluster

Set default_cluster to specify which EKS cluster environments should be provisioned to by default. Environments can override this with their own cluster field:

applications:
- name: api
repository: your-org/api
branch: main
default_cluster: shared-nonprod-eks

Deployment Behavior

Control how and when deployments happen:

applications:
- name: api
repository: your-org/api
branch: main
auto_deploy: true
same_namespace: true
redeploy_all_children: false
FieldDefaultDescription
auto_deploytrueAutomatically deploy environments after provisioning
same_namespacetrueRun all services in the same Kubernetes namespace
redeploy_all_childrenWhen set, any push to this repository redeploys every child service

Child Applications

Applications can depend on other services that live in separate repositories. These are declared as additional_applications (required) or optional_applications (may be skipped by environments).

Required Children

Required child applications are always included when an environment imports this application:

applications:
- name: api
repository: your-org/api
branch: main
additional_applications:
- name: auth-service
repository: your-org/auth
branch: main
redeploy_with_any_change: true
- name: notification-service
repository: your-org/notifications
branch: main

Each child application supports the same repository, branch, tag, and config_source fields as the parent. The redeploy_with_any_change flag (defaults to true) controls whether pushes to the parent repository also redeploy this child.

Optional Children

Optional child applications may be excluded by specific environments using removed_services:

applications:
- name: api
repository: your-org/api
branch: main
optional_applications:
- name: debug-tools
repository: your-org/debug-tools
branch: main

Database Pools

Attach Aurora database pools to an application. These pools are automatically associated with all environments that import this application, unless the environment overrides them:

applications:
- name: api
repository: your-org/api
branch: main
default_database_pools:
- shared-aurora-pool
- analytics-pool

Resource Shares

Share resources (services, rules, endpoints, environment variables) between environments. This is useful when one environment needs to reference resources deployed in another:

applications:
- name: api
repository: your-org/api
branch: main
resource_shares:
- source_environment: staging
target_environment: dev
resource_type: Endpoint
resource_name: api-endpoint
exposed_as: upstream-api

Each resource share supports:

FieldDescription
source_environmentEnvironment exporting the resource
target_environmentEnvironment receiving the resource
resource_typeService, Rule, Endpoint, or EnvironmentVariable
resource_nameName of the resource being shared
exposed_asOptional alias in the target environment
fallback_valueValue to use if the source resource is unavailable
fallback_environmentAlternative source environment to try

Variable Overrides

Override environment variables for specific services during provisioning:

applications:
- name: api
repository: your-org/api
branch: main
variable_overrides:
- service_name: api
variable_name: LOG_LEVEL
variable_value: debug
priority: 5
FieldDefaultDescription
service_nameService to apply the override to
variable_nameEnvironment variable name
variable_valueValue to set
fallback_valueFallback if the primary value can't be resolved
priority10Lower numbers take precedence when multiple overrides target the same variable

Schema Reference

See the App Imports schema for the full configuration reference.