Example configurations and templates for GitHub organization management with Terraform.
This repository demonstrates how to manage GitHub organizations, repositories, and rulesets using Infrastructure as Code (IaC) with Terraform.
The repository is organized into four main Terraform modules:
Manages organization-level settings including:
- Billing email
- Organization description
- Member privileges (repository creation, pages, forks, etc.)
Key files:
main.tf- Organization settings resourcelocals.tf- Environment configurationproviders.tf- GitHub provider configurationvariables.tf- Input variablesoutputs.tf- Output valuesbackend.tf- Terraform backend configuration
Manages GitHub repositories with support for:
- Repository creation and configuration
- Visibility settings (public/private)
- Features (issues, discussions, projects, wiki, downloads)
- Merge settings (merge commit, squash, rebase, auto-merge)
- Branch protection via repository-level rulesets
- Topics and vulnerability alerts
Key files:
main.tf- Repository and repository ruleset resourceslocals.tf- Configuration loading from YAML filesconfigs/repositories.yaml- Repository definitions (YAML format)
Features:
- Per-repository rulesets (works on free tier for public repos)
- Configurable branch patterns and protection rules
- Pull request requirements
- Required status checks
Manages organization-level rulesets for centralized branch protection policies.
Note: Organization-level rulesets require GitHub Team or Enterprise plan.
Key files:
main.tf- Organization ruleset resourceslocals.tf- Configuration loading from YAML filesconfigs/org_rulesets.yaml- Organization ruleset definitions (YAML format)
Features:
- Organization-wide rule enforcement
- Repository name filtering
- Branch pattern matching
- Bypass actors configuration
- Pull request and status check requirements
Manages GitHub teams, team memberships, and repository access permissions.
Key files:
main.tf- Team, team membership, and team repository resourceslocals.tf- Configuration loading and data flattening from YAML filesconfigs/teams.yaml- Team definitions (YAML format)
Features:
- Team creation with privacy settings (closed/secret)
- Team member management with roles (maintainer/member)
- Repository access control with granular permissions (pull, triage, push, maintain, admin)
- Support for external collaborators
- Simplified YAML configuration for team structure
- Terraform >= 1.0
- GitHub account with appropriate permissions
- GitHub Personal Access Token (PAT) or GitHub App credentials
- For organization rulesets: GitHub Team or Enterprise plan
All configurations are defined in YAML files for easier management:
repos/configs/repositories.yaml- Repository definitionsrulesets/configs/org_rulesets.yaml- Organization ruleset definitionsteams/configs/teams.yaml- Team definitions and memberships
Each module can be deployed independently:
# Organization settings
cd org_configurations
terraform init
terraform plan
terraform apply
# Repositories
cd repos
terraform init
terraform plan
terraform apply
# Organization rulesets (requires Team/Enterprise plan)
cd rulesets
terraform init
terraform plan
terraform apply
# Teams management
cd teams
terraform init
terraform plan
terraform apply- YAML-based configuration - Easy to read and maintain
- Modular architecture - Independent modules for different aspects
- Repository rulesets - Per-repository branch protection (free tier compatible)
- Organization rulesets - Centralized policy enforcement (Team/Enterprise)
- Team management - Manage teams, members, and repository access
- Flexible rules - Support for PR requirements, status checks, and more
- Granular permissions - Fine-grained access control for teams and repositories
- Safe defaults - Sensible default values with
try()functions
- Repository-level rulesets work on public repositories with GitHub Free tier
- Organization-level rulesets require GitHub Team or Enterprise plan
- All configurations use
try()functions for optional parameters - The
locals.tffiles handle YAML configuration loading
This is a template repository for educational and reference purposes.