{"id":22443204,"url":"https://github.com/sudoblark/sudoblark.terraform.github","last_synced_at":"2026-05-04T02:36:22.813Z","repository":{"id":262601588,"uuid":"673114240","full_name":"sudoblark/sudoblark.terraform.github","owner":"sudoblark","description":"Terraform configuration for managing GitHub repositories and configuration - repo managed by sudoblark.terraform.github","archived":false,"fork":false,"pushed_at":"2026-03-29T09:42:50.000Z","size":156,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-29T13:11:15.521Z","etag":null,"topics":["github","iac","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sudoblark.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-31T22:57:15.000Z","updated_at":"2026-03-29T09:42:53.000Z","dependencies_parsed_at":"2024-11-13T10:19:58.668Z","dependency_job_id":"e82e312f-bea3-4e5e-869c-cd081b1fee0e","html_url":"https://github.com/sudoblark/sudoblark.terraform.github","commit_stats":null,"previous_names":["sudoblark/sudoblark.terraform.github"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sudoblark/sudoblark.terraform.github","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sudoblark%2Fsudoblark.terraform.github","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sudoblark%2Fsudoblark.terraform.github/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sudoblark%2Fsudoblark.terraform.github/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sudoblark%2Fsudoblark.terraform.github/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sudoblark","download_url":"https://codeload.github.com/sudoblark/sudoblark.terraform.github/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sudoblark%2Fsudoblark.terraform.github/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32592715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github","iac","terraform"],"created_at":"2024-12-06T02:26:01.170Z","updated_at":"2026-05-04T02:36:22.783Z","avatar_url":"https://github.com/sudoblark.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sudoblark/sudoblark.terraform.github\"\u003e\n    \u003cimg src=\"docs/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n\u003ch3 align=\"center\"\u003esudoblark.terraform.github\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Managed GitHub with GitHub!\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n# sudoblark.terraform.github\n[![CI](https://github.com/sudoblark/sudoblark.terraform.github/actions/workflows/commit-to-pr.yaml/badge.svg)](https://github.com/sudoblark/sudoblark.terraform.github/actions/workflows/commit-to-pr.yaml)\n[![CD](https://github.com/sudoblark/sudoblark.terraform.github/actions/workflows/apply.yaml/badge.svg)](https://github.com/sudoblark/sudoblark.terraform.github/actions/workflows/apply.yaml)\n[![Terraform Version](https://img.shields.io/badge/Terraform-1.14%2B-blueviolet?logo=terraform)](https://developer.hashicorp.com/terraform/)\n[![License](https://img.shields.io/github/license/sudoblark/sudoblark.terraform.github)](https://github.com/sudoblark/sudoblark.terraform.github/blob/main/LICENSE.txt)\n[![Maintained](https://img.shields.io/maintenance/yes/2026)](https://github.com/sudoblark/sudoblark.terraform.github)\n[![Automation Scope](https://img.shields.io/badge/Scope-GitHub%2FOrg%20Management-blue)](https://github.com/sudoblark/sudoblark.terraform.github)\n\nTerraform setup for Sudoblark GitHub - managing repository creation and configuration through Infrastructure as Code.\n\nManaged GitHub with GitHub!\n\n## Architecture\n\nThis repository follows a clean separation of concerns:\n\n### Core Components\n\n- **`modules/repository/`** - Core module implementing GitHub repository creation and configuration\n- **`modules/data/`** - Configuration layer where users define repositories and defaults (user-facing)\n- **Root** - Implementation layer that orchestrates the data module and core repository module\n\n### How It Works\n\n1. **Configuration** (`modules/data/` module):\n   - `modules/data/defaults.tf` - Default values for all repositories (prefix, visibility, codeowners, etc.)\n   - `modules/data/repositories_*.tf` - Repository definitions grouped by domain (ci_cd, python, terraform_modules, etc.)\n   - `modules/data/repositories.tf` - Combines all repository groups\n   - `modules/data/outputs.tf` - Exposes combined repositories and defaults\n\n2. **Implementation** (root):\n   - `repositories.tf` - Consumes data module outputs and creates repositories via the core module\n   - `main.tf` - Provider configuration\n\n3. **Core Module** (`modules/repository/`):\n   - Creates GitHub repositories\n   - Manages branch protection\n   - Configures CODEOWNERS files\n   - Handles licensing\n\n### Adding New Repositories\n\nTo add a new repository, simply edit the appropriate file in `modules/data/`:\n\n```hcl\n# modules/data/repositories_python.tf\n{\n  name : \"python.my-new-project\"\n  description : \"A new Python project\"\n  topics : [\"python\", \"cli\"]\n  open_source : true\n  visibility : \"public\"\n}\n```\n\nAll repositories inherit defaults from `modules/data/defaults.tf` unless explicitly overridden.\n\nIt's conceptual counterpart may be considered to be [sudoblark.terraform.modularised-demo](https://github.com/sudoblark/sudoblark.terraform.modularised-demo), which is an example micro-repo using modularised components to fulfill a use-case.\n\n## Developer documentation\nThe below documentation is intended to assist a developer with interacting with the Terraform code in order to add,\nremove or update functionality.\n\n### Pre-requisites\n* tfenv\n```sh\ngit clone https://github.com/tfutils/tfenv.git ~/.tfenv\necho 'export PATH=\"$HOME/.tfenv/bin:$PATH\"' \u003e\u003e ~/.bash_profile\n```\n\n* Virtual environment with pre-commit installed\n\n```sh\npython3 -m venv venv\nsource venv/bin/activate\npip install pre-commit\n```\n\n### Pre-commit hooks\nThis repository utilises pre-commit in order to ensure a base level of quality on every commit. The hooks\nmay be installed as follows:\n\n```sh\nsource venv/bin/activate\npip install pre-commit\npre-commit install\npre-commit run --all-files\n```\n\n#### Configured Hooks\n- **Terraform formatting** - Ensures consistent Terraform code style\n- **YAML linting** - Validates GitHub Actions workflows\n- **General file fixes** - Trailing whitespace, end-of-file fixes, merge conflict detection\n\n### Continuous Integration\n\nThis repository uses GitHub Actions for quality checks on pull requests:\n\n- **Format Check** - Validates Terraform formatting\n- **Validate** - Runs `terraform validate`\n- **Checkov** - Security and best practices scanning with policy enforcement\n- **Test** - Executes Terraform tests (requires Terraform 1.6.0+)\n- **Plan** - Generates and displays terraform plan\n- **Infracost** - Cost estimation for infrastructure changes\n\nAll checks must pass before merging to main.\n\n### Testing\n\nTerraform tests are implemented using `.tftest.hcl` files to validate:\n\n#### Test Files\n- **`tests/data_module.tftest.hcl`** - Validates data module configuration structure and outputs\n- **`tests/integration.tftest.hcl`** - Tests resource creation and configuration merging\n- **`tests/repository_name_logic.tftest.hcl`** - Validates repository naming and prefix logic\n\n#### Test Categories\n- Configuration validation (required fields, data types, naming conventions)\n- Resource creation and instantiation\n- Name computation and prefix application\n- Default value merging\n- Uniqueness constraints\n\nRun tests locally with:\n```sh\nterraform test\n```\n\nTests require Terraform 1.14.0 or higher.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsudoblark%2Fsudoblark.terraform.github","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsudoblark%2Fsudoblark.terraform.github","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsudoblark%2Fsudoblark.terraform.github/lists"}