Skip to content

TerraCiTerraform Pipeline Generator

Generate GitLab CI pipelines with dependency ordering for Terraform/OpenTofu monorepos

TerraCi

Install

bash
# Homebrew (macOS/Linux)
brew install edelwud/tap/terraci

# Go
go install github.com/edelwud/terraci/cmd/terraci@latest

# Docker
docker run --rm -v $(pwd):/workspace ghcr.io/edelwud/terraci:latest generate

Usage

bash
# Initialize config
terraci init

# Generate pipeline
terraci generate -o .gitlab-ci.yml

# Only changed modules
terraci generate --changed-only --base-ref main

How It Works

1. Discover modules from directory structure:

platform/prod/eu-central-1/
├── vpc/        → platform/prod/eu-central-1/vpc
├── eks/        → platform/prod/eu-central-1/eks
└── rds/        → platform/prod/eu-central-1/rds

2. Extract dependencies from terraform_remote_state:

hcl
# eks/main.tf
data "terraform_remote_state" "vpc" {
  backend = "s3"
  config = {
    key = "platform/prod/eu-central-1/vpc/terraform.tfstate"
  }
}

3. Build execution order:

Level 0: vpc (no dependencies)
Level 1: eks, rds (depend on vpc)

4. Generate pipeline:

yaml
stages:
  - plan-0
  - apply-0
  - plan-1
  - apply-1

plan-vpc:
  stage: plan-0

apply-vpc:
  stage: apply-0
  needs: [plan-vpc]

plan-eks:
  stage: plan-1
  needs: [apply-vpc]

Configuration

yaml
# .terraci.yaml
structure:
  pattern: "{service}/{environment}/{region}/{module}"

gitlab:
  image: hashicorp/terraform:1.6
  plan_enabled: true

exclude:
  - "*/test/*"

Full configuration reference →

Released under the MIT License.