Skip to content

Feature/matrix

Feature/matrix #6

Workflow file for this run

name: Deploy Sandbox Environment
on:
pull_request:
branches: [ main ]
push:
branches: [ main ]
permissions:
id-token: write
contents: read
jobs:
build-matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.build-matrix.outputs.matrix }}
steps:
- name: Build Environment Matrix
id: build-matrix
shell: python
run: |
from pathlib import Path
import os
import json
def discover_environments(platform_path: Path = Path("platform")) -> list[Path]:
return [d for d in platform_path.iterdir() if d.is_dir()]
def discover_regions(environment_path: Path) -> list[Path]:
return [d for d in environment_path.iterdir() if d.is_dir()]
def discover_instances(region_path: Path) -> list[Path]:
return [d for d in region_path.iterdir() if d.is_dir()]
try:
ENVIRONMENT = os.environ['PLATFORM_ENVIRONMENT']
except KeyError as ke:
raise ValueError("Environment variable named PLATFORM_ENVIRONMENT was not found. This variable must be supplied so that a matrix of environments can be built!")
if len(ENVIRONMENT) == 0:
raise ValueError("Environment variable PLATFORM_ENVIRONMENT was empty. This variable must be supplied so that a matrix of environments can be built!")
all_environments = discover_environments()
matrix = {"terragrunt_environment": []}
try:
selected_environment = list(filter(lambda x: x.name == ENVIRONMENT, all_environments))[0]
except Exception:
raise ValueError(f"Expected environment '{ENVIRONMENT}' not found in {all_environments}")
regions = discover_regions(environment_path=selected_environment)
for region_path in regions:
region_instances = discover_instances(region_path=region_path)
for instance in region_instances:
matrix["terragrunt_environment"].append({"environment": selected_environment.name, "region": region_path.name, "instance": instance.name})
with open(os.environ["GITHUB_OUTPUT"], "a") as f:
f.write(f"matrix={json.dumps(matrix, separators=(',', ':'))}")
call-terragrunt-deploy:
needs: build-matrix
permissions:
contents: read
id-token: write
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }}
uses: ./.github/workflows/terragrunt-deploy.yml
with:
tf_version: '1.5.5'
tg_version: '0.54.11'
environment: ${{ matrix.terragrunt_environment.environment }}
region: ${{ matrix.terragrunt_environment.region }}
env_id: ${{ matrix.terragrunt_environment.instance }}
secrets: inherit