{"id":28906852,"url":"https://github.com/rioprayogo/bolt","last_synced_at":"2026-04-14T14:31:48.746Z","repository":{"id":300310481,"uuid":"1005824447","full_name":"rioprayogo/bolt","owner":"rioprayogo","description":"Bolt - Multi-cloud Infrastructure as Code tool using OpenTofu. Supports AWS, Azure, and GCP with consistent YAML syntax, dependency graphs, cost estimation, and production-ready features.","archived":false,"fork":false,"pushed_at":"2025-06-21T01:13:15.000Z","size":2510,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-21T01:29:21.483Z","etag":null,"topics":["automation","aws","azure","cli-tool","cost-estimation","dependency-graph","devops","gcp","golang","iac","infrastructure","infrastructure-as-code","irewall-rules","kubernetes","multi-cloud","opentofu","production-ready","security-groups","terraform","yaml"],"latest_commit_sha":null,"homepage":"https://github.com/rioprayogo/bolt","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rioprayogo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-20T22:23:07.000Z","updated_at":"2025-06-21T01:13:03.000Z","dependencies_parsed_at":"2025-06-21T01:29:49.452Z","dependency_job_id":"1201efe7-f9eb-4be3-9ecf-0a7246776859","html_url":"https://github.com/rioprayogo/bolt","commit_stats":null,"previous_names":["rioprayogo/bolt"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rioprayogo/bolt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rioprayogo%2Fbolt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rioprayogo%2Fbolt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rioprayogo%2Fbolt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rioprayogo%2Fbolt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rioprayogo","download_url":"https://codeload.github.com/rioprayogo/bolt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rioprayogo%2Fbolt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31801241,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["automation","aws","azure","cli-tool","cost-estimation","dependency-graph","devops","gcp","golang","iac","infrastructure","infrastructure-as-code","irewall-rules","kubernetes","multi-cloud","opentofu","production-ready","security-groups","terraform","yaml"],"created_at":"2025-06-21T15:10:17.146Z","updated_at":"2026-04-14T14:31:48.740Z","avatar_url":"https://github.com/rioprayogo.png","language":"Go","readme":"# 🚀 Bolt - Multi-Cloud Infrastructure as Code\n\n[![Go Version](https://img.shields.io/github/go-mod/go-version/rioprayogo/bolt)](https://golang.org)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Go Report Card](https://goreportcard.com/badge/github.com/rioprayogo/bolt)](https://goreportcard.com/report/github.com/rioprayogo/bolt)\n[![Release](https://img.shields.io/github/v/release/rioprayogo/bolt)](https://github.com/rioprayogo/bolt/releases)\n[![Stars](https://img.shields.io/github/stars/rioprayogo/bolt)](https://github.com/rioprayogo/bolt/stargazers)\n[![Contributors](https://img.shields.io/github/contributors/rioprayogo/bolt)](https://github.com/rioprayogo/bolt/graphs/contributors)\n\nBolt is a powerful Infrastructure as Code (IaC) tool that supports AWS, Azure, and GCP with a simple YAML configuration. Built with Go and OpenTofu, it provides a unified interface for managing multi-cloud infrastructure including Kubernetes clusters.\n\n## ✨ Features\n\n- **Multi-Cloud Support**: AWS, Azure, and GCP\n- **Kubernetes Clusters**: EKS, AKS, and GKE support\n- **Simple YAML Configuration**: Easy-to-read infrastructure definitions\n- **Local Testing**: Test with LocalStack (AWS) and dev environments\n- **Dependency Graph**: Visualize resource dependencies\n- **Cost Estimation**: Get cost estimates before deployment\n- **Flexible Key Management**: Use existing keys or generate new ones\n- **Production Ready**: Built with Go for reliability and performance\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- Go 1.21+\n- OpenTofu\n- LocalStack (for local AWS testing)\n- Cloud provider credentials (for production)\n\n### Installation\n\n```bash\ngit clone \u003crepository\u003e\ncd bold\ngo build -o bold .\n```\n\n### Basic Usage\n\n```bash\n# Analyze infrastructure\n./bold analyze service.yaml\n\n# Bootstrap infrastructure\n./bold bootstrap service.yaml\n\n# Destroy infrastructure\n./bold destroy service.yaml\n```\n\n## 📋 Configuration Reference\n\n### Service Manifest Structure\n\n```yaml\napiVersion: bolt/v1\nkind: Service\nmetadata:\n  name: my-service\n  owner: yourname\n  tags:\n    environment: \"local\"\n    project: \"my-project\"\n\nproviders:\n  - name: aws_local\n    type: aws\n    spec:\n      region: us-east-1\n      environment: local\n\nspec:\n  key_pair:\n    name: \"my-key\"\n    public_key_file: \"~/.ssh/id_rsa.pub\"\n    use_existing: true\n  \n  infrastructure:\n    networks: []\n    security_groups: []\n    kubernetes_clusters: []\n    computes: []\n```\n\n## 🔑 Key Pair Configuration\n\nBolt supports three key pair configurations:\n\n| Option | Description | Example |\n|--------|-------------|---------|\n| **No Key Pair** | Skip key pair entirely | Omit `key_pair` section |\n| **Use Existing** | Use local SSH key | `use_existing: true` |\n| **Generate New** | Create new key pair | `public_key_file: \"./bolt-key.pub\"` |\n\n### Key Pair Parameters\n\n| Parameter | Type | Required | Description | Example |\n|-----------|------|----------|-------------|---------|\n| `name` | string | Yes | Key pair name | `\"my-key\"` |\n| `public_key_file` | string | Yes* | Path to public key file | `\"~/.ssh/id_rsa.pub\"` |\n| `use_existing` | boolean | No | Use existing local key | `true` |\n\n*Required unless `use_existing: true`\n\n### Key Pair Examples\n\n#### 1. No Key Pair (Optional)\n```yaml\nspec:\n  infrastructure:\n    # ... resources without key_pair\n```\n\n#### 2. Use Existing Local SSH Key\n```yaml\nspec:\n  key_pair:\n    name: \"local-ssh-key\"\n    public_key_file: \"~/.ssh/id_rsa.pub\"\n    use_existing: true\n```\n\n#### 3. Generate New Key Pair\n```yaml\nspec:\n  key_pair:\n    name: \"bolt-key\"\n    public_key_file: \"./bolt-key.pub\"\n```\n\n## 🌐 Network Configuration\n\n### Network Parameters\n\n| Parameter | Type | Required | Description | Example |\n|-----------|------|----------|-------------|---------|\n| `name` | string | Yes | Network name | `\"vpc-main\"` |\n| `provider` | string | Yes | Cloud provider | `\"aws_local\"` |\n| `cidr` | string | Yes | Network CIDR | `\"10.10.0.0/16\"` |\n| `subnets` | array | No | Subnet list | See below |\n\n### Subnet Parameters\n\n| Parameter | Type | Required | Description | Example |\n|-----------|------|----------|-------------|---------|\n| `name` | string | Yes | Subnet name | `\"subnet-public\"` |\n| `zone` | string | Yes | Availability zone | `\"us-east-1a\"` |\n| `cidr` | string | Yes | Subnet CIDR | `\"10.10.1.0/24\"` |\n\n### Network Examples\n\n#### Multi-Zone Network\n```yaml\nnetworks:\n  - name: vpc-main\n    provider: aws_local\n    cidr: 10.10.0.0/16\n    subnets:\n      - name: subnet-public-1a\n        zone: us-east-1a\n        cidr: 10.10.1.0/24\n      - name: subnet-public-1b\n        zone: us-east-1b\n        cidr: 10.10.2.0/24\n      - name: subnet-private-1a\n        zone: us-east-1a\n        cidr: 10.10.3.0/24\n      - name: subnet-private-1b\n        zone: us-east-1b\n        cidr: 10.10.4.0/24\n```\n\n## 🔒 Security Group Configuration\n\n### Security Group Parameters\n\n| Parameter | Type | Required | Description | Example |\n|-----------|------|----------|-------------|---------|\n| `name` | string | Yes | Security group name | `\"web-sg\"` |\n| `provider` | string | Yes | Cloud provider | `\"aws_local\"` |\n| `vpc` | string | Yes | VPC name | `\"vpc-main\"` |\n| `rules` | array | Yes | Security rules | See below |\n\n### Security Rule Parameters\n\n| Parameter | Type | Required | Description | Example |\n|-----------|------|----------|-------------|---------|\n| `type` | string | Yes | Rule type | `\"ingress\"` or `\"egress\"` |\n| `protocol` | string | Yes | Protocol | `\"tcp\"`, `\"udp\"`, `\"-1\"` |\n| `from_port` | integer | Yes | Start port | `22` |\n| `to_port` | integer | Yes | End port | `22` |\n| `cidr_blocks` | array | No* | CIDR blocks | `[\"0.0.0.0/0\"]` |\n| `source_vpc` | string | No* | Source VPC | `\"vpc-main\"` |\n\n*Required one of `cidr_blocks` or `source_vpc`\n\n### Security Group Examples\n\n#### Web Server Security Group\n```yaml\nsecurity_groups:\n  - name: web-sg\n    provider: aws_local\n    vpc: vpc-main\n    rules:\n      - type: ingress\n        protocol: tcp\n        from_port: 22\n        to_port: 22\n        cidr_blocks: [\"0.0.0.0/0\"]\n      - type: ingress\n        protocol: tcp\n        from_port: 80\n        to_port: 80\n        cidr_blocks: [\"0.0.0.0/0\"]\n      - type: ingress\n        protocol: tcp\n        from_port: 443\n        to_port: 443\n        cidr_blocks: [\"0.0.0.0/0\"]\n      - type: egress\n        protocol: -1\n        from_port: 0\n        to_port: 0\n        cidr_blocks: [\"0.0.0.0/0\"]\n```\n\n#### Application Security Group\n```yaml\nsecurity_groups:\n  - name: app-sg\n    provider: aws_local\n    vpc: vpc-main\n    rules:\n      - type: ingress\n        protocol: tcp\n        from_port: 22\n        to_port: 22\n        source_vpc: vpc-main\n      - type: ingress\n        protocol: tcp\n        from_port: 8080\n        to_port: 8080\n        source_vpc: vpc-main\n      - type: egress\n        protocol: -1\n        from_port: 0\n        to_port: 0\n        cidr_blocks: [\"0.0.0.0/0\"]\n```\n\n## 🐳 Kubernetes Configuration\n\n### Kubernetes Cluster Parameters\n\n| Parameter | Type | Required | Description | Example |\n|-----------|------|----------|-------------|---------|\n| `name` | string | Yes | Cluster name | `\"eks-cluster\"` |\n| `provider` | string | Yes | Cloud provider | `\"aws_local\"` |\n| `vpc` | string | Yes | VPC name | `\"vpc-main\"` |\n| `spec` | object | Yes | Cluster specification | See below |\n\n### Kubernetes Spec Parameters\n\n| Parameter | Type | Required | Description | AWS | Azure | GCP |\n|-----------|------|----------|-------------|-----|-------|-----|\n| `version` | string | No | K8s version | `\"1.28\"` | `\"1.28\"` | `\"1.28\"` |\n| `node_type` | string | No | Instance type | `\"t3.medium\"` | - | - |\n| `node_size` | string | No | VM size | - | `\"Standard_B2s\"` | - |\n| `machine_type` | string | No | Machine type | - | - | `\"e2-medium\"` |\n| `node_count` | integer | No | Worker nodes | `3` | `3` | `3` |\n| `node_disk_size_gb` | integer | No | Disk size | `50` | - | - |\n\n### Kubernetes Examples\n\n#### EKS Cluster (AWS)\n```yaml\nkubernetes_clusters:\n  - name: eks-cluster\n    provider: aws_local\n    vpc: vpc-main\n    spec:\n      version: \"1.28\"\n      node_type: \"t3.medium\"\n      node_count: 3\n      node_disk_size_gb: 50\n```\n\n#### AKS Cluster (Azure)\n```yaml\nkubernetes_clusters:\n  - name: aks-cluster\n    provider: azurerm_local\n    vpc: vnet-main\n    spec:\n      version: \"1.28\"\n      node_size: \"Standard_B2s\"\n      node_count: 3\n```\n\n#### GKE Cluster (GCP)\n```yaml\nkubernetes_clusters:\n  - name: gke-cluster\n    provider: google_local\n    vpc: vpc-main\n    spec:\n      version: \"1.28\"\n      machine_type: \"e2-medium\"\n      node_count: 3\n```\n\n## 💻 Compute Configuration\n\n### Compute Parameters\n\n| Parameter | Type | Required | Description | Example |\n|-----------|------|----------|-------------|---------|\n| `name` | string | Yes | Instance name | `\"web-server\"` |\n| `type` | string | Yes | Instance type | `\"ec2\"` |\n| `provider` | string | Yes | Cloud provider | `\"aws_local\"` |\n| `vpc` | string | Yes | VPC name | `\"vpc-main\"` |\n| `subnet` | string | Yes | Subnet name | `\"subnet-public\"` |\n| `security_group` | string | No | Security group | `\"web-sg\"` |\n| `spec` | object | Yes | Instance specification | See below |\n\n### Compute Spec Parameters\n\n| Parameter | Type | Required | Description | AWS | Azure | GCP |\n|-----------|------|----------|-------------|-----|-------|-----|\n| `instance_type` | string | No | Instance type | `\"t3.micro\"` | - | - |\n| `size` | string | No | VM size | - | `\"Standard_B1s\"` | - |\n| `machine_type` | string | No | Machine type | - | - | `\"e2-micro\"` |\n| `root_disk_size_gb` | integer | No | Disk size | `20` | `20` | `20` |\n\n### Compute Examples\n\n#### EC2 Instance (AWS)\n```yaml\ncomputes:\n  - name: web-server\n    type: ec2\n    provider: aws_local\n    vpc: vpc-main\n    subnet: subnet-public\n    security_group: web-sg\n    spec:\n      instance_type: t3.micro\n      root_disk_size_gb: 20\n```\n\n#### Azure VM\n```yaml\ncomputes:\n  - name: web-server\n    type: azurerm_linux_virtual_machine\n    provider: azurerm_local\n    vpc: vnet-main\n    subnet: subnet-public\n    security_group: nsg-web\n    spec:\n      size: Standard_B1s\n      root_disk_size_gb: 20\n```\n\n#### GCP Instance\n```yaml\ncomputes:\n  - name: web-server\n    type: google_compute_instance\n    provider: google_local\n    vpc: vpc-main\n    subnet: subnet-public\n    security_group: firewall-web\n    spec:\n      machine_type: e2-micro\n      root_disk_size_gb: 20\n```\n\n## 🌍 Multi-Cloud Examples\n\n### AWS Comprehensive Example\n```yaml\napiVersion: bolt/v1\nkind: Service\nmetadata:\n  name: aws-comprehensive-example\n  owner: yourname\n  tags:\n    environment: \"local\"\n    project: \"bolt-aws-demo\"\n    cost-center: \"engineering\"\n    team: \"platform\"\n\nproviders:\n  - name: aws_local\n    type: aws\n    spec:\n      region: us-east-1\n      environment: local\n\nspec:\n  key_pair:\n    name: \"aws-key\"\n    public_key_file: \"~/.ssh/id_rsa.pub\"\n    use_existing: true\n  \n  infrastructure:\n    networks:\n      - name: vpc-main\n        provider: aws_local\n        cidr: 10.10.0.0/16\n        subnets:\n          - name: subnet-public-1a\n            zone: us-east-1a\n            cidr: 10.10.1.0/24\n          - name: subnet-public-1b\n            zone: us-east-1b\n            cidr: 10.10.2.0/24\n          - name: subnet-private-1a\n            zone: us-east-1a\n            cidr: 10.10.3.0/24\n          - name: subnet-private-1b\n            zone: us-east-1b\n            cidr: 10.10.4.0/24\n    \n    security_groups:\n      - name: web-sg\n        provider: aws_local\n        vpc: vpc-main\n        rules:\n          - type: ingress\n            protocol: tcp\n            from_port: 22\n            to_port: 22\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: ingress\n            protocol: tcp\n            from_port: 80\n            to_port: 80\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: ingress\n            protocol: tcp\n            from_port: 443\n            to_port: 443\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: egress\n            protocol: -1\n            from_port: 0\n            to_port: 0\n            cidr_blocks: [\"0.0.0.0/0\"]\n      \n      - name: app-sg\n        provider: aws_local\n        vpc: vpc-main\n        rules:\n          - type: ingress\n            protocol: tcp\n            from_port: 22\n            to_port: 22\n            source_vpc: vpc-main\n          - type: ingress\n            protocol: tcp\n            from_port: 8080\n            to_port: 8080\n            source_vpc: vpc-main\n          - type: egress\n            protocol: -1\n            from_port: 0\n            to_port: 0\n            cidr_blocks: [\"0.0.0.0/0\"]\n    \n    kubernetes_clusters:\n      - name: eks-cluster\n        provider: aws_local\n        vpc: vpc-main\n        spec:\n          version: \"1.28\"\n          node_type: \"t3.medium\"\n          node_count: 3\n          node_disk_size_gb: 50\n    \n    computes:\n      - name: web-server-1\n        type: ec2\n        provider: aws_local\n        vpc: vpc-main\n        subnet: subnet-public-1a\n        security_group: web-sg\n        spec:\n          instance_type: t3.micro\n          root_disk_size_gb: 20\n      \n      - name: web-server-2\n        type: ec2\n        provider: aws_local\n        vpc: vpc-main\n        subnet: subnet-public-1b\n        security_group: web-sg\n        spec:\n          instance_type: t3.micro\n          root_disk_size_gb: 20\n      \n      - name: app-server-1\n        type: ec2\n        provider: aws_local\n        vpc: vpc-main\n        subnet: subnet-private-1a\n        security_group: app-sg\n        spec:\n          instance_type: t3.small\n          root_disk_size_gb: 40\n      \n      - name: app-server-2\n        type: ec2\n        provider: aws_local\n        vpc: vpc-main\n        subnet: subnet-private-1b\n        security_group: app-sg\n        spec:\n          instance_type: t3.small\n          root_disk_size_gb: 40\n```\n\n### Azure Comprehensive Example\n```yaml\napiVersion: bolt/v1\nkind: Service\nmetadata:\n  name: azure-comprehensive-example\n  owner: yourname\n  tags:\n    environment: \"local\"\n    project: \"bolt-azure-demo\"\n    cost-center: \"engineering\"\n    team: \"platform\"\n\nproviders:\n  - name: azurerm_local\n    type: azurerm\n    spec:\n      region: eastus\n      environment: local\n\nspec:\n  key_pair:\n    name: \"azure-key\"\n    public_key_file: \"~/.ssh/id_rsa.pub\"\n    use_existing: true\n  \n  infrastructure:\n    networks:\n      - name: vnet-main\n        provider: azurerm_local\n        cidr: 10.10.0.0/16\n        subnets:\n          - name: subnet-public-1\n            zone: eastus\n            cidr: 10.10.1.0/24\n          - name: subnet-public-2\n            zone: eastus2\n            cidr: 10.10.2.0/24\n          - name: subnet-private-1\n            zone: eastus\n            cidr: 10.10.3.0/24\n          - name: subnet-private-2\n            zone: eastus2\n            cidr: 10.10.4.0/24\n    \n    security_groups:\n      - name: nsg-web\n        provider: azurerm_local\n        vpc: vnet-main\n        rules:\n          - type: ingress\n            protocol: tcp\n            from_port: 22\n            to_port: 22\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: ingress\n            protocol: tcp\n            from_port: 80\n            to_port: 80\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: ingress\n            protocol: tcp\n            from_port: 443\n            to_port: 443\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: egress\n            protocol: -1\n            from_port: 0\n            to_port: 0\n            cidr_blocks: [\"0.0.0.0/0\"]\n      \n      - name: nsg-app\n        provider: azurerm_local\n        vpc: vnet-main\n        rules:\n          - type: ingress\n            protocol: tcp\n            from_port: 22\n            to_port: 22\n            source_vpc: vnet-main\n          - type: ingress\n            protocol: tcp\n            from_port: 8080\n            to_port: 8080\n            source_vpc: vnet-main\n          - type: egress\n            protocol: -1\n            from_port: 0\n            to_port: 0\n            cidr_blocks: [\"0.0.0.0/0\"]\n    \n    kubernetes_clusters:\n      - name: aks-cluster\n        provider: azurerm_local\n        vpc: vnet-main\n        spec:\n          version: \"1.28\"\n          node_size: \"Standard_B2s\"\n          node_count: 3\n    \n    computes:\n      - name: web-server-1\n        type: azurerm_linux_virtual_machine\n        provider: azurerm_local\n        vpc: vnet-main\n        subnet: subnet-public-1\n        security_group: nsg-web\n        spec:\n          size: Standard_B1s\n          root_disk_size_gb: 20\n      \n      - name: web-server-2\n        type: azurerm_linux_virtual_machine\n        provider: azurerm_local\n        vpc: vnet-main\n        subnet: subnet-public-2\n        security_group: nsg-web\n        spec:\n          size: Standard_B1s\n          root_disk_size_gb: 20\n      \n      - name: app-server-1\n        type: azurerm_linux_virtual_machine\n        provider: azurerm_local\n        vpc: vnet-main\n        subnet: subnet-private-1\n        security_group: nsg-app\n        spec:\n          size: Standard_B2s\n          root_disk_size_gb: 40\n      \n      - name: app-server-2\n        type: azurerm_linux_virtual_machine\n        provider: azurerm_local\n        vpc: vnet-main\n        subnet: subnet-private-2\n        security_group: nsg-app\n        spec:\n          size: Standard_B2s\n          root_disk_size_gb: 40\n```\n\n### GCP Comprehensive Example\n```yaml\napiVersion: bolt/v1\nkind: Service\nmetadata:\n  name: gcp-comprehensive-example\n  owner: yourname\n  tags:\n    environment: \"local\"\n    project: \"bolt-gcp-demo\"\n    cost-center: \"engineering\"\n    team: \"platform\"\n\nproviders:\n  - name: google_local\n    type: google\n    spec:\n      region: us-central1\n      environment: local\n\nspec:\n  key_pair:\n    name: \"gcp-key\"\n    public_key_file: \"~/.ssh/id_rsa.pub\"\n    use_existing: true\n  \n  infrastructure:\n    networks:\n      - name: vpc-main\n        provider: google_local\n        cidr: 10.10.0.0/16\n        subnets:\n          - name: subnet-public-1a\n            zone: us-central1-a\n            cidr: 10.10.1.0/24\n          - name: subnet-public-1b\n            zone: us-central1-b\n            cidr: 10.10.2.0/24\n          - name: subnet-private-1a\n            zone: us-central1-a\n            cidr: 10.10.3.0/24\n          - name: subnet-private-1b\n            zone: us-central1-b\n            cidr: 10.10.4.0/24\n    \n    security_groups:\n      - name: firewall-web\n        provider: google_local\n        vpc: vpc-main\n        rules:\n          - type: ingress\n            protocol: tcp\n            from_port: 22\n            to_port: 22\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: ingress\n            protocol: tcp\n            from_port: 80\n            to_port: 80\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: ingress\n            protocol: tcp\n            from_port: 443\n            to_port: 443\n            cidr_blocks: [\"0.0.0.0/0\"]\n          - type: egress\n            protocol: -1\n            from_port: 0\n            to_port: 0\n            cidr_blocks: [\"0.0.0.0/0\"]\n      \n      - name: firewall-app\n        provider: google_local\n        vpc: vpc-main\n        rules:\n          - type: ingress\n            protocol: tcp\n            from_port: 22\n            to_port: 22\n            source_vpc: vpc-main\n          - type: ingress\n            protocol: tcp\n            from_port: 8080\n            to_port: 8080\n            source_vpc: vpc-main\n          - type: egress\n            protocol: -1\n            from_port: 0\n            to_port: 0\n            cidr_blocks: [\"0.0.0.0/0\"]\n    \n    kubernetes_clusters:\n      - name: gke-cluster\n        provider: google_local\n        vpc: vpc-main\n        spec:\n          version: \"1.28\"\n          machine_type: \"e2-medium\"\n          node_count: 3\n    \n    computes:\n      - name: web-server-1\n        type: google_compute_instance\n        provider: google_local\n        vpc: vpc-main\n        subnet: subnet-public-1a\n        security_group: firewall-web\n        spec:\n          machine_type: e2-micro\n          root_disk_size_gb: 20\n      \n      - name: web-server-2\n        type: google_compute_instance\n        provider: google_local\n        vpc: vpc-main\n        subnet: subnet-public-1b\n        security_group: firewall-web\n        spec:\n          machine_type: e2-micro\n          root_disk_size_gb: 20\n      \n      - name: app-server-1\n        type: google_compute_instance\n        provider: google_local\n        vpc: vpc-main\n        subnet: subnet-private-1a\n        security_group: firewall-app\n        spec:\n          machine_type: e2-small\n          root_disk_size_gb: 40\n      \n      - name: app-server-2\n        type: google_compute_instance\n        provider: google_local\n        vpc: vpc-main\n        subnet: subnet-private-1b\n        security_group: firewall-app\n        spec:\n          machine_type: e2-small\n          root_disk_size_gb: 40\n```\n\n## 🔄 Environment Switching\n\n### Local Development\n```yaml\nproviders:\n  - name: aws_local\n    type: aws\n    spec:\n      region: us-east-1\n      environment: local\n```\n\n### Production\n```yaml\nproviders:\n  - name: aws\n    type: aws\n    spec:\n      region: us-east-1\n      environment: production\n```\n\n## 📊 Analysis Features\n\n### Dependency Graph\n```bash\n./bold analyze service.yaml\n```\n\nShows:\n- Resource dependency tree\n- Mermaid diagram\n- DOT graph for Graphviz\n- Cost estimation\n\n### Cost Estimation\n- Monthly and hourly cost estimates\n- Breakdown by resource type\n- Local environment detection (free)\n- Cost optimization tips\n\n## 📚 Documentation\n\n- **[🏗️ Architecture](docs/architecture.md)** - Technical architecture and design\n- **[📊 Comparison](docs/comparison.md)** - Bolt vs other IaC tools\n- **[🔧 Development](docs/development.md)** - Contributing and development guide\n\n## 🛠️ Commands\n\n```bash\n# Analyze infrastructure\n./bold analyze \u003cservice.yaml\u003e\n\n# Bootstrap infrastructure\n./bold bootstrap \u003cservice.yaml\u003e\n\n# Destroy infrastructure\n./bold destroy \u003cservice.yaml\u003e\n```\n\n## 🔧 Development\n\n### Project Structure\n```\nbold/\n├── cmd/           # CLI commands\n├── pkg/           # Core packages\n│   ├── compiler/  # OpenTofu code generation\n│   ├── config/    # Configuration management\n│   ├── cost/      # Cost estimation\n│   ├── engine/    # Deployment engine\n│   ├── errors/    # Error handling\n│   ├── graph/     # Dependency graph\n│   ├── logger/    # Logging\n│   ├── parser/    # YAML parsing\n│   └── workflow/  # Workflow management\n├── service.yaml   # Example configuration\n└── README.md\n```\n\n### Building\n```bash\ngo build -o bold .\n```\n\n### Testing\n```bash\ngo test ./...\n```\n\n## 📄 License\n\nThis project is licensed under the **Apache License 2.0** - see the [LICENSE](LICENSE) file for details.\n\n### Why Apache License 2.0?\n\n- **Patent Protection**: Provides explicit patent protection for contributors and users\n- **Corporate Friendly**: Widely adopted by major companies (Google, Microsoft, AWS)\n- **Strong Legal Foundation**: Comprehensive legal framework for commercial use\n- **Contribution Clarity**: Clear terms for contributions and derivative works\n- **Trademark Protection**: Protects project trademarks and branding\n\n### Key Benefits:\n\n✅ **Commercial Use**: Free for commercial and enterprise use  \n✅ **Patent Protection**: Automatic patent license from contributors  \n✅ **Modification Rights**: Can modify and distribute freely  \n✅ **Attribution Required**: Must include license and copyright notices  \n✅ **Trademark Protection**: Protects \"Bolt\" branding  \n\nFor more information, see [Apache License 2.0 FAQ](https://www.apache.org/foundation/license-faq.html).\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests\n5. Submit a pull request\n\n## 📞 Support\n\nFor support and questions, please open an issue on GitHub.\n\n## 🚀 What's Next?\n\nWe're actively working on new features to make Bolt even better!\nStay tuned for updates by:\n- ⭐ Starring this repository\n- 👀 Watching for releases\n- 💬 Joining discussions ","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frioprayogo%2Fbolt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frioprayogo%2Fbolt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frioprayogo%2Fbolt/lists"}